From 5ed5a836125fca40098160ea22676174887fadaa Mon Sep 17 00:00:00 2001 From: zhongjin Date: Mon, 24 Sep 2018 21:09:27 +0800 Subject: [PATCH] new --- www/index.html | 2 +- www/index.html.map | 2 +- www/js/app.js | 2 +- www/js/app.js.map | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/www/index.html b/www/index.html index e5baf58..6ea260b 100644 --- a/www/index.html +++ b/www/index.html @@ -1 +1 @@ -yunkong2.admin
close dehaze details
check INFO

Infocontent_copyclose
\ No newline at end of file +云控2 - Admin
close dehaze details
check INFO

Infocontent_copyclose
\ No newline at end of file diff --git a/www/index.html.map b/www/index.html.map index 4a86795..a61c35e 100644 --- a/www/index.html.map +++ b/www/index.html.map @@ -1 +1 @@ -{"version":3,"sources":["indexStart.html","adminAdapters.html","adminConfig.html","adminCron.html","adminCustoms.html","adminEditObject.html","adminEnums.html","adminEvents.html","adminHosts.html","adminInstances.html","adminIntro.html","adminIssue.html","adminLogs.html","adminMenuEdit.html","adminObjects.html","adminReadme.html","adminSystem.html","adminUsers.html","indexEnd.html"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9FA;AACA;AACA","file":"index.html","sourcesContent":["\n\n yunkong2.admin\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n \n \n\n \n \n\n \n \n\n\n
used to get button size
\n\n\n
\n
\n \n\n close\n dehaze\n \n details\n
\n
\n account_circle\n \n \n
\n
    \n
    \n
    \n
    \n
    \n \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n\n
    \n
    \n \n \n \n
    \n
    \n\n\n
    Too many events
    \n\n
    \n
    \n
    \n
    \n
    \n
    command execution:
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    close on ready
    \n closeClose\n
    \n
    \n
    \n
    \n

    \n

    \n
    \n
    \n Ok\n
    \n
    \n
    \n
    \n

    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    license agreement
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n license_checkbox\n
    \n
    \n
    \n
    \n
    License terms
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    edit value
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n ack\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    edit enums
    \n
    \n
    \n
    \n
    \n
      \n\n
    \n
    \n
    \n
    \n \n
    \n
    \n\n","
    \n
    \n
    \n \n
    \n \n clear\n
    \n
    \n \n \n
      \n \n \n \n
      \n
      \n
      \n
      \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      Namedescriptionkeywordsinstalledavailable licenseinstall
      \n
      \n
      \n
      \n
      \n
      \n\n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      Install adapter from github
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n Debug outputs:\n
      \n
      \n
      \n
      \n
      Install adapter from URL
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n Debug outputs:\n
      \n
      \n
      \n
      \n
      \n
      \n Install\n Cancel\n
      \n
      \n
      \n
      \n
      \n
      license agreement
      \n
      \n
      \n
      \n
      License terms
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      You are going to add new instance:
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n add\n cancel\n
      \n
      \n
      \n\n\n","
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n","
      \n \n
      \n
      \n
      \n
      \n
      CRON dialog
      \n
      \n
      \n
      \n
      \n \n \n
      \n
      \n \n CRON Use seconds\n
      \n
      \n
      \n \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      ","
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n \n \n
        \n
        \n \n \n
        \n
        \n \n \n
        \n
        \n \n \n
        \n
        \n \n \n
        \n
        \n refresh\n
        \n \n
        \n
        \n \n \n \n \n
        \n
        \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n \n \n
        \n
        \n refresh\n
        \n
        \n
        \n \n
        \n
        \n
        \n
        \n \n
        \n","
        \n
        \n
        \n
        \n
        Edit object
        \n
        \n
        \n
        \n
        \n \n \n
        \n
        \n \n \n
        \n
        \n
        \n
        \n \n
        \n
        \n
        \n
        \n add\n
        \n
        \n
        \n
        \n
        \n \n
        \n
        \n file_upload\n
        \n Icon upload\n
        \n
        \n
        \n
        \n delete\n
        \n
        \n
        \n
        \n
        \n
        \n
        \n add\n
        \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n \n \n
        \n
        \n \n \n
        \n
        \n
        \n
        \n
        \n
        \n
        Object rights
        \n
        \n
        \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
        OwnerGroupEveryone
        readwritereadwritereadwrite
        \n
        \n
        \n
        \n
        \n
        States rights
        \n
        \n
        \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
        OwnerGroupEveryone
        readwritereadwritereadwrite
        \n
        \n
        \n
        \n
        \n
        \n
        \n \n
        \n
        \n
        Test!
        \n
        \n
        \n
        \n \n
        \n\n
        \n
        \n
        \n
        \n
        \n
        Add new field
        \n
        \n
        \n
        \n
        \n textsms\n \n \n
        \n
        \n
        \n
        \n Add\n Cancel\n
        \n
        \n
        ","
        \n
        \n
        \n
        \n
        \n \n \n \n \n \n
        \n
        \n
        \n
        \n
        \n
        \n
        \n text_fields\n \n \n
        \n
        \n feedback\n \n Preserve ID\n
        \n
        \n local_offer\n \n \n
        \n
        \n pageview\n \n \n
        \n
        \n
        \n
        \n\n
        \n
        \n add\n
        \n
        delete\n
        \n
        \n
        \n color_lens\n Color\n
        \n \n
        delete
        \n
        \n
        \n
        \n
        \n
        \n Create\n Cancel\n
        \n
        \n
        \n
        \n","
        \n
        \n
        \n
        \n
        \n pause\n delete\n
        \n
        \n
        \n \n \n \n \n \n
        \n
        \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n\n \n
        \n\n
        \n
        \n
        \n","
        \n
        \n
        \n
        \n view_module\n refresh\n  \n
        \n
        \n \n clear\n
        \n
        \n
        \n\n
        \n
        \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
        nametypetitleosavailableinstalledeventsrestart
        \n
        \n\n\n
        \n
        \n
        \n

        Instructions

        \n

        \n update-part1
        \n \n \n

        \n
        \n
        \n Ok\n
        \n
        \n
        \n
        \n
        Rename
        \n
        \n
        \n text_fields\n \n \n
        \n
        \n
        \n
        \n
        \n
        \n add\n
        \n
        delete
        \n
        \n
        \n color_lens\n Color\n
        \n \n
        delete
        \n
        \n
        \n
        \n
        \n
        \n Change\n Cancel\n
        \n
        \n
        \n","
        \n
        \n
        \n \n
        \n
        \n \n clear\n
        \n
        \n
        \n \n Disk free: \n %, \n \n \n RAM total usage: \n MB\n \n \n /\n Free RAM:\n  = \n MB\n \n [Host: - ]\n
        \n
        \n
        \n
        \n \n \n \n \n \n
        \n
        \n
        \n\n","
        \r\n
        \r\n
        \r\n create\r\n check\r\n close\r\n
        \r\n\r\n\r\n
        \r\n
        \r\n check\r\n INFO\r\n
        \r\n \r\n
        \r\n
        \r\n
        \r\n

        \r\n
        \r\n
        \r\n \r\n
        \r\n
        \r\n
        \r\n Infocontent_copyclose\r\n
        \r\n
        \r\n
        \r\n","
        \n
        \n
        \n
        \n
        \n
          \n
          \n
          \n
          \n \n
          \n\n\n\n\n","
          \n
          \n
          \n \n
          \n Download log\n
            \n
            \n
            \n \n
            \n
            \n
            \n\n \n \n \n \n
            \n\n
            \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n
            \n\n
            \n
            \n\n
            \n","
            \n
            \n
            \n\n
            \n
            \n
            ","
            \n
            Loading...
            \n
            \n\n
            \n
            \n
            \n
            \n
            \n
            title
            \n
            \n
            \n
            \n
            \n \n \n
            \n
            \n
            \n
            \n \n \n
            \n
            \n
            \n
            \n \n \n
            \n
            \n
            \n
            \n \n \n
            \n
            \n
            \n
            \n Add\n Cancel\n
            \n
            \n
            \n\n","
            \n
            \n
            \n
            \n \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n\n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n \n
            \n","
            \n
            \n
            \n \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n \n \n
            \n
            \n \n \n
            \n
            \n \n \n
            \n
            \n \n \n
            \n
            \n \n \n
            \n
            \n \n \n
            \n
            \n \n \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n \n \n
            \n
            \n \n \n
            \n \n
            \n \n \n
            \n
            \n \n \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n add\n
            \n
            \n \n \n \n \n \n \n \n \n \n
            namelink
            \n
            \n
            \n
            \n
            \n add\n cert_path_note\n
            \n
            \n \n \n \n \n \n \n \n \n \n
            namecertificate
            \n
            \n
            \n
            \n
            \n
            \n \n \n \n
            \n
            \n \n \n \n
            \n
            \n \n \n \n
            \n
            \n
            \n
            letsnecrypt_help
            \n
            \n
            \n
            \n
            \n
            Access control list
            \n
            \n
            \n \n \n
            \n
            \n \n \n
            \n
            \n
            \n
            \n
            Object rights
            \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
            OwnerGroupEveryone
            \n
            \n
            \n
            States rights
            \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
            OwnerGroupEveryone
            \n
            \n
            \n
            File rights
            \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
            OwnerGroupEveryone
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n Note:\n

            diag-note

            \n
            \n
            \n
            \n
            \n \n \n
            \n
            \n
            \n
            \n
            Sent data:
            \n
            \n                              
            \n
            \n
            \n
            \n
            \n
            \n \n
            \n","
            \n
            \n
            \n\n
            \n group_add\n groupGroups\n
            \n
            \n
            \n
            \n
            \n person_add\n personUsers
            \n
            \n
            \n
            \n
            \n
            \n
            \n
            \n \n
            \n
            \n
            \n
            \n text_fields\n \n \n
            \n
            \n local_offer\n \n \n
            \n
            \n
            \n
            \n description\n \n \n
            \n
            \n pageview\n \n \n
            \n
            \n
            \n
            \n vpn_key\n \n \n
            \n
            \n vpn_key\n \n \n
            \n
            \n
            \n
            \n
            \n
            \n add\n
            \n
            delete\n
            \n
            \n
            \n color_lens\n
            Color
            \n
            \n \n
            delete
            \n
            \n
            \n
            \n
            \n
            \n rights\n
            \n
            \n
            \n Create\n Cancel\n
            \n
            \n
            \n
            \n
            \n","\n\n"]} \ No newline at end of file +{"version":3,"sources":["indexStart.html","adminAdapters.html","adminConfig.html","adminCron.html","adminCustoms.html","adminEditObject.html","adminEnums.html","adminEvents.html","adminHosts.html","adminInstances.html","adminIntro.html","adminIssue.html","adminLogs.html","adminMenuEdit.html","adminObjects.html","adminReadme.html","adminSystem.html","adminUsers.html","indexEnd.html"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9FA;AACA;AACA","file":"index.html","sourcesContent":["\n\n 云控2 - Admin\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n \n \n\n \n \n\n \n \n\n\n
            used to get button size
            \n\n\n
            \n
            \n \n\n close\n dehaze\n \n details\n
            \n
            \n account_circle\n \n \n
            \n
              \n
              \n
              \n
              \n
              \n \n\n
              \n
              \n
              \n
              \n
              \n
              \n
              \n
              \n
              \n
              \n\n\n
              \n
              \n \n \n \n
              \n
              \n\n\n
              Too many events
              \n\n
              \n
              \n
              \n
              \n
              \n
              command execution:
              \n
              \n
              \n
              \n
              \n
              \n
              \n
              \n
              \n
              \n
              \n
              \n \n
              \n
              \n
              \n \n
              \n
              \n
              \n
              \n
              \n \n
              \n
              \n
              \n
              \n
              close on ready
              \n closeClose\n
              \n
              \n
              \n
              \n

              \n

              \n
              \n
              \n Ok\n
              \n
              \n
              \n
              \n

              \n

              \n
              \n
              \n
              \n
              \n
              \n
              \n
              \n
              license agreement
              \n
              \n
              \n
              \n \n \n
              \n
              \n \n license_checkbox\n
              \n
              \n
              \n
              \n
              License terms
              \n
              \n
              \n
              \n
              \n \n
              \n
              \n
              \n
              \n
              \n
              edit value
              \n
              \n
              \n
              \n
              \n \n
              \n
              \n
              \n
              \n ack\n
              \n
              \n
              \n \n
              \n
              \n
              \n
              \n
              \n
              edit enums
              \n
              \n
              \n
              \n
              \n
                \n\n
              \n
              \n
              \n
              \n \n
              \n
              \n\n","
              \n
              \n
              \n \n
              \n \n clear\n
              \n
              \n \n \n
                \n \n \n \n
                \n
                \n
                \n
                \n \n
                \n
                \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                Namedescriptionkeywordsinstalledavailable licenseinstall
                \n
                \n
                \n
                \n
                \n
                \n\n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                Install adapter from github
                \n
                \n
                \n \n \n
                \n
                \n
                \n
                \n \n Debug outputs:\n
                \n
                \n
                \n
                \n
                Install adapter from URL
                \n
                \n
                \n \n \n
                \n
                \n
                \n
                \n \n Debug outputs:\n
                \n
                \n
                \n
                \n
                \n
                \n Install\n Cancel\n
                \n
                \n
                \n
                \n
                \n
                license agreement
                \n
                \n
                \n
                \n
                License terms
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                You are going to add new instance:
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n \n \n
                \n
                \n
                \n
                \n \n \n
                \n
                \n
                \n
                \n add\n cancel\n
                \n
                \n
                \n\n\n","
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n","
                \n \n
                \n
                \n
                \n
                \n
                CRON dialog
                \n
                \n
                \n
                \n
                \n \n \n
                \n
                \n \n CRON Use seconds\n
                \n
                \n
                \n \n
                \n
                \n
                \n \n \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n
                \n \n
                \n
                ","
                \n
                \n
                \n
                \n \n
                \n
                \n
                \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n \n \n
                  \n
                  \n \n \n
                  \n
                  \n \n \n
                  \n
                  \n \n \n
                  \n
                  \n \n \n
                  \n
                  \n refresh\n
                  \n \n
                  \n
                  \n \n \n \n \n
                  \n
                  \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n \n \n
                  \n
                  \n refresh\n
                  \n
                  \n
                  \n \n
                  \n
                  \n
                  \n
                  \n \n
                  \n","
                  \n
                  \n
                  \n
                  \n
                  Edit object
                  \n
                  \n
                  \n
                  \n
                  \n \n \n
                  \n
                  \n \n \n
                  \n
                  \n
                  \n
                  \n \n
                  \n
                  \n
                  \n
                  \n add\n
                  \n
                  \n
                  \n
                  \n
                  \n \n
                  \n
                  \n file_upload\n
                  \n Icon upload\n
                  \n
                  \n
                  \n
                  \n delete\n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n add\n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n \n \n
                  \n
                  \n \n \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  Object rights
                  \n
                  \n
                  \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                  OwnerGroupEveryone
                  readwritereadwritereadwrite
                  \n
                  \n
                  \n
                  \n
                  \n
                  States rights
                  \n
                  \n
                  \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                  OwnerGroupEveryone
                  readwritereadwritereadwrite
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n \n
                  \n
                  \n
                  Test!
                  \n
                  \n
                  \n
                  \n \n
                  \n\n
                  \n
                  \n
                  \n
                  \n
                  \n
                  Add new field
                  \n
                  \n
                  \n
                  \n
                  \n textsms\n \n \n
                  \n
                  \n
                  \n
                  \n Add\n Cancel\n
                  \n
                  \n
                  ","
                  \n
                  \n
                  \n
                  \n
                  \n \n \n \n \n \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n text_fields\n \n \n
                  \n
                  \n feedback\n \n Preserve ID\n
                  \n
                  \n local_offer\n \n \n
                  \n
                  \n pageview\n \n \n
                  \n
                  \n
                  \n
                  \n\n
                  \n
                  \n add\n
                  \n
                  delete\n
                  \n
                  \n
                  \n color_lens\n Color\n
                  \n \n
                  delete
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n Create\n Cancel\n
                  \n
                  \n
                  \n
                  \n","
                  \n
                  \n
                  \n
                  \n
                  \n pause\n delete\n
                  \n
                  \n
                  \n \n \n \n \n \n
                  \n
                  \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n\n \n
                  \n\n
                  \n
                  \n
                  \n","
                  \n
                  \n
                  \n
                  \n view_module\n refresh\n  \n
                  \n
                  \n \n clear\n
                  \n
                  \n
                  \n\n
                  \n
                  \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                  nametypetitleosavailableinstalledeventsrestart
                  \n
                  \n\n\n
                  \n
                  \n
                  \n

                  Instructions

                  \n

                  \n update-part1
                  \n \n \n

                  \n
                  \n
                  \n Ok\n
                  \n
                  \n
                  \n
                  \n
                  Rename
                  \n
                  \n
                  \n text_fields\n \n \n
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n add\n
                  \n
                  delete
                  \n
                  \n
                  \n color_lens\n Color\n
                  \n \n
                  delete
                  \n
                  \n
                  \n
                  \n
                  \n
                  \n Change\n Cancel\n
                  \n
                  \n
                  \n","
                  \n
                  \n
                  \n \n
                  \n
                  \n \n clear\n
                  \n
                  \n
                  \n \n Disk free: \n %, \n \n \n RAM total usage: \n MB\n \n \n /\n Free RAM:\n  = \n MB\n \n [Host: - ]\n
                  \n
                  \n
                  \n
                  \n \n \n \n \n \n
                  \n
                  \n
                  \n\n","
                  \r\n
                  \r\n
                  \r\n create\r\n check\r\n close\r\n
                  \r\n\r\n\r\n
                  \r\n
                  \r\n check\r\n INFO\r\n
                  \r\n \r\n
                  \r\n
                  \r\n
                  \r\n

                  \r\n
                  \r\n
                  \r\n \r\n
                  \r\n
                  \r\n
                  \r\n Infocontent_copyclose\r\n
                  \r\n
                  \r\n
                  \r\n","
                  \n
                  \n
                  \n
                  \n
                  \n
                    \n
                    \n
                    \n
                    \n \n
                    \n\n\n\n\n","
                    \n
                    \n
                    \n \n
                    \n Download log\n
                      \n
                      \n
                      \n \n
                      \n
                      \n
                      \n\n \n \n \n \n
                      \n\n
                      \n \n \n \n \n \n \n \n\n \n \n \n \n\n \n
                      \n\n
                      \n
                      \n\n
                      \n","
                      \n
                      \n
                      \n\n
                      \n
                      \n
                      ","
                      \n
                      Loading...
                      \n
                      \n\n
                      \n
                      \n
                      \n
                      \n
                      \n
                      title
                      \n
                      \n
                      \n
                      \n
                      \n \n \n
                      \n
                      \n
                      \n
                      \n \n \n
                      \n
                      \n
                      \n
                      \n \n \n
                      \n
                      \n
                      \n
                      \n \n \n
                      \n
                      \n
                      \n
                      \n Add\n Cancel\n
                      \n
                      \n
                      \n\n","
                      \n
                      \n
                      \n
                      \n \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n\n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n \n
                      \n","
                      \n
                      \n
                      \n \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n \n \n
                      \n
                      \n \n \n
                      \n
                      \n \n \n
                      \n
                      \n \n \n
                      \n
                      \n \n \n
                      \n
                      \n \n \n
                      \n
                      \n \n \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n \n \n
                      \n
                      \n \n \n
                      \n \n
                      \n \n \n
                      \n
                      \n \n \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n add\n
                      \n
                      \n \n \n \n \n \n \n \n \n \n
                      namelink
                      \n
                      \n
                      \n
                      \n
                      \n add\n cert_path_note\n
                      \n
                      \n \n \n \n \n \n \n \n \n \n
                      namecertificate
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n \n \n \n
                      \n
                      \n \n \n \n
                      \n
                      \n \n \n \n
                      \n
                      \n
                      \n
                      letsnecrypt_help
                      \n
                      \n
                      \n
                      \n
                      \n
                      Access control list
                      \n
                      \n
                      \n \n \n
                      \n
                      \n \n \n
                      \n
                      \n
                      \n
                      \n
                      Object rights
                      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                      OwnerGroupEveryone
                      \n
                      \n
                      \n
                      States rights
                      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                      OwnerGroupEveryone
                      \n
                      \n
                      \n
                      File rights
                      \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                      OwnerGroupEveryone
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n Note:\n

                      diag-note

                      \n
                      \n
                      \n
                      \n
                      \n \n \n
                      \n
                      \n
                      \n
                      \n
                      Sent data:
                      \n
                      \n                              
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n \n
                      \n","
                      \n
                      \n
                      \n\n
                      \n group_add\n groupGroups\n
                      \n
                      \n
                      \n
                      \n
                      \n person_add\n personUsers
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n \n
                      \n
                      \n
                      \n
                      \n text_fields\n \n \n
                      \n
                      \n local_offer\n \n \n
                      \n
                      \n
                      \n
                      \n description\n \n \n
                      \n
                      \n pageview\n \n \n
                      \n
                      \n
                      \n
                      \n vpn_key\n \n \n
                      \n
                      \n vpn_key\n \n \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n add\n
                      \n
                      delete\n
                      \n
                      \n
                      \n color_lens\n
                      Color
                      \n
                      \n \n
                      delete
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n rights\n
                      \n
                      \n
                      \n Create\n Cancel\n
                      \n
                      \n
                      \n
                      \n
                      \n","\n\n"]} \ No newline at end of file diff --git a/www/js/app.js b/www/js/app.js index ac4cf2d..0a1cb63 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -1,2 +1,2 @@ -"use strict";Array.prototype.remove=function(){for(var e,t,n=arguments,i=n.length;i&&this.length;)for(e=n[--i];-1!==(t=this.indexOf(e));)this.splice(t,1);return this},console.debug||(console.debug=console.log),"undefined"==typeof Number&&(console.log("define Number"),Number=function(e){return parseFloat(e)}),Object.assign||(Object.assign=$.extend);var $iframeDialog=null,configNotSaved=null,showConfig=null,defaults={},customPostInits={},FORBIDDEN_CHARS=/[\]\[*,;'"`<>\\\s?]/g,adapterRedirect=function(e,t){e&&setTimeout(function(){e+=document.location.pathname,e+=document.location.hash,document.location.href=e},t||5e3)},gMain=null;function detectIE(){var e=window.navigator.userAgent,t=e.indexOf("MSIE ");if(0td"),a=H.data[n.key];function s(e){return'
                      '+e+"
                      "}if(a){i.eq(0).css({overflow:"hidden","white-space":"nowrap"});var o=a.desc.indexOf("div>div").css("height: 22px !important"),u(2,a.keywords).attr("title",a.keywords),i.eq(3).html(a.installed),i.eq(4).html(a.version),u(5,a.license),u(6,a.install),H.initButtons(n.key),H.isCollapsed[a.group]&&(H.isCollapsed[a.group]=!1,H.main.saveConfig("adaptersIsCollapsed",JSON.stringify(H.isCollapsed)))}else{i.eq(0).css({"font-weight":"bold"}),i.eq(0).find("img").remove(),i.eq(0).find("span.fancytree-title").attr("style","padding-left: 0px !important");for(var c=0;c'+l+' / '+H.tree[c].children.length+"]",i.eq(1).html(s(''+l+" "+_("of")+' '+H.tree[c].children.length+" "+_("Adapters from this Group installed")));break}}function u(e,t){return i.eq(e).html(s(t))}},gridnav:{autofocusInput:!1,handleCursorKeys:!0},filter:{mode:"hide",autoApply:!0},collapse:function(e,t){H.isCollapsed[t.node.key]||(H.isCollapsed[t.node.key]=!0,H.main.saveConfig("adaptersIsCollapsed",JSON.stringify(H.isCollapsed)))}}),H.$tab.find("#btn_collapse_adapters").show().off("click").on("click",function(){H.$tab.find(".process-adapters").show(),setTimeout(function(){H.$grid.fancytree("getRootNode").visit(function(e){(!H.filterVals.length||e.match||e.subMatch)&&e.setExpanded(!1)}),H.$tab.find(".process-adapters").hide()},100)}),H.$tab.find("#btn_expand_adapters").show().off("click").on("click",function(){H.$tab.find(".process-adapters").show(),setTimeout(function(){H.$grid.fancytree("getRootNode").visit(function(e){(!H.filterVals.length||e.match||e.subMatch)&&e.setExpanded(!0)}),H.$tab.find(".process-adapters").hide()},100)}),H.$tab.find("#btn_list_adapters").show().off("click").on("click",function(){var e=H.$tab.find(".process-adapters");e.show(),H.isList=!H.isList,H.isList?(H.$tab.find("#btn_list_adapters").addClass("red lighten-3"),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide(),$(this).attr("title",_("list"))):(H.$tab.find("#btn_list_adapters").removeClass("red lighten-3"),H.$tab.find("#btn_expand_adapters").show(),H.$tab.find("#btn_collapse_adapters").show(),$(this).attr("title",_("tree"))),H.main.saveConfig("adaptersIsList",H.isList),e.show(),setTimeout(function(){H._postInit(!0),e.hide()},200)})),H.isList?(H.$tab.find("#btn_list_adapters").addClass("red lighten-3").attr("title",_("tree")),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide()):(H.$tab.find("#btn_list_adapters").removeClass("red lighten-3").attr("title",_("list")),H.$tab.find("#btn_expand_adapters").show(),H.$tab.find("#btn_collapse_adapters").show()),H.$tab.find(".filter-input").trigger("change")}function n(){H.$grid.hide(),H.$tiles.show(),H.$tab.find("#main-toolbar-table-types-btn").show(),H.$tab.find("#btn_list_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide(),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find(".filter-input").trigger("change")}function i(){H.onlyUpdatable?(H.$tab.find("#btn_filter_updates").addClass("red lighten-3"),H.$tab.find("#btn_upgrade_all").show()):(H.$tab.find("#btn_upgrade_all").hide(),H.$tab.find("#btn_filter_updates").removeClass("red lighten-3"))}function a(){H.main.config.expertMode?(H.$tab.find("#btn_adapters_expert_mode").addClass("red lighten-3"),H.$tab.find("#btn_upgrade_all").show()):(H.$tab.find("#btn_adapters_expert_mode").removeClass("red lighten-3"),i())}function B(){var t=!1;H.currentFilter?H.$tiles.find(".tile").each(function(){var e=$(this);(!H.currentType||e.hasClass("class-"+H.currentType))&&G({key:e.data("id")})?(t=!0,e.show()):e.hide()}):H.currentType?(H.$tiles.find(".tile").hide(),H.$tiles.find(".class-"+H.currentType).show(),H.$tiles.find(".tile").each(function(){if($(this).is(":visible"))return!(t=!0)})):H.$tiles.find(".tile").show().each(function(){if($(this).is(":visible"))return!(t=!0)}),t?H.$tiles.find(".filtered-out").hide():H.$tiles.find(".filtered-out").show()}function G(e){if(H.currentFilter){if(!H.data[e.key])return!1;var t=H.data[e.key].title;t&&"object"==typeof t&&(t=t[systemLang]||t.en);var n=H.data[e.key].desc;return n&&"object"==typeof n&&(n=n[systemLang]||n.en),!!(H.data[e.key].name&&-1!==H.data[e.key].name.toLowerCase().indexOf(H.currentFilter)||t&&-1!==t.toLowerCase().indexOf(H.currentFilter)||H.data[e.key].keywords&&-1!==H.data[e.key].keywords.toLowerCase().indexOf(H.currentFilter)||n&&-1!==n.toLowerCase().indexOf(H.currentFilter))}return!0}function F(e,t){var n="";if(t.news)for(var i in t.news)if(t.news.hasOwnProperty(i)){if(systemLang===i&&(n+=(n?"\n":"")+t.news[i]),"en"===i||"cn"===i)continue;if(i===e)break;n+=(n?"\n":"")+(t.news[i][systemLang]||t.news[i].en)}return n}function Z(e){if(!e)return"";var t;if(e instanceof Array){t={};for(var n=0;n'),i}this.curRepository=null,this.curRepoLastUpdate=null,this.curInstalled=null,this.curRepoLastHost=null,this.list=[],this.$tab=$("#tab-adapters"),this.$grid=this.$tab.find("#grid-adapters"),this.$tiles=this.$tab.find("#grid-adapters-tiles"),this.$installDialog=$("#dialog-install-url"),this.main=e,this.tree=[],this.data={},this.urls={},this.groupImages={"common adapters_group":"img/common.png",general_group:"img/common.png",hardware_group:"img/hardware.png",lighting_group:"img/hardware.png",energy_group:"img/hardware.png",household_group:"img/hardware.png","iot-systems_group":"img/hardware.png","climate-control_group":"img/hardware.png",infrastructure_group:"img/hardware.png",garden_group:"img/hardware.png",alarm_group:"img/hardware.png",script_group:"img/script.png",logic_group:"img/script.png",media_group:"img/media.png",multimedia_group:"img/media.png",communication_group:"img/communication.png",protocols_group:"img/communication.png",network_group:"img/communication.png",messaging_group:"img/communication.png",visualisation_group:"img/visualisation.png",visualization_group:"img/visualisation.png","visualization-icons_group":"img/visualisation.png","visualization-widgets_group":"img/visualisation.png",storage_group:"img/storage.png",weather_group:"img/weather.png",schedule_group:"img/schedule.png",vis_group:"img/vis.png","date-and-time_group":"img/service.png",geoposition_group:"img/service.png",utility_group:"img/service.png","misc-data_group":"img/service.png",service_group:"img/service.png","third-party_group":"img/service.png"},this.inited=!1,this.isList=!1,this.filterVals={length:0},this.onlyInstalled=!1,this.onlyUpdatable=!1,this.currentFilter="",this.currentType="",this.isCollapsed={},this.isTiles=!0,this.types={occ:"schedule"},this.prepare=function(){this.$tab.find("#btn_switch_adapters").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.isTiles=!H.isTiles,H.isTiles?(H.$tab.removeClass("view-table").addClass("view-tiles"),$(this).find("i").text("view_list")):($(this).find("i").text("view_module"),H.$tab.removeClass("view-tiles").addClass("view-table")),H.main.saveConfig("adaptersIsTiles",H.isTiles),setTimeout(function(){H.isTiles?n():t(),H._postInit(!0),H.$tab.find(".process-adapters").hide()},50)}),this.$tab.find("#btn_filter_adapters").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.onlyInstalled=!H.onlyInstalled,H.onlyInstalled?H.$tab.find("#btn_filter_adapters").addClass("red lighten-3"):H.$tab.find("#btn_filter_adapters").removeClass("red lighten-3"),H.main.saveConfig("adaptersOnlyInstalled",H.onlyInstalled),setTimeout(function(){H._postInit(!0),H.$tab.find(".process-adapters").hide()},50)}),this.$tab.find("#btn_filter_updates").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.onlyUpdatable=!H.onlyUpdatable,i(),H.main.saveConfig("adaptersOnlyUpdatable",H.onlyUpdatable),setTimeout(function(){H._postInit(!0),H.$tab.find(".process-adapters").hide()},200)}),this.$tab.find("#btn_filter_custom_url").off("click").on("click",function(){var e,t='",n=[];for(e in H.urls)H.urls.hasOwnProperty(e)&&n.push(e);n.sort();for(var i=0;i'+n[i]+"")}H.$installDialog.find("#install-github-link").html(t).val(H.main.config.adaptersGithub||""),H.$installDialog.modal(),H.$installDialog.find(".btn-install").off("click").on("click",function(){var e,t,n;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 L=n.titleLang||n.title;if(L="object"==typeof L?L[systemLang]||L.en:L,H.data[o]={image:f?'':"",icon:f||"",stat:e[o]?e[o].stat:0,name:o,title:(L||"").replace("yunkong2 Visualisation - ",""),desc:C,news:M,updatableError:v,keywords:n.keywords?n.keywords.join(" "):"",version:i,installed:g,rawVersion:a,instances:p,rawInstalled:h,versionDate:n.versionDate,updatable:y,bold:n.highlight||!1,install:''+(H.main.config.expertMode?'':"")+"'+(H.main.config.expertMode?'':""),group:j,license:n.license||"",licenseUrl:n.licenseUrl||""},n.type||console.log('"'+o+'": "common adapters",'),n.type&&H.types[o]&&console.log('Adapter "'+o+'" has own type. Remove from admin.'),H.isList)H.tree.push({icon:f,title:H.data[o].title||o,key:o});else{for(var N=-1,T=0;T':"",icon:n.extIcon,stat:n.stat,name:o,title:(L||"").replace("yunkong2 Visualisation - ",""),desc:C,keywords:n.keywords?n.keywords.join(" "):"",rawVersion:a,version:i,bold:n.highlight,installed:"",versionDate:n.versionDate,install:''+(H.main.config.expertMode?'':""),license:n.license||"",licenseUrl:n.licenseUrl||"",group:j},n.type||console.log('"'+o+'": "common adapters",'),n.type&&H.types[o]&&console.log('Adapter "'+o+'" has own type. Remove from admin.'),H.isList)H.tree.push({icon:n.extIcon,title:H.data[o].title||o,key:o});else{for(var D=-1,I=0;IH.data[t].stat?-1:H.data[e].statH.data[t].versionDate?-1:H.data[e].versionDate',O+='
                      ',O+='
                      ',O+='
                      ',O+=' ',O+=' '+S.title+"",O+=' more_vert',O+='
                        ',O+="
                      • "+d["Available version:"]+' "+S.rawVersion+""+(S.updatable?'':"")+"
                      • ",S.installed&&(O+="
                      • "+d["Installed version"]+': '+S.rawInstalled+"
                      • "),S.instances&&(O+="
                      • "+_("Installed instances")+': '+S.instances+"
                      • "),O+="
                      ",O+="
                      ",O+=' ',O+='
                      ',O+=' close',O+="

                      "+S.desc+"

                      ",O+='
                      ',O+=S.install,O+="
                      ",O+="
                      ","popular"===H.currentOrder&&S.stat?O+='
                      '+S.stat+"
                      ":"updated"===H.currentOrder&&S.versionDate&&(O+='
                      '+J(S.versionDate,d.today,d.yesterday,d["1 %d days ago"],d["2 %d days ago"],d["5 %d days ago"],l)+"
                      "),O+="
                      ",O+=""}for(var Y in O+='
                      ',O+='
                      ',O+='
                      ',O+='
                      ',O+=' '+_("Filtered out")+"",O+="
                      ",O+=' ',O+="
                      ",O+="
                      ",H.$tiles.html(O),H.data)H.data.hasOwnProperty(Y)&&H.initButtons(Y);for(var Q='
                    • '+d.all+"
                    • \n",P=0;P'+_(A[P])+"\n";var U=H.$tab.find("#main-toolbar-table-types");U.html(Q),U.find(".main-toolbar-table-types-item").show().off("click").on("click",function(){H.currentType=$(this).data("type")||"",B(),H.$tab.find("#main-toolbar-table-types-btn").html(_(H.currentType||"all")),H.main.saveConfig("adaptersCurrentType",H.currentType)}),H.currentType&&!d[H.currentType]&&(d[H.currentType]=_(H.currentType)),H.$tab.find("#main-toolbar-table-types-btn").html(d[H.currentType||"all"]).dropdown({constrainWidth:!1,gutter:0}),(U=H.$tab.find("#main-toolbar-table-order")).find(".main-toolbar-table-order-item").off("click").on("click",function(){H.currentOrder=$(this).data("type")||"",H.$tab.find("#main-toolbar-table-order-btn").html(_(H.currentOrder||"a-z")),H.main.saveConfig("adaptersCurrentOrder",H.currentOrder),H._postInit()}),H.currentOrder&&!d[H.currentOrder]&&(d[H.currentOrder]=_(H.currentOrder)),H.$tab.find("#main-toolbar-table-order-btn").show().html(d[H.currentOrder||"a-z"]).dropdown({constrainWidth:!1,gutter:0}),B()}else{H.$tab.find("#main-toolbar-table-types-btn").hide(),H.$tab.find("#main-toolbar-table-order-btn").hide(),H.$grid.fancytree("getTree").reload(H.tree),H.$grid.find(".fancytree-icon").each(function(){$(this).attr("src")&&$(this).css({width:18,height:18}),$(this).on("hover",function(){var e='
                      ',t=$(e);t.insertAfter($(this)),$(this).data("big",t[0]);var n=parseFloat(t.height()),i=Math.round($(this).position().top-(n-parseFloat($(this).height()))/2);n+i>(window.innerHeight||document.documentElement.clientHeight)&&(i=(window.innerHeight||document.documentElement.clientHeight)-n),t.css({top:i})},function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)})}),H.currentFilter&&H.$grid.fancytree("getTree").filterNodes(G,!1),H.sortTree(),H.enableColResize();var R=["tab-adapters-table-name","tab-adapters-table-description","tab-adapters-table-keywords","tab-adapters-table-installed","tab-adapters-table-available","tab-adapters-table-license","tab-adapters-table-install"];H.$grid.find("tbody tr").each(function(){var e=0;$(this).find("td").each(function(){$(this).addClass(R[e]),e++})})}H.$tab.find(".grid-main-div").removeClass("order-a-z order-popular order-updated").addClass(H.currentOrder?"order-"+H.currentOrder:""),H.$tab.find(".process-adapters").hide(),H.updateCounter(s)})):this.enableColResize(),this.restoreScroll()},this.saveScroll=function(){this.scrollTop=this.$tab.find(".grid-main-div").scrollTop()},this.restoreScroll=function(){this.scrollTop&&this.$tab.find(".grid-main-div").scrollTop(this.scrollTop)},this.updateCounter=function(e){if(void 0===e)this.getAdaptersInfo(this.main.currentHost,!1,!1,function(e,t){var n=0;for(var i in t)if(t.hasOwnProperty(i)){var a=t?t[i]:null;if(a&&!a.controller&&"hosts"!==i){var s="";e[i]&&e[i].version&&(s=e[i].version),a.version&&!H.main.upToDate(s,a.version)&&n++}}H.updateCounter(n)});else if(e){var t=$("#updates-for-adapters");t.length?t.text(e):$(''+e+"").appendTo('.admin-sidemenu-items[data-tab="tab-adapters"] a')}else $("#updates-for-adapters").remove()},this.init=function(e,t){this.inited&&!e||(this.main.objectsLoaded?(this.inited||(this.inited=!0,this.main.subscribeObjects("system.host.*"),this.main.subscribeStates("system.host.*")),this.main.tabs.hosts.getHosts(function(){H._postInit(e,t)})):setTimeout(function(){H.init(e,t)},250))},this.destroy=function(){this.inited&&(this.saveScroll(),this.inited=!1,this.main.unsubscribeObjects("system.host.*"),this.main.unsubscribeStates("system.host.*"))},this.initButtons=function(r){this.$tab.find('.adapter-install-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var s=$(this).attr("data-adapter-name"),e=$(this).attr("data-adapter-desc");!function(e,t,n){if(H.main.tabs.hosts.list.length<=1&&!H.main.config.expertMode)return n(!0,H.main.currentHost,"");var i=$("#dialog-add-instance");i.find(".dialog-add-instance-name").html(e),i.find(".dialog-add-description").html(t);for(var a="",s=0;s'+o.name+""}H.main.tabs.hosts.list.length<=1?i.find(".dialog-add-instance-host").addClass("disabled").prop("disabled",!0):i.find(".dialog-add-instance-host").removeClass("disabled").prop("disabled",!1),i.find(".dialog-add-instance-host").html(a).select();for(var r=-1,c=[],l=0;l'+_("auto")+"";for(var m=0;m'+m+"");i.find(".dialog-add-instance-number").html(a).select(),i.find(".dialog-add-install-btn").off("click").on("click",function(e){n&&(n(!0,i.find(".dialog-add-instance-host").val(),i.find(".dialog-add-instance-number").val()),n=null),i.find(".dialog-add-cancel-btn").off("click"),i.find(".dialog-add-instance-number").off("click")}),i.find(".dialog-add-cancel-btn").off("click").on("click",function(e){n&&(n(!1),n=null),i.find(".dialog-add-cancel-btn").off("click"),i.find(".dialog-add-instance-number").off("click")}),i.modal({dismissible:!1,complete:function(){i.find(".dialog-add-instance-name").html("")}}).modal("open")}(s,e,function(e,i,a){e&&H.getAdaptersInfo(i,!1,!1,function(e,t){var n=e[s];n||(n=t[s]),n&&(n.license&&"MIT"!==n.license?function(i,a){var s=$("#dialog-license");if(!H.data[i].installed&&H.data[i].licenseUrl){var o=setTimeout(function(){a(!(o=null))},1e4);"object"==typeof H.data[i].licenseUrl&&(H.data[i].licenseUrl=H.data[i].licenseUrl[systemLang]||H.data[i].licenseUrl.en),H.main.socket.emit("httpGet",H.data[i].licenseUrl,function(e,t,n){o&&(clearTimeout(o),o=null,!e&&n?(s.css({"z-index":200}),n=(n=n.toString().replace(/\r\n/g,"
                      ")).replace(/\n/g,"
                      "),s.find(".license_text").html(n),s.find(".license_agreement_name").text(_(" for %s",i)),s.modal({dismissible:!1,complete:function(){s.find(".license_text").html("")}}).modal("open"),s.find(".license_agree").off("click").on("click",function(e){a&&(a(!0),a=null),s.find(".license_agree").off("click"),s.find(".license_non_agree").off("click")}),s.find(".license_non_agree").off("click").on("click",function(e){a&&(a(!1),a=null),s.find(".license_agree").off("click"),s.find(".license_non_agree").off("click")})):(a&&a(!0),a=null))})}else a(!0)}(s,function(e){e&&H.main.cmdExec(null,"add "+s+" "+a+" --host "+i,function(e){e||H._postInit(!0)})}):H.main.cmdExec(null,"add "+s+" "+a+" --host "+i,function(e){e||H._postInit(!0)}))})})}),this.$tab.find('.adapter-delete-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var t=$(this).attr("data-adapter-name");H.main.confirmMessage(_("Are you sure you want to delete adapter %s?",t),_("Please confirm"),"help",function(e){e&&H.main.cmdExec(null,"del "+t,function(e){e||H._postInit(!0)})})}),this.$tab.find('.adapter-readme-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){H.main.navigate({tab:"adapters",dialog:"readme",params:$(this).data("adapter-name")})}),this.$tab.find('.adapter-update-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var e=$(this).attr("data-adapter-name");"admin"===e&&(H.main.waitForRestart=!0),H.main.cmdExec(null,"upgrade "+e,function(e){e||H._postInit(!0)})}),this.$tab.find('.adapter-upload-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var e=$(this).attr("data-adapter-name");H.main.cmdExec(null,"upload "+e,function(e){e||H._postInit(!0)})});var e=this.$tab.find('.adapter-update-custom-submit[data-adapter-name="'+r+'"]');e.off("click").on("click",function(){var e=[];if(H.main.objects["system.adapter."+r].common.news){var t=H.main.objects["system.adapter."+r].common.news;for(var n in t)t.hasOwnProperty(n)&&e.push(n)}else e.push(H.main.objects["system.adapter."+r].common.version);for(var i='
                      ',a=0;a'+e[a]+' - "}i+="
                      ";var o=$("#adapters-menu");o.length||((o=$('")).appendTo($(".materialize-dialogs").first()),o.modal()),o.data("trigger",this),o.find("p").html(i),o.find("h4").html(_("Versions of %s",r)),o.find(".adapters-versions-link").off("click").on("click",function(){o.modal("close");var e=$(this).data("adapter-name"),t=$(this).data("version");t&&e&&H.main.cmdExec(null,"upgrade "+e+"@"+t,function(e){e||H._postInit(!0)})}),o.modal("open")}),H.main.objects["system.adapter."+r]||e.hide()},this.objectChange=function(e,t){if(e.match(/^system\.adapter\.[a-zA-Z0-9-_]+$/)){if(t)-1===this.list.indexOf(e)&&this.list.push(e);else{var n=this.list.indexOf(e);-1!==n&&this.list.splice(n,1)}void 0!==this.$grid&&this.$grid[0]._isInited&&this.init(!0)}},this.stateChange=function(e,t){if(e&&t){var n=e.match(/^system\.adapter\.([\w\d-]+)\.upload$/);if(n){var i=this.$tab.find('.adapter-upload-progress[data-adapter-name="'+n[1]+'"]'),a=W(t.val);i.html(a).css({opacity:t.val?.7:0}),this.$tab.find('.group-upload-progress[data-adapter-group="'+i.data("adapter-group")+'"]').html(a).css({opacity:t.val?.7:0})}}}}function Config(e){var t=this;this.$dialog=$("#dialog-config"),this.$configFrame=this.$dialog.find("#config-iframe"),this.main=e,this.prepare=function(){$iframeDialog=this},this.init=function(){if(!this.inited){this.inited=!0;var e=this.main.navigateGetParams(),t=e.split(".");this.main.objects[e]&&this.main.objects[e].common&&this.main.objects[e].common.materialize?this.$configFrame.attr("src","adapter/"+t[2]+"/index_m.html?"+t[3]):this.$configFrame.attr("src","adapter/"+t[2]+"/?"+t[3]);var n=e.replace(/^system\.adapter\./,"");this.$dialog.data("name",n),this.$dialog.find(".title").html(_("Adapter configuration")+": "+n)}},this.allStored=function(){return!window.frames["config-iframe"].changed},this.close=function(){t.main.navigate()},this.destroy=function(){if(this.inited&&(this.inited=!1,this.$configFrame.attr("src",""),void 0!==showConfig&&showConfig&&showConfig.length)){var e=showConfig.shift();setTimeout(function(){t.main.navigate({tab:"instances",dialog:"config",params:e})},1e3)}}}function Customs(C){var m,g,h,f,T,D,I,k,z,x,O,A,E="__different__",S=this;function Y(e){if(e)S.historyTimeout&&clearTimeout(S.historyTimeout);else if(S.historyTimeout)return;S.historyTimeout=setTimeout(function(){S.historyTimeout=null,O&&S.loadHistoryTable(O.data("id"),!0)},e||5e3)}function Q(t,n){$.ajax({headers:{Accept:"text/html"},cache:!0,url:"/adapter/"+t+"/custom_m.html",success:function(e){n(null,e)},error:function(e){$.ajax({headers:{Accept:"text/html"},cache:!0,url:"/adapter/"+t+"/custom.html",success:function(e){n(null,e)},error:function(e){n(e.responseText)}})}})}function P(e){e.stopPropagation(),e.preventDefault();var t=S.$dialog.find("#customs-tabs"),c=t.data("ids");S.currentCustoms=null;var l=_(E);if(t.find("input, select").each(function(){var e=$(this).data("instance"),t=$(this).data("field");if(t){var n;if("checkbox"===$(this).attr("type")){if(this.indeterminate)return;n=$(this).prop("checked")}else n=$(this).val();if(n!==l){null===n&&(n=""),void 0===n&&(n=""),"false"===n&&(n=!1),"true"===n&&(n=!0);var i=parseFloat(n);n.toString().replace(/^\+/,"").replace(/([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/,"$1")===i.toString()&&(n=i);for(var a=0;a
                      '+_("Settings for %s",j)+' '+_("active")+'
                      '+$('script[data-template-name="'+v+'"]').html()+"
                      ",T=$(N);this.defaults[v]={},T.find("input, select").each(function(){var e=$(this);e.attr("data-instance",v+"."+w);var t=e.attr("data-field"),n=e.attr("data-default");"true"===n&&(n=!0),"false"===n&&(n=!1),void 0!==n&&n.toString().replace(/\+/,"")===parseFloat(n).toString()&&(n=parseFloat(n)),S.defaults[v][t]=n,"enabled"===t&&e.on("click",function(e){e.stopPropagation(),$(this).prop("checked")})}),s.append(T),customPostInits.hasOwnProperty(v)&&"function"==typeof customPostInits[v]&&customPostInits[v](T,r[v+"."+w],S.main.objects["system.adapter."+v+"."+w],i,a)}s.find("input, select").each(function(){var e,n=$(this),t=n.data("instance"),i=t.split(".")[0],a=n.data("field");void 0!==r[t][a]?"checkbox"===n.attr("type")?r[t][a]===E?n[0].indeterminate=!0:n.prop("checked",r[t][a]):r[t][a]===E?("number"===n.attr("type")&&n.attr("type","text"),"SELECT"===n.prop("tagName").toUpperCase()?(n.prepend('"),n.val(o)):n.val("").attr("placeholder",o)):n.val(r[t][a]):(S.defaults[i]&&void 0!==S.defaults[i][a]&&(e=S.defaults[i][a]),void 0!==e&&("checkbox"===n.attr("type")?n.prop("checked",e):n.val(e)));"checkbox"===n.attr("type")?n.on("change",function(){if(S.$dialog.find(".dialog-system-buttons .btn-save").removeClass("disabled"),"enabled"===$(this).data("field")){var e=n.data("instance"),t=s.find('.activated[data-adapter="'+e+'"]');$(this).prop("checked")?t.css("opacity",1):t.css("opacity",0)}}):n.on("change",function(){S.$dialog.find(".dialog-system-buttons .btn-save").removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")})}),this.showCustomsData(1'+_("Loading...")+"");var n={aggregate:"none",instance:O.val(),from:!0,ack:!0,q:!0};T||(T=this.$dialog.find("#tab-customs-table .datepicker.date-from"),D=this.$dialog.find("#tab-customs-table .datepicker.date-to"),I=this.$dialog.find("#tab-customs-table .timepicker.time-from"),k=this.$dialog.find("#tab-customs-table .timepicker.time-to"));var d,i=T.val()?M.Datepicker.getInstance(T).toString("yyyy.mm.dd"):"",a=I.val(),s=D.val()?M.Datepicker.getInstance(D).toString("yyyy.mm.dd"):"",o=k.val(),r=!0;if(s?(r=!1,(s=new Date(s)).setHours(23),s.setMinutes(59),s.setSeconds(59),s.setMilliseconds(999)):s=new Date,o){var c=o.split(":");s.setHours(c[0]),s.setMinutes(c[1]),s.setSeconds(59),s.setMilliseconds(999),r=!1}if(s=s.getTime(),r&&(s+=1e4),n.end=s,i||a){if(i=new Date(i||s),a){var u=a.split(":");i.setHours(u[0]),i.setMinutes(u[1])}else i.setHours(0),i.setMinutes(0);i.setSeconds(0),i.setMilliseconds(0),n.start=i.getTime()}else n.count=50;l&&(d=new Date(s).toISOString()+"_"+(n.start?new Date(n.start):n.count+"points")+"_"+e+"__"+n.instance+".csv"),C.socket.emit("getHistory",e,n,function(r,c){setTimeout(function(){var e,t,n,i="value;acknowledged;from;timestamp;lastchanged;\n";if(r)console.error(r),m.html(''+r+"");else{var a="";if(c&&c.length){for(var s=c.length-1;0<=s;s--){var o=(c[s].from||"").replace("system.adapter.","").replace("system.","");a+=' '+c[s].val+" "+c[s].ack+" "+o+" "+C.formatDate(c[s].ts)+" "+C.formatDate(c[s].lc)+"\n",l&&(i+=c[s].val+";"+c[s].ack+";"+(o||"")+";"+(c[s].ts?new Date(c[s].ts).toISOString():"")+";"+(c[s].lc?new Date(c[s].lc).toISOString():"")+";\n")}f=c[c.length-1].ts}else a=''+_("No data")+"";m.html(a)}!function e(){$.fn.colResizable&&(g.is(":visible")?(g.data("inited")||((h=new IobListHeader("grid-history-header",{list:g,colWidthOffset:1,prefix:"log-filter"})).add("text","val"),h.add("text","ack"),h.add("text","from"),h.add("text","ts"),h.add("text","lc")),g.colResizable({liveDrag:!0,partialRefresh:!0,marginLeft:5,postbackSafe:!0,onResize:function(e){return h.syncHeader()}}),h.syncHeader()):setTimeout(function(){e()},200))}(),l&&(e=d,t=i,(n=document.createElement("a")).setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(t)),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n))},0)})},this.loadHistoryChart=function(e){if(z||(z=this.$dialog.find("#tab-customs-chart .datepicker.date-from"),x=this.$dialog.find("#tab-customs-chart .datepicker.date-to")),e){for(var t=0,n=!1,i=!1,a=0;a"+u[v]+"\n")}if(y){O.data("id",n[0]).html(y).show().off("change").on("change",function(){S.main.saveConfig("object-history-table",O.val()),S.loadHistoryTable($(this).data("id"))}).select(),A.data("id",n[0]).html(y).show().off("change").on("change",function(){S.main.saveConfig("object-history-chart",A.val()),S.loadHistoryChart($(this).data("id"))}).select(),void 0!==this.main.config["object-history-table"]&&O.val(this.main.config["object-history-table"]),void 0!==this.main.config["object-history-chart"]&&A.val(this.main.config["object-history-chart"]),p.data("id",n[0]).show().off("click").on("click",function(){S.$dialog.find("#grid-history-body").html(""),S.loadHistoryTable($(this).data("id"))}),M.data("id",n[0]).show().off("click").on("click",function(){S.loadHistoryChart($(this).data("id"))}),b.data("id",n[0]).show().off("click").on("click",function(){S.loadHistoryTable($(this).data("id"),!1,!0)});var j=new Date;j.setDate(j.getDate()-1);for(var L={today:_("Today"),clear:_("Clear"),done:_("Ok"),months:[_("January"),_("February"),_("March"),_("April"),_("May"),_("June"),_("July"),_("August"),_("September"),_("October"),_("November"),_("December")],monthsShort:[_("Jan"),_("Feb"),_("Mar"),_("Apr"),_("May"),_("Jun"),_("Jul"),_("Aug"),_("Sep"),_("Oct"),_("Nov"),_("Dec")],weekdaysShort:[_("Sun"),_("Mon"),_("Tue"),_("Wed"),_("Thu"),_("Fri"),_("Sat")],weekdays:[_("Sunday"),_("Monday"),_("Tuesday"),_("Wednesday"),_("Thursday"),_("Friday"),_("Saturday")],weekdaysAbbrev:["S","M","T","W","T","F","S"]},N=0;N\n
                      \n',"state"===i&&"common"===n&&"type"===s?a+='":"string"==typeof t[s]?a+='\n':"number"==typeof t[s]?a+='\n':"boolean"==typeof t[s]?a+='\n":a+='\n";var o=s;"common"===n&&systemDictionary["common_"+s]&&systemDictionary["common_"+s][systemLang]&&(o=_("common_"+s)),"boolean"==typeof t[s]?a+=""+o+"\n":a+="\n",a+='
                      \n\n',a+="\n"}c.$dialog.find(e).html(a)}function n(e,t){var n=c.$dialog.find(e);n.find(".object-tab-edit-string").each(function(){t[$(this).data("attr")]=$(this).val()}),n.find(".object-tab-edit-number").each(function(){t[$(this).data("attr")]=parseFloat($(this).val())}),n.find(".object-tab-edit-boolean").each(function(){t[$(this).data("attr")]=$(this).prop("checked")});var i=null;if(n.find(".object-tab-edit-object").each(function(){try{t[$(this).data("attr")]=JSON.parse($(this).val())}catch(e){return i=$(this).data("attr"),!1}}),void 0!==t.write&&("false"!==t.write&&"0"!==t.write&&0!==t.write||(t.write=!1),"true"!==t.write&&"1"!==t.write&&1!==t.write||(t.write=!0)),void 0!==t.read&&("false"!==t.read&&"0"!==t.read&&0!==t.read||(t.read=!1),"true"!==t.read&&"1"!==t.read&&1!==t.read||(t.read=!0)),null===t.min&&delete t.min,void 0!==t.min){var a=parseFloat(t.min);a.toString()===t.min.toString()&&(t.min=a),"false"===t.min&&(t.min=!1),"true"===t.min&&(t.min=!0)}if(null===t.max&&delete t.max,void 0!==t.max){var s=parseFloat(t.max);s.toString()===t.max.toString()&&(t.max=s),"false"===t.max&&(t.max=!1),"true"===t.max&&(t.max=!0)}if(null===t.def&&delete t.def,void 0!==t.def){var o=parseFloat(t.def);o.toString()===t.def.toString()&&(t.def=o),"false"===t.def&&(t.def=!1),"true"===t.def&&(t.def=!0)}if(-1!==e.indexOf("common"))for(var r in t)t.hasOwnProperty(r)&&("true"===t[r]&&(t[r]=!0),"false"===t[r]&&(t[r]=!1),parseFloat(t[r]).toString()===t[r]&&(t[r]=parseFloat(t[r])));return i}function s(e,t,n){"boolean"==typeof t&&(n=t,t=3e3),c.main.showToast(c.$dialog,e,null,t,n)}this.$dialog=$("#dialog-editobject"),this.$dialogNewField=$("#dialog-new-field"),this.main=e,this.prepared=!1,this.inited=!1,this.$dialogSave=this.$dialog.find(".dialog-editobject-buttons .btn-save"),this.iconVal=null,this._prepare=function(){this.prepared||(this.prepared=!0,this.$dialogSave.on("click",function(){c.save()}),this.$dialog.find(".dialog-editobject-buttons .btn-cancel").on("click",function(){c.editor.setValue(""),c.$dialogSave.addClass("disabled"),c.main.navigate()}),this.$dialog.find(".btn-add-common").on("click",function(){c.$dialogNewField.find(".object-tab-new-icon").show(),c.$dialogNewField.modal("open");var e=c.$dialogNewField.find(".object-tab-new-name");e.data("type","common").focus(),e.hasClass("autocomplete")||(e.addClass("autocomplete"),e.mautocomplete({data:{type:null,desc:null,min:null,max:null,def:null,role:null,unit:null,read:null,write:null,states:null},minLength:0})),e.focus()}),this.$dialog.find(".btn-add-native").on("click",function(){c.$dialogNewField.find(".object-tab-new-icon").hide(),c.$dialogNewField.modal("open");var e=c.$dialogNewField.find(".object-tab-new-name");e.hasClass("autocomplete")&&(e.mautocomplete("destroy"),e.removeClass("autocomplete")),M.updateTextFields("#dialog-new-field"),e.data("type","native").focus()}),this.$dialogNewField.find(".object-tab-new-name").keypress(function(e){13===e.which&&c.$dialogNewField.find(".btn-add").trigger("click")}),this.editor||(this.editor=ace.edit("view-object-raw"),this.editor.getSession().setMode("ace/mode/json"),this.editor.$blockScrolling=!0,this.editor.getSession().on("change",function(){c.$dialogSave.removeClass("disabled")})),this.$dialogNewField.modal(),this.$dialog.find(".tabs").mtabs({onShow:function(e){if(e){var t=$(e).attr("id");if("object-tab-common"===t)s(_("Drop the icons here"));else if("object-tab-raw"===t){var n=c.saveFromTabs();if(!n)return!1;c.editor.setValue(JSON.stringify(n,null,2))}else if("object-tab-raw"===t){var i;try{i=JSON.parse(c.editor.getValue())}catch(e){return c.main.showMessage(e,_("Parse error"),"error_outline"),c.main.noSelect||c.$dialog.find(".tabs").mtabs("select","object-tab-raw"),!1}c.load(i)}return c.main.saveConfig("object-edit-active",t),!0}}}),this.$dialogNewField.find(".btn-add").on("click",function(e){e.preventDefault(),e.stopPropagation();var t=c.$dialogNewField.find(".object-tab-new-name"),n=t.data("type")||"common",i=t.val().trim(),a=c.saveFromTabs();i&&-1===i.indexOf(" ")?void 0===a[n][i]?(a[n][i]="",c.load(a),c.$dialogNewField.find(".object-tab-new-name").val(""),c.$dialogNewField.modal("close"),c.$dialogSave.removeClass("disabled")):c.main.showError(_("Field %s yet exists!",i)):c.main.showError(_("Invalid field name: %s",i))}),this.$dialogNewField.find(".btn-cancel").on("click",function(e){c.$dialogNewField.find(".object-tab-new-name").val("")}),this.$dialog.find(".edit-object-name").on("change",function(){c.$dialogSave.removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")}),this.$dialog.find(".edit-object-type").on("change",function(){c.$dialogSave.removeClass("disabled")}),this.$dialog.find(".object-tab-rights input").on("change",function(){c.$dialogSave.removeClass("disabled")}),installFileUpload(this.$dialog.find("#object-tab-common"),5e4,function(e,t){if(e)s(e,!0);else{if(!t.match(/^data:image\//))return void s(_("Unsupported image format"),!0);c.$dialogSave.removeClass("disabled"),c.iconVal=t;var n=c.$dialog.find(".icon-editor");n.find(".icon").show().html(''),n.find(".icon .treetable-icon").attr("src",t)}}),this.$dialog.find(".icon-editor .icon-upload").off("click").on("click",function(){c.$dialog.find(".drop-file").trigger("click")}),this.$dialog.find(".icon-editor .icon-clear").off("click").on("click",function(){c.iconVal&&(c.iconVal=null,c.$dialog.find(".icon-editor").hide().appendTo(c.$dialog),c.$dialogSave.removeClass("disabled"))}))},this.init=function(){if(this._prepare(),!this.inited){this.inited=!0;var e=c.main.navigateGetParams(),t=!!(e||"").match(/,def$/);e=e.replace(/,def$/,"");var n=this.main.objects[e];if(n){void 0===this.main.config["object-edit-active"]||c.main.noSelect||this.$dialog.find(".tabs").mtabs("select",this.main.config["object-edit-active"]);for(var i,a="",s=0;s'+(i||this.main.tabs.users.list[s])+"";for(this.$dialog.find(".object-tab-acl-owner").html(a),a="",s=0;s'+(i||this.main.tabs.users.groups[s])+"";this.$dialog.find(".object-tab-acl-group").html(a),this.load(n),t?this.$dialog.data("cb",function(n){"state"===n.type&&c.main.socket.emit("getState",n._id,function(e,t){t&&null!==t.val&&void 0!==t.val||c.main.socket.emit("setState",n._id,void 0===n.common.def?null:n.common.def,!0)})}):this.$dialog.data("cb",null),c.$dialogSave.addClass("disabled")}}},this.destroy=function(){this.inited&&(this.inited=!1)},this.load=function(e){if(e){e.common=e.common||{},e.native=e.native||{},e.acl=e.acl||{},this.$dialog.find(".title-id").text(e._id),this.$dialog.find(".edit-object-name").val(e.common?translateName(e.common.name):e._id),this.$dialog.find(".edit-object-type").val(e.type),this.$dialog.find(".object-tab-acl-owner").val(e.acl.owner||"system.user.admin"),this.$dialog.find(".object-tab-acl-group").val(e.acl.ownerGroup||"system.group.administrator"),this.$dialog.find(".icon-editor").hide().appendTo(this.$dialog),a(".object-tab-common-table",e.common||{},"common",e.type),a(".object-tab-native-table",e.native||{},"native",e.type),void 0!==e.common.icon?(this.iconVal=e.common.icon,this.$dialog.find(".object-tab-common-table").prepend(this.$dialog.find(".icon-editor").show()),this.$dialog.find(".icon-editor .icon").html(c.main.getIconFromObj(e))):this.iconVal=null,this.$dialog.find(".object-tab-field-delete").on("click",function(){var n=$(this).data("part"),i=$(this).data("attr");c.main.confirmMessage(_("Delete attribute"),_("Please confirm"),"error_outline",function(e){if(e){var t=c.saveFromTabs();delete t[n][i],c.load(t)}})}),e.acl=e.acl||{},void 0===e.acl.object&&(e.acl.object=1638),this.$dialog.find("#object-tab-acl-obj-owner-read").prop("checked",1024&e.acl.object),this.$dialog.find("#object-tab-acl-obj-owner-write").prop("checked",512&e.acl.object),this.$dialog.find("#object-tab-acl-obj-group-read").prop("checked",64&e.acl.object),this.$dialog.find("#object-tab-acl-obj-group-write").prop("checked",32&e.acl.object),this.$dialog.find("#object-tab-acl-obj-every-read").prop("checked",4&e.acl.object),this.$dialog.find("#object-tab-acl-obj-every-write").prop("checked",2&e.acl.object),"state"!==e.type?this.$dialog.find(".object-tab-acl-state").hide():(this.$dialog.find(".object-tab-acl-state").show(),void 0===e.acl.state&&(e.acl.state=1638),this.$dialog.find("#object-tab-acl-state-owner-read").prop("checked",1024&e.acl.state),this.$dialog.find("#object-tab-acl-state-owner-write").prop("checked",512&e.acl.state),this.$dialog.find("#object-tab-acl-state-group-read").prop("checked",64&e.acl.state),this.$dialog.find("#object-tab-acl-state-group-write").prop("checked",32&e.acl.state),this.$dialog.find("#object-tab-acl-state-every-read").prop("checked",4&e.acl.state),this.$dialog.find("#object-tab-acl-state-every-write").prop("checked",2&e.acl.state));var t=JSON.parse(JSON.stringify(e));if(this.editor.setValue(JSON.stringify(t,null,2)),t._id&&delete t._id,t.common&&delete t.common,t.type&&delete t.type,t.native&&delete t.native,t.acl&&delete t.acl,this.$dialog.find("#view-object-rest").val(JSON.stringify(t,null," ")),this.$dialog.find("select").select(),this.$dialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),this.$dialog.find("input").on("change",function(){c.$dialogSave.removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")}),this.$dialog.find("select").on("change",function(){c.$dialogSave.removeClass("disabled")}),this.$dialog.find("textarea").on("change",function(){c.$dialogSave.removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")}),void 0!==e.common.color){var n=Date.now(),i=this.$dialog.find('.object-tab-edit-string[data-attr="color"]').parent();i.prepend('color_lens'+_("Color")+""),i.colorpicker({component:".btn",color:i,container:!0}).colorpicker("setValue",e.common.color||"#fff").on("showPicker.colorpicker",function(){}).on("changeColor.colorpicker",function(e){100'+g.main.getIconFromObj(s[e][t])+p(s[e][t])+"");n&&(n+='
                    • '),n+='
                    • control_point'+_("custom group")+"
                    • ",g.$gridEnum.find("#btn-new-group-"+i).html(n),g.$gridEnum.find('.btn-new-group-btn[data-target="btn-new-group-'+i+'"]').dropdown({constrainWidth:!1}),g.$gridEnum.find("#btn-new-group-"+i).find(".new-group-item").off("click").on("click",function(){var e=$(this).data("id"),t=$(this).data("enum");if(e){var n=t.replace(/[.#\\\/&?]+/g,"-");g.main.saveConfig("enums-active","enum-"+n),g.main.socket.emit("setObject",e,s[t][e],function(e){e&&g.main.showError(e)})}else v(null,t)})}else{for(t in a)a.hasOwnProperty(t)&&-1===g.list.indexOf(t)&&(n+='
                    • '+g.main.getIconFromObj(a[t])+p(a[t])+"
                    • ");n&&(n+='
                    • '),n+='
                    • control_point'+_("custom enum")+"
                    • ",g.$gridEnum.find("#btn-new-enum").html(n),g.$gridEnum.find(".btn-new-enum-btn").dropdown({constrainWidth:!1}),g.$gridEnum.find(".new-enum-item").off("click").on("click",function(){var e=$(this).data("id");if(e){var t=e.replace(/[.#\\\/&?]+/g,"-");g.main.saveConfig("enums-active","enum-"+t),g.main.socket.emit("setObject",e,a[e],function(e){e&&g.main.showError(e)})}else v(null)})}}function p(e,t){var n;(n=t?e[t]:e)&&n.common&&n.common.name?n=translateName(n.common.name):n=(n=t.split(".").pop())[0].toUpperCase()+n.substring(1).toLowerCase();return n}function r(e,t,n){var i,a,s,o=g.main.objects[e],r=e.replace(/[.#\\\/&?]+/g,"-"),c='';c+='
                        ';for(var l=0;l'+g.main.getIcon(g.list[l],null,null,"icon")+''+p(g.main.objects,g.list[l])+"

                        "+g.list[l]+"


                        ",d&&d.common&&d.common.members&&d.common.members.length)for(var m=0;m'+g.main.getIcon(i)+''+p(g.main.objects,i)+'close
                      ');c+='edit',c+='delete',c+=""}c+="
                      ",t.html(c),f(e),n&&t.find(".enum-collection").scrollTop(n),function(n){for(var e=g.$gridList.find('.enum-buttons[data-id="'+n+'"] .filter-input'),t={},i=0;i\n view_list\n note_add\n \n \n queue_play_next\n \n ');var t='
                      ';t+='",t+="
                      ";for(var a=0;a',t+="");var s={};e.find(".enum-collection").each(function(){s[$(this).data("id")]=$(this).scrollTop()});try{var o=g.$gridEnum.find(".tree-table-body .collection").find(".collection-item");try{o.droppable("instance")&&o.droppable("destroy")}catch(n){console.error(n)}}catch(n){}e.html(t),0tr.treetable-enum");e.droppable("instance")&&e.droppable("destroy")}catch(e){console.log(e)}g.$gridList.html("").removeClass("tree-table-tiles").addClass("tree-table-list"),g.$gridList.treeTable({objects:g.main.objects,root:"enum",columns:["title","name"],members:!0,colors:!0,icons:!0,widths:["calc(100% - 250px)","250px"],name:"enums",buttonsWidth:"40px",buttons:[{text:!1,icons:{primary:"ui-icon-trash"},click:function(t,e,n){g.main.objects[t]?"enum"===g.main.objects[t].type?e?g.main.confirmMessage(_("All sub-enums of %s will be deleted too?",t),null,"help",function(e){e&&g.main._delObjects(t,!0,function(e){e?b(_("Error: %s",e),!0):b(_("Deleted"))})}):g.main.confirmMessage(_("Are you sure to delete %s?",t),null,"help",function(e){e&&g.main._delObjects(t,!0,function(e){e?b(_("Error: %s",e),!0):b(_("Deleted"))})}):u(t,n):g.main.objects[n]&&"enum"===g.main.objects[n].type?u(t,n):b(_('Object "%s" does not exists. Update the page.',t))},width:26,height:20},{text:!1,icons:{primary:"ui-icon-pencil"},match:function(e){return g.main.objects[e]&&"enum"===g.main.objects[e].type},click:function(e,t,n){v(e)},width:26,height:20}],panelButtons:[{id:"tab-enums-btn-switch-tiles",title:_("change view mode"),icon:"view_module",click:function(){g.isTiles=!0,g.main.saveConfig("enumIsTiles",g.isTiles),setTimeout(function(){n()},50)}},{id:"tab-enums-list-new-enum",title:_("New enum"),icon:"note_add",click:function(){v(null)}},{id:"tab-enums-list-new-category",title:_("New category"),icon:"library_add",click:function(){v(null,g.enumEdit)}},{id:"tab-enums-list-edit",title:_("Edit"),icon:"edit",click:function(){w(!g.editMode)}}],onChange:function(e,t){if(e!==t){g.enumEdit=e;var n=g.main.objects[e];if(n&&"enum"===n.type)$("#tab-enums-list-new-enum").removeClass("disabled").attr("title",_("Create new enum, like %s","enum.newCategory")),2===e.split(".").length?g.$gridList.find("#tab-enums-list-new-category").removeClass("disabled").attr("title",_("Create new category, like %s",e+".newEnum")):g.$gridList.find("#tab-enums-list-new-category").addClass("disabled");else g.$gridList.find("#tab-enums-list-new-enum").addClass("disabled"),g.$gridList.find("#tab-enums-list-new-category").addClass("disabled")}},onReady:m}),g.$gridList.find(".tree-table-buttons a").addClass("btn-small"),g.$gridList.find("#tab-enums-list-new-enum").addClass("disabled"),g.$gridList.find("#tab-enums-list-new-category").addClass("disabled")}function l(t){if("enum"===g.main.objects[t].type){var e=function(e){for(var t=e.split("."),n=[],i=new RegExp("^"+e.replace(/\./g,"\\.")+"\\."),a=0;atr.treetable-enum").droppable({accept:".fancytree-type-draggable",over:function(e,t){if($(this).addClass("tab-accept-item"),$(this).hasClass("not-empty")&&!$(this).hasClass("expanded")){var n;$(this).data("tt-id");(n=$(this).data("timer"))&&clearTimeout(n),$(this).data("timer",setTimeout(function(){g.$gridList.treeTable("expand",$(this).data("tt-id"))},1e3))}},out:function(e,t){var n;$(this).removeClass("tab-accept-item"),(n=$(this).data("timer"))&&(clearTimeout(n),$(this).data("timer",null))},tolerance:"pointer",drop:function(e,t){$(this).removeClass("tab-accept-item"),i(t.draggable.data("id"),$(this).data("tt-id"))}}))}function y(e){if(g.editMode){var t=(e=e||g.$gridEnum.find(".tree-table-body .collection")).find(".collection-item");try{t.droppable("instance")&&t.droppable("destroy")}catch(e){console.error(e)}t.droppable({accept:".fancytree-type-draggable",over:function(e,t){$(this).addClass("tab-accept-item")},out:function(e,t){$(this).removeClass("tab-accept-item")},tolerance:"pointer",drop:function(e,t){$(this).removeClass("tab-accept-item"),i(t.draggable.data("id"),$(this).data("id"))}})}}function v(e,a){var i=!1,s=g.$gridEnum.find("#tab-enums-dialog-new"),o="",t="",n="",r="",c="",l="",d=!0;if(installFileUpload(s,5e4,function(e,t){if(e)b(e,!0);else{if(!t.match(/^data:image\//))return void b(_("Unsupported image format"),!0);s.find(".tab-enums-dialog-create").removeClass("disabled"),c=t,s.find(".tab-enums-dialog-new-icon").show().html(''),s.find(".tab-enums-dialog-new-icon img").attr("src",t),s.find(".tab-enums-dialog-new-icon-clear").show()}}),d=e?(g.main.objects[e]&&g.main.objects[e].common&&(t=translateName(g.main.objects[e].common.name),c=g.main.objects[e].common.icon,l=g.main.objects[e].common.color),n=o=e,s.find("#tab-enums-dialog-preserve-id").prop("checked",!0),!1):(s.find("#tab-enums-dialog-preserve-id").prop("checked",!1),!0),s.find(".tab-enums-dialog-new-title").text(_(a?"Create new category":n?"Rename":"Create new enum")),n){var u=n.split(".");u.length<=2&&(e=!0),n=u.pop(),a=u.join("."),r=n}s.find("#tab-enums-dialog-new-name").val(t).off("change").on("change",function(){var e=s.find("#tab-enums-dialog-new-id"),t=e.val(),n=$(this).val();n=n.replace(FORBIDDEN_CHARS,"_").replace(/\./g,"_").trim().toLowerCase(),!d||t&&i||(e.val(n),s.find("#tab-enums-dialog-new-preview").val((a||"enum")+"."+(n||"#")),M.updateTextFields("#tab-enums-dialog-new")),e.val()&&!e.val().match(/[.\s]/)?(s.find(".tab-enums-dialog-create").removeClass("disabled"),e.removeClass("wrong")):(s.find(".tab-enums-dialog-create").addClass("disabled"),e.addClass("wrong"))}).off("keyup").on("keyup",function(){$(this).trigger("change")}),s.find("#tab-enums-dialog-new-id").val(n).off("change").on("change",function(){if(!s.find("#tab-enums-dialog-preserve-id").prop("checked")){i=!0;var e=$(this).val();s.find("#tab-enums-dialog-new-preview").val((a||"enum")+"."+($(this).val()||"#")),M.updateTextFields("#tab-enums-dialog-new"),e&&!e.match(/[.\s]/)?(s.find(".tab-enums-dialog-create").removeClass("disabled"),$(this).removeClass("wrong")):(s.find(".tab-enums-dialog-create").addClass("disabled"),$(this).addClass("wrong"))}}).off("keyup").on("keyup",function(){$(this).trigger("change")}),s.find("#tab-enums-dialog-new-id").prop("disabled",!d),s.find(".tab-enums-dialog-create").addClass("disabled").off("click").text(_(o?"Change":"Create")).on("click",function(){var e,t,n,i;o?(s.find("#tab-enums-dialog-preserve-id").prop("checked")?(e="object"==typeof g.main.objects[o].common.name?g.main.objects[o].common.name:{en:o.split(".").pop()})[systemLang]=s.find("#tab-enums-dialog-new-name").val():e=s.find("#tab-enums-dialog-new-name").val(),h(o,a+"."+s.find("#tab-enums-dialog-new-id").val(),{name:e,icon:c,color:l},function(e){e?b(_("Error: %s",e),!0):b(_("Updated"))})):(t=(a||"enum")+"."+s.find("#tab-enums-dialog-new-id").val(),n={name:s.find("#tab-enums-dialog-new-name").val(),icon:c,color:l},i=function(e){e?b(_("Error: %s",e),!0,5e3):b(_("Updated"))},g.main.objects[t]?b(_("Name yet exists!"),!0):g.main.socket.emit("setObject",t,{_id:t,common:{name:n.name,members:[],icon:n.icon,color:n.color},type:"enum"},i))}),s.find("#tab-enums-dialog-new-preview").val((a||"enum")+"."+(n||"#")),c?(s.find(".tab-enums-dialog-new-icon").show().html(g.main.getIcon(o)),s.find(".tab-enums-dialog-new-icon-clear").show()):(s.find(".tab-enums-dialog-new-icon").hide(),s.find(".tab-enums-dialog-new-icon-clear").hide()),(l=l||!1)?s.find(".tab-enums-dialog-new-color").val(l):s.find(".tab-enums-dialog-new-color").val(),M.updateTextFields("#tab-enums-dialog-new"),g.main.showToast(s,_("Drop the icons here")),s.find(".tab-enums-dialog-new-upload").off("click").on("click",function(){s.find(".drop-file").trigger("click")}),s.find(".tab-enums-dialog-new-icon-clear").off("click").on("click",function(){c&&(c="",s.find(".tab-enums-dialog-new-icon").hide(),s.find(".tab-enums-dialog-create").removeClass("disabled"),s.find(".tab-enums-dialog-new-icon-clear").hide())}),s.find(".tab-enums-dialog-new-color-clear").off("click").on("click",function(){l&&(s.find(".tab-enums-dialog-create").removeClass("disabled"),s.find(".tab-enums-dialog-new-color-clear").hide(),s.find(".tab-enums-dialog-new-colorpicker").colorpicker({component:".btn",color:l,container:s.find(".tab-enums-dialog-new-colorpicker")}).colorpicker("setValue",""),l="")});var m=Date.now();try{s.find(".tab-enums-dialog-new-colorpicker").colorpicker("destroy")}catch(e){}s.find(".tab-enums-dialog-new-colorpicker").colorpicker({component:".btn",color:l,container:s.find(".tab-enums-dialog-new-colorpicker")}).colorpicker("setValue",l).on("showPicker.colorpicker",function(){var e=s.find(".modal-content");e[0].scrollTop=e[0].scrollHeight}).on("changeColor.colorpicker",function(e){100tr.treetable-enum");i.droppable("instance")&&i.droppable("destroy")}catch(e){console.error(e)}t.removeClass("red").addClass("blue"),g.$gridEnum.removeClass("tab-enums-edit")}}this.prepare=function(){this.isTiles=void 0===this.main.config.enumIsTiles||null===this.main.config.enumIsTiles||this.main.config.enumIsTiles},this._initObjectTree=function(){var e={objects:t.objects,noDialog:!0,draggable:["device","channel","state"],name:"enum-objects",expertModeRegEx:/^system\.|^yunkong2\.|^_|^[\w-]+$|^enum\.|^[\w-]+\.admin|^script\./,texts:{select:_("Select"),cancel:_("Cancel"),all:_("All"),id:_("ID"),ID:_("ID"),name:_("Name"),role:_("Role"),room:_("Room"),function:_("Function"),value:_("Value"),type:_("Type"),selectid:_("Select ID"),from:_("From"),lc:_("Last changed"),ts:_("Time stamp"),wait:_("Processing..."),ack:_("Acknowledged"),edit:_("Edit"),push:_("Trigger event"),ok:_("Ok"),with:_("With"),without:_("Without"),copyToClipboard:_("Copy to clipboard"),expertMode:_("Toggle expert mode"),refresh:_("Update"),sort:_("Sort alphabetically"),button:_("Settings"),noData:_("No data")},filter:{type:"state"},columns:["ID","name","type","role"]};o("init",e).selectId("show"),function(){var e=g.$gridEnum.find(".fancytree-container>tbody");try{e.sortable("instance")&&e.sortable("destroy")}catch(e){console.error(e)}g.$gridEnum.find(".fancytree-container>tbody").sortable({connectWith:"#tab-enums .tab-enums-list .tree-table-main.treetable",items:".fancytree-type-draggable",appendTo:g.$gridEnum,refreshPositions:!0,helper:function(e,t){return $('
                      '+t.find(".fancytree-title").text()+"
                      ")},zIndex:999990,revert:!1,scroll:!1,start:function(e,t){var n=t.item.prev();t.item.data("prev",n),g.$gridEnum.addClass("dragging")},stop:function(e,t){g.$gridEnum.removeClass("dragging")},update:function(e,t){var n=t.item.data("prev");n&&n.length?$(n).after(t.item):$(this).prepend(t.item)}}).disableSelection()}()},this._postInit=function(){void 0!==this.$gridList&&(this.main.objects["enum.rooms"]||(this.main.objects["enum.rooms"]={_id:"enum.rooms",common:{icon:"home",name:{en:"Rooms",cn:"场景"},desc:{en:"List of the rooms"},members:[],dontDelete:!0},type:"enum",acl:{owner:"system.user.admin",ownerGroup:"system.group.administrator",permissions:1911}},g.main.socket.emit("setObject","enum.rooms",this.main.objects["enum.rooms"]),this.list.unshift("enum.rooms")),this.main.objects["enum.functions"]||(this.main.objects["enum.functions"]={_id:"enum.functions",common:{icon:"lightbulb_outline",name:{en:"Functions",cn:"功能"},desc:{en:"List of the functions"},members:[],dontDelete:!0},type:"enum",acl:{owner:"system.user.admin",ownerGroup:"system.group.administrator",permissions:1911}},this.list.unshift("enum.functions"),g.main.socket.emit("setObject","enum.functions",this.main.objects["enum.functions"])),this.isTiles?n():c(),this.editMode?this._initObjectTree():o("destroy"))},this.init=function(e){this.inited&&!e||(this.main&&this.main.objectsLoaded?(this._postInit(),this.inited||(this.inited=!0,this.main.subscribeObjects("enum.*"))):setTimeout(function(){g.init(e)},250))},this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("enum.*")),w(!1),this.$gridList.treeTable("destroy")},this.objectChange=function(e,t,n){if(e.match(/^enum\./)){if(t)-1===this.list.indexOf(e)&&this.list.push(e);else{var i=this.list.indexOf(e);-1!==i&&this.list.splice(i,1)}this.updateTimers&&clearTimeout(this.updateTimers),this.updateTimers=setTimeout(function(){g.updateTimers=null,g._postInit()},200)}this.$grid&&o("object",e,t,n)}}function Events(g){var h=this;this.main=g,this.$tab=$("#tab-events");var e,f,p,t,b,M="yunkong2.net"===location.hostname||"yunkong2.pro"===location.hostname,y={count:0,start:0,limit:500},n=null,v={list:[],mode:!1,counter:0,overflow:!1,$counterSpan:null},w={done:!1,timer:null};this.prepare=function(){t=this.$tab.find("#event-outer"),p=this.$tab.find("#event-table"),b=this.$tab.find("#event-pause"),e=this.$tab.find("#events-table-tr"),(f=new IobListHeader(e,{list:t,colWidthOffset:1,prefix:"event-filter"})).doFilter=i,f.add("combobox","type"),f.add("edit","id","ID"),f.add("edit","val","value"),f.add("combobox","ack","ack",[{val:"",name:"all"},{val:"true",name:"ack"},{val:"false",name:"not ack"}]),f.add("combobox","from","from"),f.add("text","ts"),f.add("text","lc"),Object.defineProperty(f,"getValues",{value:function(){f.ID.selectedVal=f.ID.selectedVal.toLocaleLowerCase(),"true"===f.ack.selectedVal&&(f.ack.selectedVal=!0),"false"===f.ack.selectedVal&&(f.ack.selectedVal=!1)},enumerateble:!1}),b.on("click",function(){h.pause()}),this.$tab.find("#event-clear").off("click").on("click",function(){y.count=0,y.start=0,h.$tab.find("#event-table").html("")})},this.init=function(){M?h.$tab.find("#grid-events").html(_("You can't see events via cloud")+'
                      cloud_off').addClass("no-cloud-events"):f&&(this.inited||(!function e(){if(!$.fn.colResizable)return;t.is(":visible")?(t.colResizable({liveDrag:!0,partialRefresh:!0,marginLeft:5,postbackSafe:!0,onResize:function(e){return f.syncHeader()}}),f.syncHeader()):setTimeout(function(){e()},200)}(),this.inited=!0,this.main.subscribeObjects("*"),this.main.subscribeStates("*")))};var j=!(this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("*"),this.main.unsubscribeStates("*"))});function L(){w.timer=null,$(window).trigger("resize.JColResizer")}function i(){n&&(clearTimeout(n),n=null),f.getValues&&f.getValues(),p&&p.find(".event-line").each(function(e){var t=!0,n=$(this);f.type.selectedVal&&!n.hasClass("event-type-"+f.type.selectedVal)?t=!1:f.from.selectedVal&&!n.hasClass("event-from-"+f.from.selectedVal)?t=!1:""===f.ack.selectedVal||n.hasClass("event-ack-"+f.ack.selectedVal)?f.ID.selectedVal&&-1===$(this).find("td.event-column-id").text().toLocaleLowerCase().indexOf(f.ID.selectedVal)?t=!1:""!==f.value.selectedVal&&-1===$(this).find("td.event-column-value").text().indexOf(f.value.selectedVal)&&(t=!1):t=!1,t?n.show():n.hide()})}this.add=function(e,t,n,i){if(!M){var a,s,o,r,c=i?"stateChange":n?"message":"objChange",l="";if(f&&(f.getValues&&f.getValues(),f.type.checkAddOption(c)),w.done||(w.timer||(w.timer=setTimeout(L,1e3)),20=h.limit){y.start++;var d=document.getElementById("event_"+y.start);d&&(d.outerHTML="")}else y.count++;n||i?i&&(t?(t.from=t.from||"",t.from=t.from.replace("system.adapter.",""),t.from=t.from.replace("system.",""),f&&f.from.checkAddOption(t.from,function(e){return{val:e.replace(/\./g,"-"),name:e}}),l=t.from,void 0!==(a=JSON.stringify(t.val))&&30'+a.substring(0,30)+"..."),s=t.ack?"true":"false",o=g.formatDate(t.ts),r=g.formatDate(t.lc)):(a="deleted",o=g.formatDate(new Date))):o=t?(void 0!==(a=JSON.stringify(t,"\n",2))&&30'+a.substring(0,30)+"..."),g.formatDate(t.ts)):(a="deleted",g.formatDate(new Date));var u=!0;f&&(f.type.selectedVal&&f.type.selectedVal!==c?u=!1:f.ID.selectedVal&&-1===e.toLocaleLowerCase().indexOf(f.ID.selectedVal)?u=!1:""!==f.value.selectedVal&&null!=a&&-1===a.indexOf(f.value.selectedVal)?u=!1:""!==f.ack.selectedVal&&f.ack.selectedVal!==s?u=!1:f.from.selectedVal&&f.from.selectedVal!==l&&(u=!1));var m='';m+=""+c+"",m+=''+e+"",isNaN(a)?m+=''+(a||"")+"":m+=''+(a||"")+"",m+=""+(s||"")+"",m+=""+(l||"")+"",m+=""+(o||"")+"",m+=""+(r||"")+"",m+="",v.mode?(v.list.push(m),v.counter++,v.counter>y.limit&&(v.overflow||(b.addClass("red lighten3").attr("title",_("Message buffer overflow. Losing oldest")),v.overflow=!0),v.list.shift()),v.$counterSpan.html(v.counter)):p&&(p.prepend(m),j||"#tab-events"!==window.location.hash&&"#events"!==window.location.hash||(f&&f.syncHeader(),j=!0))}},this.pause=function(){if(v.mode){v.mode=!1;for(var e=0;epause')}else b.addClass("yellow btn-pause-button-active"),v.$counterSpan=b,v.$counterSpan.html("0"),v.counter=0,v.mode=!0}}function fileHandler(e){e.preventDefault();var t=e.dataTransfer?e.dataTransfer.files[0]:e.target.files[0],n=$(this).find(".drop-zone"),i=$(this).data("drop-zone-cb"),a=$(this).data("limit");if(t.size>(a||1e4))return i&&i(_("File is too big!")),n.hide(),!1;n.show();var s=new FileReader;s.onload=function(e){n.hide(),i&&i(null,e.target.result)},s.readAsDataURL(t)}function installFileUpload(e,t,n){if(void 0!==window.FileReader&&!e.data("installed")){e.data("installed",!0),e.prepend('');var i=e.find(".drop-zone");e[0].ondragover=function(){return i.off("click"),i.show(),!1},i[0].ondragleave=function(){return i.hide(),!1},i[0].ondrop=fileHandler.bind(e[0])}e.data("drop-zone-cb",n),e.data("limit",t),e.find(".drop-file").on("change",fileHandler.bind(e[0]))}function Hosts(s){var r=this;function n(e){var t=$("#dialog-host-update");if(e){var n=e.path,i=(n=n.replace(/\\/g,"/")).split("/");i.pop(),i.pop(),"linux"===e.platform||"darwin"===e.platform||"freebsd"===e.platform||"lin"===e.platform?t.find("#dialog-host-update-instructions").val("cd "+i.join("/")+"\nsudo yunkong2 stop\nsudo yunkong2 update\nsudo yunkong2 upgrade self\nsudo yunkong2 start"):t.find("#dialog-host-update-instructions").val("cd "+i.join("\\")+"\nyunkong2 stop\nyunkong2 update\nyunkong2 upgrade self\nyunkong2 start")}else t.find("#dialog-host-update-instructions").val("cd /opt/yunkong2\nsudo yunkong2 stop\nsudo yunkong2 update\nsudo yunkong2 upgrade self\nsudo yunkong2 start");t.data("inited")||(t.data("inited",!0),t.modal()),t.modal("open")}function i(e){if(e=(e||"").toLowerCase().trim()){var t=!1;r.$tab.find(".hosts-host").each(function(){-1!==$(this).data("host-filter").toLowerCase().indexOf(e)?($(this).show(),t=!0):$(this).hide()}),t?r.$tab.find(".hosts-host-filtered-out").hide():r.$tab.find(".hosts-host-filtered-out").show()}else r.$tab.find(".hosts-host").show(),r.$tab.find(".hosts-host-filtered-out").hide()}function a(e){var t=r.main.objects[r.list[e].id],n=r.main.states[t._id+".alive"]&&r.main.states[t._id+".alive"].val&&"null"!==r.main.states[t._id+".alive"].val;t.common=t.common||{},t.native=t.native||{};var i='';i+='
                      ',i+=''+r.main.getHostIcon(t)+"",i+=''+t.common.hostname+"",i+=''+t.common.type+"";var a=t.common.titleLang||t.common.title;return"object"==typeof a&&(a=a[systemLang]||a.en),i+=''+a+"",i+=''+(t.native.os?t.native.os.platform:_("unknown"))+"",i+='',i+=''+t.common.installedVersion+"",r.main.states[t._id+".inputCount"]?i+='⇥'+r.main.states[t._id+".inputCount"].val+' / ↦'+r.main.states[t._id+".outputCount"].val+"":i+=' / ',i+='',i+=""}function o(e){var t,n=r.main.objects[r.list[e].id],i=r.main.states[n._id+".alive"]&&r.main.states[n._id+".alive"].val&&"null"!==r.main.states[n._id+".alive"].val;n.common=n.common||{},n.native=n.native||{},n.common.color&&(t=r.main.invertColor(n.common.color));var a='
                      '+r.main.getHostIcon(n," ")+'
                      '+n.common.hostname+'
                      • '+r.words.Type+': '+n.common.type+'
                      • '+r.words.Title+': '+n.common.title+'
                      • '+r.words.OS+': '+(n.native.os?n.native.os.platform:_("unknown"))+'
                      • '+r.words.Available+':
                      • '+r.words.Installed+': '+n.common.installedVersion+"
                      • ";return r.main.states[n._id+".inputCount"]?a+='
                      • '+r.words.Events+': ⇥'+r.main.states[n._id+".inputCount"].val+' / ↦'+r.main.states[n._id+".outputCount"].val+"
                      • ":a+='
                      • '+r.words.Events+': /
                      • ',a+='
                      edit autorenew',n.common.hostname!==r.main.currentHost&&(a+=' delete'),a+='
                      '}this.main=s,this.list=[],this.$tab=$("#tab-hosts"),this.$grid=this.$tab.find("#hosts"),this.$table=this.$tab.find("#grid-hosts"),this.inited=!1,this.isTiles=!0,this.words={},this.prepare=function(){this.isTiles=void 0===this.main.config.hostsIsTiles||null===this.main.config.hostsIsTiles||this.main.config.hostsIsTiles,"ie"===this.main.browser&&this.main.browserVersion<=10&&(this.isTiles=!1,this.$tab.find(".btn-switch-tiles").hide()),this.$tab.find(".btn-reload").attr("title",_("Update")).on("click",function(){r.init(!0)}),this.$tab.find(".btn-switch-tiles").off("click").on("click",function(){r.isTiles=!r.isTiles,r.isTiles?$(this).find("i").text("view_list"):$(this).find("i").text("view_module"),r.main.saveConfig("hostsIsTiles",r.isTiles),setTimeout(function(){r._postInit()},50)}),this.isTiles?this.$tab.find(".btn-switch-tiles").find("i").text("view_list"):this.$tab.find(".btn-switch-tiles").find("i").text("view_module"),this.$tab.find(".filter-clear").on("click",function(){r.$tab.find(".filter-input").val("").trigger("change")});var e=this.$tab.find(".filter-input");e.on("change",function(){var e=$(this).val();e?($(this).addClass("input-not-empty"),r.$tab.find(".filter-clear").show()):(r.$tab.find(".filter-clear").hide(),$(this).removeClass("input-not-empty")),r.main.saveConfig("hostsFilter",e),i(e)}).on("keyup",function(){r.filterTimeout&&clearTimeout(r.filterTimeout),r.filterTimeout=setTimeout(function(){r.$tab.find(".filter-input").trigger("change")},300)}),this.main.config.hostsFilter&&"{"!==this.main.config.hostsFilter[0]?(e.val(r.main.config.hostsFilter).addClass("input-not-empty"),this.$tab.find(".filter-clear").show()):this.$tab.find(".filter-clear").hide(),this.words.Title=_("Title"),this.words.OS=_("OS"),this.words.Available=_("Available"),this.words.Installed=_("Installed"),this.words.Events=_("Events"),this.words.Title=_("Title"),r.words.Type=_("Type")},this.initButtons=function(e){var t=e?'[data-host-id="'+e+'"]':"";this.$tab.find(".host-update-submit"+t).off("click").on("click",function(){r.main.cmdExec($(this).attr("data-host-name"),"upgrade self",function(e){e||r.init(!0)})}),this.$tab.find(".host-restart-submit"+t).off("click").on("click",function(){r.main.waitForRestart=!0,r.main.cmdExec($(this).attr("data-host-name"),"_restart")}),this.$tab.find(".host-delete"+t).off("click").on("click",function(){r.main.cmdExec(r.main.currentHost,"host remove "+$(this).attr("data-host-name"))}),this.$tab.find(".host-edit"+t).off("click").on("click",function(){!function(t){var n=$("#tab-host-dialog-edit"),e="",i="",a="";installFileUpload(n,5e4,function(e,t){if(e)r.main.showToast(n,e);else{if(!t.match(/^data:image\//))return void r.main.showToast(n,_("Unsupported image format"));n.find(".tab-host-dialog-ok").removeClass("disabled"),i=t,n.find(".tab-host-dialog-edit-icon").show().html(''),n.find(".tab-host-dialog-edit-icon img").attr("src",t),n.find(".tab-host-dialog-edit-icon-clear").show()}}),r.main.objects[t]&&r.main.objects[t].common&&("object"==typeof(e=r.main.objects[t].common.title)&&(e=e[systemLang]||e.en),i=r.main.objects[t].common.icon,a=r.main.objects[t].common.color);n.find("#tab-host-dialog-edit-title").val(e).off("change").on("change",function(){n.find(".tab-host-dialog-ok").removeClass("disabled")}).off("keyup").on("keyup",function(){$(this).trigger("change")}),n.find(".tab-host-dialog-ok").addClass("disabled").off("click").on("click",function(){var e=JSON.parse(JSON.stringify(r.main.objects[t]));e.common.title=n.find("#tab-host-dialog-edit-title").val(),e.common.icon=i,e.common.color=a,JSON.stringify(e)!==JSON.stringify(r.main.objects[t])?r.main.socket.emit("setObject",e._id,e,function(e){r.main.showToast(n,_("Updated"))}):r.main.showToast(n,_("Nothing changed"))}),i?(n.find(".tab-host-dialog-edit-icon").show().html(r.main.getIcon(t)),n.find(".tab-host-dialog-edit-icon-clear").show()):(n.find(".tab-host-dialog-edit-icon").hide(),n.find(".tab-host-dialog-edit-icon-clear").hide());(a=a||!1)?n.find(".tab-host-dialog-edit-color").val(a):n.find(".tab-host-dialog-edit-color").val();M.updateTextFields("#tab-host-dialog-edit"),r.main.showToast(n,_("Drop the icons here")),n.find(".tab-host-dialog-edit-upload").off("click").on("click",function(){n.find(".drop-file").trigger("click")}),n.find(".tab-host-dialog-edit-icon-clear").off("click").on("click",function(){i&&(i="",n.find(".tab-host-dialog-edit-icon").hide(),n.find(".tab-host-dialog-ok").removeClass("disabled"),n.find(".tab-host-dialog-edit-icon-clear").hide())}),n.find(".tab-host-dialog-edit-color-clear").off("click").on("click",function(){a&&(n.find(".tab-host-dialog-ok").removeClass("disabled"),n.find(".tab-host-dialog-edit-color-clear").hide(),n.find(".tab-host-dialog-edit-colorpicker").colorpicker({component:".btn",color:a,container:n.find(".tab-host-dialog-edit-colorpicker")}).colorpicker("setValue",""),a="")});var s=Date.now();try{n.find(".tab-host-dialog-edit-colorpicker").colorpicker("destroy")}catch(e){}n.find(".tab-host-dialog-edit-colorpicker").colorpicker({component:".btn",color:a,container:n.find(".tab-host-dialog-edit-colorpicker")}).colorpicker("setValue",a).on("showPicker.colorpicker",function(){var e=n.find(".modal-content");e[0].scrollTop=e[0].scrollHeight}).on("changeColor.colorpicker",function(e){100'+e+"").appendTo('.admin-sidemenu-items[data-tab="tab-hosts"] a')}else $("#updates-for-hosts").remove()},this._postInit=function(){if(void 0!==r.$grid){this.isTiles?function(){for(var e="",t=0;t
                      '+_("Filtered out")+"
                      ")}():function(){for(var e="",t=0;t'+_("Filtered out")+"")}(),i(this.$tab.find(".filter-input").val());var s=setTimeout(function(){console.warn("Timeout for repository"),s=null,r.initButtons()},2e3),e=r.main.currentHost;if(!e)for(var t=0;t↦'+t.val+"")):e.match(/^system\.host\..+\.inputCount$/)&&(e=e.substring(0,e.length-11),this.$tab.find('.host-in[data-host-id="'+e+'"]').html('↦'+t.val+""))}}function Instances(i){var p=this;function b(e,t,n,i,a){if("protocol"===n&&(n="secure"),"ip"===e)i=i.replace("%"+e+"%",location.hostname);else if("instance"===e)i=i.replace("%"+e+"%",a);else if(t){n.match(/^native_/)&&(n=n.substring(7));var s=t.native[n];"bind"!==e||s&&"0.0.0.0"!==s||(s=location.hostname),i="secure"===n?i.replace("%"+e+"%",s?"https":"http"):-1===i.indexOf("%"+e+"%")?i.replace("%native_"+e+"%",s):i.replace("%"+e+"%",s)}else i="secure"===n?i.replace("%"+e+"%","http"):-1===i.indexOf("%"+e+"%")?i.replace("%native_"+e+"%",""):i.replace("%"+e+"%","");return i}function o(e,t,n){var i,a,s,o=e.match(/%(\w+)%/g);if(o){for(a=o.length-1;0<=a;a--)s=(i=(i=o[a]).replace(/%/g,"")).split("_"),i.match(/^native_/)?(e=b(i,p.main.objects["system.adapter."+t+"."+n],i,e,n),o.splice(a,1)):1===s.length?(e=b(i,p.main.objects["system.adapter."+t+"."+n],s[0],e,n),o.splice(a,1)):s[0].match(/\.[0-9]+$/)&&(e=b(i,p.main.objects["system.adapter."+s[0]],s[1],e,n),o.splice(a,1));var r,c,l={},d=s[0];for(a=0;a',r+=''+_("Connected to host: ")+'',p.main.states[e+".connected"]&&p.main.states[e+".connected"].val?r+=''+_("true")+"":r+=_("false"),r+='',r+=''+_("Heartbeat: ")+'',p.main.states[e+".alive"]&&p.main.states[e+".alive"].val?r+=''+_("true")+"":r+=_("false"),r+="",p.main.states[n+"."+i+".info.connection"]||p.main.objects[n+"."+i+".info.connection"])r+=''+_("Connected to %s: ",n)+"",r+=(c=!!p.main.states[n+"."+i+".info.connection"]&&p.main.states[n+"."+i+".info.connection"].val)?!0===c?''+_("true")+"":''+c+"":_("false"),r+="";r+=""}else{var c;if(r='',r+='",p.main.states[n+"."+i+".info.connection"]||p.main.objects[n+"."+i+".info.connection"])r+='";r+="
                      '+_("Connected to host: ")+'',p.main.states[e+".connected"]&&p.main.states[e+".connected"].val?r+=''+_("true")+"":(r+="daemon"===s.mode?''+_("false")+"":_("false"),o="daemon"===s.mode?"red":"blue"),r+='
                      '+_("Heartbeat: ")+'',p.main.states[e+".alive"]&&p.main.states[e+".alive"].val?r+=''+_("true")+"":(r+="daemon"===s.mode?''+_("false")+"":_("false"),o="daemon"===s.mode?"red":"blue"),r+="
                      '+_("Connected to %s: ",n)+"",(c=!!p.main.states[n+"."+i+".info.connection"]&&p.main.states[n+"."+i+".info.connection"].val)?r+=!0===c?''+_("true")+"":''+c+"":(o="red"===o?"red":"orange",r+=''+_("false")+""),r+="
                      "}o="blue"===o?"":o,a.removeClass("led-red led-green led-orange led-blue").addClass("led-"+o).data("title",r),a.data("inited")||"gray"===o||(a.data("inited",!0),a.hover(function(){var e='
                      '+$(this).data("title")+"
                      ",t=$(e);t.insertAfter($(this)),$(this).data("big",t[0]);var n=parseFloat(t.height()),i=Math.round($(this).position().top-(n-parseFloat($(this).height()))/2);n+i>(window.innerHeight||document.documentElement.clientHeight)&&(i=(window.innerHeight||document.documentElement.clientHeight)-n),i<0&&(i=0),t.css({top:i}).on("click",function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)})},function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)}).on("click",function(){$(this).trigger("hover")}))}function r(){for(var e=p.main.states["system.host."+p.main.currentHost+".memRss"],t=1,n=e?e.val:0,i=0;i'+n+"");var r=_("%s processes",t),c=p.$tab.find("#running_processes");r!==c.text()&&c.html(''+r+"")}function c(){p.main.states["system.host."+p.main.currentHost+".memAvailable"]?p.memState="memAvailable":p.main.states["system.host."+p.main.currentHost+".freemem"]&&(p.memState="freemem");var e=p.main.states["system.host."+p.main.currentHost+"."+p.memState];if(e){p.totalmem=p.totalmem||p.main.objects["system.host."+p.main.currentHost].native.hardware.totalmem/1048576;var t=Math.round(e.val/p.totalmem*100),n=p.$tab.find("#freeMem"),i=tdp(e.val);i!==n.text()&&(n.html(''+i+""),p.$tab.find("#freeMemPercent").html(''+t+"%"))}else p.$tab.find(".free-mem-label").hide()}function l(){var e=p.main.states["system.host."+p.main.currentHost+".diskSize"],t=p.main.states["system.host."+p.main.currentHost+".diskFree"],n=p.main.states["system.host."+p.main.currentHost+".diskWarning"];if(t&&t.val&&e&&e.val){n=n?parseFloat(n.val):5;var i=p.$tab.find("#diskFree"),a=Math.round(t.val/e.val*1e3)/10;i.html(''+a+""),i.parent().attr("title",_("Size: %s, Free: %s",p.main.formatBytes(1024*e.val*1024),p.main.formatBytes(1024*t.val*1024)))}else p.$tab.find(".tab-instances-info-disk").hide()}function M(e){var t,n=p.main.objects[e]&&p.main.objects[e].common||{};return t=n.enabled&&"daemon"===n.mode&&p.main.states[e+".memRss"]?(t=p.main.states[e+".memRss"].val,t=parseFloat(t)||0,n.memoryLimitMB&&n.memoryLimitMB<=t?''+t.toFixed(1)+" MB":t.toFixed(1)+" MB"):""}function d(e,t,n,i){var a,s=p.main.objects[t]&&p.main.objects[t].common||{},o=t.split("."),r=o[2],c=o[3];if("tile"===n)a=i?"":'
                      ',a+=i?"":"
                      ";else{a=i?"":'';var l=s.localLinks||s.localLink||"",d=l?p.replaceInLink(l,r,c):"";l&&(l="object"==typeof d?'':''),a+='
                      ',a+=""+(s.icon?l+'':"")+(l?"
                      ":"")+"",a+=''+r+"."+c+"";var u=s.onlyWWW||s.enabled;a+='',a+=''+(d?'':"")+"";var m=s.titleLang||s.title;if("object"==typeof m&&(m=m[systemLang]||m.en),a+=''+(m||"")+"",1'+(s.host||"")+""}a+=''+("schedule"===s.mode&&s.schedule||"")+"",p.main.config.expertMode&&(a+=''+(s.restartSchedule||"")+"",a+=''+(s.loglevel||"")+"",a+=''+(s.memoryLimitMB||"")+"",u&&p.main.states[t+".inputCount"]&&p.main.states[t+".outputCount"]?a+='⇥'+p.main.states[t+".inputCount"].val+' / ↦'+p.main.states[t+".outputCount"].val+"":a+=' / '),a+=''+M(t)+"",a+=i?"":""}i?p.$tab.find('.instance-adapter[data-instance-id="'+t+'"]').html(a):e.append(a),p.initButtons(t,d),f(t),p.$tab.find('.instance-editable[data-instance-id="'+t+'"]').on("click",y).addClass("select-id-quick-edit"),p.$tab.find('.instance-schedule[data-instance-id="'+t+'"]').each(function(){$(this).find("button").length||($(this).append(''),$(this).find("button").on("click",function(){var n=$(this).data("name"),i=$(this).data("instance-id");!function(e,t){e=(e||"").replace(/"/g,"").replace(/'/g,"");try{setupCron(e,t)}catch(e){alert(_("Cannot parse value as cron"))}}(p.main.objects[i].common[n]||"",function(e){if(null!==e){var t={common:{}};t.common[n]=e,p.main.socket.emit("extendObject",i,t,function(e){e&&p.main.showError(e)})}})}))}),p.$tab.find('.instance-name[data-instance-id="'+t+'"]').on("click",function(){var e=p.$tab.find('.instance-settings[data-instance-id="'+$(this).data("instance-id")+'"]');e.hasClass("small-button-empty")||e.trigger("click")}).css("cursor","pointer")}function u(e){void 0===e&&(e=p.$tab.find(".instances-filter").val());var t=[];if(e)for(var n=new RegExp(e),i=0;i';for(var u=0;u'+(m[1]||m[0])+""}c+=""}c=c||'';var g=null;t.html(c+'
                      ');var h=n?t.find("select"):t.find("input");t.find(".select-id-quick-edit-cancel").off("click").on("click",function(e){g&&clearTimeout(g),g=null,e.preventDefault(),e.stopPropagation(),t.html(o).off("click").on("click",y).addClass("select-id-quick-edit").css("text-align",r)}),t.find(".select-id-quick-edit-ok").off("click").on("click",function(){t.trigger("blur")}),h.val(s),h.blur(function(){g&&clearTimeout(g),g=setTimeout(function(){g=null;var n=$(this).val();s=JSON.stringify(n)!==JSON.stringify(s)?(p.main.socket.emit("getObject",i,function(e,t){t?(t.common=t.common||{},t.common[a]=n,"title"===a&&t.common.titleLang&&delete t.common.titleLang,p.main.socket.emit("setObject",t._id,t,function(e){e&&p.main.showError(e)})):console.log("Object "+i+" does not exist: "+e)}),''+s+""):o,t.html(s).off("click").on("click",y).addClass("select-id-quick-edit").css("text-align",r)}.bind(this),100)}).on("keyup",function(e){13===e.which&&$(this).trigger("blur"),27===e.which&&(void 0===s&&(s=""),t.html(s).off("click").on("click",y).addClass("select-id-quick-edit").css("text-align",r))}),"object"==typeof e&&(e.preventDefault(),e.stopPropagation()),setTimeout(function(){h.focus()},100)}this.$tab=$("#tab-instances"),this.$grid=$("#grid-instances"),this.$gridHead=$("#grid-instances-head"),this.inited=!1,this.main=i,this.list=[],this.hostsText=null,this.filterHost=!1,this.memState="memAvailable",window.tdp||(window.tdp=function(e,t){return isNaN(e)?"":e.toFixed(t||0).replace(".",",").replace(/\B(?=(\d{3})+(?!\d))/g,".")}),this.replaceInLink=function(e,t,n){if("object"!=typeof e)return o(e,t,n);var i,a=JSON.parse(JSON.stringify(e));for(var s in a)a.hasOwnProperty(s)&&(a[s]=o(a[s],t,n),i||(i=a[s]));return a.__first=i,a},this.prepare=function(){var e=p.$tab.find(".instances-filter"),t=p.$tab.find(".instances-filter-clear");e.on("change",function(){var e=$(this).val();e?($(this).addClass("input-not-empty"),t.show()):($(this).removeClass("input-not-empty"),t.hide()),p.main.saveConfig("instancesFilter",e),u(e)}).on("keyup",function(){p.filterTimeout&&clearTimeout(p.filterTimeout),p.filterTimeout=setTimeout(function(){e.trigger("change")},300)}),p.main.config.instancesFilter&&"{"!==p.main.config.instancesFilter[0]?(e.addClass("input-not-empty").val(p.main.config.instancesFilter),t.show()):t.hide(),p.$tab.find(".btn-instances-expert-mode").on("click",function(){p.main.config.expertMode=!p.main.config.expertMode,p.main.saveConfig("expertMode",p.main.config.expertMode),p.updateExpertMode(),p.main.tabs.adapters.updateExpertMode()}),p.main.config.expertMode&&p.$tab.find(".btn-instances-expert-mode").addClass("red lighten-3"),p.$tab.find(".btn-instances-reload").on("click",function(){p.init(!0,!0)}),t.on("click",function(){e.val("").trigger("change")}),this.$tab.find(".btn-instances-host").off("click").on("click",function(){p.filterHost=!p.filterHost,p.filterHost?p.$tab.find(".btn-instances-host").addClass("red lighten-3"):p.$tab.find(".btn-instances-host").removeClass("red lighten-3"),p.main.saveConfig("instancesFilterHost",p.filterHost),setTimeout(function(){u()},50)}),this.filterHost=this.main.config.instancesFilterHost||!1,this.filterHost?this.$tab.find(".btn-instances-host").addClass("red lighten-3"):this.$tab.find(".btn-instances-host").removeClass("red lighten-3")},this.updateExpertMode=function(){p.init(!0),p.main.config.expertMode?p.$tab.find(".btn-instances-expert-mode").addClass("red lighten-3"):p.$tab.find(".btn-instances-expert-mode").removeClass("red lighten-3")},this.replaceLink=function(n,i,a,s){var o;(n=n.replace(/%/g,"")).match(/^native_/)&&(n=n.substring(7)),-1===n.indexOf("_")?o=[i+"."+a,n]:(o=n.split("_"))[0].match(/\.[0-9]+$/)||(o[0]+=".0"),"protocol"===o[1]&&(o[1]="secure"),"instance"!==n?this.main.socket.emit("getObject","system.adapter."+o[0],function(e,t){t&&setTimeout(function(){var e;(e=s?p.$tab.find("#"+s).data("src"):p.$tab.find("#a_"+i+"_"+a).attr("href"))&&(e="secure"===o[1]?e.replace("%"+n+"%",t.native[o[1]]?"https":"http"):-1===e.indexOf("%"+n+"%")?e.replace("%native_"+n+"%",t.native[o[1]]):e.replace("%"+n+"%",t.native[o[1]]),s?p.$tab.find("#"+s).data("src",e):p.$tab.find("#a_"+i+"_"+a).attr("href",e))},0)}):setTimeout(function(){var e;e=(e=s?p.$tab.find("#"+s).data("src"):p.$tab.find("#a_"+i+"_"+a).attr("href")).replace("%instance%",a),s?p.$tab.find("#"+s).data("src",e):p.$tab.find("#a_"+i+"_"+a).attr("href",e)},0)},this._replaceLink=function(n,i,a,s,o){var r;(i=i.replace(/%/g,"")).match(/^native_/)&&(i=i.substring(7)),-1===i.indexOf("_")?r=[a+"."+s,i]:(r=i.split("_"))[0].match(/\.[0-9]+$/)||(r[0]+=".0"),"protocol"===r[1]&&(r[1]="secure"),this.main.socket.emit("getObject","system.adapter."+r[0],function(e,t){n=t&&n?"secure"===r[1]?n.replace("%"+i+"%",t.native[r[1]]?"https":"http"):-1===n.indexOf("%"+i+"%")?n.replace("%native_"+i+"%",t.native[r[1]]):n.replace("%"+i+"%",t.native[r[1]]):(console.log("Cannot get link "+r[1]),n.replace("%"+i+"%","")),setTimeout(function(){o(n,a,s)},0)})},this._replaceLinks=function(e,t,n,i,a){if(!e)return a(e,t,n,i);var s=e.match(/%(\w+)%/g);return s?"%ip%"===s[0]?(e=e.replace("%ip%",location.hostname),void this._replaceLinks(e,t,n,i,a)):"%instance%"===s[0]?(e=e.replace("%instance%",n),void this._replaceLinks(e,t,n,i,a)):void this._replaceLink(e,s[0],t,n,function(e,t,n){this._replaceLinks(e,t,n,i,a)}.bind(this)):a(e,t,n,i)},this._postInit=function(e,t){if(this.main.currentHost&&void 0!==this.$grid&&(!this.$grid.data("inited")||e)){this.$grid.data("inited",!0),this.list.sort();for(var n=[],i=this.list.length-1;0<=i;i--)this.main.objects[this.list[i]]&&this.main.objects[this.list[i]].common&&!this.main.objects[this.list[i]].common.localLink&&!this.main.objects[this.list[i]].common.localLinks&&this.main.objects[this.list[i]].common.noConfig&&(n.push(this.list[i]),this.list.splice(i,1));for(this.list.sort(),n.sort(),i=0;i",o+=''+_("instance")+"",o+='',o+='',o+=''+_("actions")+"",o+=''+_("title")+"",1'+_("host")+""),o+=''+_("schedule_group")+"",p.main.config.expertMode&&(o+=''+_("restart")+"",o+=''+_("loglevel")+"",o+=''+_("memlimit")+"",o+=''+_("events")+""),o+=''+_("RAM usage")+"",p.$gridHead.html(o),this.$grid.html("");for(var a=Date.now(),s=0;s'+_("Filtered out")+""),p.$tab.find("#currentHost").html(this.main.currentHost),1'+s+"")}else"outputCount"===i?p.$tab.find('.instance-out[data-instance-id="'+e+'"]').html('↦'+t.val+""):"inputCount"===i&&p.$tab.find('.instance-in[data-instance-id="'+e+'"]').html('⇥'+t.val+"");if(-1!==this.list.indexOf(e))return void("alive"!==i&&"connected"!==i||f(e));e="system.adapter."+n[0]+"."+n[1],-1!==this.list.indexOf(e)&&"connection"===i&&f(e)}}},this.objectChange=function(e,t,n){if(e.match(/^system\.adapter\.[-\w]+\.[0-9]+$/))if(t)-1===this.list.indexOf(e)?(this.list.push(e),this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(function(){p.updateTimer=null,p.init(!0)},200),t.common.noConfig||setTimeout(function(){-1===window.location.hash.indexOf("/config/")&&p.main.navigate({tab:"instances",dialog:"config",params:e})},2e3)):-1!==e.indexOf(".web.")?(this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(function(){p.updateTimer=null,p.init(!0)},200)):this.$grid.find('.instance-adapter[data-instance-id="'+e+'"]').html(d(this.$grid,e,this.main.config.instanceForm,!0));else{var i=this.list.indexOf(e);-1!==i&&(this.list.splice(i,1),this.$grid.find('.instance-adapter[data-instance-id="'+e+'"]').remove())}else e.match(/^system\.host\.[-\w]+$/)&&(this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(function(){p.updateTimer=null,p.init(!0)},200))},this.initButtons=function(e,t){e=e?'[data-instance-id="'+e+'"]':"";var n=p.$grid.find(".instance-edit"+e).off("click").on("click",function(){p.onEdit($(this).attr("data-instance-id"))});n.find(".ui-button-icon-primary").length||n.attr("title",_("edit")),(n=p.$grid.find(".instance-settings"+e).off("click").on("click",function(){p.main.navigate({tab:"instances",dialog:"config",params:$(this).data("instance-id")})})).each(function(){var e=$(this).attr("data-instance-id");i.objects[e]&&i.objects[e].common&&i.objects[e].common.noConfig&&$(this).addClass("disabled")}),n=p.$grid.find(".instance-reload"+e).off("click").on("click",function(){p.main.socket.emit("extendObject",$(this).attr("data-instance-id"),{},function(e){e&&p.main.showError(e)})}),n=p.$grid.find(".instance-del"+e).off("click").on("click",function(){var t=$(this).attr("data-instance-id");if(p.main.objects[t]&&p.main.objects[t].common&&p.main.objects[t].common.host){var e=t.replace(/^system\.adapter\./,"");p.main.confirmMessage(_("Are you sure you want to delete the instance %s?",e),null,"help",function(e){e&&p.main.cmdExec(p.main.objects[t].common.host,"del "+t.replace("system.adapter.",""),function(e){e||p.main.tabs.adapters.init(!0)})})}}),n=p.$grid.find(".instance-issue"+e).off("click").on("click",function(){p.main.navigate({tab:"instances",dialog:"issue",params:$(this).data("instance-id")})}),p.$grid.find(".instance-image"+e).each(function(){$(this).data("installed")||($(this).data("installed",!0),$(this).hover(function(){var e='
                      ',t=$(e);t.insertAfter($(this)),$(this).data("big",t[0]);var n=parseFloat(t.height()),i=Math.round($(this).position().top-(n-parseFloat($(this).height()))/2);n+i>(window.innerHeight||document.documentElement.clientHeight)&&(i=(window.innerHeight||document.documentElement.clientHeight)-n),i<0&&(i=0),t.css({top:i})},function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)}))}),(n=p.$grid.find(".instance-stop-run"+e).off("click").on("click",function(){var e=$(this).attr("data-instance-id");$(this).addClass("disabled"),p.main.socket.emit("extendObject",e,{common:{enabled:!p.main.objects[e].common.enabled}},function(e){e&&p.main.showError(e)})})).find(".ui-button-icon-primary").length||n.each(function(){var e=$(this).attr("data-instance-id");p.main.objects[e].common.enabled?n.addClass("instance-running").attr("title",_("Activated. Click to stop.")).find("i").html("pause"):n.removeClass("instance-running").attr("title",_("Deactivated. Click to start.")).find("i").html("play_arrow")}),n=p.$grid.find(".instance-web"+e).off("click").on("click",function(){var e=$(this).data("link");if("object"==typeof e){var t="";for(var n in e)if(e.hasOwnProperty(n)&&"__first"!==n){var i=e[n].match(/^https?:\/\/[-.\w]+:(\d+)\/?/),a=e[n].match(/^https:\/\//);t+='"}t+='";var s=$("#instances-menu");s.data("inited")&&s.menu("destroy");var o=$(this).position();s.html(t),s.data("inited")||(s.data("inited",!0),s.mouseleave(function(){$(this).hide()})),s.menu().css({left:o.left,top:o.top}).show(),s.find(".instances-menu-link").off("click").on("click",function(){$(this).data("link")&&window.open($(this).data("link"),$(this).data("instance-id")),$("#instances-menu").hide()})}else window.open($(this).data("link"),$(this).data("instance-id"))}),"object"==typeof t&&n.data("link",t)},this.resize=function(e,t){}}function Intro(e){var T=this;function t(e){var t=Math.floor(e/86400);e%=86400;var n=Math.floor(e/3600);n<10&&(n="0"+n),e%=3600;var i=Math.floor(e/60);i<10&&(i="0"+i),e%=60,(e=Math.floor(e))<10&&(e="0"+e);var a="";return t&&(a+=t+" "+_("daysShortText")+" "),a+=n+":"+i+":"+e}this.$tab=$("#tab-intro"),this.$tiles=this.$tab.find(".tab-intro-cards"),this.main=e,this.inited=!1,this.$template=$("#intro-template");var d={Uptime:t,"System uptime":t,RAM:function(e){var t=Math.floor(e/1073741824*10)/10;e%=1073741824;var n=Math.floor(e/1048576*10)/10,i="";return i+=1");$(this).append(t),t.val($(this).data("clippy")),t.trigger("select"),document.execCommand("copy"),t.remove(),e.preventDefault(),e.stopPropagation(),T.main.showToast(T.$tiles,_("copied"))}function C(e){var t,c=T.$template.clone();if(c.removeAttr("id"),c.addClass("card-system-info"),c.find(".btn-small").addClass("disabled"),c.find(".card-titles").text(e.name),c.find(".btn-card-enabled").data("host",e.id),!1===T.main.systemConfig.common.intro[e.id]){if(!T.$tab.hasClass("edit-active"))return null;c.addClass("card-disabled").find(".btn-card-enabled").removeClass("blue").addClass("gray").find("i").text("close")}T.main.objects[e.id]&&T.main.objects[e.id].common&&(t=T.main.objects[e.id].common.icon),c.find(".card-image-img").attr("src",t||"img/no-image.png"),c.find(".card-content-text").html('
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      ');var l=setTimeout(function(){l&&(l=null,c.find(".btn-small").addClass("disabled"),c.find(".card-content-text").html(_("offline")))},6e3);return d["Disk size"]=d["Disk size"]||T.main.formatBytes,d["Disk free"]=d["Disk size"]||T.main.formatBytes,T.main.socket.emit("sendToHost",e.id,"getHostInfo",null,function(e){clearTimeout(l),l=null,"permissionError"===e?console.error('May not read "getHostInfo"'):e?c.find(".btn-small").removeClass("disabled"):console.error('Cannot read "getHostInfo"');var t=T.main.states["system.host."+T.main.currentHost+".diskWarning"];t=t?parseFloat(t.val):5;var n=0"+_(a)+": ",i+=''+(d[a]?d[a](e[a]):e[a]||" --")+"");n&&(i+="
                    • "+_("Disk free")+": ",i+=''+(d["Disk free"]?d["Disk free"](e["Disk free"]):e["Disk free"]||" --")+"
                    • ",i+="
                    • "+_("Disk size")+": ",i+=''+(d["Disk size"]?d["Disk size"](e["Disk size"]):e["Disk size"]||" --")+"
                    • "),i+=""}i+="",c.find(".card-content-text").replaceWith($(i)),i='
                      '+_("Info")+'
                      content_copyclose';var s=[];if(e){for(var o in i+="
                        ",e)if(e.hasOwnProperty(o)){i+="
                      • "+_(o)+": ";var r=d[o]?d[o](e[o]):e[o];s.push(o+": "+r),i+="Disk free"===o&&n?''+r+"
                      • ":''+r+""}i+="
                      "}i+="
                      ",c.find(".card-reveal").replaceWith($(i)),T.$tab.hasClass("edit-active")?c.find(".btn-small").hide():c.find(".btn-info").data("clippy",s.join("\r\n")).on("click",u)}),c}function D(e,t,n,i,a,s,o){var r=T.$template.clone();r.removeAttr("id");var c=a.replace(/^https?:\/\//,""),l=c.indexOf("/");if(-1!==l&&(c=c.substring(0,l)),"admin"===e&&c===location.host)return null;if("web"===e)return null;if("vis-web-admin"!==e&&e.match(/^vis-/))return null;if(e.match(/^icons-/))return null;if(i&&i.noIntro)return null;r.find(".btn-card-enabled").data("instance",e+"."+t+(n&&n.name?"."+n.name:"")).data("web",s),o?r.on("click",function(){T.$tab.hasClass("edit-active")||window.open($(this).find(".url").attr("href"))}):r.addClass("card-disabled").find(".btn-card-enabled").removeClass("blue").addClass("gray").find("i").text("close"),r.find(".url").attr("href","object"==typeof a?a._first:a||"").text(c+(s?" ("+s+")":"")),r.find(".card-image-img").attr("src",i.icon?"adapter/"+e+"/"+i.icon:"img/no-image.png"),n&&n.color&&r.find(".card-image").css("background",n.color);var d=n&&n.name||i.titleLang||i.title;"object"==typeof d&&(d=d[systemLang]||d.en),r.find(".card-titles").text(d||e);var u=i.desc;return"object"==typeof u&&(u=u[systemLang]||u.en),r.find(".card-content-text").text(u||""),r}function n(e,i){!function(e,t){var n,i,a,s=JSON.parse(JSON.stringify(e)),o=[];s.sort(function(e,t){return e=T.main.objects[e]&&T.main.objects[e].common,t=(t=T.main.objects[t]&&T.main.objects[t].common)||{},void 0===(e=e||{}).order&&void 0===t.order?e.name.toLowerCase()>t.name.toLowerCase()?1:e.name.toLowerCase()t.order?1:e.ordert.name.toLowerCase()?1:e.name.toLowerCase()\n \n');$.getJSON("https://api.github.com/repos/"+i[3]+"/"+i[4]+"/issues",function(e){var t=!1;for(var n in r.empty(),e)if(e.hasOwnProperty(n)){if("remove"===n)break;var i=e[n];if(!i.hasOwnProperty("pull_request")){t=!0;var a=$("#issueTable").children().clone(!0,!0);a.find(".collapsible-header-title").text(i.title),a.find(".goto").attr("href",i.html_url),a.find(".user").text(i.user.login),a.find(".form-row").html((new showdown.Converter).makeHtml(i.body).replace(/src="/g,'class="responsive-img" src="'));var s=new Date(new Date(i.created_at));if(a.find(".created").text(s.toLocaleDateString(systemLang,{weekday:"short",year:"numeric",month:"long",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})),0'+i.labels[o].name+"")}r.append(a),0}}t||r.append($('
                    • '+_("No bug")+"

                    • "))}).done(a.$dialogIssue.find(".collapsible").collapsible())}a.$dialogIssue.data("name",t),a.$dialogIssue.find(".title").html(_("Known bugs for")+": "+t),a.$dialogIssue.find(".dialog-system-buttons .btn-add").attr("href","https://github.com/"+i[3]+"/"+i[4]+"/issues/new"),a.$dialogIssue.find(".dialog-system-buttons .btn-cancel").off("click").on("click",function(e){e.stopPropagation(),e.preventDefault(),a.main.navigate()})}},this.destroy=function(){this.inited&&(this.$dialogIssue.find(".collapsible").collapsible("destroy"),this.inited=!1)}}function Logs(t){var c=this;this.main=t,this.$tab=$("#tab-logs");var s,l,o,d,r={count:0,start:0,limit:2e3},u={host:"",severity:"",message:""},m={list:[],mode:!1,counter:0,overflow:!1,$counterSpan:null};this.prepare=function(){l=this.$tab.find("#log-outer"),s=this.$tab.find("#log-table"),o=this.$tab.find("#log-pause"),(d=new IobListHeader("log-outer-header",{list:l,colWidthOffset:1,prefix:"log-filter"})).doFilter=c.filter,d.add("combobox","from","host"),d.add("text","Time"),d.add("combobox","","severity",[{val:"",name:"debug"},{val:"silly",name:"silly"},{val:"info",name:"info"},{val:"warn",name:"warn"},{val:"error",name:"error"}]).$filter.attr("title",_("severity")),d.add("edit","Message","message"),this.$tab.find("#log-clear-on-disk").on("click",function(){c.main.confirmMessage(_("Log file will be deleted. Are you sure?"),null,null,function(e){e&&c.main.socket.emit("sendToHost",t.currentHost,"delLogs",null,function(e){e?c.main.showError(e):c.clear()})})}).addClass("ui-state-error"),this.$tab.find("#log-refresh").on("click",function(){c.clear()}),o.attr("title",_("Pause output")).on("click",function(){c.pause()}),m.$counterSpan=o.find("ui-button-text"),this.$tab.find("#log-clear").on("click",function(){c.clear(!1)}),$("#log-copy-text").on("click",function(){$(this).hide().html("")}),this.$tab.find("#log-copy").on("click",function(){var e=''+_("copy note")+"";$("#log-copy-text").show().html(e+'
                      '+s.html()+"
                      ");for(var t=c.$tab.find("#log-copy-table").find(".log-column-4"),n=0;n'+a+"")}t.sort();for(var s=0;s'+o+"")}c.$tab.find("#log-files-btn").show().dropdown(),c.$tab.find("#log-files").html(n).find("a").on("click",function(){var e=$(this).data("value");e&&($(this).val(""),window.open(e,"_blank").focus())})}else c.$tab.find("#log-files").hide(),c.$tab.find("#log-files-btn").hide()})},0)})}else setTimeout(function(){c.init(e)},100)},this.destroy=function(){this.inited&&(this.inited=!1,this.main.subscribeLogs(!1))},this.add=function(e){if(s){if(e.message.substring(0,e.from.length)===e.from&&(e.message=e.message.substring(e.from.length+1)),m.mode)return m.list.push(e),m.counter++,m.counter>r.limit&&(m.overflow||(o.addClass("ui-state-error").attr("title",_("Message buffer overflow. Losing oldest")),m.overflow=!0),m.list.shift()),void m.$counterSpan.html(tdp(m.counter));if(r.count>=r.limit){var t=document.getElementById("log-line-"+(r.start+1));t&&(t.outerHTML=""),r.start++}else r.count++;e.from&&d&&d.host.checkAddOption(e.from,function(e){return{val:e.replace(/\./g,"-"),name:e}});var n="",i=e.from?e.from.replace(/\./g,"-"):"";u.host&&u.host!==i&&(n="display: none"),!n&&u.severity&&("debug"===u.severity&&"silly"===e.severity?n="display: none":"info"!==u.severity||"debug"!==e.severity&&"silly"!==e.severity?"warn"===u.severity&&"warn"!==e.severity&&"error"!==e.severity?n="display: none":"error"===u.severity&&"error"!==e.severity&&(n="display: none"):n="display: none"),!n&&u.message&&-1===e.message.indexOf(u.message)&&(n="display: none"),"error"===e.severity&&(c.$tabLogs=c.$tabLogs||$('a[href="#tab-logs"]'),c.$tabLogs.addClass("errorLog"));var a='';a+=''+(e.from||"")+"",a+=''+this.main.formatDate(e.ts)+"",a+=''+e.severity+"",a+=''+e.message.substring(0,200).replace(/&/g,"&").replace(//g,">")+"",s.prepend(a)}},this.filter=function(){u.host=d.host.val(),u.message=d.message.val(),u.severity=d.severity.val(),"error"===u.severity?(l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").hide(),l.find(".log-severity-info").hide(),l.find(".log-severity-warn").hide()):("warn"===u.severity?(l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").hide(),l.find(".log-severity-info").hide()):("info"===u.severity?(l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").hide()):("silly"===u.severity?l.find(".log-severity-silly").show():l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").show()),l.find(".log-severity-info").show()),l.find(".log-severity-warn").show()),l.find(".log-severity-error").show(),(u.host||u.message)&&l.find(".log-line").each(function(){u.host&&!$(this).hasClass("log-from-"+u.host)?$(this).hide():u.message&&-1===$(this).html().indexOf(u.message)&&$(this).hide()})},this.clear=function(e){void 0===e&&(e=!0),s.html(""),r.count=0,r.start=0,c.$tabLogs=c.$tabLogs||$('a[href="#tab-logs"]'),c.$tabLogs.removeClass("errorLog"),e&&setTimeout(function(){c.init(e)},0)},this.pause=function(){if(m.mode){m.mode=!1;for(var e=0;epause')}else o.addClass("yellow btn-pause-button-active"),m.$counterSpan=o,m.$counterSpan.html("0"),m.counter=0,m.mode=!0}}function Issue(e){var a=this;this.$dialog=$("#dialog-issue"),this.main=e,this.prepare=function(){},this.init=function(){if(!this.inited){this.inited=!0,showdown.setFlavor("github");var e=this.main.navigateGetParams(),t=e.replace(/^system\.adapter\./,""),n=this.main.objects[e];if(n&&n.common&&n.common.extIcon){var i=n.common.extIcon.split("/"),r=$("#result-issue");r.html('
                      \n \n
                      ');$.getJSON("https://api.github.com/repos/"+i[3]+"/"+i[4]+"/issues",function(e){var t=!1;for(var n in r.empty(),e)if(e.hasOwnProperty(n)){if("remove"===n)break;var i=e[n];if(!i.hasOwnProperty("pull_request")){t=!0;var a=$("#issueTable").children().clone(!0,!0);a.find(".collapsible-header-title").text(i.title),a.find(".goto").attr("href",i.html_url),a.find(".user").text(i.user.login),a.find(".form-row").html((new showdown.Converter).makeHtml(i.body).replace(/src="/g,'class="responsive-img" src="'));var s=new Date(new Date(i.created_at));if(a.find(".created").text(s.toLocaleDateString(systemLang,{weekday:"short",year:"numeric",month:"long",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})),0'+i.labels[o].name+"")}r.append(a),0}}t||r.append($('
                    • '+_("No bug")+"

                    • "))}).done(a.$dialog.find(".collapsible").collapsible())}a.$dialog.data("name",t),a.$dialog.find(".title").html(_("Known bugs for")+": "+t),a.$dialog.find(".dialog-system-buttons .btn-add").attr("href","https://github.com/"+i[3]+"/"+i[4]+"/issues/new"),a.$dialog.find(".dialog-system-buttons .btn-cancel").off("click").on("click",function(e){e.stopPropagation(),e.preventDefault(),a.main.navigate()})}},this.destroy=function(){this.inited&&(this.$dialog.find(".collapsible").collapsible("destroy"),this.inited=!1)}}function Objects(e){var c=this;this.$grid=$("#grid-objects"),this.subscribes={},this.main=e;var o=function(){if(c.$grid&&c.$grid.selectId)return o=c.$grid.selectId.bind(c.$grid),c.$grid.selectId.apply(c.$grid,arguments)};function r(t,e,n){for(var i=c.main.tabs.enums.list,a=[],s=0;s').show():o.$divLogo.html("").hide(),c(n.readme),c(n.changeLog),c(n.license),n.readme.length?n.readme=r(n.readme.join("\n"),t):n.readme="",n.changeLog.length?n.changeLog=r(n.changeLog.join("\n"),t):delete n.changeLog,n.license.length?(n.license[0]="## "+n.license[0],n.license=r(n.license.join("\n"),t)):delete n.license,n}(e,i.substring(0,i.lastIndexOf("/")+1));o.$divReadme.html(n.readme),n.changeLog?(o.$divChangeLog.html(n.changeLog),o.$tabs.find(".tab-changelog").show()):(o.$divChangeLog.html(""),o.$tabs.find(".tab-changelog").hide()),n.license?(o.$divLicense.html(n.license),o.$tabs.find(".tab-license").show()):(o.$divLicense.html(""),o.$tabs.find(".tab-license").hide())}).done(function(){o.$divReadme.on("click",".md-link",function(e){e.stopPropagation(),e.preventDefault(),o.fillDiv($(this).data("url"))}),o.$divReadme.on("click",".goto-link",function(e){e.stopPropagation(),e.preventDefault();var t=$($(this).data("goto"));t.length&&o.$divReadme.animate({scrollTop:o.$divReadme.scrollTop()-o.$divReadme.offset().top+t.offset().top},2e3)})})},this.destroy=function(){this.inited&&(localStorage.removeItem("original-md-url"),this.inited=!1)}}function initMap(){gMain.dialogs.system.mapLoaded=!0,gMain.dialogs.system.updateMap(!0)}function System(s){var a,o,r,c,l=this;this.$dialog=$("#dialog-system"),this.main=s,this.systemRepos=null,this.systemCerts=null;var d=!(this.mapLoaded=!1);function u(e,t){if(t.length<700&&(-1!==t.indexOf("/")||-1!==t.indexOf("\\")))return t;if(t.length<"-----BEGIN CERTIFICATE-----==-----END CERTIFICATE-----".length)return h(_('Invalid certificate "%s". To short.',e),!0),"";var n=[];if("-----BEGIN RSA PRIVATE KEY-----"===t.substring(0,"-----BEGIN RSA PRIVATE KEY-----".length)){if("-----END RSA PRIVATE KEY-----"!==t.substring(t.length-"-----END RSA PRIVATE KEY-----".length))return h(_('Certificate "%s" must end with "-----END RSA PRIVATE KEY-----".',e),!0),"";for(t=(t=(t=t.substring("-----BEGIN RSA PRIVATE KEY-----".length)).substring(0,t.length-"-----END RSA PRIVATE KEY-----".length)).replace(/\s/g,"");t.length;)n.push(t.substring(0,64)),t=t.substring(64);return"-----BEGIN RSA PRIVATE KEY-----\r\n"+n.join("\r\n")+"\r\n-----END RSA PRIVATE KEY-----\r\n"}if("-----BEGIN PRIVATE KEY-----"===t.substring(0,"-----BEGIN PRIVATE KEY-----".length)){if("-----END PRIVATE KEY-----"!==t.substring(t.length-"-----END PRIVATE KEY-----".length))return h(_('Certificate "%s" must end with "-----BEGIN PRIVATE KEY-----".',e),!0),"";for(t=(t=(t=t.substring("-----BEGIN PRIVATE KEY-----".length)).substring(0,t.length-"-----END PRIVATE KEY-----".length)).replace(/\s/g,"");t.length;)n.push(t.substring(0,64)),t=t.substring(64);return"-----BEGIN PRIVATE KEY-----\r\n"+n.join("\r\n")+"\r\n-----END PRIVATE KEY-----\r\n"}if("-----BEGIN CERTIFICATE-----"!==t.substring(0,"-----BEGIN CERTIFICATE-----".length))return h(_('Certificate "%s" must start with "-----BEGIN CERTIFICATE-----".',e),!0),"";if("-----END CERTIFICATE-----"!==t.substring(t.length-"-----END CERTIFICATE-----".length))return h(_('Certificate "%s" must end with "-----END CERTIFICATE-----".',e),!0),"";for(var i=t.split("-----END CERTIFICATE-----"),a=i.length-1;0<=a;a--)if(i[a].replace(/[\r\n|\r|\n]+/,"").trim()){for(t=(t=(t=i[a]).substring("-----BEGIN CERTIFICATE-----".length)).replace(/\s/g,""),n=[];t.length;)n.push(t.substring(0,64)),t=t.substring(64);i[a]="-----BEGIN CERTIFICATE-----\r\n"+n.join("\r\n")+"\r\n-----END CERTIFICATE-----\r\n"}else i.splice(a,1);return i.join("")}function m(e,t){for(var n,i=table2values("tab-system-certs"),a=[],s=0;s'+i[a].name+""),t===i[a].name&&(n=!0);n&&e.val(t);e.select()}()}}),l.systemRepos.nonEdit&&l.systemRepos.nonEdit.native&&l.systemRepos.nonEdit.native.repositories){var i=l.$dialog.find("#grid-repos");i.find("input").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),i.find("select").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),i.find(".btn-floating").each(function(){$(this).addClass("disabled")}),l.$dialog.find("#tab-system-repo .table-button-add").addClass("disabled")}}else l.$dialog.find("#tab-system-repo").html(_("permissionError"))}function h(e,t,n){l.main.showToast(l.$dialog.find("#tab-system-certs"),e,null,n,t)}function f(){var n=l.main.systemConfig.common,i=!1,a=!1;!function(){l.main.systemConfig.common.defaultNewAcl=l.main.systemConfig.common.defaultNewAcl||{};var e=l.main.systemConfig.common.defaultNewAcl,t=JSON.stringify(e);e.object=0,e.object|=l.$dialog.find("#tab-system-acl-obj-owner-read").prop("checked")?1024:0,e.object|=l.$dialog.find("#tab-system-acl-obj-owner-write").prop("checked")?512:0,e.object|=l.$dialog.find("#tab-system-acl-obj-group-read").prop("checked")?64:0,e.object|=l.$dialog.find("#tab-system-acl-obj-group-write").prop("checked")?32:0,e.object|=l.$dialog.find("#tab-system-acl-obj-every-read").prop("checked")?4:0,e.object|=l.$dialog.find("#tab-system-acl-obj-every-write").prop("checked")?2:0,e.owner=l.$dialog.find("#tab-system-acl-owner").val(),e.ownerGroup=l.$dialog.find("#tab-system-acl-group").val(),e.state=0,e.state|=l.$dialog.find("#tab-system-acl-state-owner-read").prop("checked")?1024:0,e.state|=l.$dialog.find("#tab-system-acl-state-owner-write").prop("checked")?512:0,e.state|=l.$dialog.find("#tab-system-acl-state-group-read").prop("checked")?64:0,e.state|=l.$dialog.find("#tab-system-acl-state-group-write").prop("checked")?32:0,e.state|=l.$dialog.find("#tab-system-acl-state-every-read").prop("checked")?4:0,e.state|=l.$dialog.find("#tab-system-acl-state-every-write").prop("checked")?2:0,e.file=0,e.file|=l.$dialog.find("#tab-system-acl-file-owner-read").prop("checked")?1024:0,e.file|=l.$dialog.find("#tab-system-acl-file-owner-write").prop("checked")?512:0,e.file|=l.$dialog.find("#tab-system-acl-file-group-read").prop("checked")?64:0,e.file|=l.$dialog.find("#tab-system-acl-file-group-write").prop("checked")?32:0,e.file|=l.$dialog.find("#tab-system-acl-file-every-read").prop("checked")?4:0,e.file|=l.$dialog.find("#tab-system-acl-file-every-write").prop("checked")?2:0,JSON.stringify(e)}(),l.$dialog.find(".system-settings.value").each(function(){var e=$(this),t=e.attr("id");t&&(t=t.substring("system_".length),"checkbox"===e.attr("type")?n[t]=e.prop("checked"):("language"===t&&n.language!==e.val()&&(i=!0),"activeRepo"===t&&n.activeRepo!==e.val()&&(a=!0),n[t]=e.val(),"isFloatComma"===t&&(n[t]="true"===n[t]||!0===n[t])))});var e={};if(l.systemRepos){for(var t in l.systemRepos.native.repositories)l.systemRepos.native.repositories.hasOwnProperty(t)&&"object"==typeof l.systemRepos.native.repositories[t]&&l.systemRepos.native.repositories[t].json&&(e[l.systemRepos.native.repositories[t].link]=l.systemRepos.native.repositories[t].json);l.systemRepos.native.repositories={}}var s=table2values("tab-system-repo");if(l.systemRepos){for(var o=null,r=0;r'+n+"");else l.$dialog.find("#tab-system-repo").html(_("permissionError"));l.$dialog.find("#diagMode").val(l.main.systemConfig.common.diag).on("change",function(){l.main.socket.emit("sendToHost",l.main.currentHost,"getDiagData",$(this).val(),function(e){l.$dialog.find("#diagSample").html(JSON.stringify(e,null,2))})}).trigger("change");var i=l.$dialog.find("#system_defaultHistory");i.html('');for(var a=0;a'+s.instances[a].substring("system.adapter.".length)+"");r=l.main.systemConfig.common.longitude,c=l.main.systemConfig.common.latitude,o||(o=!0,d?(l.mapLoaded=!0,$.ajax({url:"lib/js/ol.js",dataType:"script",cache:!0}).done(function(){setTimeout(l.updateMap,500)}),$.ajax({url:"lib/css/ol.css",success:function(e){$("head").append("")}})):$.ajax({url:"https://maps.googleapis.com/maps/api/js?key=AIzaSyCIrBRZfZAE_0C1OplAUy7OXhiWLoZc3eY&signed_in=true&callback=initMap",dataType:"script",cache:!0})),l.$dialog.find(".system-settings.value").each(function(){var e=$(this),t=e.attr("id");t&&(t=t.substring("system_".length),"checkbox"===e.attr("type")?e.prop("checked",l.main.systemConfig.common[t]):"isFloatComma"===t?e.val(l.main.systemConfig.common[t]?"true":"false"):e.val(l.main.systemConfig.common[t]),l.main.systemConfig.nonEdit&&l.main.systemConfig.nonEdit.common&&void 0!==l.main.systemConfig.nonEdit.common[t]&&(e.addClass("disabled"),e.prop("disabled",!0)))}),l.$dialog.find("#system_latitude").off("change").on("change",function(){c=$(this).val(),l.updateMap()}).off("keyup").on("keyup",function(){$(this).trigger("change")}),l.$dialog.find("#system_longitude").off("change").on("change",function(){r=$(this).val(),l.updateMap()}).off("keyup").on("keyup",function(){$(this).trigger("change")}),l.systemCerts.native.letsEncrypt||(l.systemCerts.native.letsEncrypt={path:"letsencrypt"}),l.$dialog.find(".system-le-settings.value").each(function(){var e=$(this),t=e.data("name");l.systemCerts&&l.systemCerts.native.letsEncrypt&&("checkbox"===e.attr("type")?e.prop("checked",l.systemCerts.native.letsEncrypt[t]):e.val(l.systemCerts.native.letsEncrypt[t])),l.systemCerts.nonEdit&&l.systemCerts.nonEdit.native&&l.systemCerts.nonEdit.native.letsEncrypt&&void 0!==l.systemCerts.nonEdit.native.letsEncrypt[t]&&(e.addClass("disabled"),e.prop("disabled",!0))}),l.$dialog.find("#tabs-system").find(".tabs").mtabs({onShow:function(e){e&&p($(e).attr("id"))}}),l.$dialog.find(".dialog-system-buttons .btn-save").off("click").on("click",f),l.$dialog.find(".dialog-system-buttons .btn-cancel").off("click").on("click",function(){l.main.navigate()}),g(),function(){l.main.systemConfig.common.defaultNewAcl=l.main.systemConfig.common.defaultNewAcl||{};for(var e,t=l.main.systemConfig.common.defaultNewAcl,n="",i=0;i'+(e||l.main.tabs.users.list[i])+"";for(l.$dialog.find("#tab-system-acl-owner").html(n).val(t.owner||"system.user.admin"),n="",i=0;i'+(e||l.main.tabs.users.groups[i])+"";l.$dialog.find("#tab-system-acl-group").html(n).val(t.ownerGroup||"system.group.administrator"),void 0===t.object&&(t.object=1636),l.$dialog.find("#tab-system-acl-obj-owner-read").prop("checked",1024&t.object),l.$dialog.find("#tab-system-acl-obj-owner-write").prop("checked",512&t.object),l.$dialog.find("#tab-system-acl-obj-group-read").prop("checked",64&t.object),l.$dialog.find("#tab-system-acl-obj-group-write").prop("checked",32&t.object),l.$dialog.find("#tab-system-acl-obj-every-read").prop("checked",4&t.object),l.$dialog.find("#tab-system-acl-obj-every-write").prop("checked",2&t.object),void 0===t.state&&(t.state=1636),l.$dialog.find("#tab-system-acl-state-owner-read").prop("checked",1024&t.state),l.$dialog.find("#tab-system-acl-state-owner-write").prop("checked",512&t.state),l.$dialog.find("#tab-system-acl-state-group-read").prop("checked",64&t.state),l.$dialog.find("#tab-system-acl-state-group-write").prop("checked",32&t.state),l.$dialog.find("#tab-system-acl-state-every-read").prop("checked",4&t.state),l.$dialog.find("#tab-system-acl-state-every-write").prop("checked",2&t.state),void 0===t.file&&(t.file=1636),l.$dialog.find("#tab-system-acl-file-owner-read").prop("checked",1024&t.file),l.$dialog.find("#tab-system-acl-file-owner-write").prop("checked",512&t.file),l.$dialog.find("#tab-system-acl-file-group-read").prop("checked",64&t.file),l.$dialog.find("#tab-system-acl-file-group-write").prop("checked",32&t.file),l.$dialog.find("#tab-system-acl-file-every-read").prop("checked",4&t.file),l.$dialog.find("#tab-system-acl-file-every-write").prop("checked",2&t.file),l.$dialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")})}(),function(){var e,t=l.$dialog.find("#tab-system-certs");if(l.systemCerts&&l.systemCerts.native.certificates){var n=[];for(var i in l.systemCerts.native.certificates)l.systemCerts.native.certificates.hasOwnProperty(i)&&n.push({name:i,certificate:(e=l.systemCerts.native.certificates[i],e.replace(/(?:\\[rn]|[\r\n]+)+/g,""))});if(values2table("tab-system-certs",n,{onChange:function(e){l.$dialog.find(".btn-save").removeClass("disabled")}}),l.systemCerts.nonEdit&&l.systemCerts.nonEdit.native&&l.systemCerts.nonEdit.native.certificates){var a=l.$dialog.find("#grid-certs");a.find("input").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),a.find("select").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),a.find(".btn-floating").each(function(){$(this).addClass("disabled")})}}else t.html(_("permissionError"));installFileUpload(t,1e4,function(e,t){if(e)h(e,!0);else{try{t=atob(t.split(",")[1])}catch(e){return void h(_("Cannot read file!"),!0)}if(-1!==(t=t.replace(/(\r\n|\n|\r)/gm,"")).indexOf("BEGIN RSA PRIVATE KEY"))m("private",t);else if(-1!==t.indexOf("BEGIN PRIVATE KEY"))m("private",t);else if(-1!==t.indexOf("BEGIN CERTIFICATE")){for(var n=t.split("-----END CERTIFICATE-----"),i=0,a=0;a'),c.find(".tab-dialog-new-icon .treetable-icon").attr("src",t),c.find(".tab-dialog-new-icon-clear").show()}}),"string"==typeof e&&(g.main.objects[e]&&g.main.objects[e].common&&(l.name=g.main.objects[e].common.name,l.icon=g.main.objects[e].common.icon,l.color=g.main.objects[e].common.color,l.desc=g.main.objects[e].common.desc,(o="group"===g.main.objects[e].type)&&(l.acl=g.main.objects[e].common.acl)),d=e,l.id=e),c.find(".tab-dialog-new-title").text(!0===e?_("Create new group"):l.id?_("Change"):_("Create new user")),l.id){var t=l.id.split(".");l.id=t.pop(),s=t.join(".")}c.find("#tab-users-dialog-new-name").val(translateName(l.name)).off("change").on("change",function(){var e=g.$grid.find("#tab-users-dialog-new-id"),t=e.val(),n=$(this).val();n=n.trim().replace(FORBIDDEN_CHARS,"_").replace(/\./g,"_").toLowerCase(),t&&a||!(o&&"administrator"!==t&&"user"!==t||!o&&"admin"!==t)||(e.val(n),i=n,c.find("#tab-users-dialog-new-preview").val(s+"."+(n||"#")),M.updateTextFields("#tab-users-dialog-new")),b(c)}).off("keyup").on("keyup",function(){$(this).trigger("change")}),c.find("#tab-users-dialog-new-desc").val(l.desc).off("change").on("change",function(){b(c)}).off("keyup").on("keyup",function(){$(this).trigger("change")}),i=l.id,c.find("#tab-users-dialog-new-id").val(l.id).off("change").on("change",function(){var e=$(this).val();i!==e&&(a=!0,i=e,c.find("#tab-users-dialog-new-preview").val(s+"."+(e||"#")),M.updateTextFields("#tab-users-dialog-new"),b(c))}).off("keyup").on("keyup",function(){$(this).trigger("change")}),c.find(".tab-dialog-create").addClass("disabled").off("click").text(_(d?"Change":"Create")).on("click",function(e){var n;l.name=c.find("#tab-users-dialog-new-name").val(),l.id=c.find("#tab-users-dialog-new-id").val(),l.desc=c.find("#tab-users-dialog-new-desc").val(),o?(n=l.acl,g.$grid.find(".edit-group-permissions").each(function(){var e=$(this).data("type"),t=$(this).data("operation");n[e]=n[e]||{},n[e][t]=$(this).prop("checked")}),function(i,a,s){if("system.group.administrator"===a&&"administrator"!==s.id)return i.stopPropagation(),u(_('Cannot change name of "%s"',"administrator"),!0);if("system.group.user"===a&&"user"!==s.id)return i.stopPropagation(),u(_('Cannot change name of "%s"',"user"),!0);if(!s.id)return i.stopPropagation(),u(_("ID may not be empty"),!0);if(a)if("system.group."+s.id!==a){if(g.main.objects["system.group."+s.id])return i.stopPropagation(),u(_("ID yet exists"),!0);g.main.socket.emit("getObject",a,function(e,t){if(e)h(_("Cannot change group: ")+e,!0);else{var n=s.id;t.common.name=s.name,t.common.color=s.color,t.common.icon=s.icon,t.common.desc=s.desc,delete s.id,g.main.socket.emit("delObject",a,function(e){e?(h(_("Cannot rename group: ")+e,!0),i.stopPropagation()):g.main.socket.emit("setObject",n,t,function(e){e?h(_("Cannot change group: ")+e,!0):h(_("Updated"))})})}})}else delete s.id,g.main.socket.emit("extendObject",a,{common:s},function(e,t){e?h(_("Cannot change group: ")+e,!0):h(_("Updated"))});else{if(!s.id)return i.stopPropagation(),u(_("ID may not be empty"),!0);g.main.socket.emit("addGroup",s.id,s.desc,null,function(e,t){e?h(_("Cannot create group: ")+e,!0):g.main.socket.emit("extendObject",t._id,{common:s},function(e){e?h(_("Cannot add group: ")+e,!0):h(_("Created"))})})}}(e,d,l)):(delete l.acl,r(e,d,l))}),c.find("#tab-users-dialog-new-preview").val(s+"."+(l.id||"#")),l.icon?(c.find(".tab-dialog-new-icon").show().html(g.main.getIcon(d)),c.find(".tab-dialog-new-icon-clear").show()):(c.find(".tab-dialog-new-icon").hide(),c.find(".tab-dialog-new-icon-clear").hide()),l.color=l.color||!1,l.color?c.find(".tab-dialog-new-color").val(l.color):c.find(".tab-dialog-new-color").val(),u(_("Drop the icons here")),c.find(".tab-dialog-new-upload").off("click").on("click",function(){c.find(".drop-file").trigger("click")}),c.find(".tab-dialog-new-icon-clear").off("click").on("click",function(){l.icon&&(l.icon="",c.find(".tab-dialog-new-icon").hide(),c.find(".tab-dialog-new-icon-clear").hide(),b(c))}),c.find(".tab-dialog-new-color-clear").off("click").on("click",function(){l.color&&(b(c),c.find(".tab-dialog-new-color-clear").hide(),c.find(".tab-dialog-new-colorpicker").colorpicker({component:".btn",color:l.color,container:c.find(".tab-dialog-new-colorpicker")}).colorpicker("setValue",""),l.color="")});var n=Date.now();try{c.find(".tab-dialog-new-colorpicker").colorpicker("destroy")}catch(e){}c.find(".tab-dialog-new-colorpicker").colorpicker({component:".btn",color:l.color,container:c.find(".tab-dialog-new-colorpicker")}).colorpicker("setValue",l.color).on("showPicker.colorpicker",function(){var e=c.find(".modal-content");e[0].scrollTop=e[0].scrollHeight}).on("changeColor.colorpicker",function(e){100'+_(a+" permissions")+"",i+='';for(var s=0;s"+t[s]+"":i+="";i+="",i+="";for(var o=0;o'}else i+="";i+=""}i+="",c.find("#tab-users-dialog-new-rights").html(i),c.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),c.find('input[type="checkbox"]').off("change").on("change",function(){b(c)}),m(d,l.acl),M.updateTextFields("#tab-users-dialog-new")}),c.find("ul.tabs .tab-dialog-new-tabs").show()):(c.find("ul.tabs .tab-dialog-new-tabs").each(function(){$(this).find('a[href="#tab-users-dialog-new-rights"]').length&&$(this).hide()}),M.updateTextFields("#tab-users-dialog-new")),c.find("ul.tabs").mtabs(),g.main.noSelect||c.find("ul.tabs").mtabs("select","tab-users-dialog-new-main"),c.modal().modal("open")}function t(){g.list.sort(),g.groups.sort();var e="";e+='
                        ';for(var t=function(e,t){for(var n={},i=0;i'+g.main.getIcon(c)+l+'close'}var d="",u=!1;a.color&&(d="background: "+a.color+"; ",g.main.invertColor(a.color)&&(u=!0,d+="color: white;"));var m=a.desc;"object"==typeof m&&(m=m[systemLang]||m.en),e+='
                      • ',e+=" "+(g.main.getIcon(g.list[n],null,null,"icon")||''),e+=''+i+"",e+="

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

                        ",e+=' '+(a.enabled?"check_box":"check_box_outline_blank")+"",e+=' edit',e+=' delete
                        ',e+=s||"",e+="
                      • "}e+="
                      ",g.$gridUsers.html(e),g.$grid.find("#tab-users-btn-new-user").on("click",function(){y(!1)}),g.$gridUsers.find(".tab-users-enabled-user").on("click",function(){var e=$(this).data("user");if("system.user.admin"===e)return h(_("Cannot disable admin!"),!0),!1;var t=$(this),n=g.main.objects[e]&&g.main.objects[e].common&&g.main.objects[e].common.enabled;n=!n,g.main.socket.emit("extendObject",e,{common:{enabled:n}},function(e){e?h(_("Cannot modify user!")+e,!0):(h(_("Updated")),t.find("i").text(n?"check_box":"check_box_outline_blank"))})}),g.$gridUsers.find(".delete-content").off("click").on("click",function(){var t=$(this).data("user");$(this).hasClass("disabled")||(g.main.objects[t]&&"user"===g.main.objects[t].type?g.main.confirmMessage(_("Are you sure to delete %s?",t),null,"help",function(e){e&&p(t)}):h(_('Object "%s" does not exists. Update the page.',t),!0))}),g.$gridUsers.find(".edit-content").on("click",function(){y($(this).data("user"))}),g.$gridUsers.find(".tab-users-remove-group").on("click",function(){var i=$(this).data("user"),e=$(this).data("group");g.main.socket.emit("getObject",e,function(e,t){if(t&&t.common&&t.common.members){var n=t.common.members.indexOf(i);-1!==n?(t.common.members.splice(n,1),g.main.socket.emit("setObject",t._id,t,function(e){e?h(_("Error: %s",e),!0):h(_("Removed"))})):h(_("%s is not in the list"),!0)}})})}function n(){var e="";e+='
                        ';for(var t=0;t'+g.main.getIcon(c)+r+'close'}var l="",d=!1;i.color&&(l="background: "+i.color+"; ",g.main.invertColor(i.color)&&(d=!0,l+="color: white;"));var u=i.desc;"object"==typeof u&&(u=u[systemLang]||u.en),e+='
                      • ',e+=" "+(g.main.getIcon(g.groups[t],null,null,"icon")||''),e+=' '+n+"",e+="

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

                        ",e+=' edit',e+=' delete
                        ',e+=a||"",e+="
                      • "}e+="
                      ",g.$gridGroups.html(e),g.$grid.find("#tab-users-btn-new-group").on("click",function(){y(!0)}),g.$gridGroups.find(".delete-content").on("click",function(){var n=$(this).data("group");$(this).hasClass("disabled")||(g.main.objects[n]&&"group"===g.main.objects[n].type?g.main.confirmMessage(_("Are you sure to delete %s?",n),null,"help",function(e){var t;e&&(t=n,g.main.objects[t]&&"group"===g.main.objects[t].type?g.main.objects[t].common&&g.main.objects[t].common.dontDelete?h(_("Object may not be deleted"),!0):g.main.socket.emit("delObject",t,function(e){e?h(_("Group may not be deleted: %s",e),!0):h(_("Group deleted"))}):h(_("Invalid object: %s",t),!0))}):h(_('Object "%s" does not exists. Update the page.',n),!0))}),g.$gridGroups.find(".edit-content").on("click",function(){y($(this).data("group"))}),g.$gridGroups.find(".tab-users-remove-user").on("click",function(){var i=$(this).data("user"),e=$(this).data("group");g.main.socket.emit("getObject",e,function(e,t){if(t&&t.common&&t.common.members){var n=t.common.members.indexOf(i);if(-1!==n){if(t.common.members.splice(n,1),!t._id)return void console.error("INVLAID ID");g.main.socket.emit("setObject",t._id,t,function(e){e?h(_("Error: %s",e),!0):h(_("Removed"))})}else h(_("%s is not in the list"),!0)}})})}this.groups=[],this.list=[],this.$grid=$("#tab-users"),this.$gridUsers=this.$grid.find(".tab-users-list-users .tab-users-body"),this.$gridGroups=this.$grid.find(".tab-users-list-groups .tab-users-body"),this.main=e,this.aclGroups=null,this.prepare=function(){},this._postInit=function(){var e;t(),g.$gridUsers.find("ul").sortable({connectWith:"#tab-users .tab-users-list-groups .treetable",items:".users-type-draggable",appendTo:g.$gridUsers,refreshPositions:!0,helper:function(e,t){return $('
                      '+t.find(".treetable-icon-empty+span").text()+"
                      ")},zIndex:999990,revert:!1,scroll:!1,start:function(e,t){var n=t.item.prev();t.item.data("prev",n),g.$grid.addClass("dragging")},stop:function(e,t){g.$grid.removeClass("dragging")},update:function(e,t){var n=t.item.data("prev");n&&n.length?$(n).after(t.item):$(this).prepend(t.item)}}).disableSelection(),n(),(e=g.$gridGroups.find("ul>li")).droppable("instance")&&e.droppable("destroy"),e.droppable({accept:".users-type-draggable",over:function(e,t){if($(this).addClass("tab-accept-item"),$(this).hasClass("not-empty")&&!$(this).hasClass("expanded")){var n,i=$(this).data("tt-id");(n=$(this).data("timer"))&&clearTimeout(n),$(this).data("timer",setTimeout(function(){g.$gridGroups.treeTable("expand",i)},1e3))}},out:function(e,t){var n;$(this).removeClass("tab-accept-item"),(n=$(this).data("timer"))&&(clearTimeout(n),$(this).data("timer",null))},tolerance:"pointer",drop:function(e,t){$(this).removeClass("tab-accept-item");var n=t.draggable.data("tt-id"),i=$(this).data("tt-id");g.main.socket.emit("getObject",i,function(e,t){t&&t.common&&(t.common.members=t.common.members||[],-1===t.common.members.indexOf(n)?(t.common.members.push(n),t.common.members.sort(),g.main.socket.emit("setObject",t._id,t,function(e){e?h(_("Error: %s",e),!0):h(_("%s added to %s",n,t._id))})):h(_("Is yet in the list")))})}})},this.init=function(e){this.inited&&!e||(void 0!==this.$gridUsers&&this._postInit(),this.inited||(h(_("You can drag&drop users to groups"),5e3),this.inited=!0,this.main.subscribeObjects("system.user.*"),this.main.subscribeObjects("system.group.*")))},this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("system.user.*"),this.main.unsubscribeObjects("system.group.*"))},this.objectChange=function(e,t,n){if(e.match(/^system\.user\./)){if(t)-1===this.list.indexOf(e)&&this.list.push(e);else{var i=this.list.indexOf(e);-1!==i&&this.list.splice(i,1)}this.timer&&clearTimeout(this.timer),this.timer=setTimeout(function(){g.timer=null,g._postInit()},200)}else if(e.match(/^system\.group\./)){if(t)-1===this.groups.indexOf(e)&&this.groups.push(e);else{var a=this.groups.indexOf(e);-1!==a&&this.groups.splice(a,1)}this.timer&&clearTimeout(this.timer),this.timer=setTimeout(function(){g.timer=null,g._postInit()},200)}}}!function(C){C(document).ready(function(){var e=location.pathname+"socket.io";location.pathname.match(/^\/admin\//)&&(e="/socket.io");var s,y={},v={objects:{},states:{},currentHost:"",currentTab:null,currentDialog:null,currentUser:"",subscribesStates:{},subscribesObjects:{},subscribesLogs:0,socket:io.connect("/",{path:e}),systemConfig:null,instances:null,objectsLoaded:!1,waitForRestart:!1,tabs:null,dialogs:{},selectId:null,config:{},ignoreJSupdate:!1,addEventMessage:function(e,t,n,i){g.events.add(e,t,n,i)},saveConfig:function(e,t){e&&(v.config[e]=t),"undefined"!=typeof storage&&storage.set("adminConfig",JSON.stringify(v.config))},saveTabs:function(){this.socket.emit("setObject","system.config",this.systemConfig,function(e){e&&this.showError(e)})},upToDate:function(e,t){return e=e.split("."),t=t.split("."),e[0]=parseInt(e[0],10),t[0]=parseInt(t[0],10),!(e[0]>t[0])&&(e[0]!==t[0]||(e[1]=parseInt(e[1],10),t[1]=parseInt(t[1],10),!(e[1]>t[1])&&(e[1]!==t[1]||(e[2]=parseInt(e[2],10),t[2]=parseInt(t[2],10),e[2]<=t[2]))))},cmdExec:function(e,t,n){e=e||v.currentHost,c.val(""),l.modal("open"),s="$ ./yunkong2 "+t,l.data("finished",!1).find(".btn").html(_("In background")),l.find(".command").html(s),l.find(".progress-dont-close").removeClass("disabled"),p.find(".button-command").removeClass("error").addClass("in-progress"),l.data("max",null),l.data("error",""),h.addClass("indeterminate").removeClass("determinate"),t.match(/^upload /)?l.find(".progress-text").html(_("Upload started...")).removeClass("error"):t.match(/^del [-_\w\d]+\.[\d]+$/)?l.find(".progress-text").html(_("Removing of instance...")).removeClass("error"):t.match(/^del /)?l.find(".progress-text").html(_("Removing of adapter...")).removeClass("error"):t.match(/^url /)?l.find(".progress-text").html(_("Install or update from URL...")).removeClass("error"):t.match(/^add /)?l.find(".progress-text").html(_("Add instance...")).removeClass("error"):l.find(".progress-text").html(_("Started...")).removeClass("error"),c.val(s),r=Math.floor(268435454*Math.random())+1,o=n,v.socket.emit("cmdExec",e,r,t,function(e){e?(s+="\n"+_(e),c.val(s),o=null,n(e)):n&&n()})},confirmMessage:function(e,t,n,i,a){if("function"==typeof i)a=i,m.find(".modal-footer").html(''+_("Ok")+''+_("Cancel")+""),m.find(".modal-footer .modal-action").on("click",function(){var e=m.data("callback");e&&e(C(this).data("result"))});else if("object"==typeof i){for(var s="",o=i.length-1;0<=o;o--)s+=''+i[o]+"";m.find(".modal-footer").html(s),m.find(".modal-footer .modal-action").on("click",function(){var e=m.data("callback");e&&e(C(this).data("id"))})}m.find(".dialog-title").text(t||_("Please confirm")),n?m.find(".dialog-icon").show().html(n):m.find(".dialog-icon").hide(),m.find(".dialog-text").html(e),m.data("callback",a),m.modal("open")},showMessage:function(e,t,n){u.find(".dialog-title").text(t||_("Message")),n?u.find(".dialog-icon").show().html(n):u.find(".dialog-icon").hide(),u.find(".dialog-text").html(e),u.modal("open")},showError:function(e){v.showMessage(_(e),_("Error"),"error_outline")},showToast:function(e,t,n,i,a,s){e&&e instanceof jQuery&&(e=e[0]),"string"==typeof(s=s||[])&&(s=[s]),a&&s.push("dropZone-error"),M.toast({parentSelector:e||C("body")[0],html:t+(n?''+n+"":""),displayLength:i||3e3,classes:s})},formatDate:function(e,t){if(!e)return"";var n,i=typeof e;return"string"===i?t?e.substring(8):e:("object"!==i&&(e=e<9466812e5?new Date(1e3*e):new Date(e)),t?i=(n=e.getDate())<10?"0"+n:n:(i=e.getFullYear(),i+=(n=e.getMonth()+1)<10?"-0"+n:"-"+n,i+=(n=e.getDate())<10?"-0"+n:"-"+n),i+=(n=e.getHours())<10?" 0"+n:" "+n,i+=(n=e.getMinutes())<10?":0"+n:":"+n,i+=(n=e.getSeconds())<10?":0"+n:":"+n,i+=(n=e.getMilliseconds())<10?".00"+n:n<100?".0"+n:"."+n)},updateWizard:function(){var e=C("#button-wizard");v.objects["system.adapter.discovery.0"]?(e.data("inited")||(e.data("inited",!0),e.on("click",function(){v.navigate({tab:"instances",dialog:"config",params:"system.adapter.discovery.0"})}).attr("title",_("Device discovery"))),e.show(),!v.systemConfig.common.wizard&&v.systemConfig.common.licenseConfirmed&&e.trigger("click")):e.hide()},getUser:function(){if(v.currentUser){if(v.objects[v.currentUser]){var e=v.objects[v.currentUser],t="";if(t=e&&e.common&&e.common.name?translateName(e.common.name):(t=v.currentUser.replace(/^system\.user\./))[0].toUpperCase()+t.substring(1).toLowerCase(),e&&e.common&&e.common.icon){var n={};n[v.currentUser]=e,C("#current-user-icon").html(v.getIcon(v.currentUser,null,n))}else C("#current-user-icon").html('account_circle');C("#current-user").html(t);for(var i=[],a=0;aone object or all children of %s too?',t),null,"help_outline",[_("_All"),_("Only one"),_("Cancel")],function(e){0===e?v._delObjects(t,!0,n):1===e&&v._delObjects(t,!1,n)}):v.confirmMessage(_("Are you sure to delete %s?",t),null,"help_outline",function(e){e&&v._delObjects(t,!0,n)}):i&&i.children?v.confirmMessage(_("Are you sure to delete all children of %s?",t),null,"help_outline",function(e){e&&v._delObjects(t,!0,n)}):v.showMessage(_('Object "%s" does not exists. Update the page.',t),_("Error"),"help_outline",function(e){e&&v._delObjects(t,!0,n)})}},g={hosts:new Hosts(gMain=v),objects:new Objects(v),adapters:new Adapters(v),instances:new Instances(v),users:new Users(v),enums:new Enums(v),events:new Events(v),logs:new Logs(v),states:null,intro:new Intro(v)};"undefined"!=typeof States&&(g.states=new States(v)),v.instances=g.instances.list,v.tabs=g,v.dialogs={system:new System(v),customs:new Customs(v),config:new Config(v),editobject:new EditObject(v),issue:new Issue(v),readme:new Readme(v)};var o=null,r=null,c=C("#stdout"),l=C("#dialog-command"),d=C("#dialog-license-main"),u=C("#dialog-message"),m=C("#dialog-confirm"),h=l.find(".progress div"),f=C("#admin_sidemenu_menu"),p=C("#admin_sidemenu_main"),t=!0;if("ontouchstart"in window||navigator.maxTouchPoints||C("body").addClass("desktop-screen"),-1!==navigator.userAgent.indexOf("Safari")&&-1===navigator.userAgent.indexOf("Chrome")&&-1===navigator.userAgent.indexOf("Android")?(C("body").addClass("safari"),v.browser="safari",v.noSelect=!0):detectIE()&&(C("body").addClass("ie"),v.browser="ie",v.browserVersion=detectIE(),v.noSelect=!0,C("#host-adapters-btn").css("margin-top","10px")),"undefined"!=typeof storage)try{v.config=storage.get("adminConfig"),v.config?v.config=JSON.parse(v.config):v.config={}}catch(e){console.log("Cannot load edit config"),v.config={}}function b(e){C("#admin_sidemenu_dialog").html(""),C("html").off("click",b)}function w(){if(function(){var e="",i=[];C(".admin-tab").each(function(){var e=C(this).attr("id");v.systemConfig.common.tabs&&-1===v.systemConfig.common.tabs.indexOf(e)||i.push({line:'
                    • '+(T[e]&&T[e].icon?''+T[e].icon+"":'live_help')+_(C(this).data("name"))+"
                    • ",id:e})}),C(".tab-custom").each(function(){var e=C(this).attr("id");if(!v.systemConfig.common.tabs||-1!==v.systemConfig.common.tabs.indexOf(e)){var t;if(T[e]&&T[e].icon)t=T[e].icon;else{var n="system.adapter."+e.substring(4);v.objects[n]&&v.objects[n].adminTab&&v.objects[n]["fa-icon"]&&(t=v.objects[n]["fa-icon"])}i.push({line:'
                    • '+(t?''+t+"":'live_help')+C(this).data("name")+"
                    • ",id:e})}}),i.sort(function(e,t){return T[e.id]||T[t.id]?T[e.id]?T[t.id]?T[e.id].orderT[t.id].order?1:0:-1:1:0});for(var t=0;t
                        ';for(var s in y){var o=y[s],r="chk-"+s;a+="
                      • '+_(o)+""}a+="
                      ",t.append(a),t.find(".chk-tab").off("change").on("change",function(e){var t=C(this).attr("id").substr(4);if(C(this).prop("checked"))v.systemConfig.common.tabs.push(t);else{var n=v.systemConfig.common.tabs.indexOf(t);-1!==t&&v.systemConfig.common.tabs.splice(n,1)}v.saveTabs(),j()}),t.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=C(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")})}),v.updateWizard(),C("#button-logout").on("click",function(){window.location.href="/logout/"}),window.onhashchange=function(){v.navigateDo()},v.navigateDo(),C("#events_threshold").on("click",function(){v.socket.emit("eventsThreshold",!1)})}function j(){var n=[],e=[];y={};for(var t=0;t'+m+"\n",C("#"+d).length)C("#"+d).hide().appendTo(C("body"));else{var f='
                      ';C(f).hide().appendTo(C("body")),C("#"+d).find(".iframe-in-tab").on("load",function(){var e=C(this).contents().find("body>header");e&&e.length||(e=C(this).contents().find("head")),e&&e.length&&e.append('')})}}}if(C(".tab-custom").each(function(){-1===n.indexOf(C(this).attr("id"))&&C("#"+C(this).attr("id")).remove()}),v.systemConfig.common.tabs||(v.systemConfig.common.tabs=n),C(".link-replace").length){var p=0,b=setTimeout(function(){b=null,w()},100);C(".link-replace").each(function(){p++,v.tabs.instances._replaceLinks(C(this).data("src"),C(this).data("adapter"),C(this).data("instance"),C(this).attr("id"),function(e,t,n,i){C("#"+i).data("src",e).removeClass("link-replace"),--p||b&&(clearTimeout(b),b=null,w())})})}else w()}function L(a){v.socket.emit("getAllObjects",function(e,i){e?window.alert(_(e)):setTimeout(function(){var e;for(var t in v.objects=i,v.objects)v.objects.hasOwnProperty(t)&&"_design"!==t.slice(0,7)&&("instance"===(e=v.objects[t]).type&&v.instances.push(t),"enum"===e.type&&g.enums.list.push(t),"user"===e.type&&g.users.list.push(t),"group"===e.type&&g.users.groups.push(t),"adapter"===e.type&&g.adapters.list.push(t),"host"===e.type&&g.hosts.addHost(e),e.common&&e.common.history&&(e.common.custom=JSON.parse(JSON.stringify(e.common.history)),delete e.common.history));for(var n in v.objectsLoaded=!0,v.initHostsList(!0),j(),v.dialogs)v.dialogs.hasOwnProperty(n)&&"function"==typeof v.dialogs[n].prepare&&v.dialogs[n].prepare();!function n(i,a){a=a||0,i&&a'+a.icon+"";var s;n="instance"===e.type?"/adapter/"+e.common.name+"/"+e.common.icon:e._id.match(/^system\.adapter\./)?(s=e._id.split(".",3),"/"===a.icon[0]?s[2]+=a.icon:s[2]+="/"+a.icon,"/adapter/"+s[2]):(s=e._id.split(".",2),"/"===a.icon[0]?s[0]+=a.icon:s[0]+="/"+a.icon,"/adapter/"+s[0])}i=e.type}return{icon:n,alt:i}}v.initHostsList=function(e){var t=C("#host-adapters");if(!e||!t.data("inited")){t.data("inited",!0),v.currentHost=v.currentHost||v.config.currentHost||"";for(var n,i=[],a=0;a'+v.getHostIcon(v.objects[v.tabs.hosts.list[a].id],"imgHost left")+v.tabs.hosts.list[a].name+""),v.currentHost||(v.currentHost=v.tabs.hosts.list[a].name),v.currentHost===v.tabs.hosts.list[a].name&&(n=v.tabs.hosts.list[a].id);t.html(i);var s=C("#host-adapters-btn").show();s.text(_("Host:")+" "+v.currentHost).dropdown(),v.objects[n]&&v.objects[n].common&&v.objects[n].common.color,s.append(C(v.getHostIcon(v.objects[n],"imgHost left"))),v.tabs.hosts.list.length<2?s.addClass("disabled"):s.removeClass("disabled"),t.find("a").on("click",function(){var e=C(this).data("value"),t="system.host."+e+".alive";v.states[t]&&v.states[t].val&&"null"!==v.states[t].val?(v.currentHost=e,C("#host-adapters-btn").text(_("Host:")+" "+v.currentHost).append(C(this).find(".imgHost").clone()),console.log(v.currentTab),T["tab-"+v.currentTab]&&T["tab-"+v.currentTab].host&&(v.tabs[v.currentTab]&&"function"==typeof v.tabs[v.currentTab].destroy&&v.tabs[v.currentTab].destroy(),v.tabs[v.currentTab]&&"function"==typeof v.tabs[v.currentTab].init&&v.tabs[v.currentTab].init()),v.saveConfig("currentHost",v.currentHost)):v.showMessage(_("Host %s is offline",C(this).val()))})}},v.resubscribeStates=function(){for(var e in v.subscribesStates)v.subscribesStates.hasOwnProperty(e)&&v.subscribesStates[e]&&(console.debug("Re-Subscribe: "+e),v.socket.emit("subscribe",e))},v.resubscribeObjects=function(){for(var e in v.subscribesObjects)v.subscribesObjects.hasOwnProperty(e)&&v.subscribesObjects[e]&&v.socket.emit("subscribeObjects",e)},v.resubscribeLogs=function(){v.subscribesLogs&&(console.debug("Subscribe LOG"),v.socket.emit("requireLog",!0))},v.subscribeStates=function(e){if(e)if("object"==typeof e)for(var t=0;tiframe");d.attr("src")&&(console.log("clear"),d.attr("src",""))}}if(v.currentTab=n,o.hide().appendTo("body"),i||(r.addClass("admin-sidemenu-body-content").show().appendTo(s),o=r),g[n]&&"function"==typeof g[n].init&&g[n].init(),r.length&&(c=r.data("src")))if(-1===c.indexOf("%")){var u=r.find(">iframe");u.length&&!u.attr("src")&&u.attr("src",c)}else f.data("problem-link","tab-"+n)}var m=f.find('.admin-sidemenu-items[data-tab="tab-'+n+'"]');f.find(".admin-sidemenu-items").not(m).removeClass("admin-sidemenu-active"),m.addClass("admin-sidemenu-active"),T["tab-"+n]&&T["tab-"+n].host?C("#host-adapters-btn").css("opacity",1):C("#host-adapters-btn").css("opacity",.3),document.title=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=N(e);i=s.icon,a=s.alt}else t=t||"lib/css/fancytree/","device"===e.type?(i=t+"device.png",a="device"):"channel"===e.type?(i=t+"channel.png",a="channel"):"state"===e.type&&(i=t+"state.png",a="state");return i?''+(a||':""},v.getIcon=function(e,t,n,i){return v.getIconFromObj((n||v.objects)[e],t,i)},v.getHostIcon=function(e,t){var n="",i="";if(e&&e.common&&e.common.icon){var a=N(e);n=a.icon,i=a.alt}return''+(i=i||'},v.formatBytes=function(e){if(Math.abs(e)<1024)return e+" B";for(var t=["KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],n=-1;e/=1024,++n,1024<=Math.abs(e)&&n'+t.admin.styles+"")}}if(v.systemConfig&&v.systemConfig.common&&v.systemConfig.common.tabs){var i=v.systemConfig.common.tabs.indexOf("tab-log");-1!==i&&(v.systemConfig.common.tabs[i]="tab-logs")}v.socket.emit("getObject","system.repositories",function(e,t){v.dialogs.system.systemRepos=t,v.socket.emit("getObject","system.certificates",function(e,t){setTimeout(function(){if(v.dialogs.system.systemCerts=t,"permissionError"===a)v.systemConfig={common:{language:systemLang},error:"permissionError"};else if(!a&&v.systemConfig&&v.systemConfig.common){if(systemLang=v.systemConfig.common.language||systemLang,v.systemConfig.common.city=v.systemConfig.common.city||"",v.systemConfig.common.country=v.systemConfig.common.country||"",v.systemConfig.common.longitude=v.systemConfig.common.longitude||"",v.systemConfig.common.latitude=v.systemConfig.common.latitude||"",!v.systemConfig.common.licenseConfirmed){var n=(v.systemConfig.common.language||window.navigator.userLanguage||window.navigator.language||"").substring(0,2);"en"!==n&&(n="cn"),systemLang=n,d.find(".license_text").html(license[n]||license.en),d.find(".license_checkbox").prop("checked",!1),d.find(".license_language").data("licenseConfirmed",!1).val(n).on("change",function(){n=C(this).val(),d.find(".license_language_label").html(translateWord("Select language",n)),d.find(".license_text").html(license[n]||license.en),d.find(".license_checkbox").html(translateWord("license_checkbox",n)),d.find(".license_agree .translate").html(translateWord("agree",n)),d.find(".license_non_agree .translate").html(translateWord("not agree",n)),d.find(".license_terms").html(translateWord("License terms",n)),d.find(".license_agreement_label").html(translateWord("license agreement",n))}).select(),d.find(".license_diag").on("change",function(){C(this).prop("checked")?d.find(".license_agree").removeClass("disabled"):d.find(".license_agree").addClass("disabled")}),d.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=C(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),d.modal({dismissible:!1,complete:function(){d.find(".license_text").html(""),location.reload()}}).modal("open"),d.find(".license_agree").addClass("disabled").off("click").on("click",function(e){e.preventDefault(),e.stopPropagation(),v.socket.emit("getObject","system.config",function(e,t){!e&&t?(t.common=t.common||{},t.common.licenseConfirmed=!0,t.common.language=n,v.socket.emit("setObject","system.config",t,function(e){e&&v.showError(e),d.modal("close"),d.find(".license_agree").off("click"),d.find(".license_non_agree").off("click")})):v.showError(_("Cannot confirm: "+e))})}),d.find(".license_non_agree").off("click").on("click",function(e){location.reload()})}}else v.systemConfig={type:"config",common:{name:"system.config",city:"",country:"",longitude:"",latitude:"",language:"",tempUnit:"°C",currency:"",dateFormat:"DD.MM.YYYY",isFloatComma:!0,licenseConfirmed:!1,defaultHistory:"",tabs:["tab-intro","tab-adapters","tab-instances","tab-objects","tab-logs","tab-scenes","tab-javascript","tab-text2command-0"]}},v.systemConfig.common.language=window.navigator.userLanguage||window.navigator.language,"en"!==v.systemConfig.common.language&&(v.systemConfig.common.language="cn");for(var e in translateCron(),translateAll(),"function"==typeof initGridLanguage&&initGridLanguage(v.systemConfig.common.language),l.modal({dismissible:!1}),u.modal(),m.modal({dismissible:!1}),l.find(".progress-show-more").off("change").on("change",function(){var e=C(this).prop("checked");v.saveConfig("progressMore",e),e?l.find(".textarea").show():l.find(".textarea").hide()}),void 0===v.config.progressClose&&(v.config.progressClose=!0),l.find(".progress-dont-close input").on("change",function(){v.saveConfig("progressClose",C(this).prop("checked"))}),l.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=C(this).prev();e.parent().parent().hasClass("switch")||e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),l.find(".progress-dont-close input").prop("checked",v.config.progressClose),l.find(".progress-show-more").prop("checked",!!v.config.progressMore).trigger("change"),l.find(".btn").on("click",function(){l.data("finished")?p.find(".button-command").hide():p.find(".button-command").show()}),p.find(".button-command").on("click",function(){l.modal("open")}),g)g.hasOwnProperty(e)&&g[e]&&"function"==typeof g[e].prepare&&g[e].prepare();var i;i=L,g.states&&g.states.clear(),v.socket.emit("getStates",function(e,t){v.states=t,"function"==typeof i&&setTimeout(function(){i()},0)})},0)})})})})):(v.resubscribeStates(),v.resubscribeObjects(),v.resubscribeLogs()),v.waitForRestart&&location.reload()}),v.socket.on("disconnect",function(){C("#connecting").show()}),v.socket.on("reconnect",function(){C("#connecting").hide(),v.waitForRestart&&location.reload()}),v.socket.on("repoUpdated",function(){setTimeout(function(){g.adapters.init(!0)},0)}),v.socket.on("reauthenticate",function(){location.reload()})})}(jQuery);var license={en:'The MIT License (MIT)

                      Copyright © 2014-2018 spacen

                      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
                      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
                      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                      ',cn:'The MIT License (MIT)

                      Copyright © 2014-2018 spacen

                      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
                      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
                      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                      '},addAll2FilterCombobox=!1;function IobListHeader(e,h){if(!(this instanceof IobListHeader))return new IobListHeader(e,h);var f,a,p;void 0===h&&(h={}),void 0===h.colWidthOffset&&(h.colWidthOffset=0),"TABLE"===(p="object"==typeof e?$(e):$("#"+e))[0].tagName&&(p=p.find("tr:first")),e=p[0];var n,b=this;b.selectIdOffset=[],p.html(""),this.setList=function(e){var t;(t="string"==typeof e?("#"!==e[0]&&(e="#"+e),$(e)):e)&&t.length&&("TD"!==t[0].tagName&&"TH"!==t[0].tagName&&((t=t.find(">thead>tr:first>th,>thead>tr:first>td")).length||(t=e.find(">tbody>tr:first>th,>tr:first>th,>tbody>tr:first>td, >tr:first>td"))),a=t)},h.list&&this.setList(h.list),this.syncHeader=function(){if("object"==typeof a){var e=function(){a.each(function(e,t){if(!(e>=a.length-1)){var n=$(t).width(),i=b.selectIdOffset[e]||0;n+i&&$(f[e]).width(Math.round(n+i))}}),a.length&&!b.selectIdOffset.length&&(b.selectIdOffset[0]=0,a.each(function(e,t){var n=$(a[e]).offset().left;n&&(b.selectIdOffset[e]=n-$(f[e]).offset().left)}),e())};e()}},$(window).on("resize",function(e,t){n&&clearTimeout(n),n=setTimeout(b.syncHeader.bind(b),100)}),this.doFilter=function(){},b.ids=[],b.add=function(t,m,e,n){void 0===e&&(e=m);var i,a,s=!(i=e)||a&&"#"===i[0]?i:(h.prefix&&i.substr(0,h.prefix.length)!==h.prefix&&(i=h.prefix+"-"+i),(a?"#":"")+i);m=_(m);var o="";switch(t){case"combobox":o=' ';break;case"edit":o=' ';break;case"text":o=''+m+""}p.append(""+o+"");var r="#"+s,g=$(r),c=b[e]={$filter:g,val:g.val.bind(g),selectedVal:g.val()||""};if(b.ids.push(e),"combobox"===t&&(c.options=[],c.checkAddOption=function(e,t,n){if(-1===this.options.indexOf(e)){this.options.push(e),this.options.sort();for(var i,a,s=g.val(),o=n?"":(i=m,a=s,addAll2FilterCombobox&&(i=i?_(i)+" ("+_("all")+")":_("all")),'"),r=0,c=this.options.length;r"+t+""}},n))for(var l=0;lclose'),g.on("change",function(e){d&&clearTimeout(d),c.selectedVal=g.val(),d=setTimeout(b.doFilter,"combobox"!==t?400:0),c.selectedVal?g.parent().addClass("filter-active"):g.parent().removeClass("filter-active")}).on("keyup",function(e){13===e.which?b.doFilter():g.trigger("change")}),f=p.find(">th"),c}}function values2table(r,c,e){"object"==typeof r&&(e=c,c=r,r="");var l=e&&e.maxRaw||null,d=e&&e.onChange||null,u=e&&e.onReady||null;c=c||[];var o,s=[],m=(o=r?$("#"+r):$("body")).find(".table-button-add");if(m.data("raw",c.length),l&&m.data("maxRaw",l),m.data("inited")||(m.data("inited",!0),m.on("click",function(){if(!m.data("maxRaw")||m.data("raw")';for(var a=0;a';else if("select"===s[a].type.substring(0,6)){f+=("multiple"===s[a].type.substring(7,16)?'"}else f+='';if(g[a]){p="text-align: center; "+(g[a].style||"")+(g[a].tdstyle||"");for(var v=0;v':f+='';g[a].class&&(t+=' class="'+g[a].class+'" ')}p.length||b.length?t+=' style="'+p+b+'">'+f+"":t+=">"+f+""}t+=""}var w=h.find(".table-lines");w.length||(h.append(''),w=h.find(".table-lines")),w.html(t),w.find(".values-input").each(function(){var e=$(this),t=e.attr("type"),n=e.data("name"),i=e.data("index");e.data("old-value",c[i][n]),"checkbox"===t?e.prop("checked",c[i][n]):e.val(c[i][n])}),w.find("a[data-command]").each(function(){var e=$(this).data("command");"delete"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),d&&d(),setTimeout(function(){"function"==typeof tableEvents&&tableEvents(e,t,"delete"),values2table(r,c,d,u,l)},100),m.data("maxRaw")&&m.data("raw",m.data("raw")-1)}).addClass("red").find(".material-icons").html("delete"):"up"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),c.splice(e-1,0,t),d&&d(),setTimeout(function(){values2table(e,c,d,u,l)},100)}).find("i").html("arrow_upward"):"down"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),c.splice(e+1,0,t),d&&d(),setTimeout(function(){values2table(e,c,d,u,l)},100)}).find("i").html("arrow_downward"):"pair"===e?$(this).on("click",function(){if("function"==typeof tableEvents){var e=$(this).data("index"),t=c[e];tableEvents(e,t,"pair")}}).attr("title",_("pair")).find("i").html("insert_link"):"unpair"===e&&$(this).on("click",function(){if("function"==typeof tableEvents){var e=$(this).data("index"),t=c[e];tableEvents(e,t,"unpair")}}).attr("title",_("unpair")).find("i").html("not_interested")}),w.find(".values-input").on("change.adaptersettings",function(){var e=$(this).data("index"),t=$(this).data("name");"checkbox"===$(this).attr("type")?($(this).prop("checked").toString()!==$(this).data("old-value")&&d&&d(t,e),c[e][t]=$(this).prop("checked")):($(this).val()!==$(this).data("old-value")&&d&&d(t,e),c[e][t]=$(this).val())}).on("keyup",function(){$(this).trigger("change.adaptersettings")})}"function"==typeof u&&u()}function table2values(e){var t;t=e?$("#"+e):$("body");var n=[];t.find(".table-values th").each(function(){var e=$(this).data("name");e?n.push(e):n.push("___ignore___")});var i=[],a=0;return t.find(".table-lines tr").each(function(){i[a]={},$(this).find("td").each(function(){var e=$(this).find("input");if(e.length){var t=e.data("name");"checkbox"===e.attr("type")?i[a][t]=e.prop("checked"):i[a][t]=e.val()}var n=$(this).find("select");if(n.length){t=n.data("name");i[a][t]=n.val()||""}}),a++}),i}var systemLang="en",systemDictionary={};function translateWord(e,t,n){if(!e)return"";if(t=t||systemLang,(n=n||systemDictionary)[e=e.toString()]){var i=n[e][t];if(i)return i;if("en"!==t&&(i=n[e].en))return i}else"string"!=typeof e||e.match(/_tooltip$/)?"string"!=typeof e&&console.warn("Trying to translate non-text:"+e):console.log('"'+e+'": {"en": "'+e+'", "cn": "'+e+'"},');return e}function translateAll(e,i,a){i=i||systemLang,a=a||systemDictionary,e||(e="body");var t=$(e);t.find(".translate").each(function(e){var t=$(this).attr("data-lang");t||(t=$(this).html(),$(this).attr("data-lang",t));var n=translateWord(t,i,a);n&&$(this).html(n)}),t.find(".translateV").each(function(e){var t=$(this).attr("data-lang-value");t||(t=$(this).attr("value"),$(this).attr("data-lang-value",t));var n=translateWord(t,i,a);n&&$(this).attr("value",n)}),t.find(".translateT").each(function(e){var t=$(this).attr("data-lang-title");t||(t=$(this).attr("title"),$(this).attr("data-lang-title",t));var n=translateWord(t,i,a);n&&$(this).attr("title",n)}),t.find(".translateP").each(function(e){var t=$(this).attr("data-lang-placeholder");t||(t=$(this).attr("placeholder"),$(this).attr("data-lang-placeholder",t));var n=translateWord(t,i,a);n&&$(this).attr("placeholder",n)})}function translateName(e){return e&&"object"==typeof e?e[systemLang]||e.en:e}var _=function(e,t,n,i){var a=(e=translateWord(e)).indexOf("%s");return-1===a||-1===(a=(e=e.replace("%s",t)).indexOf("%s"))||-1!==(a=(e=e.replace("%s",n)).indexOf("%s"))&&(e=e.replace("%s",i)),e};!function(X){if(!X.fn.treeTable){var t={init:function(e){e.imgPath=e.imgPath||"lib/css/fancytree/";for(var t=0;t';n+='
                        ';for(var i=e.rows,a=0;a'+(d?"":'')+''+l+""}n+="
                      ";var u=X(this),m=X(n);u.find(".treetablelist-buttons").remove(),u.find(".treetable-list").remove(),u.find(".tree-table-buttons").remove(),u.find(".tree-table-main").remove(),u.prepend(m);var g=X(m).find(".treetablelist-buttons"),h=X(m).find(".treetable-list");h.sortable({cancel:".treetable-list-folder",axis:"y"}).data("options",e);var f=this;g.find(".treetable-list-btn-ok").button({icons:{primary:"ui-icon-check"},text:!1}).css({width:24,height:24}).on("click",function(){var i="",a=[];h.find("li").each(function(){var e=X(this).data("id");if(X(this).hasClass("treetable-list-folder"))i=e;else{var t=e.split("."),n=t.pop();t.join(".")!==i&&a.push({oldId:e,newId:i+"."+n})}}),function t(n,i,a){if(i&&i.length){var e=i.shift();n.moveId&&n.moveId(e.oldId,e.newId,function(e){setTimeout(function(){t(n,i,a)},50)})}else a&&a()}(e,a,function(){p.call(f,e)})}),g.find(".treetable-list-btn-cancel").button({icons:{primary:"ui-icon-cancel"},text:!1}).css({width:24,height:24}).on("click",function(){p.call(f,e)})}function ne(e,t,n){var i="",a="",s=e&&e.common;if(s)if(s.icon){if(s.icon.match(/^data:image\//))i=s.icon;else{if(-1===s.icon.indexOf("."))return''+s.icon+"";var o;i="instance"===e.type?"/adapter/"+e.common.name+"/"+e.common.icon:e._id.match(/^system\.adapter\./)?(o=e._id.split(".",3),"/"===e.common.icon[0]?o[2]+=e.common.icon:o[2]+="/"+e.common.icon,"/adapter/"+o[2]):(o=e._id.split(".",2),"/"===e.common.icon[0]?o[0]+=e.common.icon:o[0]+="/"+e.common.icon,"/adapter/"+o[0])}a=e.type}else t=t||"lib/css/fancytree/","device"===e.type?(i=t+"device.png",a="device"):"channel"===e.type?(i=t+"channel.png",a="channel"):"state"===e.type&&(i=t+"state.png",a="state");return i?''+a+'':""}function p(i){var e="",t=window.M&&window.M.toast?"a":"button";if(i.panelButtons){e+='
                      ';for(var n=0;n",window.M&&window.M.toast&&(e+=''+(i.panelButtons[n].icon||"")+""),e+="";i.moveId&&(e+="<"+t+' class="btn-floating waves-effect waves-light blue treetable-sort" title="'+_("reorder")+'">',window.M&&window.M.toast&&(e+='import_export'),e+=""),e+="
                      "}e+='
                      ',e+=" ",e+=' ';for(var a=0;a",e+=' ',e+=' ',e+=" "):e+=" "+_(i.columns[a])+"";i.buttons&&(e+=" "),e+=" ",e+="",e+="";var s=[],o=i.root?new RegExp("^"+i.root.replace(/\./g,"\\.")+"\\."):null,r=-1!==i.columns.indexOf("instance")?[]:null;for(var c in i.objects){var l;if(i.objects.hasOwnProperty(c))if(r&&"instance"===i.objects[c].type&&(l=c.match(/^system\.adapter\.javascript\.(\d+)$/))&&r.push(l[1]),!o||o.test(c)){var d=i.objects[c].common,u={id:c,parent:null,_class:"treetable-"+i.objects[c].type};"channel"===i.objects[c].type&&(u.folder=!0);for(var m=0;mt.id?1:e.id',s[z].children&&s[z].children.length&&(e+=''+s[z].children.length+"")):e+='"}if(i.buttons){e+='"}e+=""}e+="";var R=X(this),H=X(e);R.find("span:first-child").remove(),R.find(".treetablelist-buttons").remove(),R.find(".treetable-list").remove(),R.find(".tree-table-buttons").remove(),R.find(".tree-table-main").remove(),R.prepend(H),i.rows=s;var B=X(H[1]).find(">table"),G=X(H[0]);B.data("options",i),B.treetable({expandable:!0,clickableNodeNames:!0,expanderTemplate:"",indenterTemplate:'',onNodeExpand:q,onNodeCollapse:ee,stringCollapse:_("collapse"),stringExpand:_("expand")});var F=B.find("tbody");if(F.on("click","tr",function(){X(".selected").not(this).removeClass("selected"),X(this).addClass("selected");var e=X(this).parent().parent().data("options"),t=X(this).data("tt-id");e.onChange&&e.onChange(X(this).data("tt-id"),e.oldId),e.oldId=t}),i.buttons)for(var Z=0;Z"%s"?',en:'Are you sure to delete "%s"?'},'Are you sure to delete all children of %s?':{cn:'确定删除 %s 的全部子项?',en:'Are you sure to delete all children of %s?'},"Are you sure to delete all children of %s?":{cn:'你确定删除 "%s"全部的子项目?',en:'Are you sure to delete "%s" and all children?'},"Are you sure to delete script %s?":{cn:"你确定删除脚本 '%s'?",en:"Are you sure to delete script '%s'?"},"Are you sure you want to delete adapter %s?":{cn:"你确定删除适配器: %s?",en:"Are you sure you want to delete adapter %s?"},"Are you sure you want to delete the instance %s?":{cn:"你确定要删除这个实例: %s?",en:"Are you sure you want to delete the instance %s?"},"Are you sure?":{cn:"你确定吗?",en:"Are you sure?"},"Are you sure? Changes are not saved.":{cn:"数据没有保存,你确定啊吗?",en:"Are you sure? Changes are not saved."},Aug:{cn:"Aug",en:"Aug"},August:{cn:"August",en:"August"},Available:{cn:"可用的",en:"Available"},"Available version:":{cn:"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:"点击图标打开链接",en:"Click on icon to open a link"},Close:{cn:"关闭",en:"close"},"Collapse all nodes":{cn:"收起全部",en:"Collapse all nodes"},Color:{cn:"颜色",en:"Color"},"Configuration not saved.":{cn:"配置信息没有存储.",en:"Configuration not saved."},"Connected to %s: ":{cn:"Connected to %s: ",en:"Connected to %s: "},"Connected to host: ":{cn:"Connected to host: ",en:"Connected to host: "},"Copy log":{cn:"复制",en:"Copy log"},"Copy to clipboard":{cn:"拷贝",en:"Copy to clipboard"},"Country:":{cn:"国家/地区",en:"Country"},Create:{cn:"创建",en:"Create"},"Create new category":{cn:"新建分类",en:"Create new category"},"Create new category, like %s":{cn:"创建新的分类, like %s",en:"Create new category, like %s"},"Create new enum":{cn:"新建枚举",en:"Create new enum"},"Create new enum, like %s":{cn:"创建新的枚举, like %s",en:"Create new enum, like %s"},"Create new group":{cn:"新建群组",en:"Create new group"},"Create new user":{cn:"创建新用户",en:"Create new user"},Created:{cn:"Created",en:"Created"},Croatia:{cn:"Croatia",en:"Croatia"},"Cron expression":{cn:"Cron expression",en:"Cron expression"},"Currency:":{cn:"货币",en:"Currency"},Custom:{cn:"自定义",en:"Custom"},D$ecember:{cn:"D$ecember",en:"D$ecember"},"DD.MM.YY":{cn:"DD.MM.YY",en:"DD.MM.YY"},"DD.MM.YYYY":{cn:"DD.MM.YYYY",en:"DD.MM.YYYY"},"DD/MM/YYYY":{cn:"DD/MM/YYYY",en:"DD/MM/YYYY"},"Date From":{cn:"Date From",en:"Date From"},"Date To":{cn:"Date To",en:"Date To"},"Date format:":{cn:"时间格式",en:"Date format"},"Deactivated. Click to start.":{cn:"Deactivated. Click to start.",en:"Deactivated. Click to start."},"Debug outputs:":{cn:"调试输出",en:"Debug outputs"},Dec:{cn:"Dec",en:"Dec"},December:{cn:"December",en:"December"},"Default ACL":{cn:"缺省 ACL",en:"Default ACL"},"Default history instance:":{cn:"缺省的数据记录实例",en:"Default history instance"},"Delete attribute":{cn:"删除",en:"Delete attribute"},"Delete category":{cn:"删除",en:"Delete category"},"Delete enum":{cn:"删除",en:"Delete enum"},"Delete member":{cn:"删除",en:"Delete member"},"Delete object":{cn:"删除",en:"Delete object"},Denmark:{cn:"Denmark",en:"Denmark"},Description:{cn:"说明",en:"Description"},Device:{cn:"Device",en:"Device"},"Device discovery":{cn:"Device discovery",en:"Device discovery"},"Disk free":{cn:"磁盘空闲",en:"Disk free"},"Disk free:":{cn:"磁盘空闲:",en:"Disk free:"},"Disk size":{cn:"磁盘大小",en:"Disk size"},'Do you want to delete just one object or all children of %s too?':{cn:'Do you want to delete just one object or all children of %s too?',en:'Do you want to delete just one object or all children of %s too?'},"Do you want to upgrade all adapters?":{cn:"Do you want to upgrade all adapters?",en:"Do you want to upgrade all adapters?"},"Domains:":{cn:"Domains",en:"Domains"},Dominica:{cn:"Dominica",en:"Dominica"},"Done with error: %s":{cn:"Done with error: %s",en:"Done with error: %s"},"Download log":{cn:"下载",en:"Download log"},"Drop the files here":{cn:"拖放文件到这里",en:"Drop the files here"},"Drop the icons here":{cn:"拖放图标文件到这里",en:"Drop the icons here"},Ecuador:{cn:"Ecuador",en:"Ecuador"},Edit:{cn:"编辑",en:"Edit"},"Edit category":{cn:"编辑 category",en:"Edit category"},"Edit enum":{cn:"编辑 enum",en:"Edit enum"},"Edit in dialog":{cn:"编辑 in dialog",en:"Edit in dialog"},"Edit object":{cn:"编辑 object",en:"Edit object"},Egypt:{cn:"Egypt",en:"Egypt"},"El Salvador":{cn:"El Salvador",en:"El Salvador"},"Email for account:":{cn:"Email for account",en:"Email for account"},Enums:{cn:"枚举",en:"Enums"},Error:{cn:"错误",en:"Error"},Event:{cn:"类型",en:"Type"},Events:{cn:"事件",en:"Events"},Everyone:{cn:"Everyone",en:"Everyone"},"Expand all nodes":{cn:"Expand all nodes",en:"Expand all nodes"},"Failed to open JSON File":{cn:"Failed to open JSON file",en:"Failed to open JSON file"},"Falkland Islands (Malvinas)":{cn:"Falkland Islands (Malvinas)",en:"Falkland Islands (Malvinas)"},"Faroe Islands":{cn:"Faroe Islands",en:"Faroe Islands"},Feb:{cn:"Feb",en:"Feb"},February:{cn:"February",en:"February"},"File is too big!":{cn:"文件太大!",en:"File is too big!"},"File rights":{cn:"File rights",en:"File rights"},"Filter:":{cn:"查找",en:"Filter"},"Filtered out":{cn:"Everything is filtered out",en:"Everything is filtered out"},"Find coordinates...":{cn:"Find coordinates...",en:"Find coordinates..."},"Float divider:":{cn:"小数点",en:"Float divider"},"Free RAM:":{cn:"Free:",en:"Free:"},Fri:{cn:"Fri",en:"Fri"},From:{cn:"From: ",en:"From: "},"From github":{cn:"软件仓库",en:"From github"},Function:{cn:"Function",en:"Function"},"Generated ID:":{cn:"Generated ID",en:"Generated ID"},"Go to Github...":{cn:"Go to Github...",en:"Go to Github..."},Group:{cn:"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:"上传图标",en:"Icon upload"},"In background":{cn:"后台运行",en:"In background"},Info:{cn:"信息",en:"Info"},Insert:{cn:"插入",en:"Insert"},Install:{cn:"安装",en:"Install"},"Install adapter from URL":{cn:"安装或升级",en:"Install or update the adapter from URL"},"Install adapter from github":{cn:"软件仓库安装或升级",en:"Install or update the adapter from Github"},"Install from custom URL":{cn:"自定义 URL 安装",en:"Install from custom URL"},"Install or update from URL...":{cn:"正在安装...",en:"Install or update from URL..."},"Installation counter":{cn:"Installations counter",en:"Installations counter"},"Installations counter":{cn:"Installations counter",en:"Installations counter"},Installed:{cn:"已安装",en:"Installed"},"Installed from group":{cn:"Installed from group",en:"Installed from group"},"Installed instances":{cn:"已安装的实例",en:"Installed instances"},"Installed version":{cn:"已安装版本",en:"Installed version"},Instances:{cn:"实例",en:"Instances"},Instructions:{cn:"指令",en:"Instructions"},Intro:{cn:"总览",en:"Overview"},"Invalid version of %s":{cn:"Invalid version of %s",en:"Invalid version of %s"},"Invalid version of %s. Required %s":{cn:"Invalid version of %s. Required %s",en:"Invalid version of %s. Required %s"},"Is yet in the list":{cn:"已经在列表中",en:"It's already in the list"},Jan:{cn:"Jan",en:"Jan"},January:{cn:"January",en:"January"},Jul:{cn:"七月",en:"Jul"},July:{cn:"July",en:"July"},Jun:{cn:"Jun",en:"Jun"},June:{cn:"June",en:"June"},"Known bugs for":{cn:"Known bugs for",en:"Known bugs for"},"Last changed":{cn:"上次修改",en:"Last changed"},"Last update":{cn:"上次更新",en:"Last update"},"Latitude:":{cn:"纬度",en:"Latitude"},"Let's Encrypt settings":{cn:"Let's Encrypt settings",en:"Let's Encrypt settings"},"Let's encrypt SSL":{cn:"Let's encrypt SSL",en:"Let's encrypt SSL"},License:{cn:"许可",en:"License"},"License terms":{cn:"许可条款",en:"License terms"},"Listen on all IPs":{cn:"Listen on all IPs",en:"Listen on all IPs"},"Loading...":{cn:"正在加载...",en:"Loading..."},Log:{cn:"日志",en:"Log"},"Log file will be deleted. Are you sure?":{cn:"日志文件将被删除,你确定吗?",en:"Log file will be deleted. Are you sure?"},"Log size:":{cn:"文件大小",en:"Log size"},"Login timeout(sec):":{cn:"登录超时 (秒)",en:"Login timeout (sec)"},Logout:{cn:"退出",en:"Logout"},"Longitude:":{cn:"经度",en:"Longitude"},MB:{cn:"Mb",en:"Mb"},Main:{cn:"Main",en:"Main"},"Main settings":{cn:"主设置",en:"Main settings"},"Manually created":{cn:"手工创建",en:"Manually created"},Mar:{cn:"三月",en:"Mar"},March:{cn:"三月",en:"March"},Members:{cn:"Members",en:"Members"},Message:{cn:"消息",en:"Message"},"Message buffer overflow. Losing oldest":{cn:"Message buffer overflow. Losing oldest.",en:"Message buffer overflow. Losing oldest."},Model:{cn:"型号",en:"Model"},Mon:{cn:"Mon",en:"Mon"},NPM:{cn:"NPM",en:"NPM"},Name:{cn:"名称",en:"Name"},"Name:":{cn:"名称",en:"Name"},New:{cn:"新建",en:"New"},"New category":{cn:"新类别",en:"New category"},"New enum":{cn:"新类别",en:"New enum"},"New group":{cn:"新群组",en:"New group"},"New object":{cn:"新对象",en:"New object"},"New objekt":{cn:"新对象",en:"New object"},"New user":{cn:"新用户",en:"New user"},"No data":{cn:"暂无数据",en:"No data"},"No states selected!":{cn:"No states selected!",en:"No states selected!"},"No version of %s":{cn:"No version of %s",en:"No version of %s"},"Node.js":{cn:"Node.js",en:"Node.js"},Norway:{cn:"Norway",en:"Norway"},"Not exists":{cn:"不存在",en:"Does not exist"},"Note:":{cn:"Note",en:"Note"},Nov:{cn:"十一月",en:"Nov"},November:{cn:"十一月",en:"November"},OS:{cn:"OS",en:"OS"},'Object "%s" does not exists. Update the page.':{cn:'Object "%s" 不存在,请刷新.',en:'Object "%s" does not exist. Update the page.'},"Object may not be deleted":{cn:"对象不能被删除",en:"Object may not be deleted"},"Object rights":{cn:"对象权限",en:"Object rights"},Objects:{cn:"对象",en:"Objects"},Oct:{cn:"十月",en:"Oct"},October:{cn:"十月",en:"October"},Ok:{cn:"确认",en:"Ok"},"Only one":{cn:"Only one",en:"Only one"},"Open original":{cn:"在新标签中打开",en:"Open on new tab"},Owner:{cn:"Owner",en:"Owner"},"Owner group":{cn:"Owner group",en:"Owner group"},"Owner user":{cn:"Owner user",en:"Owner user"},Parent:{cn:"父类",en:"Parent"},"Parse error":{cn:"Parse error",en:"Parse error"},Password:{cn:"密码",en:"Password"},"Password and confirmation are not equal!":{cn:"Password and confirmation are not equal!",en:"Password and confirmation are not equal!"},"Password cannot be empty!":{cn:"密码不能为空!",en:"Password cannot be empty!"},"Password repeat":{cn:"Password repeat",en:"Password repeat"},"Path to storage:":{cn:"存储路径",en:"Path to storage"},"Pause output":{cn:"暂停输出",en:"Pause output"},Platform:{cn:"平台",en:"Platform"},"Please confirm":{cn:"请确认",en:"Please confirm"},"Port to check the domain:":{cn:"Port to check the domain",en:"Port to check the domain"},"Preserve ID":{cn:"Preserve ID",en:"Preserve ID"},Preview:{cn:"Preview",en:"Preview"},"Processing...":{cn:"处理中...",en:"Processing..."},RAM:{cn:"内存",en:"RAM"},"RAM total usage:":{cn:"RAM总使用量:",en:"Total RAM usage:"},"RAM usage":{cn:"使用内存",en:"RAM usage"},"Rebuild tree":{cn:"重建树",en:"Rebuild tree"},"Recently updated":{cn:"Recently updated",en:"Recently updated"},"Refresh log":{cn:"刷新",en:"Refresh log"},Removed:{cn:"已删除",en:"Removed"},"Removing of adapter...":{cn:"Removing of adapter...",en:"Removing of adapter..."},"Removing of instance...":{cn:"Removing of instance...",en:"Removing of instance..."},Rename:{cn:"重命名",en:"Rename"},Repositories:{cn:"软件仓库",en:"Repositories"},Rights:{cn:"权限",en:"Access rights"},Role:{cn:"角色",en:"Role"},Room:{cn:"场景",en:"Room"},"Running: ":{cn:"Running: ",en:"Running: "},"Sao Tome and Principe":{cn:"Sao Tome and Principe",en:"Sao Tome and Principe"},Sat:{cn:"星期六",en:"Sat"},Save:{cn:"保存",en:"Save"},"Save Objecttree as JSON File":{cn:"将对象保存为 JSON 文件",en:"Save objects tree as JSON file"},"Save Objecttree is not possible":{cn:"Saving the objects tree is not possible",en:"Saving the objects tree is not possible"},"Save configuration":{cn:"保存配置",en:"Save configuration"},Script:{cn:"脚本",en:"Script"},Scripts:{cn:"脚本",en:"Scripts"},Select:{cn:"Select",en:"Select"},"Select ID":{cn:"Select ID",en:"Select ID"},"Select adapter:":{cn:"选择适配器",en:"Select adapter"},"Select language":{cn:"选择语言",en:"Select language"},"Select options":{cn:"选项",en:"Select options"},"Sent data:":{cn:"Sent data",en:"Sent data"},Sep:{cn:"九月",en:"Sep"},September:{cn:"九月",en:"September"},Set:{cn:"Set",en:"Set"},"Set CRON":{cn:"Set",en:"Set"},"Set CRON schedule for restarts":{cn:"Set CRON schedule for restarts",en:"Set CRON schedule for restarts"},Settings:{cn:"设置",en:"Settings"},"Settings for %s":{cn:"Settings for %s",en:"Settings for %s"},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:"运行",en:"System uptime"},Table:{cn:"Table",en:"Table"},Taiwan:{cn:"中国台湾",en:"Taiwan"},"Temperature units:":{cn:"温度单位",en:"Temperature units"},'This version of node.js "%s" on "%s" is deprecated. Please install node.js 6, 8 or newer':{cn:'yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version ("%s") on host "%s" to one of the supported versions. We recommend to use Node.js 6.',en:'yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version ("%s") on host "%s" to one of the supported versions. We recommend to use Node.js 6.'},Thu:{cn:"Thu",en:"Thu"},Time:{cn:"Time",en:"Time"},"Time From":{cn:"Time From",en:"Time From"},"Time To":{cn:"Time To",en:"Time To"},"Time stamp":{cn:"Time stamp",en:"Time stamp"},Title:{cn:"标题",en:"Title"},To:{cn:"To",en:"To"},Today:{cn:"今日",en:"Today"},"Toggle expert mode":{cn:"切换模式",en:"Toggle expert mode"},"Toggle states view":{cn:"切换状态视图",en:"Toggle the states view"},"Too many events":{cn:"Too many events",en:"Too many events"},"Total count in group":{cn:"Total count in group",en:"Total count in group"},"Trigger event":{cn:"触发事件",en:"Trigger event"},Type:{cn:"Type",en:"Type"},"URL or file path:":{cn:"URL或安装包路径",en:"URL or file path"},"Unknown file format!":{cn:"文件格式无效!",en:"Unknown file format!"},"Unsupported image format":{cn:"不支持的格式",en:"Unsupported image format"},Update:{cn:"更新",en:"Update"},"Update objects":{cn:"更新",en:"Update objects"},"Update states":{cn:"更新",en:"Update states"},Updated:{cn:"已更新",en:"Updated"},"Upgrade all adapters":{cn:"升级所有适配器",en:"Upgrade all adapters"},Upload:{cn:"文件上传",en:"File upload"},"Upload admin started":{cn:"上传配置",en:"Upload of configuration is started"},"Upload started...":{cn:"上传开始...",en:"Upload started..."},Uptime:{cn:"Uptime",en:"Uptime"},Uruguay:{cn:"Uruguay",en:"Uruguay"},"Use Lets Encrypt certificates:":{cn:"Use Let's Encrypt certificates",en:"Use Let's Encrypt certificates"},"Use this instance for automatic update:":{cn:"Use this instance for automatic update",en:"Use this instance for automatic update"},User:{cn:"用户",en:"User"},"User deleted":{cn:"用户已删除",en:"User deleted"},"User does not exist":{cn:"这个用户不存在",en:"User does not exist"},"User yet exists":{cn:"这个用户已经存在",en:"User already exists"},Users:{cn:"用户",en:"Users"},Value:{cn:"Value",en:"Value"},"Values of %s":{cn:"Values of %s",en:"Values of %s"},"Vatican City State":{cn:"Vatican City State",en:"Vatican City State"},Wed:{cn:"Wed",en:"Wed"},With:{cn:"With",en:"With"},Without:{cn:"Without",en:"Without"},"You are going to add new instance: ":{cn:"添加新的实例: ",en:"You are going to add new instance: "},"You can check changelog here":{cn:'You can check the changelog here',en:'You can check the changelog here'},"You can drag&drop the devices, channels and states to enums":{cn:"可将 devices,channels,states 拖放到枚举区",en:"You can drag&drop the devices, channels and states to enums"},"You can drag&drop users to groups":{cn:"支持拖放用户",en:"You can drag&drop users to groups"},"You can't see events via cloud":{cn:"You can't see events via cloud",en:"You can't see events via cloud"},"Your home":{cn:"Your home",en:"Your home"},_All:{cn:"全部",en:"All"},"_Toggle expert mode":{cn:"切换模式",en:"Toggle expert mode"},__different__:{cn:"different",en:"different"},"a-z":{cn:"a-z",en:"a-z"},ack:{cn:"ack",en:"ack"},actions:{cn:"actions",en:"actions"},active:{cn:"active",en:"active"},"adapter with updates":{cn:"adapters with updates",en:"adapters with updates"},"adapters count":{cn:"适配器数",en:"adapters count"},add:{cn:"添加",en:"Add"},"add children":{cn:"添加子节点",en:"add children"},"add instance":{cn:"添加实例",en:"add instance"},"add repository":{cn:"添加仓库",en:"add repository"},agree:{cn:"同意",en:"agree"},alarm_group:{cn:"Alarm",en:"Alarm"},alive:{cn:"alive",en:"alive"},all:{cn:"all",en:"all"},alpha:{cn:"alpha",en:"alpha"},array:{cn:"array",en:"array"},auto:{cn:"auto",en:"auto"},available:{cn:"最新",en:"available"},beta:{cn:"beta",en:"beta"},boolean:{cn:"boolean",en:"boolean"},bug:{cn:"bugtracker",en:"bugtracker"},cancel:{cn:"取消",en:"Cancel"},cert_path_note:{cn:"例如 '/opt/certs/cert.pem', 也可以直接拖放文件",en:"You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop"},certificate:{cn:"certificate",en:"certificate"},"change view mode":{cn:"模式",en:"change view mode"},channel:{cn:"channel",en:"channel"},clear:{cn:"清除",en:"clear"},"climate-control_group":{cn:"Climate Control",en:"Climate Control"},"close on ready":{cn:"完成后自动关闭",en:"close on ready"},collapse:{cn:"收起",en:"collapse"},"collapse all":{cn:"收起",en:"collapse all"},comma:{cn:"comma",en:"comma"},"command execution":{cn:"执行命令 ",en:"Command execution"},common:{cn:"公共",en:"common"},"common adapters_group":{cn:"公共",en:"Common"},common_color:{cn:"颜色",en:"color"},common_def:{cn:"缺省值",en:"default value"},common_desc:{cn:"说明",en:"description"},common_icon:{cn:"图标",en:"icon"},common_max:{cn:"最大值",en:"max value"},common_min:{cn:"最小值",en:"minimal value"},common_read:{cn:"允许读",en:"read allowed"},common_role:{cn:"角色",en:"role"},common_states:{cn:"预定义值",en:"predefined values"},common_type:{cn:"类型",en:"type"},common_unit:{cn:"量度单位",en:"measure unit"},common_write:{cn:"允许写",en:"write allowed"},communication_group:{cn:"通信",en:"Communication"},config:{cn:"设置",en:"Settings"},"config instance":{cn:"配置实例",en:"config instance"},"confirm password":{cn:"密码确认",en:"Confirm password"},connected:{cn:"已连接",en:"connected"},copy:{cn:"复制",en:"copy"},"copy note":{cn:"Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close.",en:"Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close."},"create operation":{cn:"创建",en:"create"},"custom enum":{cn:"自定义枚举",en:"?ustom enum"},"custom group":{cn:"自定义群组",en:"Custom group"},daemon:{cn:"daemon",en:"daemon"},"date-and-time_group":{cn:"日期和时间",en:"Date and Time"},daysShortText:{cn:"d.",en:"d."},debug:{cn:"debug",en:"debug"},delete:{cn:"删除",en:"delete"},"delete adapter":{cn:"删除",en:"delete adapter"},"delete group":{cn:"删除",en:"delete group"},"delete instance":{cn:"删除",en:"delete instance"},"delete operation":{cn:"删除",en:"delete"},"delete script":{cn:"删除",en:"delete script"},"delete user":{cn:"删除",en:"delete user"},desc:{cn:"desc",en:"desc"},description:{cn:"说明",en:"Description"},device:{cn:"device",en:"device"},"diag-note":{cn:"We worked hard to create this project. In return we expect from you some usage statistics.
                      Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.
                      Thank you!",en:"We worked hard to create this project. In return we expect from you some usage statistics.
                      Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.
                      Thank you!"},edit:{cn:"编辑",en:"edit"},"edit enum":{cn:"编辑",en:"edit enum"},"edit file":{cn:"编辑",en:"edit file"},"edit group":{cn:"编辑",en:"edit group"},"edit instance":{cn:"编辑",en:"edit instance"},"edit script":{cn:"编辑",en:"edit script"},"edit user":{cn:"修改",en:"edit user"},"edit value":{cn:"编辑",en:"Edit value"},enabled:{cn:"enabled",en:"enabled"},energy_group:{cn:"能源",en:"Energy"},engine:{cn:"engine",en:"engine"},"engine type":{cn:"engine type",en:"engine type"},error:{cn:"错误",en:"error"},events:{cn:"events",en:"events"},"execute operation":{cn:"Execute operation",en:"Execute operation"},expand:{cn:"展开",en:"expand"},"expand all":{cn:"展开所有",en:"expand all"},extended:{cn:"extended",en:"extended"},false:{cn:"false",en:"false"},"file permissions":{cn:"文件许可",en:"File permissions"},from:{cn:"来自",en:"from"},garden_group:{cn:"农业",en:"Garden"},general_group:{cn:"基本",en:"General"},geoposition_group:{cn:"地理位置",en:"Geo position"},groups:{cn:"groups",en:"groups"},hardware_group:{cn:"硬件",en:"Hardware"},history:{cn:"数据",en:"history"},"history data":{cn:"数据",en:"history data"},host:{cn:"主机",en:"host"},household_group:{cn:"Household",en:"Household"},"http operation":{cn:"http",en:"http"},id:{cn:"ID",en:"ID"},info:{cn:"信息",en:"info"},infrastructure_group:{cn:"环境",en:"Infrastructure"},install:{cn:"安装",en:"install"},"install specific version":{cn:"安装指定版本",en:"Install a specific version"},installed:{cn:"已安装",en:"installed"},"installed adapters":{cn:"Filter adapters with existing instances",en:"Filter adapters with existing instances"},instance:{cn:"实例",en:"instance"},"instance number":{cn:"Desired instance number",en:"Desired instance number"},"yunkong2 Enums":{cn:"yunkong2 enums",en:"yunkong2 enums"},"yunkong2 States":{cn:"yunkong2 states",en:"yunkong2 states"},"yunkong2 adapter instances":{cn:"yunkong2 adapter instances",en:"yunkong2 adapter instances"},"yunkong2 adapter scripts":{cn:"yunkong2 adapter scripts",en:"yunkong2 adapter scripts"},"yunkong2 adapters":{cn:"yunkong2 adapters",en:"yunkong2 adapters"},"yunkong2 certificates":{cn:"yunkong2 certificates",en:"yunkong2 certificates"},"yunkong2 groups":{cn:"yunkong2 groups",en:"yunkong2 groups"},"yunkong2 hosts":{cn:"yunkong2 hosts",en:"yunkong2 hosts"},"yunkong2 repositories":{cn:"yunkong2 repositories",en:"yunkong2 repositories"},"yunkong2 users":{cn:"yunkong2 users",en:"yunkong2 users"},"iot-system_group":{cn:"物联网",en:"IoT systems"},"iot-systems_group":{cn:"物联网系统",en:"IoT Systems"},keywords:{cn:"关键字",en:"keywords"},lc:{cn:"Last change",en:"Last change"},less:{cn:"精简",en:"less"},letsnecrypt_help:{cn:'This are settings for Let\'s Encrypt account. To get the free certificates for your domain. You can read more here.',en:'This are settings for Let\'s Encrypt account. To get the free certificates for your domain. You can read more here.'},letsnecrypt_help_domains:{cn:"E.g: 'example.com, www.example.com'",en:"E.g: 'example.com, www.example.com'"},letsnecrypt_help_email:{cn:"Please use your email address. It will be used for your account.",en:"Please use your email address. It will be used for your account."},letsnecrypt_help_path:{cn:"Directory name where the certificates will be stored. This is always relative to configuration directory",en:"Directory name where the certificates will be stored. This is always relative to configuration directory"},license:{cn:"许可",en:"license"},"license agreement":{cn:"许可协议",en:"license agreement"},"license not agree":{cn:"不同意!",en:"Do not agree with the license!"},license_checkbox:{cn:"同意全部的许可条款",en:"I agree with the collection of anonymous statistics.
                      (This can be disabled in settings)"},lighting_group:{cn:"照明",en:"Lighting"},link:{cn:"link",en:"link"},list:{cn:"list",en:"list"},"list operation":{cn:"list elements",en:"list elements"},logic_group:{cn:"逻辑",en:"Logic"},loglevel:{cn:"loglevel",en:"loglevel"},media_group:{cn:"媒体",en:"Media"},members:{cn:"members",en:"members"},memlimit:{cn:"RAM limit",en:"RAM limit"},message:{cn:"消息",en:"message"},messaging_group:{cn:"信使",en:"Messaging"},"misc-data_group":{cn:"Misc. data",en:"Misc. data"},mixed:{cn:"mixed",en:"mixed"},mode:{cn:"mode",en:"mode"},more:{cn:"详细",en:"more"},multi:{cn:"multistate",en:"multistate"},multimedia_group:{cn:"多媒体",en:"Multimedia"},name:{cn:"名称",en:"name"},native:{cn:"native",en:"native"},network_group:{cn:"网络",en:"Network"},"new certificate":{cn:"new certificate",en:"new certificate"},"new group":{cn:"new group",en:"new group"},"new script":{cn:"new script",en:"new script"},"new user":{cn:"新建用户",en:"new user"},newObject:{cn:"New object",en:"New object"},"no-city":{cn:"no city",en:"no city"},"node-red":{cn:"node-red",en:"node-red"},none:{cn:"none",en:"none"},normal:{cn:"normal",en:"normal"},"not ack":{cn:"not ack",en:"not ack"},"not agree":{cn:"不同意",en:"not agree"},"npm error":{cn:"npm error",en:"npm error"},number:{cn:"number",en:"number"},object:{cn:"object",en:"object"},"object permissions":{cn:"Object permissions",en:"Object permissions"},of:{cn:"/",en:"of"},ok:{cn:"确定",en:"Ok"},"open web page":{cn:"Open web page of adapter",en:"Open web page of adapter"},os:{cn:"OS",en:"operating system"},"other permissions":{cn:"Other permissions",en:"Other permissions"},"parent name":{cn:"parent name",en:"parent name"},password:{cn:"密码",en:"Password"},permissionError:{cn:"Permission error",en:"Permission error"},planned:{cn:"planned",en:"planned"},platform:{cn:"平台",en:"platform"},point:{cn:"point",en:"point"},process:{cn:"process",en:"process"},protocols_group:{cn:"协议",en:"Protocols"},raw:{cn:"Raw (开发)",en:"Raw (experts only)"},read:{cn:"read",en:"read"},"read operation":{cn:"read",en:"read"},readme:{cn:"readme",en:"readme"},reload:{cn:"刷新",en:"reload"},"reload instance":{cn:"reload instance",en:"reload instance"},rest:{cn:"REST (read only)",en:"rest (read only)"},restart:{cn:"重启",en:"auto restart"},"restart script":{cn:"重启脚本",en:"restart script"},role:{cn:"角色",en:"role"},save:{cn:"保存",en:"save"},schedule_group:{cn:"计划",en:"Schedule"},script_group:{cn:"逻辑和脚本",en:"Scripts and Logic"},"select member by double click":{cn:"select member by double clicking",en:"select member by double clicking"},"sendto operation":{cn:"Send-to operation",en:"Send-to operation"},service_group:{cn:"Maintenance",en:"Maintenance"},severity:{cn:"安防",en:"severity"},stable:{cn:"stable",en:"stable"},state:{cn:"state",en:"state"},"state permissions":{cn:"状态许可",en:"State permissions"},storage_group:{cn:"存储",en:"Storage"},string:{cn:"string",en:"string"},subscribe:{cn:"subscribe",en:"subscribe"},switch:{cn:"switch",en:"switch"},terminal:{cn:"Terminal",en:"Terminal"},"third-party_group":{cn:"第三方",en:"Third party"},"this adapter does not allow multiple instances":{cn:"这个适配器不允许运行多个实例",en:"This adapter does not allow multiple instances"},title:{cn:"标题",en:"title"},today:{cn:"今日",en:"today"},true:{cn:"true",en:"true"},ts:{cn:"时间",en:"Timestamp"},type:{cn:"type",en:"type"},unit:{cn:"unit",en:"unit"},update:{cn:"更新",en:"update"},"update adapter information":{cn:"update adapter information",en:"update adapter information"},"update-part1":{cn:"Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:",en:"Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:"},updated:{cn:"已更新",en:"updated"},updates:{cn:"updates",en:"updates"},upload:{cn:"上传",en:"Upload"},"user permissions":{cn:"用户权限",en:"user permissions"},users:{cn:"用户",en:"users"},"users permissions":{cn:"用户权限",en:"User permissions"},utility_group:{cn:"公用",en:"Utility"},val:{cn:"val",en:"val"},value:{cn:"value",en:"value"},"value.from":{cn:"Changed from",en:"Changed from"},"value.lc":{cn:"Last change",en:"Last change"},"value.q":{cn:"Quality code",en:"Quality code"},"value.ts":{cn:"Timestamp",en:"Timestamp"},"value.val":{cn:"value",en:"value"},version:{cn:"版本",en:"version"},vis_group:{cn:"yunkong2.vis",en:"yunkong2.vis"},visualisation_group:{cn:"可视化",en:"Visualisation"},"visualization-icons_group":{cn:"可视化 图标",en:"Visualization Icons"},"visualization-widgets_group":{cn:"可视化 部件",en:"Visualization Widgets"},visualization_group:{cn:"可视化",en:"Visualisation"},warn:{cn:"warn",en:"warn"},weather_group:{cn:"天气",en:"Weather"},wetty:{cn:"Wetty",en:"Wetty"},write:{cn:"write",en:"write"},"write operation":{cn:"write",en:"write"},yesterday:{cn:"昨天",en:"yesterday"},Speed:{cn:"主频",en:"Speed"},"%s object(s) processed":{cn:"%s objects were processed",en:"%s objects were processed"},"%s was imported":{cn:"%s was imported",en:"%s was imported"},"Ignore warning":{cn:"Ignore warning",en:"Ignore warning"},Filter:{cn:"查找",en:"Filter"},Afghanistan:{cn:"Afghanistan",en:"Afghanistan"},Albania:{cn:"Albania",en:"Albania"},Algeria:{cn:"Algeria",en:"Algeria"},"American Samoa":{cn:"American Samoa",en:"American Samoa"},Andorra:{cn:"Andorra",en:"Andorra"},Angola:{cn:"Angola",en:"Angola"},Anguilla:{cn:"Anguilla",en:"Anguilla"},Antarctica:{cn:"Antarctica",en:"Antarctica"},"Antigua and Barbuda":{cn:"Antigua and Barbuda",en:"Antigua and Barbuda"},Argentina:{cn:"Argentina",en:"Argentina"},Armenia:{cn:"Armenia",en:"Armenia"},Aruba:{cn:"Aruba",en:"Aruba"},Australia:{cn:"Australia",en:"Australia"},Austria:{cn:"Austria",en:"Austria"},"Authentication was deactivated":{cn:"Authentication was deactivated",en:"Authentication was deactivated"},Azerbaijan:{cn:"Azerbaijan",en:"Azerbaijan"},Background:{cn:"Background",en:"Background"},"Background color of the login screen":{cn:"Background color of the login screen",en:"Background color of the login screen"},"Background image":{cn:"Background image",en:"Background image"},Bahamas:{cn:"Bahamas",en:"Bahamas"},Bahrain:{cn:"Bahrain",en:"Bahrain"},Bangladesh:{cn:"Bangladesh",en:"Bangladesh"},Barbados:{cn:"Barbados",en:"Barbados"},Belarus:{cn:"Belarus",en:"Belarus"},Belgium:{cn:"Belgium",en:"Belgium"},Belize:{cn:"Belize",en:"Belize"},Benin:{cn:"Benin",en:"Benin"},Bermuda:{cn:"Bermuda",en:"Bermuda"},Bhutan:{cn:"Bhutan",en:"Bhutan"},Bolivia:{cn:"Bolivia",en:"Bolivia"},"Bosnia and Herzegovina":{cn:"Bosnia and Herzegovina",en:"Bosnia and Herzegovina"},Botswana:{cn:"Botswana",en:"Botswana"},"Bouvet Island":{cn:"Bouvet Island",en:"Bouvet Island"},Brazil:{cn:"Brazil",en:"Brazil"},"British Indian Ocean Territory":{cn:"British Indian Ocean Territory",en:"British Indian Ocean Territory"},"Brunei Darussalam":{cn:"Brunei Darussalam",en:"Brunei Darussalam"},Bulgaria:{cn:"Bulgaria",en:"Bulgaria"},"Burkina Faso":{cn:"Burkina Faso",en:"Burkina Faso"},Burundi:{cn:"Burundi",en:"Burundi"},Cambodia:{cn:"Cambodia",en:"Cambodia"},Cameroon:{cn:"Cameroon",en:"Cameroon"},Canada:{cn:"Canada",en:"Canada"},"Cape Verde":{cn:"Cape Verde",en:"Cape Verde"},"Cayman Islands":{cn:"Cayman Islands",en:"Cayman Islands"},"Central African Republic":{cn:"Central African Republic",en:"Central African Republic"},Chad:{cn:"Chad",en:"Chad"},Chile:{cn:"Chile",en:"Chile"},"Christmas Island":{cn:"Christmas Island",en:"Christmas Island"},"Cocos Islands":{cn:"Cocos Islands",en:"Cocos Islands"},Colombia:{cn:"Colombia",en:"Colombia"},Comoros:{cn:"Comoros",en:"Comoros"},Congo:{cn:"Congo",en:"Congo"},"Cook Islands":{cn:"Cook Islands",en:"Cook Islands"},"Costa Rica":{cn:"Costa Rica",en:"Costa Rica"},Cuba:{cn:"Cuba",en:"Cuba"},Cyprus:{cn:"Cyprus",en:"Cyprus"},"Czech Republic":{cn:"Czech Republic",en:"Czech Republic"},"Disable authentication":{cn:"Disable authentication",en:"Disable authentication"},Djibouti:{cn:"Djibouti",en:"Djibouti"},"Dominican Republic":{cn:"Dominican Republic",en:"Dominican Republic"},"East Timor":{cn:"East Timor",en:"East Timor"},"Enabled:":{cn:"Enabled",en:"Enabled"},"Equatorial Guinea":{cn:"Equatorial Guinea",en:"Equatorial Guinea"},Eritrea:{cn:"Eritrea",en:"Eritrea"},Estonia:{cn:"Estonia",en:"Estonia"},Ethiopia:{cn:"Ethiopia",en:"Ethiopia"},Fiji:{cn:"Fiji",en:"Fiji"},Finland:{cn:"Finland",en:"Finland"},France:{cn:"France",en:"France"},"French Guiana":{cn:"French Guiana",en:"French Guiana"},"French Polynesia":{cn:"French Polynesia",en:"French Polynesia"},"French Southern Territories":{cn:"French Southern Territories",en:"French Southern Territories"},Gabon:{cn:"Gabon",en:"Gabon"},Gambia:{cn:"Gambia",en:"Gambia"},Georgia:{cn:"Georgia",en:"Georgia"},Germany:{cn:"Germany",en:"Germany"},Ghana:{cn:"Ghana",en:"Ghana"},Gibraltar:{cn:"Gibraltar",en:"Gibraltar"},Greece:{cn:"Greece",en:"Greece"},Greenland:{cn:"Greenland",en:"Greenland"},Grenada:{cn:"Grenada",en:"Grenada"},Guadeloupe:{cn:"Guadeloupe",en:"Guadeloupe"},Guam:{cn:"Guam",en:"Guam"},Guatemala:{cn:"Guatemala",en:"Guatemala"},Guernsey:{cn:"Guernsey",en:"Guernsey"},Guinea:{cn:"Guinea",en:"Guinea"},"Guinea-Bissau":{cn:"Guinea-Bissau",en:"Guinea-Bissau"},Guyana:{cn:"Guyana",en:"Guyana"},Haiti:{cn:"Haiti",en:"Haiti"},Honduras:{cn:"Honduras",en:"Honduras"},Hungary:{cn:"Hungary",en:"Hungary"},Iceland:{cn:"Iceland",en:"Iceland"},India:{cn:"India",en:"India"},Indonesia:{cn:"Indonesia",en:"Indonesia"},Iran:{cn:"Iran",en:"Iran"},Iraq:{cn:"Iraq",en:"Iraq"},Ireland:{cn:"Ireland",en:"Ireland"},"Isle of Man":{cn:"Isle of Man",en:"Isle of Man"},Israel:{cn:"Israel",en:"Israel"},Italy:{cn:"Italy",en:"Italy"},"Ivory Coast":{cn:"Ivory Coast",en:"Ivory Coast"},Jamaica:{cn:"Jamaica",en:"Jamaica"},Japan:{cn:"Japan",en:"Japan"},Jersey:{cn:"Jersey",en:"Jersey"},Jordan:{cn:"Jordan",en:"Jordan"},Kazakhstan:{cn:"Kazakhstan",en:"Kazakhstan"},Kenya:{cn:"Kenya",en:"Kenya"},Kiribati:{cn:"Kiribati",en:"Kiribati"},Korea:{cn:"Korea",en:"Korea"},Kosovo:{cn:"Kosovo",en:"Kosovo"},Kuwait:{cn:"Kuwait",en:"Kuwait"},Kyrgyzstan:{cn:"Kyrgyzstan",en:"Kyrgyzstan"},"Lao People's Democratic Republic":{cn:"Lao People's Democratic Republic",en:"Lao People's Democratic Republic"},Latvia:{cn:"Latvia",en:"Latvia"},Lebanon:{cn:"Lebanon",en:"Lebanon"},Lesotho:{cn:"Lesotho",en:"Lesotho"},Liberia:{cn:"Liberia",en:"Liberia"},"Libyan Arab Jamahiriya":{cn:"Libyan Arab Jamahiriya",en:"Libyan Arab Jamahiriya"},Liechtenstein:{cn:"Liechtenstein",en:"Liechtenstein"},Lithuania:{cn:"Lithuania",en:"Lithuania"},Luxembourg:{cn:"Luxembourg",en:"Luxembourg"},Macau:{cn:"Macau",en:"Macau"},Macedonia:{cn:"Macedonia",en:"Macedonia"},Madagascar:{cn:"Madagascar",en:"Madagascar"},Mai:{cn:"Mai",en:"Mai"},Malawi:{cn:"Malawi",en:"Malawi"},Malaysia:{cn:"Malaysia",en:"Malaysia"},Maldives:{cn:"Maldives",en:"Maldives"},Mali:{cn:"Mali",en:"Mali"},Malta:{cn:"Malta",en:"Malta"},"Marshall Islands":{cn:"Marshall Islands",en:"Marshall Islands"},Martinique:{cn:"Martinique",en:"Martinique"},Mauritania:{cn:"Mauritania",en:"Mauritania"},Mauritius:{cn:"Mauritius",en:"Mauritius"},Mayotte:{cn:"Mayotte",en:"Mayotte"},Mexico:{cn:"Mexico",en:"Mexico"},Micronesia:{cn:"Micronesia",en:"Micronesia"},Moldova:{cn:"Moldova",en:"Moldova"},Monaco:{cn:"Monaco",en:"Monaco"},Mongolia:{cn:"Mongolia",en:"Mongolia"},Montenegro:{cn:"Montenegro",en:"Montenegro"},Montserrat:{cn:"Montserrat",en:"Montserrat"},Morocco:{cn:"Morocco",en:"Morocco"},Mozambique:{cn:"Mozambique",en:"Mozambique"},Myanmar:{cn:"Myanmar",en:"Myanmar"},Namibia:{cn:"Namibia",en:"Namibia"},Nauru:{cn:"Nauru",en:"Nauru"},Nepal:{cn:"Nepal",en:"Nepal"},Netherlands:{cn:"Netherlands",en:"Netherlands"},"Netherlands Antilles":{cn:"Netherlands Antilles",en:"Netherlands Antilles"},"New Caledonia":{cn:"New Caledonia",en:"New Caledonia"},"New Zealand":{cn:"New Zealand",en:"New Zealand"},Nicaragua:{cn:"Nicaragua",en:"Nicaragua"},Niger:{cn:"Niger",en:"Niger"},Nigeria:{cn:"Nigeria",en:"Nigeria"},Niue:{cn:"Niue",en:"Niue"},"Norfolk Island":{cn:"Norfolk Island",en:"Norfolk Island"},"Northern Mariana Islands":{cn:"Northern Mariana Islands",en:"Northern Mariana Islands"},Oman:{cn:"Oman",en:"Oman"},Pakistan:{cn:"Pakistan",en:"Pakistan"},Palau:{cn:"Palau",en:"Palau"},Palestine:{cn:"Palestine",en:"Palestine"},Panama:{cn:"Panama",en:"Panama"},"Papua New Guinea":{cn:"Papua New Guinea",en:"Papua New Guinea"},Paraguay:{cn:"Paraguay",en:"Paraguay"},Peru:{cn:"Peru",en:"Peru"},Philippines:{cn:"Philippines",en:"Philippines"},Pitcairn:{cn:"Pitcairn",en:"Pitcairn"},Poland:{cn:"Poland",en:"Poland"},Popular:{cn:"Popular",en:"Popular"},"Popular first":{cn:"Popular first",en:"Popular first"},Portugal:{cn:"Portugal",en:"Portugal"},"Puerto Rico":{cn:"Puerto Rico",en:"Puerto Rico"},Qatar:{cn:"Qatar",en:"Qatar"},Reunion:{cn:"Reunion",en:"Reunion"},Romania:{cn:"Romania",en:"Romania"},"Russian Federation":{cn:"Russian Federation",en:"Russian Federation"},Rwanda:{cn:"Rwanda",en:"Rwanda"},"Saint Kitts and Nevis":{cn:"Saint Kitts and Nevis",en:"Saint Kitts and Nevis"},"Saint Lucia":{cn:"Saint Lucia",en:"Saint Lucia"},"Saint Vincent and the Grenadines":{cn:"Saint Vincent and the Grenadines",en:"Saint Vincent and the Grenadines"},Samoa:{cn:"Samoa",en:"Samoa"},"San Marino":{cn:"San Marino",en:"San Marino"},"Saudi Arabia":{cn:"Saudi Arabia",en:"Saudi Arabia"},Senegal:{cn:"Senegal",en:"Senegal"},Serbia:{cn:"Serbia",en:"Serbia"},Slovakia:{cn:"Slovakia",en:"Slovakia"},Slovenia:{cn:"Slovenia",en:"Slovenia"},"Solomon Islands":{cn:"Solomon Islands",en:"Solomon Islands"},Somalia:{cn:"Somalia",en:"Somalia"},"South Africa":{cn:"South Africa",en:"South Africa"},"South Georgia South Sandwich Islands":{cn:"South Georgia South Sandwich Islands",en:"South Georgia South Sandwich Islands"},Spain:{cn:"Spain",en:"Spain"},"Sri Lanka":{cn:"Sri Lanka",en:"Sri Lanka"},"St. Helena":{cn:"St. Helena",en:"St. Helena"},"St. Pierre and Miquelon":{cn:"St. Pierre and Miquelon",en:"St. Pierre and Miquelon"},Sudan:{cn:"Sudan",en:"Sudan"},Suriname:{cn:"Suriname",en:"Suriname"},"Svalbard and Jan Mayen Islands":{cn:"Svalbard and Jan Mayen Islands",en:"Svalbard and Jan Mayen Islands"},Swaziland:{cn:"Swaziland",en:"Swaziland"},Sweden:{cn:"Sweden",en:"Sweden"},Switzerland:{cn:"Switzerland",en:"Switzerland"},"Syrian Arab Republic":{cn:"Syrian Arab Republic",en:"Syrian Arab Republic"},Tajikistan:{cn:"Tajikistan",en:"Tajikistan"},Tanzania:{cn:"Tanzania",en:"Tanzania"},Thailand:{cn:"Thailand",en:"Thailand"},Togo:{cn:"Togo",en:"Togo"},Tokelau:{cn:"Tokelau",en:"Tokelau"},Tonga:{cn:"Tonga",en:"Tonga"},"Trinidad and Tobago":{cn:"Trinidad and Tobago",en:"Trinidad and Tobago"},Tue:{cn:"Tue",en:"Tue"},Tunisia:{cn:"Tunisia",en:"Tunisia"},Turkey:{cn:"Turkey",en:"Turkey"},Turkmenistan:{cn:"Turkmenistan",en:"Turkmenistan"},"Turks and Caicos Islands":{cn:"Turks and Caicos Islands",en:"Turks and Caicos Islands"},Tuvalu:{cn:"Tuvalu",en:"Tuvalu"},Uganda:{cn:"Uganda",en:"Uganda"},Ukraine:{cn:"Ukraine",en:"Ukraine"},"Uncheck All":{cn:"Uncheck All",en:"Uncheck All"},"United Arab Emirates":{cn:"United Arab Emirates",en:"United Arab Emirates"},"United Kingdom":{cn:"United Kingdom",en:"United Kingdom"},"United States":{cn:"United States",en:"United States"},"United States minor outlying islands":{cn:"United States minor outlying islands",en:"United States minor outlying islands"},Unsecure_Auth:{cn:"The password will be sent via unsecure connection. To protect your passwords enable the secure connection (HTTPS)!",en:"The password will be sent via unsecure connection. To protect your passwords enable the secure connection (HTTPS)!"},Uzbekistan:{cn:"Uzbekistan",en:"Uzbekistan"},Vanuatu:{cn:"Vanuatu",en:"Vanuatu"},Venezuela:{cn:"Venezuela",en:"Venezuela"},Vietnam:{cn:"Vietnam",en:"Vietnam"},"Virgin Islands (British)":{cn:"Virgin Islands (British)",en:"Virgin Islands (British)"},"Virgin Islands (U.S.)":{cn:"Virgin Islands (U.S.)",en:"Virgin Islands (U.S.)"},"Wallis and Futuna Islands":{cn:"Wallis and Futuna Islands",en:"Wallis and Futuna Islands"},"Warning!":{cn:"Warning!",en:"Warning!"},"Western Sahara":{cn:"Western Sahara",en:"Western Sahara"},Yemen:{cn:"Yemen",en:"Yemen"},Zaire:{cn:"Zaire",en:"Zaire"},Zambia:{cn:"Zambia",en:"Zambia"},Zimbabwe:{cn:"Zimbabwe",en:"Zimbabwe"},silly:{cn:"silly",en:"silly"},"Sierra Leone":{en:"Sierra Leone"},Singapore:{en:"Singapore"},"Size: %s, Free: %s":{en:"Size: %s, Available: %s"},"edit enums":{en:"Edit enumerations for"},"place here":{en:"place the files here"},popular:{en:"popular"}}; +"use strict";Array.prototype.remove=function(){for(var e,t,n=arguments,i=n.length;i&&this.length;)for(e=n[--i];-1!==(t=this.indexOf(e));)this.splice(t,1);return this},console.debug||(console.debug=console.log),"undefined"==typeof Number&&(console.log("define Number"),Number=function(e){return parseFloat(e)}),Object.assign||(Object.assign=$.extend);var $iframeDialog=null,configNotSaved=null,showConfig=null,defaults={},customPostInits={},FORBIDDEN_CHARS=/[\]\[*,;'"`<>\\\s?]/g,adapterRedirect=function(e,t){e&&setTimeout(function(){e+=document.location.pathname,e+=document.location.hash,document.location.href=e},t||5e3)},gMain=null;function detectIE(){var e=window.navigator.userAgent,t=e.indexOf("MSIE ");if(0td"),a=H.data[n.key];function s(e){return'
                      '+e+"
                      "}if(a){i.eq(0).css({overflow:"hidden","white-space":"nowrap"});var o=a.desc.indexOf("div>div").css("height: 22px !important"),u(2,a.keywords).attr("title",a.keywords),i.eq(3).html(a.installed),i.eq(4).html(a.version),u(5,a.license),u(6,a.install),H.initButtons(n.key),H.isCollapsed[a.group]&&(H.isCollapsed[a.group]=!1,H.main.saveConfig("adaptersIsCollapsed",JSON.stringify(H.isCollapsed)))}else{i.eq(0).css({"font-weight":"bold"}),i.eq(0).find("img").remove(),i.eq(0).find("span.fancytree-title").attr("style","padding-left: 0px !important");for(var c=0;c'+l+' / '+H.tree[c].children.length+"]",i.eq(1).html(s(''+l+" "+_("of")+' '+H.tree[c].children.length+" "+_("Adapters from this Group installed")));break}}function u(e,t){return i.eq(e).html(s(t))}},gridnav:{autofocusInput:!1,handleCursorKeys:!0},filter:{mode:"hide",autoApply:!0},collapse:function(e,t){H.isCollapsed[t.node.key]||(H.isCollapsed[t.node.key]=!0,H.main.saveConfig("adaptersIsCollapsed",JSON.stringify(H.isCollapsed)))}}),H.$tab.find("#btn_collapse_adapters").show().off("click").on("click",function(){H.$tab.find(".process-adapters").show(),setTimeout(function(){H.$grid.fancytree("getRootNode").visit(function(e){(!H.filterVals.length||e.match||e.subMatch)&&e.setExpanded(!1)}),H.$tab.find(".process-adapters").hide()},100)}),H.$tab.find("#btn_expand_adapters").show().off("click").on("click",function(){H.$tab.find(".process-adapters").show(),setTimeout(function(){H.$grid.fancytree("getRootNode").visit(function(e){(!H.filterVals.length||e.match||e.subMatch)&&e.setExpanded(!0)}),H.$tab.find(".process-adapters").hide()},100)}),H.$tab.find("#btn_list_adapters").show().off("click").on("click",function(){var e=H.$tab.find(".process-adapters");e.show(),H.isList=!H.isList,H.isList?(H.$tab.find("#btn_list_adapters").addClass("red lighten-3"),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide(),$(this).attr("title",_("list"))):(H.$tab.find("#btn_list_adapters").removeClass("red lighten-3"),H.$tab.find("#btn_expand_adapters").show(),H.$tab.find("#btn_collapse_adapters").show(),$(this).attr("title",_("tree"))),H.main.saveConfig("adaptersIsList",H.isList),e.show(),setTimeout(function(){H._postInit(!0),e.hide()},200)})),H.isList?(H.$tab.find("#btn_list_adapters").addClass("red lighten-3").attr("title",_("tree")),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide()):(H.$tab.find("#btn_list_adapters").removeClass("red lighten-3").attr("title",_("list")),H.$tab.find("#btn_expand_adapters").show(),H.$tab.find("#btn_collapse_adapters").show()),H.$tab.find(".filter-input").trigger("change")}function n(){H.$grid.hide(),H.$tiles.show(),H.$tab.find("#main-toolbar-table-types-btn").show(),H.$tab.find("#btn_list_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide(),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find(".filter-input").trigger("change")}function i(){H.onlyUpdatable?(H.$tab.find("#btn_filter_updates").addClass("red lighten-3"),H.$tab.find("#btn_upgrade_all").show()):(H.$tab.find("#btn_upgrade_all").hide(),H.$tab.find("#btn_filter_updates").removeClass("red lighten-3"))}function a(){H.main.config.expertMode?(H.$tab.find("#btn_adapters_expert_mode").addClass("red lighten-3"),H.$tab.find("#btn_upgrade_all").show()):(H.$tab.find("#btn_adapters_expert_mode").removeClass("red lighten-3"),i())}function B(){var t=!1;H.currentFilter?H.$tiles.find(".tile").each(function(){var e=$(this);(!H.currentType||e.hasClass("class-"+H.currentType))&&G({key:e.data("id")})?(t=!0,e.show()):e.hide()}):H.currentType?(H.$tiles.find(".tile").hide(),H.$tiles.find(".class-"+H.currentType).show(),H.$tiles.find(".tile").each(function(){if($(this).is(":visible"))return!(t=!0)})):H.$tiles.find(".tile").show().each(function(){if($(this).is(":visible"))return!(t=!0)}),t?H.$tiles.find(".filtered-out").hide():H.$tiles.find(".filtered-out").show()}function G(e){if(H.currentFilter){if(!H.data[e.key])return!1;var t=H.data[e.key].title;t&&"object"==typeof t&&(t=t[systemLang]||t.en);var n=H.data[e.key].desc;return n&&"object"==typeof n&&(n=n[systemLang]||n.en),!!(H.data[e.key].name&&-1!==H.data[e.key].name.toLowerCase().indexOf(H.currentFilter)||t&&-1!==t.toLowerCase().indexOf(H.currentFilter)||H.data[e.key].keywords&&-1!==H.data[e.key].keywords.toLowerCase().indexOf(H.currentFilter)||n&&-1!==n.toLowerCase().indexOf(H.currentFilter))}return!0}function F(e,t){var n="";if(t.news)for(var i in t.news)if(t.news.hasOwnProperty(i)){if(systemLang===i&&(n+=(n?"\n":"")+t.news[i]),"en"===i||"cn"===i)continue;if(i===e)break;n+=(n?"\n":"")+(t.news[i][systemLang]||t.news[i].en)}return n}function Z(e){if(!e)return"";var t;if(e instanceof Array){t={};for(var n=0;n
                      ',!x&&i.colors&&s[z].color&&(e+='
                      '),!x&&i.icons&&(e+=ne(i.objects[s[z].id],i.imgPath)||'
                       
                      '),"enabled"===O)e+='";else if("groups"===O)for(var E=0;E'+ne(i.objects[S],null,"")+s[z].groups[E].name+""}else if("instance"===O)if(void 0!==s[z].instance&&1';for(var Y=0;Y"+r[Y]+"";e+=k+=""}else e+=""+(void 0===s[z].instance?"":s[z].instance)+"";else if("icon"===O)e+=ne(i.objects[s[z].id],i.imgPath);else{var Q=s[z][O]||"";Q&&"object"==typeof Q&&Q.en&&(Q=Q[systemLang]||Q.en),e+=""+Q+""}e+="
                      ';for(var P="",U=0;U ':(P+="<"+t+' data-id="'+s[z].id+'" class="select-button-'+U+' select-button-custom td-button" style="margin-right: 3px;" data-parent="'+s[z].parent+'" data-children="'+!!s[z].realChildren+'" title="'+(i.buttons[U].title||"")+'">',window.M&&window.M.toast&&(P+=''+(i.buttons[U].icon||"")+""),P+="");e+=P+"
                      '),i}this.curRepository=null,this.curRepoLastUpdate=null,this.curInstalled=null,this.curRepoLastHost=null,this.list=[],this.$tab=$("#tab-adapters"),this.$grid=this.$tab.find("#grid-adapters"),this.$tiles=this.$tab.find("#grid-adapters-tiles"),this.$installDialog=$("#dialog-install-url"),this.main=e,this.tree=[],this.data={},this.urls={},this.groupImages={"common adapters_group":"img/common.png",general_group:"img/common.png",hardware_group:"img/hardware.png",lighting_group:"img/hardware.png",energy_group:"img/hardware.png",household_group:"img/hardware.png","iot-systems_group":"img/hardware.png","climate-control_group":"img/hardware.png",infrastructure_group:"img/hardware.png",garden_group:"img/hardware.png",alarm_group:"img/hardware.png",script_group:"img/script.png",logic_group:"img/script.png",media_group:"img/media.png",multimedia_group:"img/media.png",communication_group:"img/communication.png",protocols_group:"img/communication.png",network_group:"img/communication.png",messaging_group:"img/communication.png",visualisation_group:"img/visualisation.png",visualization_group:"img/visualisation.png","visualization-icons_group":"img/visualisation.png","visualization-widgets_group":"img/visualisation.png",storage_group:"img/storage.png",weather_group:"img/weather.png",schedule_group:"img/schedule.png",vis_group:"img/vis.png","date-and-time_group":"img/service.png",geoposition_group:"img/service.png",utility_group:"img/service.png","misc-data_group":"img/service.png",service_group:"img/service.png","third-party_group":"img/service.png"},this.inited=!1,this.isList=!1,this.filterVals={length:0},this.onlyInstalled=!1,this.onlyUpdatable=!1,this.currentFilter="",this.currentType="",this.isCollapsed={},this.isTiles=!0,this.types={occ:"schedule"},this.prepare=function(){this.$tab.find("#btn_switch_adapters").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.isTiles=!H.isTiles,H.isTiles?(H.$tab.removeClass("view-table").addClass("view-tiles"),$(this).find("i").text("view_list")):($(this).find("i").text("view_module"),H.$tab.removeClass("view-tiles").addClass("view-table")),H.main.saveConfig("adaptersIsTiles",H.isTiles),setTimeout(function(){H.isTiles?n():t(),H._postInit(!0),H.$tab.find(".process-adapters").hide()},50)}),this.$tab.find("#btn_filter_adapters").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.onlyInstalled=!H.onlyInstalled,H.onlyInstalled?H.$tab.find("#btn_filter_adapters").addClass("red lighten-3"):H.$tab.find("#btn_filter_adapters").removeClass("red lighten-3"),H.main.saveConfig("adaptersOnlyInstalled",H.onlyInstalled),setTimeout(function(){H._postInit(!0),H.$tab.find(".process-adapters").hide()},50)}),this.$tab.find("#btn_filter_updates").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.onlyUpdatable=!H.onlyUpdatable,i(),H.main.saveConfig("adaptersOnlyUpdatable",H.onlyUpdatable),setTimeout(function(){H._postInit(!0),H.$tab.find(".process-adapters").hide()},200)}),this.$tab.find("#btn_filter_custom_url").off("click").on("click",function(){var e,t='",n=[];for(e in H.urls)H.urls.hasOwnProperty(e)&&n.push(e);n.sort();for(var i=0;i'+n[i]+"")}H.$installDialog.find("#install-github-link").html(t).val(H.main.config.adaptersGithub||""),H.$installDialog.modal(),H.$installDialog.find(".btn-install").off("click").on("click",function(){var e,t,n;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 L=n.titleLang||n.title;if(L="object"==typeof L?L[systemLang]||L.en:L,H.data[o]={image:f?'':"",icon:f||"",stat:e[o]?e[o].stat:0,name:o,title:(L||"").replace("yunkong2 Visualisation - ",""),desc:C,news:M,updatableError:v,keywords:n.keywords?n.keywords.join(" "):"",version:i,installed:g,rawVersion:a,instances:p,rawInstalled:h,versionDate:n.versionDate,updatable:y,bold:n.highlight||!1,install:''+(H.main.config.expertMode?'':"")+"'+(H.main.config.expertMode?'':""),group:j,license:n.license||"",licenseUrl:n.licenseUrl||""},n.type||console.log('"'+o+'": "common adapters",'),n.type&&H.types[o]&&console.log('Adapter "'+o+'" has own type. Remove from admin.'),H.isList)H.tree.push({icon:f,title:H.data[o].title||o,key:o});else{for(var N=-1,T=0;T':"",icon:n.extIcon,stat:n.stat,name:o,title:(L||"").replace("yunkong2 Visualisation - ",""),desc:C,keywords:n.keywords?n.keywords.join(" "):"",rawVersion:a,version:i,bold:n.highlight,installed:"",versionDate:n.versionDate,install:''+(H.main.config.expertMode?'':""),license:n.license||"",licenseUrl:n.licenseUrl||"",group:j},n.type||console.log('"'+o+'": "common adapters",'),n.type&&H.types[o]&&console.log('Adapter "'+o+'" has own type. Remove from admin.'),H.isList)H.tree.push({icon:n.extIcon,title:H.data[o].title||o,key:o});else{for(var D=-1,I=0;IH.data[t].stat?-1:H.data[e].statH.data[t].versionDate?-1:H.data[e].versionDate',O+='
                      ',O+='
                      ',O+='
                      ',O+=' ',O+=' '+S.title+"",O+=' more_vert',O+='
                        ',O+="
                      • "+d["Available version:"]+' "+S.rawVersion+""+(S.updatable?'':"")+"
                      • ",S.installed&&(O+="
                      • "+d["Installed version"]+': '+S.rawInstalled+"
                      • "),S.instances&&(O+="
                      • "+_("Installed instances")+': '+S.instances+"
                      • "),O+="
                      ",O+="
                      ",O+=' ',O+='
                      ',O+=' close',O+="

                      "+S.desc+"

                      ",O+='
                      ',O+=S.install,O+="
                      ",O+="
                      ","popular"===H.currentOrder&&S.stat?O+='
                      '+S.stat+"
                      ":"updated"===H.currentOrder&&S.versionDate&&(O+='
                      '+J(S.versionDate,d.today,d.yesterday,d["1 %d days ago"],d["2 %d days ago"],d["5 %d days ago"],l)+"
                      "),O+="
                      ",O+="
                      "}for(var Y in O+='
                      ',O+='
                      ',O+='
                      ',O+='
                      ',O+=' '+_("Filtered out")+"",O+="
                      ",O+=' ',O+="
                      ",O+="
                      ",H.$tiles.html(O),H.data)H.data.hasOwnProperty(Y)&&H.initButtons(Y);for(var Q='
                    • '+d.all+"
                    • \n",P=0;P'+_(A[P])+"\n";var U=H.$tab.find("#main-toolbar-table-types");U.html(Q),U.find(".main-toolbar-table-types-item").show().off("click").on("click",function(){H.currentType=$(this).data("type")||"",B(),H.$tab.find("#main-toolbar-table-types-btn").html(_(H.currentType||"all")),H.main.saveConfig("adaptersCurrentType",H.currentType)}),H.currentType&&!d[H.currentType]&&(d[H.currentType]=_(H.currentType)),H.$tab.find("#main-toolbar-table-types-btn").html(d[H.currentType||"all"]).dropdown({constrainWidth:!1,gutter:0}),(U=H.$tab.find("#main-toolbar-table-order")).find(".main-toolbar-table-order-item").off("click").on("click",function(){H.currentOrder=$(this).data("type")||"",H.$tab.find("#main-toolbar-table-order-btn").html(_(H.currentOrder||"a-z")),H.main.saveConfig("adaptersCurrentOrder",H.currentOrder),H._postInit()}),H.currentOrder&&!d[H.currentOrder]&&(d[H.currentOrder]=_(H.currentOrder)),H.$tab.find("#main-toolbar-table-order-btn").show().html(d[H.currentOrder||"a-z"]).dropdown({constrainWidth:!1,gutter:0}),B()}else{H.$tab.find("#main-toolbar-table-types-btn").hide(),H.$tab.find("#main-toolbar-table-order-btn").hide(),H.$grid.fancytree("getTree").reload(H.tree),H.$grid.find(".fancytree-icon").each(function(){$(this).attr("src")&&$(this).css({width:18,height:18}),$(this).on("hover",function(){var e='
                      ',t=$(e);t.insertAfter($(this)),$(this).data("big",t[0]);var n=parseFloat(t.height()),i=Math.round($(this).position().top-(n-parseFloat($(this).height()))/2);n+i>(window.innerHeight||document.documentElement.clientHeight)&&(i=(window.innerHeight||document.documentElement.clientHeight)-n),t.css({top:i})},function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)})}),H.currentFilter&&H.$grid.fancytree("getTree").filterNodes(G,!1),H.sortTree(),H.enableColResize();var R=["tab-adapters-table-name","tab-adapters-table-description","tab-adapters-table-keywords","tab-adapters-table-installed","tab-adapters-table-available","tab-adapters-table-license","tab-adapters-table-install"];H.$grid.find("tbody tr").each(function(){var e=0;$(this).find("td").each(function(){$(this).addClass(R[e]),e++})})}H.$tab.find(".grid-main-div").removeClass("order-a-z order-popular order-updated").addClass(H.currentOrder?"order-"+H.currentOrder:""),H.$tab.find(".process-adapters").hide(),H.updateCounter(s)})):this.enableColResize(),this.restoreScroll()},this.saveScroll=function(){this.scrollTop=this.$tab.find(".grid-main-div").scrollTop()},this.restoreScroll=function(){this.scrollTop&&this.$tab.find(".grid-main-div").scrollTop(this.scrollTop)},this.updateCounter=function(e){if(void 0===e)this.getAdaptersInfo(this.main.currentHost,!1,!1,function(e,t){var n=0;for(var i in t)if(t.hasOwnProperty(i)){var a=t?t[i]:null;if(a&&!a.controller&&"hosts"!==i){var s="";e[i]&&e[i].version&&(s=e[i].version),a.version&&!H.main.upToDate(s,a.version)&&n++}}H.updateCounter(n)});else if(e){var t=$("#updates-for-adapters");t.length?t.text(e):$(''+e+"").appendTo('.admin-sidemenu-items[data-tab="tab-adapters"] a')}else $("#updates-for-adapters").remove()},this.init=function(e,t){this.inited&&!e||(this.main.objectsLoaded?(this.inited||(this.inited=!0,this.main.subscribeObjects("system.host.*"),this.main.subscribeStates("system.host.*")),this.main.tabs.hosts.getHosts(function(){H._postInit(e,t)})):setTimeout(function(){H.init(e,t)},250))},this.destroy=function(){this.inited&&(this.saveScroll(),this.inited=!1,this.main.unsubscribeObjects("system.host.*"),this.main.unsubscribeStates("system.host.*"))},this.initButtons=function(r){this.$tab.find('.adapter-install-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var s=$(this).attr("data-adapter-name"),e=$(this).attr("data-adapter-desc");!function(e,t,n){if(H.main.tabs.hosts.list.length<=1&&!H.main.config.expertMode)return n(!0,H.main.currentHost,"");var i=$("#dialog-add-instance");i.find(".dialog-add-instance-name").html(e),i.find(".dialog-add-description").html(t);for(var a="",s=0;s'+o.name+""}H.main.tabs.hosts.list.length<=1?i.find(".dialog-add-instance-host").addClass("disabled").prop("disabled",!0):i.find(".dialog-add-instance-host").removeClass("disabled").prop("disabled",!1),i.find(".dialog-add-instance-host").html(a).select();for(var r=-1,c=[],l=0;l'+_("auto")+"";for(var m=0;m'+m+"");i.find(".dialog-add-instance-number").html(a).select(),i.find(".dialog-add-install-btn").off("click").on("click",function(e){n&&(n(!0,i.find(".dialog-add-instance-host").val(),i.find(".dialog-add-instance-number").val()),n=null),i.find(".dialog-add-cancel-btn").off("click"),i.find(".dialog-add-instance-number").off("click")}),i.find(".dialog-add-cancel-btn").off("click").on("click",function(e){n&&(n(!1),n=null),i.find(".dialog-add-cancel-btn").off("click"),i.find(".dialog-add-instance-number").off("click")}),i.modal({dismissible:!1,complete:function(){i.find(".dialog-add-instance-name").html("")}}).modal("open")}(s,e,function(e,i,a){e&&H.getAdaptersInfo(i,!1,!1,function(e,t){var n=e[s];n||(n=t[s]),n&&(n.license&&"MIT"!==n.license?function(i,a){var s=$("#dialog-license");if(!H.data[i].installed&&H.data[i].licenseUrl){var o=setTimeout(function(){a(!(o=null))},1e4);"object"==typeof H.data[i].licenseUrl&&(H.data[i].licenseUrl=H.data[i].licenseUrl[systemLang]||H.data[i].licenseUrl.en),H.main.socket.emit("httpGet",H.data[i].licenseUrl,function(e,t,n){o&&(clearTimeout(o),o=null,!e&&n?(s.css({"z-index":200}),n=(n=n.toString().replace(/\r\n/g,"
                      ")).replace(/\n/g,"
                      "),s.find(".license_text").html(n),s.find(".license_agreement_name").text(_(" for %s",i)),s.modal({dismissible:!1,complete:function(){s.find(".license_text").html("")}}).modal("open"),s.find(".license_agree").off("click").on("click",function(e){a&&(a(!0),a=null),s.find(".license_agree").off("click"),s.find(".license_non_agree").off("click")}),s.find(".license_non_agree").off("click").on("click",function(e){a&&(a(!1),a=null),s.find(".license_agree").off("click"),s.find(".license_non_agree").off("click")})):(a&&a(!0),a=null))})}else a(!0)}(s,function(e){e&&H.main.cmdExec(null,"add "+s+" "+a+" --host "+i,function(e){e||H._postInit(!0)})}):H.main.cmdExec(null,"add "+s+" "+a+" --host "+i,function(e){e||H._postInit(!0)}))})})}),this.$tab.find('.adapter-delete-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var t=$(this).attr("data-adapter-name");H.main.confirmMessage(_("Are you sure you want to delete adapter %s?",t),_("Please confirm"),"help",function(e){e&&H.main.cmdExec(null,"del "+t,function(e){e||H._postInit(!0)})})}),this.$tab.find('.adapter-readme-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){H.main.navigate({tab:"adapters",dialog:"readme",params:$(this).data("adapter-name")})}),this.$tab.find('.adapter-update-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var e=$(this).attr("data-adapter-name");"admin"===e&&(H.main.waitForRestart=!0),H.main.cmdExec(null,"upgrade "+e,function(e){e||H._postInit(!0)})}),this.$tab.find('.adapter-upload-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var e=$(this).attr("data-adapter-name");H.main.cmdExec(null,"upload "+e,function(e){e||H._postInit(!0)})});var e=this.$tab.find('.adapter-update-custom-submit[data-adapter-name="'+r+'"]');e.off("click").on("click",function(){var e=[];if(H.main.objects["system.adapter."+r].common.news){var t=H.main.objects["system.adapter."+r].common.news;for(var n in t)t.hasOwnProperty(n)&&e.push(n)}else e.push(H.main.objects["system.adapter."+r].common.version);for(var i='
                      ',a=0;a'+e[a]+' - "}i+="
                      ";var o=$("#adapters-menu");o.length||((o=$('")).appendTo($(".materialize-dialogs").first()),o.modal()),o.data("trigger",this),o.find("p").html(i),o.find("h4").html(_("Versions of %s",r)),o.find(".adapters-versions-link").off("click").on("click",function(){o.modal("close");var e=$(this).data("adapter-name"),t=$(this).data("version");t&&e&&H.main.cmdExec(null,"upgrade "+e+"@"+t,function(e){e||H._postInit(!0)})}),o.modal("open")}),H.main.objects["system.adapter."+r]||e.hide()},this.objectChange=function(e,t){if(e.match(/^system\.adapter\.[a-zA-Z0-9-_]+$/)){if(t)-1===this.list.indexOf(e)&&this.list.push(e);else{var n=this.list.indexOf(e);-1!==n&&this.list.splice(n,1)}void 0!==this.$grid&&this.$grid[0]._isInited&&this.init(!0)}},this.stateChange=function(e,t){if(e&&t){var n=e.match(/^system\.adapter\.([\w\d-]+)\.upload$/);if(n){var i=this.$tab.find('.adapter-upload-progress[data-adapter-name="'+n[1]+'"]'),a=W(t.val);i.html(a).css({opacity:t.val?.7:0}),this.$tab.find('.group-upload-progress[data-adapter-group="'+i.data("adapter-group")+'"]').html(a).css({opacity:t.val?.7:0})}}}}function Config(e){var t=this;this.$dialog=$("#dialog-config"),this.$configFrame=this.$dialog.find("#config-iframe"),this.main=e,this.prepare=function(){$iframeDialog=this},this.init=function(){if(!this.inited){this.inited=!0;var e=this.main.navigateGetParams(),t=e.split(".");this.main.objects[e]&&this.main.objects[e].common&&this.main.objects[e].common.materialize?this.$configFrame.attr("src","adapter/"+t[2]+"/index_m.html?"+t[3]):this.$configFrame.attr("src","adapter/"+t[2]+"/?"+t[3]);var n=e.replace(/^system\.adapter\./,"");this.$dialog.data("name",n),this.$dialog.find(".title").html(_("Adapter configuration")+": "+n)}},this.allStored=function(){return!window.frames["config-iframe"].changed},this.close=function(){t.main.navigate()},this.destroy=function(){if(this.inited&&(this.inited=!1,this.$configFrame.attr("src",""),void 0!==showConfig&&showConfig&&showConfig.length)){var e=showConfig.shift();setTimeout(function(){t.main.navigate({tab:"instances",dialog:"config",params:e})},1e3)}}}function Customs(C){var m,g,h,f,T,D,I,k,z,x,O,A,E="__different__",S=this;function Y(e){if(e)S.historyTimeout&&clearTimeout(S.historyTimeout);else if(S.historyTimeout)return;S.historyTimeout=setTimeout(function(){S.historyTimeout=null,O&&S.loadHistoryTable(O.data("id"),!0)},e||5e3)}function Q(t,n){$.ajax({headers:{Accept:"text/html"},cache:!0,url:"/adapter/"+t+"/custom_m.html",success:function(e){n(null,e)},error:function(e){$.ajax({headers:{Accept:"text/html"},cache:!0,url:"/adapter/"+t+"/custom.html",success:function(e){n(null,e)},error:function(e){n(e.responseText)}})}})}function P(e){e.stopPropagation(),e.preventDefault();var t=S.$dialog.find("#customs-tabs"),c=t.data("ids");S.currentCustoms=null;var l=_(E);if(t.find("input, select").each(function(){var e=$(this).data("instance"),t=$(this).data("field");if(t){var n;if("checkbox"===$(this).attr("type")){if(this.indeterminate)return;n=$(this).prop("checked")}else n=$(this).val();if(n!==l){null===n&&(n=""),void 0===n&&(n=""),"false"===n&&(n=!1),"true"===n&&(n=!0);var i=parseFloat(n);n.toString().replace(/^\+/,"").replace(/([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/,"$1")===i.toString()&&(n=i);for(var a=0;a
                      '+_("Settings for %s",j)+' '+_("active")+'
                      '+$('script[data-template-name="'+v+'"]').html()+"
                      ",T=$(N);this.defaults[v]={},T.find("input, select").each(function(){var e=$(this);e.attr("data-instance",v+"."+w);var t=e.attr("data-field"),n=e.attr("data-default");"true"===n&&(n=!0),"false"===n&&(n=!1),void 0!==n&&n.toString().replace(/\+/,"")===parseFloat(n).toString()&&(n=parseFloat(n)),S.defaults[v][t]=n,"enabled"===t&&e.on("click",function(e){e.stopPropagation(),$(this).prop("checked")})}),s.append(T),customPostInits.hasOwnProperty(v)&&"function"==typeof customPostInits[v]&&customPostInits[v](T,r[v+"."+w],S.main.objects["system.adapter."+v+"."+w],i,a)}s.find("input, select").each(function(){var e,n=$(this),t=n.data("instance"),i=t.split(".")[0],a=n.data("field");void 0!==r[t][a]?"checkbox"===n.attr("type")?r[t][a]===E?n[0].indeterminate=!0:n.prop("checked",r[t][a]):r[t][a]===E?("number"===n.attr("type")&&n.attr("type","text"),"SELECT"===n.prop("tagName").toUpperCase()?(n.prepend('"),n.val(o)):n.val("").attr("placeholder",o)):n.val(r[t][a]):(S.defaults[i]&&void 0!==S.defaults[i][a]&&(e=S.defaults[i][a]),void 0!==e&&("checkbox"===n.attr("type")?n.prop("checked",e):n.val(e)));"checkbox"===n.attr("type")?n.on("change",function(){if(S.$dialog.find(".dialog-system-buttons .btn-save").removeClass("disabled"),"enabled"===$(this).data("field")){var e=n.data("instance"),t=s.find('.activated[data-adapter="'+e+'"]');$(this).prop("checked")?t.css("opacity",1):t.css("opacity",0)}}):n.on("change",function(){S.$dialog.find(".dialog-system-buttons .btn-save").removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")})}),this.showCustomsData(1'+_("Loading...")+"");var n={aggregate:"none",instance:O.val(),from:!0,ack:!0,q:!0};T||(T=this.$dialog.find("#tab-customs-table .datepicker.date-from"),D=this.$dialog.find("#tab-customs-table .datepicker.date-to"),I=this.$dialog.find("#tab-customs-table .timepicker.time-from"),k=this.$dialog.find("#tab-customs-table .timepicker.time-to"));var d,i=T.val()?M.Datepicker.getInstance(T).toString("yyyy.mm.dd"):"",a=I.val(),s=D.val()?M.Datepicker.getInstance(D).toString("yyyy.mm.dd"):"",o=k.val(),r=!0;if(s?(r=!1,(s=new Date(s)).setHours(23),s.setMinutes(59),s.setSeconds(59),s.setMilliseconds(999)):s=new Date,o){var c=o.split(":");s.setHours(c[0]),s.setMinutes(c[1]),s.setSeconds(59),s.setMilliseconds(999),r=!1}if(s=s.getTime(),r&&(s+=1e4),n.end=s,i||a){if(i=new Date(i||s),a){var u=a.split(":");i.setHours(u[0]),i.setMinutes(u[1])}else i.setHours(0),i.setMinutes(0);i.setSeconds(0),i.setMilliseconds(0),n.start=i.getTime()}else n.count=50;l&&(d=new Date(s).toISOString()+"_"+(n.start?new Date(n.start):n.count+"points")+"_"+e+"__"+n.instance+".csv"),C.socket.emit("getHistory",e,n,function(r,c){setTimeout(function(){var e,t,n,i="value;acknowledged;from;timestamp;lastchanged;\n";if(r)console.error(r),m.html(''+r+"");else{var a="";if(c&&c.length){for(var s=c.length-1;0<=s;s--){var o=(c[s].from||"").replace("system.adapter.","").replace("system.","");a+=' '+c[s].val+" "+c[s].ack+" "+o+" "+C.formatDate(c[s].ts)+" "+C.formatDate(c[s].lc)+"\n",l&&(i+=c[s].val+";"+c[s].ack+";"+(o||"")+";"+(c[s].ts?new Date(c[s].ts).toISOString():"")+";"+(c[s].lc?new Date(c[s].lc).toISOString():"")+";\n")}f=c[c.length-1].ts}else a=''+_("No data")+"";m.html(a)}!function e(){$.fn.colResizable&&(g.is(":visible")?(g.data("inited")||((h=new IobListHeader("grid-history-header",{list:g,colWidthOffset:1,prefix:"log-filter"})).add("text","val"),h.add("text","ack"),h.add("text","from"),h.add("text","ts"),h.add("text","lc")),g.colResizable({liveDrag:!0,partialRefresh:!0,marginLeft:5,postbackSafe:!0,onResize:function(e){return h.syncHeader()}}),h.syncHeader()):setTimeout(function(){e()},200))}(),l&&(e=d,t=i,(n=document.createElement("a")).setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(t)),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n))},0)})},this.loadHistoryChart=function(e){if(z||(z=this.$dialog.find("#tab-customs-chart .datepicker.date-from"),x=this.$dialog.find("#tab-customs-chart .datepicker.date-to")),e){for(var t=0,n=!1,i=!1,a=0;a"+u[v]+"\n")}if(y){O.data("id",n[0]).html(y).show().off("change").on("change",function(){S.main.saveConfig("object-history-table",O.val()),S.loadHistoryTable($(this).data("id"))}).select(),A.data("id",n[0]).html(y).show().off("change").on("change",function(){S.main.saveConfig("object-history-chart",A.val()),S.loadHistoryChart($(this).data("id"))}).select(),void 0!==this.main.config["object-history-table"]&&O.val(this.main.config["object-history-table"]),void 0!==this.main.config["object-history-chart"]&&A.val(this.main.config["object-history-chart"]),p.data("id",n[0]).show().off("click").on("click",function(){S.$dialog.find("#grid-history-body").html(""),S.loadHistoryTable($(this).data("id"))}),M.data("id",n[0]).show().off("click").on("click",function(){S.loadHistoryChart($(this).data("id"))}),b.data("id",n[0]).show().off("click").on("click",function(){S.loadHistoryTable($(this).data("id"),!1,!0)});var j=new Date;j.setDate(j.getDate()-1);for(var L={today:_("Today"),clear:_("Clear"),done:_("Ok"),months:[_("January"),_("February"),_("March"),_("April"),_("May"),_("June"),_("July"),_("August"),_("September"),_("October"),_("November"),_("December")],monthsShort:[_("Jan"),_("Feb"),_("Mar"),_("Apr"),_("May"),_("Jun"),_("Jul"),_("Aug"),_("Sep"),_("Oct"),_("Nov"),_("Dec")],weekdaysShort:[_("Sun"),_("Mon"),_("Tue"),_("Wed"),_("Thu"),_("Fri"),_("Sat")],weekdays:[_("Sunday"),_("Monday"),_("Tuesday"),_("Wednesday"),_("Thursday"),_("Friday"),_("Saturday")],weekdaysAbbrev:["S","M","T","W","T","F","S"]},N=0;N\n
                      \n',"state"===i&&"common"===n&&"type"===s?a+='":"string"==typeof t[s]?a+='\n':"number"==typeof t[s]?a+='\n':"boolean"==typeof t[s]?a+='\n":a+='\n";var o=s;"common"===n&&systemDictionary["common_"+s]&&systemDictionary["common_"+s][systemLang]&&(o=_("common_"+s)),"boolean"==typeof t[s]?a+=""+o+"\n":a+="\n",a+='
                      \n\n',a+="\n"}c.$dialog.find(e).html(a)}function n(e,t){var n=c.$dialog.find(e);n.find(".object-tab-edit-string").each(function(){t[$(this).data("attr")]=$(this).val()}),n.find(".object-tab-edit-number").each(function(){t[$(this).data("attr")]=parseFloat($(this).val())}),n.find(".object-tab-edit-boolean").each(function(){t[$(this).data("attr")]=$(this).prop("checked")});var i=null;if(n.find(".object-tab-edit-object").each(function(){try{t[$(this).data("attr")]=JSON.parse($(this).val())}catch(e){return i=$(this).data("attr"),!1}}),void 0!==t.write&&("false"!==t.write&&"0"!==t.write&&0!==t.write||(t.write=!1),"true"!==t.write&&"1"!==t.write&&1!==t.write||(t.write=!0)),void 0!==t.read&&("false"!==t.read&&"0"!==t.read&&0!==t.read||(t.read=!1),"true"!==t.read&&"1"!==t.read&&1!==t.read||(t.read=!0)),null===t.min&&delete t.min,void 0!==t.min){var a=parseFloat(t.min);a.toString()===t.min.toString()&&(t.min=a),"false"===t.min&&(t.min=!1),"true"===t.min&&(t.min=!0)}if(null===t.max&&delete t.max,void 0!==t.max){var s=parseFloat(t.max);s.toString()===t.max.toString()&&(t.max=s),"false"===t.max&&(t.max=!1),"true"===t.max&&(t.max=!0)}if(null===t.def&&delete t.def,void 0!==t.def){var o=parseFloat(t.def);o.toString()===t.def.toString()&&(t.def=o),"false"===t.def&&(t.def=!1),"true"===t.def&&(t.def=!0)}if(-1!==e.indexOf("common"))for(var r in t)t.hasOwnProperty(r)&&("true"===t[r]&&(t[r]=!0),"false"===t[r]&&(t[r]=!1),parseFloat(t[r]).toString()===t[r]&&(t[r]=parseFloat(t[r])));return i}function s(e,t,n){"boolean"==typeof t&&(n=t,t=3e3),c.main.showToast(c.$dialog,e,null,t,n)}this.$dialog=$("#dialog-editobject"),this.$dialogNewField=$("#dialog-new-field"),this.main=e,this.prepared=!1,this.inited=!1,this.$dialogSave=this.$dialog.find(".dialog-editobject-buttons .btn-save"),this.iconVal=null,this._prepare=function(){this.prepared||(this.prepared=!0,this.$dialogSave.on("click",function(){c.save()}),this.$dialog.find(".dialog-editobject-buttons .btn-cancel").on("click",function(){c.editor.setValue(""),c.$dialogSave.addClass("disabled"),c.main.navigate()}),this.$dialog.find(".btn-add-common").on("click",function(){c.$dialogNewField.find(".object-tab-new-icon").show(),c.$dialogNewField.modal("open");var e=c.$dialogNewField.find(".object-tab-new-name");e.data("type","common").focus(),e.hasClass("autocomplete")||(e.addClass("autocomplete"),e.mautocomplete({data:{type:null,desc:null,min:null,max:null,def:null,role:null,unit:null,read:null,write:null,states:null},minLength:0})),e.focus()}),this.$dialog.find(".btn-add-native").on("click",function(){c.$dialogNewField.find(".object-tab-new-icon").hide(),c.$dialogNewField.modal("open");var e=c.$dialogNewField.find(".object-tab-new-name");e.hasClass("autocomplete")&&(e.mautocomplete("destroy"),e.removeClass("autocomplete")),M.updateTextFields("#dialog-new-field"),e.data("type","native").focus()}),this.$dialogNewField.find(".object-tab-new-name").keypress(function(e){13===e.which&&c.$dialogNewField.find(".btn-add").trigger("click")}),this.editor||(this.editor=ace.edit("view-object-raw"),this.editor.getSession().setMode("ace/mode/json"),this.editor.$blockScrolling=!0,this.editor.getSession().on("change",function(){c.$dialogSave.removeClass("disabled")})),this.$dialogNewField.modal(),this.$dialog.find(".tabs").mtabs({onShow:function(e){if(e){var t=$(e).attr("id");if("object-tab-common"===t)s(_("Drop the icons here"));else if("object-tab-raw"===t){var n=c.saveFromTabs();if(!n)return!1;c.editor.setValue(JSON.stringify(n,null,2))}else if("object-tab-raw"===t){var i;try{i=JSON.parse(c.editor.getValue())}catch(e){return c.main.showMessage(e,_("Parse error"),"error_outline"),c.main.noSelect||c.$dialog.find(".tabs").mtabs("select","object-tab-raw"),!1}c.load(i)}return c.main.saveConfig("object-edit-active",t),!0}}}),this.$dialogNewField.find(".btn-add").on("click",function(e){e.preventDefault(),e.stopPropagation();var t=c.$dialogNewField.find(".object-tab-new-name"),n=t.data("type")||"common",i=t.val().trim(),a=c.saveFromTabs();i&&-1===i.indexOf(" ")?void 0===a[n][i]?(a[n][i]="",c.load(a),c.$dialogNewField.find(".object-tab-new-name").val(""),c.$dialogNewField.modal("close"),c.$dialogSave.removeClass("disabled")):c.main.showError(_("Field %s yet exists!",i)):c.main.showError(_("Invalid field name: %s",i))}),this.$dialogNewField.find(".btn-cancel").on("click",function(e){c.$dialogNewField.find(".object-tab-new-name").val("")}),this.$dialog.find(".edit-object-name").on("change",function(){c.$dialogSave.removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")}),this.$dialog.find(".edit-object-type").on("change",function(){c.$dialogSave.removeClass("disabled")}),this.$dialog.find(".object-tab-rights input").on("change",function(){c.$dialogSave.removeClass("disabled")}),installFileUpload(this.$dialog.find("#object-tab-common"),5e4,function(e,t){if(e)s(e,!0);else{if(!t.match(/^data:image\//))return void s(_("Unsupported image format"),!0);c.$dialogSave.removeClass("disabled"),c.iconVal=t;var n=c.$dialog.find(".icon-editor");n.find(".icon").show().html(''),n.find(".icon .treetable-icon").attr("src",t)}}),this.$dialog.find(".icon-editor .icon-upload").off("click").on("click",function(){c.$dialog.find(".drop-file").trigger("click")}),this.$dialog.find(".icon-editor .icon-clear").off("click").on("click",function(){c.iconVal&&(c.iconVal=null,c.$dialog.find(".icon-editor").hide().appendTo(c.$dialog),c.$dialogSave.removeClass("disabled"))}))},this.init=function(){if(this._prepare(),!this.inited){this.inited=!0;var e=c.main.navigateGetParams(),t=!!(e||"").match(/,def$/);e=e.replace(/,def$/,"");var n=this.main.objects[e];if(n){void 0===this.main.config["object-edit-active"]||c.main.noSelect||this.$dialog.find(".tabs").mtabs("select",this.main.config["object-edit-active"]);for(var i,a="",s=0;s'+(i||this.main.tabs.users.list[s])+"";for(this.$dialog.find(".object-tab-acl-owner").html(a),a="",s=0;s'+(i||this.main.tabs.users.groups[s])+"";this.$dialog.find(".object-tab-acl-group").html(a),this.load(n),t?this.$dialog.data("cb",function(n){"state"===n.type&&c.main.socket.emit("getState",n._id,function(e,t){t&&null!==t.val&&void 0!==t.val||c.main.socket.emit("setState",n._id,void 0===n.common.def?null:n.common.def,!0)})}):this.$dialog.data("cb",null),c.$dialogSave.addClass("disabled")}}},this.destroy=function(){this.inited&&(this.inited=!1)},this.load=function(e){if(e){e.common=e.common||{},e.native=e.native||{},e.acl=e.acl||{},this.$dialog.find(".title-id").text(e._id),this.$dialog.find(".edit-object-name").val(e.common?translateName(e.common.name):e._id),this.$dialog.find(".edit-object-type").val(e.type),this.$dialog.find(".object-tab-acl-owner").val(e.acl.owner||"system.user.admin"),this.$dialog.find(".object-tab-acl-group").val(e.acl.ownerGroup||"system.group.administrator"),this.$dialog.find(".icon-editor").hide().appendTo(this.$dialog),a(".object-tab-common-table",e.common||{},"common",e.type),a(".object-tab-native-table",e.native||{},"native",e.type),void 0!==e.common.icon?(this.iconVal=e.common.icon,this.$dialog.find(".object-tab-common-table").prepend(this.$dialog.find(".icon-editor").show()),this.$dialog.find(".icon-editor .icon").html(c.main.getIconFromObj(e))):this.iconVal=null,this.$dialog.find(".object-tab-field-delete").on("click",function(){var n=$(this).data("part"),i=$(this).data("attr");c.main.confirmMessage(_("Delete attribute"),_("Please confirm"),"error_outline",function(e){if(e){var t=c.saveFromTabs();delete t[n][i],c.load(t)}})}),e.acl=e.acl||{},void 0===e.acl.object&&(e.acl.object=1638),this.$dialog.find("#object-tab-acl-obj-owner-read").prop("checked",1024&e.acl.object),this.$dialog.find("#object-tab-acl-obj-owner-write").prop("checked",512&e.acl.object),this.$dialog.find("#object-tab-acl-obj-group-read").prop("checked",64&e.acl.object),this.$dialog.find("#object-tab-acl-obj-group-write").prop("checked",32&e.acl.object),this.$dialog.find("#object-tab-acl-obj-every-read").prop("checked",4&e.acl.object),this.$dialog.find("#object-tab-acl-obj-every-write").prop("checked",2&e.acl.object),"state"!==e.type?this.$dialog.find(".object-tab-acl-state").hide():(this.$dialog.find(".object-tab-acl-state").show(),void 0===e.acl.state&&(e.acl.state=1638),this.$dialog.find("#object-tab-acl-state-owner-read").prop("checked",1024&e.acl.state),this.$dialog.find("#object-tab-acl-state-owner-write").prop("checked",512&e.acl.state),this.$dialog.find("#object-tab-acl-state-group-read").prop("checked",64&e.acl.state),this.$dialog.find("#object-tab-acl-state-group-write").prop("checked",32&e.acl.state),this.$dialog.find("#object-tab-acl-state-every-read").prop("checked",4&e.acl.state),this.$dialog.find("#object-tab-acl-state-every-write").prop("checked",2&e.acl.state));var t=JSON.parse(JSON.stringify(e));if(this.editor.setValue(JSON.stringify(t,null,2)),t._id&&delete t._id,t.common&&delete t.common,t.type&&delete t.type,t.native&&delete t.native,t.acl&&delete t.acl,this.$dialog.find("#view-object-rest").val(JSON.stringify(t,null," ")),this.$dialog.find("select").select(),this.$dialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),this.$dialog.find("input").on("change",function(){c.$dialogSave.removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")}),this.$dialog.find("select").on("change",function(){c.$dialogSave.removeClass("disabled")}),this.$dialog.find("textarea").on("change",function(){c.$dialogSave.removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")}),void 0!==e.common.color){var n=Date.now(),i=this.$dialog.find('.object-tab-edit-string[data-attr="color"]').parent();i.prepend('color_lens'+_("Color")+""),i.colorpicker({component:".btn",color:i,container:!0}).colorpicker("setValue",e.common.color||"#fff").on("showPicker.colorpicker",function(){}).on("changeColor.colorpicker",function(e){100'+g.main.getIconFromObj(s[e][t])+p(s[e][t])+"");n&&(n+='
                    • '),n+='
                    • control_point'+_("custom group")+"
                    • ",g.$gridEnum.find("#btn-new-group-"+i).html(n),g.$gridEnum.find('.btn-new-group-btn[data-target="btn-new-group-'+i+'"]').dropdown({constrainWidth:!1}),g.$gridEnum.find("#btn-new-group-"+i).find(".new-group-item").off("click").on("click",function(){var e=$(this).data("id"),t=$(this).data("enum");if(e){var n=t.replace(/[.#\\\/&?]+/g,"-");g.main.saveConfig("enums-active","enum-"+n),g.main.socket.emit("setObject",e,s[t][e],function(e){e&&g.main.showError(e)})}else v(null,t)})}else{for(t in a)a.hasOwnProperty(t)&&-1===g.list.indexOf(t)&&(n+='
                    • '+g.main.getIconFromObj(a[t])+p(a[t])+"
                    • ");n&&(n+='
                    • '),n+='
                    • control_point'+_("custom enum")+"
                    • ",g.$gridEnum.find("#btn-new-enum").html(n),g.$gridEnum.find(".btn-new-enum-btn").dropdown({constrainWidth:!1}),g.$gridEnum.find(".new-enum-item").off("click").on("click",function(){var e=$(this).data("id");if(e){var t=e.replace(/[.#\\\/&?]+/g,"-");g.main.saveConfig("enums-active","enum-"+t),g.main.socket.emit("setObject",e,a[e],function(e){e&&g.main.showError(e)})}else v(null)})}}function p(e,t){var n;(n=t?e[t]:e)&&n.common&&n.common.name?n=translateName(n.common.name):n=(n=t.split(".").pop())[0].toUpperCase()+n.substring(1).toLowerCase();return n}function r(e,t,n){var i,a,s,o=g.main.objects[e],r=e.replace(/[.#\\\/&?]+/g,"-"),c='';c+='
                        ';for(var l=0;l'+g.main.getIcon(g.list[l],null,null,"icon")+''+p(g.main.objects,g.list[l])+"

                        "+g.list[l]+"


                        ",d&&d.common&&d.common.members&&d.common.members.length)for(var m=0;m'+g.main.getIcon(i)+''+p(g.main.objects,i)+'close
                      ');c+='edit',c+='delete',c+=""}c+="
                      ",t.html(c),f(e),n&&t.find(".enum-collection").scrollTop(n),function(n){for(var e=g.$gridList.find('.enum-buttons[data-id="'+n+'"] .filter-input'),t={},i=0;i\n view_list\n note_add\n \n \n queue_play_next\n \n ');var t='
                      ';t+='",t+="
                      ";for(var a=0;a',t+="");var s={};e.find(".enum-collection").each(function(){s[$(this).data("id")]=$(this).scrollTop()});try{var o=g.$gridEnum.find(".tree-table-body .collection").find(".collection-item");try{o.droppable("instance")&&o.droppable("destroy")}catch(n){console.error(n)}}catch(n){}e.html(t),0tr.treetable-enum");e.droppable("instance")&&e.droppable("destroy")}catch(e){console.log(e)}g.$gridList.html("").removeClass("tree-table-tiles").addClass("tree-table-list"),g.$gridList.treeTable({objects:g.main.objects,root:"enum",columns:["title","name"],members:!0,colors:!0,icons:!0,widths:["calc(100% - 250px)","250px"],name:"enums",buttonsWidth:"40px",buttons:[{text:!1,icons:{primary:"ui-icon-trash"},click:function(t,e,n){g.main.objects[t]?"enum"===g.main.objects[t].type?e?g.main.confirmMessage(_("All sub-enums of %s will be deleted too?",t),null,"help",function(e){e&&g.main._delObjects(t,!0,function(e){e?b(_("Error: %s",e),!0):b(_("Deleted"))})}):g.main.confirmMessage(_("Are you sure to delete %s?",t),null,"help",function(e){e&&g.main._delObjects(t,!0,function(e){e?b(_("Error: %s",e),!0):b(_("Deleted"))})}):u(t,n):g.main.objects[n]&&"enum"===g.main.objects[n].type?u(t,n):b(_('Object "%s" does not exists. Update the page.',t))},width:26,height:20},{text:!1,icons:{primary:"ui-icon-pencil"},match:function(e){return g.main.objects[e]&&"enum"===g.main.objects[e].type},click:function(e,t,n){v(e)},width:26,height:20}],panelButtons:[{id:"tab-enums-btn-switch-tiles",title:_("change view mode"),icon:"view_module",click:function(){g.isTiles=!0,g.main.saveConfig("enumIsTiles",g.isTiles),setTimeout(function(){n()},50)}},{id:"tab-enums-list-new-enum",title:_("New enum"),icon:"note_add",click:function(){v(null)}},{id:"tab-enums-list-new-category",title:_("New category"),icon:"library_add",click:function(){v(null,g.enumEdit)}},{id:"tab-enums-list-edit",title:_("Edit"),icon:"edit",click:function(){w(!g.editMode)}}],onChange:function(e,t){if(e!==t){g.enumEdit=e;var n=g.main.objects[e];if(n&&"enum"===n.type)$("#tab-enums-list-new-enum").removeClass("disabled").attr("title",_("Create new enum, like %s","enum.newCategory")),2===e.split(".").length?g.$gridList.find("#tab-enums-list-new-category").removeClass("disabled").attr("title",_("Create new category, like %s",e+".newEnum")):g.$gridList.find("#tab-enums-list-new-category").addClass("disabled");else g.$gridList.find("#tab-enums-list-new-enum").addClass("disabled"),g.$gridList.find("#tab-enums-list-new-category").addClass("disabled")}},onReady:m}),g.$gridList.find(".tree-table-buttons a").addClass("btn-small"),g.$gridList.find("#tab-enums-list-new-enum").addClass("disabled"),g.$gridList.find("#tab-enums-list-new-category").addClass("disabled")}function l(t){if("enum"===g.main.objects[t].type){var e=function(e){for(var t=e.split("."),n=[],i=new RegExp("^"+e.replace(/\./g,"\\.")+"\\."),a=0;atr.treetable-enum").droppable({accept:".fancytree-type-draggable",over:function(e,t){if($(this).addClass("tab-accept-item"),$(this).hasClass("not-empty")&&!$(this).hasClass("expanded")){var n;$(this).data("tt-id");(n=$(this).data("timer"))&&clearTimeout(n),$(this).data("timer",setTimeout(function(){g.$gridList.treeTable("expand",$(this).data("tt-id"))},1e3))}},out:function(e,t){var n;$(this).removeClass("tab-accept-item"),(n=$(this).data("timer"))&&(clearTimeout(n),$(this).data("timer",null))},tolerance:"pointer",drop:function(e,t){$(this).removeClass("tab-accept-item"),i(t.draggable.data("id"),$(this).data("tt-id"))}}))}function y(e){if(g.editMode){var t=(e=e||g.$gridEnum.find(".tree-table-body .collection")).find(".collection-item");try{t.droppable("instance")&&t.droppable("destroy")}catch(e){console.error(e)}t.droppable({accept:".fancytree-type-draggable",over:function(e,t){$(this).addClass("tab-accept-item")},out:function(e,t){$(this).removeClass("tab-accept-item")},tolerance:"pointer",drop:function(e,t){$(this).removeClass("tab-accept-item"),i(t.draggable.data("id"),$(this).data("id"))}})}}function v(e,a){var i=!1,s=g.$gridEnum.find("#tab-enums-dialog-new"),o="",t="",n="",r="",c="",l="",d=!0;if(installFileUpload(s,5e4,function(e,t){if(e)b(e,!0);else{if(!t.match(/^data:image\//))return void b(_("Unsupported image format"),!0);s.find(".tab-enums-dialog-create").removeClass("disabled"),c=t,s.find(".tab-enums-dialog-new-icon").show().html(''),s.find(".tab-enums-dialog-new-icon img").attr("src",t),s.find(".tab-enums-dialog-new-icon-clear").show()}}),d=e?(g.main.objects[e]&&g.main.objects[e].common&&(t=translateName(g.main.objects[e].common.name),c=g.main.objects[e].common.icon,l=g.main.objects[e].common.color),n=o=e,s.find("#tab-enums-dialog-preserve-id").prop("checked",!0),!1):(s.find("#tab-enums-dialog-preserve-id").prop("checked",!1),!0),s.find(".tab-enums-dialog-new-title").text(_(a?"Create new category":n?"Rename":"Create new enum")),n){var u=n.split(".");u.length<=2&&(e=!0),n=u.pop(),a=u.join("."),r=n}s.find("#tab-enums-dialog-new-name").val(t).off("change").on("change",function(){var e=s.find("#tab-enums-dialog-new-id"),t=e.val(),n=$(this).val();n=n.replace(FORBIDDEN_CHARS,"_").replace(/\./g,"_").trim().toLowerCase(),!d||t&&i||(e.val(n),s.find("#tab-enums-dialog-new-preview").val((a||"enum")+"."+(n||"#")),M.updateTextFields("#tab-enums-dialog-new")),e.val()&&!e.val().match(/[.\s]/)?(s.find(".tab-enums-dialog-create").removeClass("disabled"),e.removeClass("wrong")):(s.find(".tab-enums-dialog-create").addClass("disabled"),e.addClass("wrong"))}).off("keyup").on("keyup",function(){$(this).trigger("change")}),s.find("#tab-enums-dialog-new-id").val(n).off("change").on("change",function(){if(!s.find("#tab-enums-dialog-preserve-id").prop("checked")){i=!0;var e=$(this).val();s.find("#tab-enums-dialog-new-preview").val((a||"enum")+"."+($(this).val()||"#")),M.updateTextFields("#tab-enums-dialog-new"),e&&!e.match(/[.\s]/)?(s.find(".tab-enums-dialog-create").removeClass("disabled"),$(this).removeClass("wrong")):(s.find(".tab-enums-dialog-create").addClass("disabled"),$(this).addClass("wrong"))}}).off("keyup").on("keyup",function(){$(this).trigger("change")}),s.find("#tab-enums-dialog-new-id").prop("disabled",!d),s.find(".tab-enums-dialog-create").addClass("disabled").off("click").text(_(o?"Change":"Create")).on("click",function(){var e,t,n,i;o?(s.find("#tab-enums-dialog-preserve-id").prop("checked")?(e="object"==typeof g.main.objects[o].common.name?g.main.objects[o].common.name:{en:o.split(".").pop()})[systemLang]=s.find("#tab-enums-dialog-new-name").val():e=s.find("#tab-enums-dialog-new-name").val(),h(o,a+"."+s.find("#tab-enums-dialog-new-id").val(),{name:e,icon:c,color:l},function(e){e?b(_("Error: %s",e),!0):b(_("Updated"))})):(t=(a||"enum")+"."+s.find("#tab-enums-dialog-new-id").val(),n={name:s.find("#tab-enums-dialog-new-name").val(),icon:c,color:l},i=function(e){e?b(_("Error: %s",e),!0,5e3):b(_("Updated"))},g.main.objects[t]?b(_("Name yet exists!"),!0):g.main.socket.emit("setObject",t,{_id:t,common:{name:n.name,members:[],icon:n.icon,color:n.color},type:"enum"},i))}),s.find("#tab-enums-dialog-new-preview").val((a||"enum")+"."+(n||"#")),c?(s.find(".tab-enums-dialog-new-icon").show().html(g.main.getIcon(o)),s.find(".tab-enums-dialog-new-icon-clear").show()):(s.find(".tab-enums-dialog-new-icon").hide(),s.find(".tab-enums-dialog-new-icon-clear").hide()),(l=l||!1)?s.find(".tab-enums-dialog-new-color").val(l):s.find(".tab-enums-dialog-new-color").val(),M.updateTextFields("#tab-enums-dialog-new"),g.main.showToast(s,_("Drop the icons here")),s.find(".tab-enums-dialog-new-upload").off("click").on("click",function(){s.find(".drop-file").trigger("click")}),s.find(".tab-enums-dialog-new-icon-clear").off("click").on("click",function(){c&&(c="",s.find(".tab-enums-dialog-new-icon").hide(),s.find(".tab-enums-dialog-create").removeClass("disabled"),s.find(".tab-enums-dialog-new-icon-clear").hide())}),s.find(".tab-enums-dialog-new-color-clear").off("click").on("click",function(){l&&(s.find(".tab-enums-dialog-create").removeClass("disabled"),s.find(".tab-enums-dialog-new-color-clear").hide(),s.find(".tab-enums-dialog-new-colorpicker").colorpicker({component:".btn",color:l,container:s.find(".tab-enums-dialog-new-colorpicker")}).colorpicker("setValue",""),l="")});var m=Date.now();try{s.find(".tab-enums-dialog-new-colorpicker").colorpicker("destroy")}catch(e){}s.find(".tab-enums-dialog-new-colorpicker").colorpicker({component:".btn",color:l,container:s.find(".tab-enums-dialog-new-colorpicker")}).colorpicker("setValue",l).on("showPicker.colorpicker",function(){var e=s.find(".modal-content");e[0].scrollTop=e[0].scrollHeight}).on("changeColor.colorpicker",function(e){100tr.treetable-enum");i.droppable("instance")&&i.droppable("destroy")}catch(e){console.error(e)}t.removeClass("red").addClass("blue"),g.$gridEnum.removeClass("tab-enums-edit")}}this.prepare=function(){this.isTiles=void 0===this.main.config.enumIsTiles||null===this.main.config.enumIsTiles||this.main.config.enumIsTiles},this._initObjectTree=function(){var e={objects:t.objects,noDialog:!0,draggable:["device","channel","state"],name:"enum-objects",expertModeRegEx:/^system\.|^yunkong2\.|^_|^[\w-]+$|^enum\.|^[\w-]+\.admin|^script\./,texts:{select:_("Select"),cancel:_("Cancel"),all:_("All"),id:_("ID"),ID:_("ID"),name:_("Name"),role:_("Role"),room:_("Room"),function:_("Function"),value:_("Value"),type:_("Type"),selectid:_("Select ID"),from:_("From"),lc:_("Last changed"),ts:_("Time stamp"),wait:_("Processing..."),ack:_("Acknowledged"),edit:_("Edit"),push:_("Trigger event"),ok:_("Ok"),with:_("With"),without:_("Without"),copyToClipboard:_("Copy to clipboard"),expertMode:_("Toggle expert mode"),refresh:_("Update"),sort:_("Sort alphabetically"),button:_("Settings"),noData:_("No data")},filter:{type:"state"},columns:["ID","name","type","role"]};o("init",e).selectId("show"),function(){var e=g.$gridEnum.find(".fancytree-container>tbody");try{e.sortable("instance")&&e.sortable("destroy")}catch(e){console.error(e)}g.$gridEnum.find(".fancytree-container>tbody").sortable({connectWith:"#tab-enums .tab-enums-list .tree-table-main.treetable",items:".fancytree-type-draggable",appendTo:g.$gridEnum,refreshPositions:!0,helper:function(e,t){return $('
                      '+t.find(".fancytree-title").text()+"
                      ")},zIndex:999990,revert:!1,scroll:!1,start:function(e,t){var n=t.item.prev();t.item.data("prev",n),g.$gridEnum.addClass("dragging")},stop:function(e,t){g.$gridEnum.removeClass("dragging")},update:function(e,t){var n=t.item.data("prev");n&&n.length?$(n).after(t.item):$(this).prepend(t.item)}}).disableSelection()}()},this._postInit=function(){void 0!==this.$gridList&&(this.main.objects["enum.rooms"]||(this.main.objects["enum.rooms"]={_id:"enum.rooms",common:{icon:"home",name:{en:"Rooms",cn:"场景"},desc:{en:"List of the rooms"},members:[],dontDelete:!0},type:"enum",acl:{owner:"system.user.admin",ownerGroup:"system.group.administrator",permissions:1911}},g.main.socket.emit("setObject","enum.rooms",this.main.objects["enum.rooms"]),this.list.unshift("enum.rooms")),this.main.objects["enum.functions"]||(this.main.objects["enum.functions"]={_id:"enum.functions",common:{icon:"lightbulb_outline",name:{en:"Functions",cn:"功能"},desc:{en:"List of the functions"},members:[],dontDelete:!0},type:"enum",acl:{owner:"system.user.admin",ownerGroup:"system.group.administrator",permissions:1911}},this.list.unshift("enum.functions"),g.main.socket.emit("setObject","enum.functions",this.main.objects["enum.functions"])),this.isTiles?n():c(),this.editMode?this._initObjectTree():o("destroy"))},this.init=function(e){this.inited&&!e||(this.main&&this.main.objectsLoaded?(this._postInit(),this.inited||(this.inited=!0,this.main.subscribeObjects("enum.*"))):setTimeout(function(){g.init(e)},250))},this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("enum.*")),w(!1),this.$gridList.treeTable("destroy")},this.objectChange=function(e,t,n){if(e.match(/^enum\./)){if(t)-1===this.list.indexOf(e)&&this.list.push(e);else{var i=this.list.indexOf(e);-1!==i&&this.list.splice(i,1)}this.updateTimers&&clearTimeout(this.updateTimers),this.updateTimers=setTimeout(function(){g.updateTimers=null,g._postInit()},200)}this.$grid&&o("object",e,t,n)}}function Events(g){var h=this;this.main=g,this.$tab=$("#tab-events");var e,f,p,t,b,M="yunkong2.net"===location.hostname||"yunkong2.pro"===location.hostname,y={count:0,start:0,limit:500},n=null,v={list:[],mode:!1,counter:0,overflow:!1,$counterSpan:null},w={done:!1,timer:null};this.prepare=function(){t=this.$tab.find("#event-outer"),p=this.$tab.find("#event-table"),b=this.$tab.find("#event-pause"),e=this.$tab.find("#events-table-tr"),(f=new IobListHeader(e,{list:t,colWidthOffset:1,prefix:"event-filter"})).doFilter=i,f.add("combobox","type"),f.add("edit","id","ID"),f.add("edit","val","value"),f.add("combobox","ack","ack",[{val:"",name:"all"},{val:"true",name:"ack"},{val:"false",name:"not ack"}]),f.add("combobox","from","from"),f.add("text","ts"),f.add("text","lc"),Object.defineProperty(f,"getValues",{value:function(){f.ID.selectedVal=f.ID.selectedVal.toLocaleLowerCase(),"true"===f.ack.selectedVal&&(f.ack.selectedVal=!0),"false"===f.ack.selectedVal&&(f.ack.selectedVal=!1)},enumerateble:!1}),b.on("click",function(){h.pause()}),this.$tab.find("#event-clear").off("click").on("click",function(){y.count=0,y.start=0,h.$tab.find("#event-table").html("")})},this.init=function(){M?h.$tab.find("#grid-events").html(_("You can't see events via cloud")+'
                      cloud_off').addClass("no-cloud-events"):f&&(this.inited||(!function e(){if(!$.fn.colResizable)return;t.is(":visible")?(t.colResizable({liveDrag:!0,partialRefresh:!0,marginLeft:5,postbackSafe:!0,onResize:function(e){return f.syncHeader()}}),f.syncHeader()):setTimeout(function(){e()},200)}(),this.inited=!0,this.main.subscribeObjects("*"),this.main.subscribeStates("*")))};var j=!(this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("*"),this.main.unsubscribeStates("*"))});function L(){w.timer=null,$(window).trigger("resize.JColResizer")}function i(){n&&(clearTimeout(n),n=null),f.getValues&&f.getValues(),p&&p.find(".event-line").each(function(e){var t=!0,n=$(this);f.type.selectedVal&&!n.hasClass("event-type-"+f.type.selectedVal)?t=!1:f.from.selectedVal&&!n.hasClass("event-from-"+f.from.selectedVal)?t=!1:""===f.ack.selectedVal||n.hasClass("event-ack-"+f.ack.selectedVal)?f.ID.selectedVal&&-1===$(this).find("td.event-column-id").text().toLocaleLowerCase().indexOf(f.ID.selectedVal)?t=!1:""!==f.value.selectedVal&&-1===$(this).find("td.event-column-value").text().indexOf(f.value.selectedVal)&&(t=!1):t=!1,t?n.show():n.hide()})}this.add=function(e,t,n,i){if(!M){var a,s,o,r,c=i?"stateChange":n?"message":"objChange",l="";if(f&&(f.getValues&&f.getValues(),f.type.checkAddOption(c)),w.done||(w.timer||(w.timer=setTimeout(L,1e3)),20=h.limit){y.start++;var d=document.getElementById("event_"+y.start);d&&(d.outerHTML="")}else y.count++;n||i?i&&(t?(t.from=t.from||"",t.from=t.from.replace("system.adapter.",""),t.from=t.from.replace("system.",""),f&&f.from.checkAddOption(t.from,function(e){return{val:e.replace(/\./g,"-"),name:e}}),l=t.from,void 0!==(a=JSON.stringify(t.val))&&30'+a.substring(0,30)+"..."),s=t.ack?"true":"false",o=g.formatDate(t.ts),r=g.formatDate(t.lc)):(a="deleted",o=g.formatDate(new Date))):o=t?(void 0!==(a=JSON.stringify(t,"\n",2))&&30'+a.substring(0,30)+"..."),g.formatDate(t.ts)):(a="deleted",g.formatDate(new Date));var u=!0;f&&(f.type.selectedVal&&f.type.selectedVal!==c?u=!1:f.ID.selectedVal&&-1===e.toLocaleLowerCase().indexOf(f.ID.selectedVal)?u=!1:""!==f.value.selectedVal&&null!=a&&-1===a.indexOf(f.value.selectedVal)?u=!1:""!==f.ack.selectedVal&&f.ack.selectedVal!==s?u=!1:f.from.selectedVal&&f.from.selectedVal!==l&&(u=!1));var m='';m+=""+c+"",m+=''+e+"",isNaN(a)?m+=''+(a||"")+"":m+=''+(a||"")+"",m+=""+(s||"")+"",m+=""+(l||"")+"",m+=""+(o||"")+"",m+=""+(r||"")+"",m+="",v.mode?(v.list.push(m),v.counter++,v.counter>y.limit&&(v.overflow||(b.addClass("red lighten3").attr("title",_("Message buffer overflow. Losing oldest")),v.overflow=!0),v.list.shift()),v.$counterSpan.html(v.counter)):p&&(p.prepend(m),j||"#tab-events"!==window.location.hash&&"#events"!==window.location.hash||(f&&f.syncHeader(),j=!0))}},this.pause=function(){if(v.mode){v.mode=!1;for(var e=0;epause')}else b.addClass("yellow btn-pause-button-active"),v.$counterSpan=b,v.$counterSpan.html("0"),v.counter=0,v.mode=!0}}function fileHandler(e){e.preventDefault();var t=e.dataTransfer?e.dataTransfer.files[0]:e.target.files[0],n=$(this).find(".drop-zone"),i=$(this).data("drop-zone-cb"),a=$(this).data("limit");if(t.size>(a||1e4))return i&&i(_("File is too big!")),n.hide(),!1;n.show();var s=new FileReader;s.onload=function(e){n.hide(),i&&i(null,e.target.result)},s.readAsDataURL(t)}function installFileUpload(e,t,n){if(void 0!==window.FileReader&&!e.data("installed")){e.data("installed",!0),e.prepend('');var i=e.find(".drop-zone");e[0].ondragover=function(){return i.off("click"),i.show(),!1},i[0].ondragleave=function(){return i.hide(),!1},i[0].ondrop=fileHandler.bind(e[0])}e.data("drop-zone-cb",n),e.data("limit",t),e.find(".drop-file").on("change",fileHandler.bind(e[0]))}function Hosts(s){var r=this;function n(e){var t=$("#dialog-host-update");if(e){var n=e.path,i=(n=n.replace(/\\/g,"/")).split("/");i.pop(),i.pop(),"linux"===e.platform||"darwin"===e.platform||"freebsd"===e.platform||"lin"===e.platform?t.find("#dialog-host-update-instructions").val("cd "+i.join("/")+"\nsudo yunkong2 stop\nsudo yunkong2 update\nsudo yunkong2 upgrade self\nsudo yunkong2 start"):t.find("#dialog-host-update-instructions").val("cd "+i.join("\\")+"\nyunkong2 stop\nyunkong2 update\nyunkong2 upgrade self\nyunkong2 start")}else t.find("#dialog-host-update-instructions").val("cd /opt/yunkong2\nsudo yunkong2 stop\nsudo yunkong2 update\nsudo yunkong2 upgrade self\nsudo yunkong2 start");t.data("inited")||(t.data("inited",!0),t.modal()),t.modal("open")}function i(e){if(e=(e||"").toLowerCase().trim()){var t=!1;r.$tab.find(".hosts-host").each(function(){-1!==$(this).data("host-filter").toLowerCase().indexOf(e)?($(this).show(),t=!0):$(this).hide()}),t?r.$tab.find(".hosts-host-filtered-out").hide():r.$tab.find(".hosts-host-filtered-out").show()}else r.$tab.find(".hosts-host").show(),r.$tab.find(".hosts-host-filtered-out").hide()}function a(e){var t=r.main.objects[r.list[e].id],n=r.main.states[t._id+".alive"]&&r.main.states[t._id+".alive"].val&&"null"!==r.main.states[t._id+".alive"].val;t.common=t.common||{},t.native=t.native||{};var i='';i+='
                      ',i+=''+r.main.getHostIcon(t)+"",i+=''+t.common.hostname+"",i+=''+t.common.type+"";var a=t.common.titleLang||t.common.title;return"object"==typeof a&&(a=a[systemLang]||a.en),i+=''+a+"",i+=''+(t.native.os?t.native.os.platform:_("unknown"))+"",i+='',i+=''+t.common.installedVersion+"",r.main.states[t._id+".inputCount"]?i+='⇥'+r.main.states[t._id+".inputCount"].val+' / ↦'+r.main.states[t._id+".outputCount"].val+"":i+=' / ',i+='',i+=""}function o(e){var t,n=r.main.objects[r.list[e].id],i=r.main.states[n._id+".alive"]&&r.main.states[n._id+".alive"].val&&"null"!==r.main.states[n._id+".alive"].val;n.common=n.common||{},n.native=n.native||{},n.common.color&&(t=r.main.invertColor(n.common.color));var a='
                      '+r.main.getHostIcon(n," ")+'
                      '+n.common.hostname+'
                      • '+r.words.Type+': '+n.common.type+'
                      • '+r.words.Title+': '+n.common.title+'
                      • '+r.words.OS+': '+(n.native.os?n.native.os.platform:_("unknown"))+'
                      • '+r.words.Available+':
                      • '+r.words.Installed+': '+n.common.installedVersion+"
                      • ";return r.main.states[n._id+".inputCount"]?a+='
                      • '+r.words.Events+': ⇥'+r.main.states[n._id+".inputCount"].val+' / ↦'+r.main.states[n._id+".outputCount"].val+"
                      • ":a+='
                      • '+r.words.Events+': /
                      • ',a+='
                      edit autorenew',n.common.hostname!==r.main.currentHost&&(a+=' delete'),a+='
                      '}this.main=s,this.list=[],this.$tab=$("#tab-hosts"),this.$grid=this.$tab.find("#hosts"),this.$table=this.$tab.find("#grid-hosts"),this.inited=!1,this.isTiles=!0,this.words={},this.prepare=function(){this.isTiles=void 0===this.main.config.hostsIsTiles||null===this.main.config.hostsIsTiles||this.main.config.hostsIsTiles,"ie"===this.main.browser&&this.main.browserVersion<=10&&(this.isTiles=!1,this.$tab.find(".btn-switch-tiles").hide()),this.$tab.find(".btn-reload").attr("title",_("Update")).on("click",function(){r.init(!0)}),this.$tab.find(".btn-switch-tiles").off("click").on("click",function(){r.isTiles=!r.isTiles,r.isTiles?$(this).find("i").text("view_list"):$(this).find("i").text("view_module"),r.main.saveConfig("hostsIsTiles",r.isTiles),setTimeout(function(){r._postInit()},50)}),this.isTiles?this.$tab.find(".btn-switch-tiles").find("i").text("view_list"):this.$tab.find(".btn-switch-tiles").find("i").text("view_module"),this.$tab.find(".filter-clear").on("click",function(){r.$tab.find(".filter-input").val("").trigger("change")});var e=this.$tab.find(".filter-input");e.on("change",function(){var e=$(this).val();e?($(this).addClass("input-not-empty"),r.$tab.find(".filter-clear").show()):(r.$tab.find(".filter-clear").hide(),$(this).removeClass("input-not-empty")),r.main.saveConfig("hostsFilter",e),i(e)}).on("keyup",function(){r.filterTimeout&&clearTimeout(r.filterTimeout),r.filterTimeout=setTimeout(function(){r.$tab.find(".filter-input").trigger("change")},300)}),this.main.config.hostsFilter&&"{"!==this.main.config.hostsFilter[0]?(e.val(r.main.config.hostsFilter).addClass("input-not-empty"),this.$tab.find(".filter-clear").show()):this.$tab.find(".filter-clear").hide(),this.words.Title=_("Title"),this.words.OS=_("OS"),this.words.Available=_("Available"),this.words.Installed=_("Installed"),this.words.Events=_("Events"),this.words.Title=_("Title"),r.words.Type=_("Type")},this.initButtons=function(e){var t=e?'[data-host-id="'+e+'"]':"";this.$tab.find(".host-update-submit"+t).off("click").on("click",function(){r.main.cmdExec($(this).attr("data-host-name"),"upgrade self",function(e){e||r.init(!0)})}),this.$tab.find(".host-restart-submit"+t).off("click").on("click",function(){r.main.waitForRestart=!0,r.main.cmdExec($(this).attr("data-host-name"),"_restart")}),this.$tab.find(".host-delete"+t).off("click").on("click",function(){r.main.cmdExec(r.main.currentHost,"host remove "+$(this).attr("data-host-name"))}),this.$tab.find(".host-edit"+t).off("click").on("click",function(){!function(t){var n=$("#tab-host-dialog-edit"),e="",i="",a="";installFileUpload(n,5e4,function(e,t){if(e)r.main.showToast(n,e);else{if(!t.match(/^data:image\//))return void r.main.showToast(n,_("Unsupported image format"));n.find(".tab-host-dialog-ok").removeClass("disabled"),i=t,n.find(".tab-host-dialog-edit-icon").show().html(''),n.find(".tab-host-dialog-edit-icon img").attr("src",t),n.find(".tab-host-dialog-edit-icon-clear").show()}}),r.main.objects[t]&&r.main.objects[t].common&&("object"==typeof(e=r.main.objects[t].common.title)&&(e=e[systemLang]||e.en),i=r.main.objects[t].common.icon,a=r.main.objects[t].common.color);n.find("#tab-host-dialog-edit-title").val(e).off("change").on("change",function(){n.find(".tab-host-dialog-ok").removeClass("disabled")}).off("keyup").on("keyup",function(){$(this).trigger("change")}),n.find(".tab-host-dialog-ok").addClass("disabled").off("click").on("click",function(){var e=JSON.parse(JSON.stringify(r.main.objects[t]));e.common.title=n.find("#tab-host-dialog-edit-title").val(),e.common.icon=i,e.common.color=a,JSON.stringify(e)!==JSON.stringify(r.main.objects[t])?r.main.socket.emit("setObject",e._id,e,function(e){r.main.showToast(n,_("Updated"))}):r.main.showToast(n,_("Nothing changed"))}),i?(n.find(".tab-host-dialog-edit-icon").show().html(r.main.getIcon(t)),n.find(".tab-host-dialog-edit-icon-clear").show()):(n.find(".tab-host-dialog-edit-icon").hide(),n.find(".tab-host-dialog-edit-icon-clear").hide());(a=a||!1)?n.find(".tab-host-dialog-edit-color").val(a):n.find(".tab-host-dialog-edit-color").val();M.updateTextFields("#tab-host-dialog-edit"),r.main.showToast(n,_("Drop the icons here")),n.find(".tab-host-dialog-edit-upload").off("click").on("click",function(){n.find(".drop-file").trigger("click")}),n.find(".tab-host-dialog-edit-icon-clear").off("click").on("click",function(){i&&(i="",n.find(".tab-host-dialog-edit-icon").hide(),n.find(".tab-host-dialog-ok").removeClass("disabled"),n.find(".tab-host-dialog-edit-icon-clear").hide())}),n.find(".tab-host-dialog-edit-color-clear").off("click").on("click",function(){a&&(n.find(".tab-host-dialog-ok").removeClass("disabled"),n.find(".tab-host-dialog-edit-color-clear").hide(),n.find(".tab-host-dialog-edit-colorpicker").colorpicker({component:".btn",color:a,container:n.find(".tab-host-dialog-edit-colorpicker")}).colorpicker("setValue",""),a="")});var s=Date.now();try{n.find(".tab-host-dialog-edit-colorpicker").colorpicker("destroy")}catch(e){}n.find(".tab-host-dialog-edit-colorpicker").colorpicker({component:".btn",color:a,container:n.find(".tab-host-dialog-edit-colorpicker")}).colorpicker("setValue",a).on("showPicker.colorpicker",function(){var e=n.find(".modal-content");e[0].scrollTop=e[0].scrollHeight}).on("changeColor.colorpicker",function(e){100'+e+"").appendTo('.admin-sidemenu-items[data-tab="tab-hosts"] a')}else $("#updates-for-hosts").remove()},this._postInit=function(){if(void 0!==r.$grid){this.isTiles?function(){for(var e="",t=0;t
                      '+_("Filtered out")+"
                      ")}():function(){for(var e="",t=0;t'+_("Filtered out")+"")}(),i(this.$tab.find(".filter-input").val());var s=setTimeout(function(){console.warn("Timeout for repository"),s=null,r.initButtons()},2e3),e=r.main.currentHost;if(!e)for(var t=0;t↦'+t.val+"")):e.match(/^system\.host\..+\.inputCount$/)&&(e=e.substring(0,e.length-11),this.$tab.find('.host-in[data-host-id="'+e+'"]').html('↦'+t.val+""))}}function Instances(i){var p=this;function b(e,t,n,i,a){if("protocol"===n&&(n="secure"),"ip"===e)i=i.replace("%"+e+"%",location.hostname);else if("instance"===e)i=i.replace("%"+e+"%",a);else if(t){n.match(/^native_/)&&(n=n.substring(7));var s=t.native[n];"bind"!==e||s&&"0.0.0.0"!==s||(s=location.hostname),i="secure"===n?i.replace("%"+e+"%",s?"https":"http"):-1===i.indexOf("%"+e+"%")?i.replace("%native_"+e+"%",s):i.replace("%"+e+"%",s)}else i="secure"===n?i.replace("%"+e+"%","http"):-1===i.indexOf("%"+e+"%")?i.replace("%native_"+e+"%",""):i.replace("%"+e+"%","");return i}function o(e,t,n){var i,a,s,o=e.match(/%(\w+)%/g);if(o){for(a=o.length-1;0<=a;a--)s=(i=(i=o[a]).replace(/%/g,"")).split("_"),i.match(/^native_/)?(e=b(i,p.main.objects["system.adapter."+t+"."+n],i,e,n),o.splice(a,1)):1===s.length?(e=b(i,p.main.objects["system.adapter."+t+"."+n],s[0],e,n),o.splice(a,1)):s[0].match(/\.[0-9]+$/)&&(e=b(i,p.main.objects["system.adapter."+s[0]],s[1],e,n),o.splice(a,1));var r,c,l={},d=s[0];for(a=0;a',r+=''+_("Connected to host: ")+'',p.main.states[e+".connected"]&&p.main.states[e+".connected"].val?r+=''+_("true")+"":r+=_("false"),r+='',r+=''+_("Heartbeat: ")+'',p.main.states[e+".alive"]&&p.main.states[e+".alive"].val?r+=''+_("true")+"":r+=_("false"),r+="",p.main.states[n+"."+i+".info.connection"]||p.main.objects[n+"."+i+".info.connection"])r+=''+_("Connected to %s: ",n)+"",r+=(c=!!p.main.states[n+"."+i+".info.connection"]&&p.main.states[n+"."+i+".info.connection"].val)?!0===c?''+_("true")+"":''+c+"":_("false"),r+="";r+=""}else{var c;if(r='',r+='",p.main.states[n+"."+i+".info.connection"]||p.main.objects[n+"."+i+".info.connection"])r+='";r+="
                      '+_("Connected to host: ")+'',p.main.states[e+".connected"]&&p.main.states[e+".connected"].val?r+=''+_("true")+"":(r+="daemon"===s.mode?''+_("false")+"":_("false"),o="daemon"===s.mode?"red":"blue"),r+='
                      '+_("Heartbeat: ")+'',p.main.states[e+".alive"]&&p.main.states[e+".alive"].val?r+=''+_("true")+"":(r+="daemon"===s.mode?''+_("false")+"":_("false"),o="daemon"===s.mode?"red":"blue"),r+="
                      '+_("Connected to %s: ",n)+"",(c=!!p.main.states[n+"."+i+".info.connection"]&&p.main.states[n+"."+i+".info.connection"].val)?r+=!0===c?''+_("true")+"":''+c+"":(o="red"===o?"red":"orange",r+=''+_("false")+""),r+="
                      "}o="blue"===o?"":o,a.removeClass("led-red led-green led-orange led-blue").addClass("led-"+o).data("title",r),a.data("inited")||"gray"===o||(a.data("inited",!0),a.hover(function(){var e='
                      '+$(this).data("title")+"
                      ",t=$(e);t.insertAfter($(this)),$(this).data("big",t[0]);var n=parseFloat(t.height()),i=Math.round($(this).position().top-(n-parseFloat($(this).height()))/2);n+i>(window.innerHeight||document.documentElement.clientHeight)&&(i=(window.innerHeight||document.documentElement.clientHeight)-n),i<0&&(i=0),t.css({top:i}).on("click",function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)})},function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)}).on("click",function(){$(this).trigger("hover")}))}function r(){for(var e=p.main.states["system.host."+p.main.currentHost+".memRss"],t=1,n=e?e.val:0,i=0;i'+n+"");var r=_("%s processes",t),c=p.$tab.find("#running_processes");r!==c.text()&&c.html(''+r+"")}function c(){p.main.states["system.host."+p.main.currentHost+".memAvailable"]?p.memState="memAvailable":p.main.states["system.host."+p.main.currentHost+".freemem"]&&(p.memState="freemem");var e=p.main.states["system.host."+p.main.currentHost+"."+p.memState];if(e){p.totalmem=p.totalmem||p.main.objects["system.host."+p.main.currentHost].native.hardware.totalmem/1048576;var t=Math.round(e.val/p.totalmem*100),n=p.$tab.find("#freeMem"),i=tdp(e.val);i!==n.text()&&(n.html(''+i+""),p.$tab.find("#freeMemPercent").html(''+t+"%"))}else p.$tab.find(".free-mem-label").hide()}function l(){var e=p.main.states["system.host."+p.main.currentHost+".diskSize"],t=p.main.states["system.host."+p.main.currentHost+".diskFree"],n=p.main.states["system.host."+p.main.currentHost+".diskWarning"];if(t&&t.val&&e&&e.val){n=n?parseFloat(n.val):5;var i=p.$tab.find("#diskFree"),a=Math.round(t.val/e.val*1e3)/10;i.html(''+a+""),i.parent().attr("title",_("Size: %s, Free: %s",p.main.formatBytes(1024*e.val*1024),p.main.formatBytes(1024*t.val*1024)))}else p.$tab.find(".tab-instances-info-disk").hide()}function M(e){var t,n=p.main.objects[e]&&p.main.objects[e].common||{};return t=n.enabled&&"daemon"===n.mode&&p.main.states[e+".memRss"]?(t=p.main.states[e+".memRss"].val,t=parseFloat(t)||0,n.memoryLimitMB&&n.memoryLimitMB<=t?''+t.toFixed(1)+" MB":t.toFixed(1)+" MB"):""}function d(e,t,n,i){var a,s=p.main.objects[t]&&p.main.objects[t].common||{},o=t.split("."),r=o[2],c=o[3];if("tile"===n)a=i?"":'
                      ',a+=i?"":"
                      ";else{a=i?"":'';var l=s.localLinks||s.localLink||"",d=l?p.replaceInLink(l,r,c):"";l&&(l="object"==typeof d?'':''),a+='
                      ',a+=""+(s.icon?l+'':"")+(l?"
                      ":"")+"",a+=''+r+"."+c+"";var u=s.onlyWWW||s.enabled;a+='',a+=''+(d?'':"")+"";var m=s.titleLang||s.title;if("object"==typeof m&&(m=m[systemLang]||m.en),a+=''+(m||"")+"",1'+(s.host||"")+""}a+=''+("schedule"===s.mode&&s.schedule||"")+"",p.main.config.expertMode&&(a+=''+(s.restartSchedule||"")+"",a+=''+(s.loglevel||"")+"",a+=''+(s.memoryLimitMB||"")+"",u&&p.main.states[t+".inputCount"]&&p.main.states[t+".outputCount"]?a+='⇥'+p.main.states[t+".inputCount"].val+' / ↦'+p.main.states[t+".outputCount"].val+"":a+=' / '),a+=''+M(t)+"",a+=i?"":""}i?p.$tab.find('.instance-adapter[data-instance-id="'+t+'"]').html(a):e.append(a),p.initButtons(t,d),f(t),p.$tab.find('.instance-editable[data-instance-id="'+t+'"]').on("click",y).addClass("select-id-quick-edit"),p.$tab.find('.instance-schedule[data-instance-id="'+t+'"]').each(function(){$(this).find("button").length||($(this).append(''),$(this).find("button").on("click",function(){var n=$(this).data("name"),i=$(this).data("instance-id");!function(e,t){e=(e||"").replace(/"/g,"").replace(/'/g,"");try{setupCron(e,t)}catch(e){alert(_("Cannot parse value as cron"))}}(p.main.objects[i].common[n]||"",function(e){if(null!==e){var t={common:{}};t.common[n]=e,p.main.socket.emit("extendObject",i,t,function(e){e&&p.main.showError(e)})}})}))}),p.$tab.find('.instance-name[data-instance-id="'+t+'"]').on("click",function(){var e=p.$tab.find('.instance-settings[data-instance-id="'+$(this).data("instance-id")+'"]');e.hasClass("small-button-empty")||e.trigger("click")}).css("cursor","pointer")}function u(e){void 0===e&&(e=p.$tab.find(".instances-filter").val());var t=[];if(e)for(var n=new RegExp(e),i=0;i';for(var u=0;u'+(m[1]||m[0])+""}c+=""}c=c||'';var g=null;t.html(c+'
                      ');var h=n?t.find("select"):t.find("input");t.find(".select-id-quick-edit-cancel").off("click").on("click",function(e){g&&clearTimeout(g),g=null,e.preventDefault(),e.stopPropagation(),t.html(o).off("click").on("click",y).addClass("select-id-quick-edit").css("text-align",r)}),t.find(".select-id-quick-edit-ok").off("click").on("click",function(){t.trigger("blur")}),h.val(s),h.blur(function(){g&&clearTimeout(g),g=setTimeout(function(){g=null;var n=$(this).val();s=JSON.stringify(n)!==JSON.stringify(s)?(p.main.socket.emit("getObject",i,function(e,t){t?(t.common=t.common||{},t.common[a]=n,"title"===a&&t.common.titleLang&&delete t.common.titleLang,p.main.socket.emit("setObject",t._id,t,function(e){e&&p.main.showError(e)})):console.log("Object "+i+" does not exist: "+e)}),''+s+""):o,t.html(s).off("click").on("click",y).addClass("select-id-quick-edit").css("text-align",r)}.bind(this),100)}).on("keyup",function(e){13===e.which&&$(this).trigger("blur"),27===e.which&&(void 0===s&&(s=""),t.html(s).off("click").on("click",y).addClass("select-id-quick-edit").css("text-align",r))}),"object"==typeof e&&(e.preventDefault(),e.stopPropagation()),setTimeout(function(){h.focus()},100)}this.$tab=$("#tab-instances"),this.$grid=$("#grid-instances"),this.$gridHead=$("#grid-instances-head"),this.inited=!1,this.main=i,this.list=[],this.hostsText=null,this.filterHost=!1,this.memState="memAvailable",window.tdp||(window.tdp=function(e,t){return isNaN(e)?"":e.toFixed(t||0).replace(".",",").replace(/\B(?=(\d{3})+(?!\d))/g,".")}),this.replaceInLink=function(e,t,n){if("object"!=typeof e)return o(e,t,n);var i,a=JSON.parse(JSON.stringify(e));for(var s in a)a.hasOwnProperty(s)&&(a[s]=o(a[s],t,n),i||(i=a[s]));return a.__first=i,a},this.prepare=function(){var e=p.$tab.find(".instances-filter"),t=p.$tab.find(".instances-filter-clear");e.on("change",function(){var e=$(this).val();e?($(this).addClass("input-not-empty"),t.show()):($(this).removeClass("input-not-empty"),t.hide()),p.main.saveConfig("instancesFilter",e),u(e)}).on("keyup",function(){p.filterTimeout&&clearTimeout(p.filterTimeout),p.filterTimeout=setTimeout(function(){e.trigger("change")},300)}),p.main.config.instancesFilter&&"{"!==p.main.config.instancesFilter[0]?(e.addClass("input-not-empty").val(p.main.config.instancesFilter),t.show()):t.hide(),p.$tab.find(".btn-instances-expert-mode").on("click",function(){p.main.config.expertMode=!p.main.config.expertMode,p.main.saveConfig("expertMode",p.main.config.expertMode),p.updateExpertMode(),p.main.tabs.adapters.updateExpertMode()}),p.main.config.expertMode&&p.$tab.find(".btn-instances-expert-mode").addClass("red lighten-3"),p.$tab.find(".btn-instances-reload").on("click",function(){p.init(!0,!0)}),t.on("click",function(){e.val("").trigger("change")}),this.$tab.find(".btn-instances-host").off("click").on("click",function(){p.filterHost=!p.filterHost,p.filterHost?p.$tab.find(".btn-instances-host").addClass("red lighten-3"):p.$tab.find(".btn-instances-host").removeClass("red lighten-3"),p.main.saveConfig("instancesFilterHost",p.filterHost),setTimeout(function(){u()},50)}),this.filterHost=this.main.config.instancesFilterHost||!1,this.filterHost?this.$tab.find(".btn-instances-host").addClass("red lighten-3"):this.$tab.find(".btn-instances-host").removeClass("red lighten-3")},this.updateExpertMode=function(){p.init(!0),p.main.config.expertMode?p.$tab.find(".btn-instances-expert-mode").addClass("red lighten-3"):p.$tab.find(".btn-instances-expert-mode").removeClass("red lighten-3")},this.replaceLink=function(n,i,a,s){var o;(n=n.replace(/%/g,"")).match(/^native_/)&&(n=n.substring(7)),-1===n.indexOf("_")?o=[i+"."+a,n]:(o=n.split("_"))[0].match(/\.[0-9]+$/)||(o[0]+=".0"),"protocol"===o[1]&&(o[1]="secure"),"instance"!==n?this.main.socket.emit("getObject","system.adapter."+o[0],function(e,t){t&&setTimeout(function(){var e;(e=s?p.$tab.find("#"+s).data("src"):p.$tab.find("#a_"+i+"_"+a).attr("href"))&&(e="secure"===o[1]?e.replace("%"+n+"%",t.native[o[1]]?"https":"http"):-1===e.indexOf("%"+n+"%")?e.replace("%native_"+n+"%",t.native[o[1]]):e.replace("%"+n+"%",t.native[o[1]]),s?p.$tab.find("#"+s).data("src",e):p.$tab.find("#a_"+i+"_"+a).attr("href",e))},0)}):setTimeout(function(){var e;e=(e=s?p.$tab.find("#"+s).data("src"):p.$tab.find("#a_"+i+"_"+a).attr("href")).replace("%instance%",a),s?p.$tab.find("#"+s).data("src",e):p.$tab.find("#a_"+i+"_"+a).attr("href",e)},0)},this._replaceLink=function(n,i,a,s,o){var r;(i=i.replace(/%/g,"")).match(/^native_/)&&(i=i.substring(7)),-1===i.indexOf("_")?r=[a+"."+s,i]:(r=i.split("_"))[0].match(/\.[0-9]+$/)||(r[0]+=".0"),"protocol"===r[1]&&(r[1]="secure"),this.main.socket.emit("getObject","system.adapter."+r[0],function(e,t){n=t&&n?"secure"===r[1]?n.replace("%"+i+"%",t.native[r[1]]?"https":"http"):-1===n.indexOf("%"+i+"%")?n.replace("%native_"+i+"%",t.native[r[1]]):n.replace("%"+i+"%",t.native[r[1]]):(console.log("Cannot get link "+r[1]),n.replace("%"+i+"%","")),setTimeout(function(){o(n,a,s)},0)})},this._replaceLinks=function(e,t,n,i,a){if(!e)return a(e,t,n,i);var s=e.match(/%(\w+)%/g);return s?"%ip%"===s[0]?(e=e.replace("%ip%",location.hostname),void this._replaceLinks(e,t,n,i,a)):"%instance%"===s[0]?(e=e.replace("%instance%",n),void this._replaceLinks(e,t,n,i,a)):void this._replaceLink(e,s[0],t,n,function(e,t,n){this._replaceLinks(e,t,n,i,a)}.bind(this)):a(e,t,n,i)},this._postInit=function(e,t){if(this.main.currentHost&&void 0!==this.$grid&&(!this.$grid.data("inited")||e)){this.$grid.data("inited",!0),this.list.sort();for(var n=[],i=this.list.length-1;0<=i;i--)this.main.objects[this.list[i]]&&this.main.objects[this.list[i]].common&&!this.main.objects[this.list[i]].common.localLink&&!this.main.objects[this.list[i]].common.localLinks&&this.main.objects[this.list[i]].common.noConfig&&(n.push(this.list[i]),this.list.splice(i,1));for(this.list.sort(),n.sort(),i=0;i",o+=''+_("instance")+"",o+='',o+='',o+=''+_("actions")+"",o+=''+_("title")+"",1'+_("host")+""),o+=''+_("schedule_group")+"",p.main.config.expertMode&&(o+=''+_("restart")+"",o+=''+_("loglevel")+"",o+=''+_("memlimit")+"",o+=''+_("events")+""),o+=''+_("RAM usage")+"",p.$gridHead.html(o),this.$grid.html("");for(var a=Date.now(),s=0;s'+_("Filtered out")+""),p.$tab.find("#currentHost").html(this.main.currentHost),1'+s+"")}else"outputCount"===i?p.$tab.find('.instance-out[data-instance-id="'+e+'"]').html('↦'+t.val+""):"inputCount"===i&&p.$tab.find('.instance-in[data-instance-id="'+e+'"]').html('⇥'+t.val+"");if(-1!==this.list.indexOf(e))return void("alive"!==i&&"connected"!==i||f(e));e="system.adapter."+n[0]+"."+n[1],-1!==this.list.indexOf(e)&&"connection"===i&&f(e)}}},this.objectChange=function(e,t,n){if(e.match(/^system\.adapter\.[-\w]+\.[0-9]+$/))if(t)-1===this.list.indexOf(e)?(this.list.push(e),this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(function(){p.updateTimer=null,p.init(!0)},200),t.common.noConfig||setTimeout(function(){-1===window.location.hash.indexOf("/config/")&&p.main.navigate({tab:"instances",dialog:"config",params:e})},2e3)):-1!==e.indexOf(".web.")?(this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(function(){p.updateTimer=null,p.init(!0)},200)):this.$grid.find('.instance-adapter[data-instance-id="'+e+'"]').html(d(this.$grid,e,this.main.config.instanceForm,!0));else{var i=this.list.indexOf(e);-1!==i&&(this.list.splice(i,1),this.$grid.find('.instance-adapter[data-instance-id="'+e+'"]').remove())}else e.match(/^system\.host\.[-\w]+$/)&&(this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(function(){p.updateTimer=null,p.init(!0)},200))},this.initButtons=function(e,t){e=e?'[data-instance-id="'+e+'"]':"";var n=p.$grid.find(".instance-edit"+e).off("click").on("click",function(){p.onEdit($(this).attr("data-instance-id"))});n.find(".ui-button-icon-primary").length||n.attr("title",_("edit")),(n=p.$grid.find(".instance-settings"+e).off("click").on("click",function(){p.main.navigate({tab:"instances",dialog:"config",params:$(this).data("instance-id")})})).each(function(){var e=$(this).attr("data-instance-id");i.objects[e]&&i.objects[e].common&&i.objects[e].common.noConfig&&$(this).addClass("disabled")}),n=p.$grid.find(".instance-reload"+e).off("click").on("click",function(){p.main.socket.emit("extendObject",$(this).attr("data-instance-id"),{},function(e){e&&p.main.showError(e)})}),n=p.$grid.find(".instance-del"+e).off("click").on("click",function(){var t=$(this).attr("data-instance-id");if(p.main.objects[t]&&p.main.objects[t].common&&p.main.objects[t].common.host){var e=t.replace(/^system\.adapter\./,"");p.main.confirmMessage(_("Are you sure you want to delete the instance %s?",e),null,"help",function(e){e&&p.main.cmdExec(p.main.objects[t].common.host,"del "+t.replace("system.adapter.",""),function(e){e||p.main.tabs.adapters.init(!0)})})}}),n=p.$grid.find(".instance-issue"+e).off("click").on("click",function(){p.main.navigate({tab:"instances",dialog:"issue",params:$(this).data("instance-id")})}),p.$grid.find(".instance-image"+e).each(function(){$(this).data("installed")||($(this).data("installed",!0),$(this).hover(function(){var e='
                      ',t=$(e);t.insertAfter($(this)),$(this).data("big",t[0]);var n=parseFloat(t.height()),i=Math.round($(this).position().top-(n-parseFloat($(this).height()))/2);n+i>(window.innerHeight||document.documentElement.clientHeight)&&(i=(window.innerHeight||document.documentElement.clientHeight)-n),i<0&&(i=0),t.css({top:i})},function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)}))}),(n=p.$grid.find(".instance-stop-run"+e).off("click").on("click",function(){var e=$(this).attr("data-instance-id");$(this).addClass("disabled"),p.main.socket.emit("extendObject",e,{common:{enabled:!p.main.objects[e].common.enabled}},function(e){e&&p.main.showError(e)})})).find(".ui-button-icon-primary").length||n.each(function(){var e=$(this).attr("data-instance-id");p.main.objects[e].common.enabled?n.addClass("instance-running").attr("title",_("Activated. Click to stop.")).find("i").html("pause"):n.removeClass("instance-running").attr("title",_("Deactivated. Click to start.")).find("i").html("play_arrow")}),n=p.$grid.find(".instance-web"+e).off("click").on("click",function(){var e=$(this).data("link");if("object"==typeof e){var t="";for(var n in e)if(e.hasOwnProperty(n)&&"__first"!==n){var i=e[n].match(/^https?:\/\/[-.\w]+:(\d+)\/?/),a=e[n].match(/^https:\/\//);t+='"}t+='";var s=$("#instances-menu");s.data("inited")&&s.menu("destroy");var o=$(this).position();s.html(t),s.data("inited")||(s.data("inited",!0),s.mouseleave(function(){$(this).hide()})),s.menu().css({left:o.left,top:o.top}).show(),s.find(".instances-menu-link").off("click").on("click",function(){$(this).data("link")&&window.open($(this).data("link"),$(this).data("instance-id")),$("#instances-menu").hide()})}else window.open($(this).data("link"),$(this).data("instance-id"))}),"object"==typeof t&&n.data("link",t)},this.resize=function(e,t){}}function Intro(e){var T=this;function t(e){var t=Math.floor(e/86400);e%=86400;var n=Math.floor(e/3600);n<10&&(n="0"+n),e%=3600;var i=Math.floor(e/60);i<10&&(i="0"+i),e%=60,(e=Math.floor(e))<10&&(e="0"+e);var a="";return t&&(a+=t+" "+_("daysShortText")+" "),a+=n+":"+i+":"+e}this.$tab=$("#tab-intro"),this.$tiles=this.$tab.find(".tab-intro-cards"),this.main=e,this.inited=!1,this.$template=$("#intro-template");var d={Uptime:t,"System uptime":t,RAM:function(e){var t=Math.floor(e/1073741824*10)/10;e%=1073741824;var n=Math.floor(e/1048576*10)/10,i="";return i+=1");$(this).append(t),t.val($(this).data("clippy")),t.trigger("select"),document.execCommand("copy"),t.remove(),e.preventDefault(),e.stopPropagation(),T.main.showToast(T.$tiles,_("copied"))}function C(e){var t,c=T.$template.clone();if(c.removeAttr("id"),c.addClass("card-system-info"),c.find(".btn-small").addClass("disabled"),c.find(".card-titles").text(e.name),c.find(".btn-card-enabled").data("host",e.id),!1===T.main.systemConfig.common.intro[e.id]){if(!T.$tab.hasClass("edit-active"))return null;c.addClass("card-disabled").find(".btn-card-enabled").removeClass("blue").addClass("gray").find("i").text("close")}T.main.objects[e.id]&&T.main.objects[e.id].common&&(t=T.main.objects[e.id].common.icon),c.find(".card-image-img").attr("src",t||"img/no-image.png"),c.find(".card-content-text").html('
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      \n
                      ');var l=setTimeout(function(){l&&(l=null,c.find(".btn-small").addClass("disabled"),c.find(".card-content-text").html(_("offline")))},6e3);return d["Disk size"]=d["Disk size"]||T.main.formatBytes,d["Disk free"]=d["Disk size"]||T.main.formatBytes,T.main.socket.emit("sendToHost",e.id,"getHostInfo",null,function(e){clearTimeout(l),l=null,"permissionError"===e?console.error('May not read "getHostInfo"'):e?c.find(".btn-small").removeClass("disabled"):console.error('Cannot read "getHostInfo"');var t=T.main.states["system.host."+T.main.currentHost+".diskWarning"];t=t?parseFloat(t.val):5;var n=0"+_(a)+": ",i+=''+(d[a]?d[a](e[a]):e[a]||" --")+"");n&&(i+="
                    • "+_("Disk free")+": ",i+=''+(d["Disk free"]?d["Disk free"](e["Disk free"]):e["Disk free"]||" --")+"
                    • ",i+="
                    • "+_("Disk size")+": ",i+=''+(d["Disk size"]?d["Disk size"](e["Disk size"]):e["Disk size"]||" --")+"
                    • "),i+=""}i+="",c.find(".card-content-text").replaceWith($(i)),i='
                      '+_("Info")+'
                      content_copyclose';var s=[];if(e){for(var o in i+="
                        ",e)if(e.hasOwnProperty(o)){i+="
                      • "+_(o)+": ";var r=d[o]?d[o](e[o]):e[o];s.push(o+": "+r),i+="Disk free"===o&&n?''+r+"
                      • ":''+r+""}i+="
                      "}i+="
                      ",c.find(".card-reveal").replaceWith($(i)),T.$tab.hasClass("edit-active")?c.find(".btn-small").hide():c.find(".btn-info").data("clippy",s.join("\r\n")).on("click",u)}),c}function D(e,t,n,i,a,s,o){var r=T.$template.clone();r.removeAttr("id");var c=a.replace(/^https?:\/\//,""),l=c.indexOf("/");if(-1!==l&&(c=c.substring(0,l)),"admin"===e&&c===location.host)return null;if("web"===e)return null;if("vis-web-admin"!==e&&e.match(/^vis-/))return null;if(e.match(/^icons-/))return null;if(i&&i.noIntro)return null;r.find(".btn-card-enabled").data("instance",e+"."+t+(n&&n.name?"."+n.name:"")).data("web",s),o?r.on("click",function(){T.$tab.hasClass("edit-active")||window.open($(this).find(".url").attr("href"))}):r.addClass("card-disabled").find(".btn-card-enabled").removeClass("blue").addClass("gray").find("i").text("close"),r.find(".url").attr("href","object"==typeof a?a._first:a||"").text(c+(s?" ("+s+")":"")),r.find(".card-image-img").attr("src",i.icon?"adapter/"+e+"/"+i.icon:"img/no-image.png"),n&&n.color&&r.find(".card-image").css("background",n.color);var d=n&&n.name||i.titleLang||i.title;"object"==typeof d&&(d=d[systemLang]||d.en),r.find(".card-titles").text(d||e);var u=i.desc;return"object"==typeof u&&(u=u[systemLang]||u.en),r.find(".card-content-text").text(u||""),r}function n(e,i){!function(e,t){var n,i,a,s=JSON.parse(JSON.stringify(e)),o=[];s.sort(function(e,t){return e=T.main.objects[e]&&T.main.objects[e].common,t=(t=T.main.objects[t]&&T.main.objects[t].common)||{},void 0===(e=e||{}).order&&void 0===t.order?e.name.toLowerCase()>t.name.toLowerCase()?1:e.name.toLowerCase()t.order?1:e.ordert.name.toLowerCase()?1:e.name.toLowerCase()\n \n');$.getJSON("https://api.github.com/repos/"+i[3]+"/"+i[4]+"/issues",function(e){var t=!1;for(var n in r.empty(),e)if(e.hasOwnProperty(n)){if("remove"===n)break;var i=e[n];if(!i.hasOwnProperty("pull_request")){t=!0;var a=$("#issueTable").children().clone(!0,!0);a.find(".collapsible-header-title").text(i.title),a.find(".goto").attr("href",i.html_url),a.find(".user").text(i.user.login),a.find(".form-row").html((new showdown.Converter).makeHtml(i.body).replace(/src="/g,'class="responsive-img" src="'));var s=new Date(new Date(i.created_at));if(a.find(".created").text(s.toLocaleDateString(systemLang,{weekday:"short",year:"numeric",month:"long",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})),0'+i.labels[o].name+"")}r.append(a),0}}t||r.append($('
                    • '+_("No bug")+"

                    • "))}).done(a.$dialogIssue.find(".collapsible").collapsible())}a.$dialogIssue.data("name",t),a.$dialogIssue.find(".title").html(_("Known bugs for")+": "+t),a.$dialogIssue.find(".dialog-system-buttons .btn-add").attr("href","https://github.com/"+i[3]+"/"+i[4]+"/issues/new"),a.$dialogIssue.find(".dialog-system-buttons .btn-cancel").off("click").on("click",function(e){e.stopPropagation(),e.preventDefault(),a.main.navigate()})}},this.destroy=function(){this.inited&&(this.$dialogIssue.find(".collapsible").collapsible("destroy"),this.inited=!1)}}function Logs(t){var c=this;this.main=t,this.$tab=$("#tab-logs");var s,l,o,d,r={count:0,start:0,limit:2e3},u={host:"",severity:"",message:""},m={list:[],mode:!1,counter:0,overflow:!1,$counterSpan:null};this.prepare=function(){l=this.$tab.find("#log-outer"),s=this.$tab.find("#log-table"),o=this.$tab.find("#log-pause"),(d=new IobListHeader("log-outer-header",{list:l,colWidthOffset:1,prefix:"log-filter"})).doFilter=c.filter,d.add("combobox","from","host"),d.add("text","Time"),d.add("combobox","","severity",[{val:"",name:"debug"},{val:"silly",name:"silly"},{val:"info",name:"info"},{val:"warn",name:"warn"},{val:"error",name:"error"}]).$filter.attr("title",_("severity")),d.add("edit","Message","message"),this.$tab.find("#log-clear-on-disk").on("click",function(){c.main.confirmMessage(_("Log file will be deleted. Are you sure?"),null,null,function(e){e&&c.main.socket.emit("sendToHost",t.currentHost,"delLogs",null,function(e){e?c.main.showError(e):c.clear()})})}).addClass("ui-state-error"),this.$tab.find("#log-refresh").on("click",function(){c.clear()}),o.attr("title",_("Pause output")).on("click",function(){c.pause()}),m.$counterSpan=o.find("ui-button-text"),this.$tab.find("#log-clear").on("click",function(){c.clear(!1)}),$("#log-copy-text").on("click",function(){$(this).hide().html("")}),this.$tab.find("#log-copy").on("click",function(){var e=''+_("copy note")+"";$("#log-copy-text").show().html(e+'
                      '+s.html()+"
                      ");for(var t=c.$tab.find("#log-copy-table").find(".log-column-4"),n=0;n'+a+"")}t.sort();for(var s=0;s'+o+"")}c.$tab.find("#log-files-btn").show().dropdown(),c.$tab.find("#log-files").html(n).find("a").on("click",function(){var e=$(this).data("value");e&&($(this).val(""),window.open(e,"_blank").focus())})}else c.$tab.find("#log-files").hide(),c.$tab.find("#log-files-btn").hide()})},0)})}else setTimeout(function(){c.init(e)},100)},this.destroy=function(){this.inited&&(this.inited=!1,this.main.subscribeLogs(!1))},this.add=function(e){if(s){if(e.message.substring(0,e.from.length)===e.from&&(e.message=e.message.substring(e.from.length+1)),m.mode)return m.list.push(e),m.counter++,m.counter>r.limit&&(m.overflow||(o.addClass("ui-state-error").attr("title",_("Message buffer overflow. Losing oldest")),m.overflow=!0),m.list.shift()),void m.$counterSpan.html(tdp(m.counter));if(r.count>=r.limit){var t=document.getElementById("log-line-"+(r.start+1));t&&(t.outerHTML=""),r.start++}else r.count++;e.from&&d&&d.host.checkAddOption(e.from,function(e){return{val:e.replace(/\./g,"-"),name:e}});var n="",i=e.from?e.from.replace(/\./g,"-"):"";u.host&&u.host!==i&&(n="display: none"),!n&&u.severity&&("debug"===u.severity&&"silly"===e.severity?n="display: none":"info"!==u.severity||"debug"!==e.severity&&"silly"!==e.severity?"warn"===u.severity&&"warn"!==e.severity&&"error"!==e.severity?n="display: none":"error"===u.severity&&"error"!==e.severity&&(n="display: none"):n="display: none"),!n&&u.message&&-1===e.message.indexOf(u.message)&&(n="display: none"),"error"===e.severity&&(c.$tabLogs=c.$tabLogs||$('a[href="#tab-logs"]'),c.$tabLogs.addClass("errorLog"));var a='';a+=''+(e.from||"")+"",a+=''+this.main.formatDate(e.ts)+"",a+=''+e.severity+"",a+=''+e.message.substring(0,200).replace(/&/g,"&").replace(//g,">")+"",s.prepend(a)}},this.filter=function(){u.host=d.host.val(),u.message=d.message.val(),u.severity=d.severity.val(),"error"===u.severity?(l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").hide(),l.find(".log-severity-info").hide(),l.find(".log-severity-warn").hide()):("warn"===u.severity?(l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").hide(),l.find(".log-severity-info").hide()):("info"===u.severity?(l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").hide()):("silly"===u.severity?l.find(".log-severity-silly").show():l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").show()),l.find(".log-severity-info").show()),l.find(".log-severity-warn").show()),l.find(".log-severity-error").show(),(u.host||u.message)&&l.find(".log-line").each(function(){u.host&&!$(this).hasClass("log-from-"+u.host)?$(this).hide():u.message&&-1===$(this).html().indexOf(u.message)&&$(this).hide()})},this.clear=function(e){void 0===e&&(e=!0),s.html(""),r.count=0,r.start=0,c.$tabLogs=c.$tabLogs||$('a[href="#tab-logs"]'),c.$tabLogs.removeClass("errorLog"),e&&setTimeout(function(){c.init(e)},0)},this.pause=function(){if(m.mode){m.mode=!1;for(var e=0;epause')}else o.addClass("yellow btn-pause-button-active"),m.$counterSpan=o,m.$counterSpan.html("0"),m.counter=0,m.mode=!0}}function Issue(e){var a=this;this.$dialog=$("#dialog-issue"),this.main=e,this.prepare=function(){},this.init=function(){if(!this.inited){this.inited=!0,showdown.setFlavor("github");var e=this.main.navigateGetParams(),t=e.replace(/^system\.adapter\./,""),n=this.main.objects[e];if(n&&n.common&&n.common.extIcon){var i=n.common.extIcon.split("/"),r=$("#result-issue");r.html('
                      \n \n
                      ');$.getJSON("https://api.github.com/repos/"+i[3]+"/"+i[4]+"/issues",function(e){var t=!1;for(var n in r.empty(),e)if(e.hasOwnProperty(n)){if("remove"===n)break;var i=e[n];if(!i.hasOwnProperty("pull_request")){t=!0;var a=$("#issueTable").children().clone(!0,!0);a.find(".collapsible-header-title").text(i.title),a.find(".goto").attr("href",i.html_url),a.find(".user").text(i.user.login),a.find(".form-row").html((new showdown.Converter).makeHtml(i.body).replace(/src="/g,'class="responsive-img" src="'));var s=new Date(new Date(i.created_at));if(a.find(".created").text(s.toLocaleDateString(systemLang,{weekday:"short",year:"numeric",month:"long",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})),0'+i.labels[o].name+"")}r.append(a),0}}t||r.append($('
                    • '+_("No bug")+"

                    • "))}).done(a.$dialog.find(".collapsible").collapsible())}a.$dialog.data("name",t),a.$dialog.find(".title").html(_("Known bugs for")+": "+t),a.$dialog.find(".dialog-system-buttons .btn-add").attr("href","https://github.com/"+i[3]+"/"+i[4]+"/issues/new"),a.$dialog.find(".dialog-system-buttons .btn-cancel").off("click").on("click",function(e){e.stopPropagation(),e.preventDefault(),a.main.navigate()})}},this.destroy=function(){this.inited&&(this.$dialog.find(".collapsible").collapsible("destroy"),this.inited=!1)}}function Objects(e){var c=this;this.$grid=$("#grid-objects"),this.subscribes={},this.main=e;var o=function(){if(c.$grid&&c.$grid.selectId)return o=c.$grid.selectId.bind(c.$grid),c.$grid.selectId.apply(c.$grid,arguments)};function r(t,e,n){for(var i=c.main.tabs.enums.list,a=[],s=0;s').show():o.$divLogo.html("").hide(),c(n.readme),c(n.changeLog),c(n.license),n.readme.length?n.readme=r(n.readme.join("\n"),t):n.readme="",n.changeLog.length?n.changeLog=r(n.changeLog.join("\n"),t):delete n.changeLog,n.license.length?(n.license[0]="## "+n.license[0],n.license=r(n.license.join("\n"),t)):delete n.license,n}(e,i.substring(0,i.lastIndexOf("/")+1));o.$divReadme.html(n.readme),n.changeLog?(o.$divChangeLog.html(n.changeLog),o.$tabs.find(".tab-changelog").show()):(o.$divChangeLog.html(""),o.$tabs.find(".tab-changelog").hide()),n.license?(o.$divLicense.html(n.license),o.$tabs.find(".tab-license").show()):(o.$divLicense.html(""),o.$tabs.find(".tab-license").hide())}).done(function(){o.$divReadme.on("click",".md-link",function(e){e.stopPropagation(),e.preventDefault(),o.fillDiv($(this).data("url"))}),o.$divReadme.on("click",".goto-link",function(e){e.stopPropagation(),e.preventDefault();var t=$($(this).data("goto"));t.length&&o.$divReadme.animate({scrollTop:o.$divReadme.scrollTop()-o.$divReadme.offset().top+t.offset().top},2e3)})})},this.destroy=function(){this.inited&&(localStorage.removeItem("original-md-url"),this.inited=!1)}}function initMap(){gMain.dialogs.system.mapLoaded=!0,gMain.dialogs.system.updateMap(!0)}function System(s){var a,o,r,c,l=this;this.$dialog=$("#dialog-system"),this.main=s,this.systemRepos=null,this.systemCerts=null;var d=!(this.mapLoaded=!1);function u(e,t){if(t.length<700&&(-1!==t.indexOf("/")||-1!==t.indexOf("\\")))return t;if(t.length<"-----BEGIN CERTIFICATE-----==-----END CERTIFICATE-----".length)return h(_('Invalid certificate "%s". To short.',e),!0),"";var n=[];if("-----BEGIN RSA PRIVATE KEY-----"===t.substring(0,"-----BEGIN RSA PRIVATE KEY-----".length)){if("-----END RSA PRIVATE KEY-----"!==t.substring(t.length-"-----END RSA PRIVATE KEY-----".length))return h(_('Certificate "%s" must end with "-----END RSA PRIVATE KEY-----".',e),!0),"";for(t=(t=(t=t.substring("-----BEGIN RSA PRIVATE KEY-----".length)).substring(0,t.length-"-----END RSA PRIVATE KEY-----".length)).replace(/\s/g,"");t.length;)n.push(t.substring(0,64)),t=t.substring(64);return"-----BEGIN RSA PRIVATE KEY-----\r\n"+n.join("\r\n")+"\r\n-----END RSA PRIVATE KEY-----\r\n"}if("-----BEGIN PRIVATE KEY-----"===t.substring(0,"-----BEGIN PRIVATE KEY-----".length)){if("-----END PRIVATE KEY-----"!==t.substring(t.length-"-----END PRIVATE KEY-----".length))return h(_('Certificate "%s" must end with "-----BEGIN PRIVATE KEY-----".',e),!0),"";for(t=(t=(t=t.substring("-----BEGIN PRIVATE KEY-----".length)).substring(0,t.length-"-----END PRIVATE KEY-----".length)).replace(/\s/g,"");t.length;)n.push(t.substring(0,64)),t=t.substring(64);return"-----BEGIN PRIVATE KEY-----\r\n"+n.join("\r\n")+"\r\n-----END PRIVATE KEY-----\r\n"}if("-----BEGIN CERTIFICATE-----"!==t.substring(0,"-----BEGIN CERTIFICATE-----".length))return h(_('Certificate "%s" must start with "-----BEGIN CERTIFICATE-----".',e),!0),"";if("-----END CERTIFICATE-----"!==t.substring(t.length-"-----END CERTIFICATE-----".length))return h(_('Certificate "%s" must end with "-----END CERTIFICATE-----".',e),!0),"";for(var i=t.split("-----END CERTIFICATE-----"),a=i.length-1;0<=a;a--)if(i[a].replace(/[\r\n|\r|\n]+/,"").trim()){for(t=(t=(t=i[a]).substring("-----BEGIN CERTIFICATE-----".length)).replace(/\s/g,""),n=[];t.length;)n.push(t.substring(0,64)),t=t.substring(64);i[a]="-----BEGIN CERTIFICATE-----\r\n"+n.join("\r\n")+"\r\n-----END CERTIFICATE-----\r\n"}else i.splice(a,1);return i.join("")}function m(e,t){for(var n,i=table2values("tab-system-certs"),a=[],s=0;s'+i[a].name+""),t===i[a].name&&(n=!0);n&&e.val(t);e.select()}()}}),l.systemRepos.nonEdit&&l.systemRepos.nonEdit.native&&l.systemRepos.nonEdit.native.repositories){var i=l.$dialog.find("#grid-repos");i.find("input").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),i.find("select").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),i.find(".btn-floating").each(function(){$(this).addClass("disabled")}),l.$dialog.find("#tab-system-repo .table-button-add").addClass("disabled")}}else l.$dialog.find("#tab-system-repo").html(_("permissionError"))}function h(e,t,n){l.main.showToast(l.$dialog.find("#tab-system-certs"),e,null,n,t)}function f(){var n=l.main.systemConfig.common,i=!1,a=!1;!function(){l.main.systemConfig.common.defaultNewAcl=l.main.systemConfig.common.defaultNewAcl||{};var e=l.main.systemConfig.common.defaultNewAcl,t=JSON.stringify(e);e.object=0,e.object|=l.$dialog.find("#tab-system-acl-obj-owner-read").prop("checked")?1024:0,e.object|=l.$dialog.find("#tab-system-acl-obj-owner-write").prop("checked")?512:0,e.object|=l.$dialog.find("#tab-system-acl-obj-group-read").prop("checked")?64:0,e.object|=l.$dialog.find("#tab-system-acl-obj-group-write").prop("checked")?32:0,e.object|=l.$dialog.find("#tab-system-acl-obj-every-read").prop("checked")?4:0,e.object|=l.$dialog.find("#tab-system-acl-obj-every-write").prop("checked")?2:0,e.owner=l.$dialog.find("#tab-system-acl-owner").val(),e.ownerGroup=l.$dialog.find("#tab-system-acl-group").val(),e.state=0,e.state|=l.$dialog.find("#tab-system-acl-state-owner-read").prop("checked")?1024:0,e.state|=l.$dialog.find("#tab-system-acl-state-owner-write").prop("checked")?512:0,e.state|=l.$dialog.find("#tab-system-acl-state-group-read").prop("checked")?64:0,e.state|=l.$dialog.find("#tab-system-acl-state-group-write").prop("checked")?32:0,e.state|=l.$dialog.find("#tab-system-acl-state-every-read").prop("checked")?4:0,e.state|=l.$dialog.find("#tab-system-acl-state-every-write").prop("checked")?2:0,e.file=0,e.file|=l.$dialog.find("#tab-system-acl-file-owner-read").prop("checked")?1024:0,e.file|=l.$dialog.find("#tab-system-acl-file-owner-write").prop("checked")?512:0,e.file|=l.$dialog.find("#tab-system-acl-file-group-read").prop("checked")?64:0,e.file|=l.$dialog.find("#tab-system-acl-file-group-write").prop("checked")?32:0,e.file|=l.$dialog.find("#tab-system-acl-file-every-read").prop("checked")?4:0,e.file|=l.$dialog.find("#tab-system-acl-file-every-write").prop("checked")?2:0,JSON.stringify(e)}(),l.$dialog.find(".system-settings.value").each(function(){var e=$(this),t=e.attr("id");t&&(t=t.substring("system_".length),"checkbox"===e.attr("type")?n[t]=e.prop("checked"):("language"===t&&n.language!==e.val()&&(i=!0),"activeRepo"===t&&n.activeRepo!==e.val()&&(a=!0),n[t]=e.val(),"isFloatComma"===t&&(n[t]="true"===n[t]||!0===n[t])))});var e={};if(l.systemRepos){for(var t in l.systemRepos.native.repositories)l.systemRepos.native.repositories.hasOwnProperty(t)&&"object"==typeof l.systemRepos.native.repositories[t]&&l.systemRepos.native.repositories[t].json&&(e[l.systemRepos.native.repositories[t].link]=l.systemRepos.native.repositories[t].json);l.systemRepos.native.repositories={}}var s=table2values("tab-system-repo");if(l.systemRepos){for(var o=null,r=0;r'+n+"");else l.$dialog.find("#tab-system-repo").html(_("permissionError"));l.$dialog.find("#diagMode").val(l.main.systemConfig.common.diag).on("change",function(){l.main.socket.emit("sendToHost",l.main.currentHost,"getDiagData",$(this).val(),function(e){l.$dialog.find("#diagSample").html(JSON.stringify(e,null,2))})}).trigger("change");var i=l.$dialog.find("#system_defaultHistory");i.html('');for(var a=0;a'+s.instances[a].substring("system.adapter.".length)+"");r=l.main.systemConfig.common.longitude,c=l.main.systemConfig.common.latitude,o||(o=!0,d?(l.mapLoaded=!0,$.ajax({url:"lib/js/ol.js",dataType:"script",cache:!0}).done(function(){setTimeout(l.updateMap,500)}),$.ajax({url:"lib/css/ol.css",success:function(e){$("head").append("")}})):$.ajax({url:"https://maps.googleapis.com/maps/api/js?key=AIzaSyCIrBRZfZAE_0C1OplAUy7OXhiWLoZc3eY&signed_in=true&callback=initMap",dataType:"script",cache:!0})),l.$dialog.find(".system-settings.value").each(function(){var e=$(this),t=e.attr("id");t&&(t=t.substring("system_".length),"checkbox"===e.attr("type")?e.prop("checked",l.main.systemConfig.common[t]):"isFloatComma"===t?e.val(l.main.systemConfig.common[t]?"true":"false"):e.val(l.main.systemConfig.common[t]),l.main.systemConfig.nonEdit&&l.main.systemConfig.nonEdit.common&&void 0!==l.main.systemConfig.nonEdit.common[t]&&(e.addClass("disabled"),e.prop("disabled",!0)))}),l.$dialog.find("#system_latitude").off("change").on("change",function(){c=$(this).val(),l.updateMap()}).off("keyup").on("keyup",function(){$(this).trigger("change")}),l.$dialog.find("#system_longitude").off("change").on("change",function(){r=$(this).val(),l.updateMap()}).off("keyup").on("keyup",function(){$(this).trigger("change")}),l.systemCerts.native.letsEncrypt||(l.systemCerts.native.letsEncrypt={path:"letsencrypt"}),l.$dialog.find(".system-le-settings.value").each(function(){var e=$(this),t=e.data("name");l.systemCerts&&l.systemCerts.native.letsEncrypt&&("checkbox"===e.attr("type")?e.prop("checked",l.systemCerts.native.letsEncrypt[t]):e.val(l.systemCerts.native.letsEncrypt[t])),l.systemCerts.nonEdit&&l.systemCerts.nonEdit.native&&l.systemCerts.nonEdit.native.letsEncrypt&&void 0!==l.systemCerts.nonEdit.native.letsEncrypt[t]&&(e.addClass("disabled"),e.prop("disabled",!0))}),l.$dialog.find("#tabs-system").find(".tabs").mtabs({onShow:function(e){e&&p($(e).attr("id"))}}),l.$dialog.find(".dialog-system-buttons .btn-save").off("click").on("click",f),l.$dialog.find(".dialog-system-buttons .btn-cancel").off("click").on("click",function(){l.main.navigate()}),g(),function(){l.main.systemConfig.common.defaultNewAcl=l.main.systemConfig.common.defaultNewAcl||{};for(var e,t=l.main.systemConfig.common.defaultNewAcl,n="",i=0;i'+(e||l.main.tabs.users.list[i])+"";for(l.$dialog.find("#tab-system-acl-owner").html(n).val(t.owner||"system.user.admin"),n="",i=0;i'+(e||l.main.tabs.users.groups[i])+"";l.$dialog.find("#tab-system-acl-group").html(n).val(t.ownerGroup||"system.group.administrator"),void 0===t.object&&(t.object=1636),l.$dialog.find("#tab-system-acl-obj-owner-read").prop("checked",1024&t.object),l.$dialog.find("#tab-system-acl-obj-owner-write").prop("checked",512&t.object),l.$dialog.find("#tab-system-acl-obj-group-read").prop("checked",64&t.object),l.$dialog.find("#tab-system-acl-obj-group-write").prop("checked",32&t.object),l.$dialog.find("#tab-system-acl-obj-every-read").prop("checked",4&t.object),l.$dialog.find("#tab-system-acl-obj-every-write").prop("checked",2&t.object),void 0===t.state&&(t.state=1636),l.$dialog.find("#tab-system-acl-state-owner-read").prop("checked",1024&t.state),l.$dialog.find("#tab-system-acl-state-owner-write").prop("checked",512&t.state),l.$dialog.find("#tab-system-acl-state-group-read").prop("checked",64&t.state),l.$dialog.find("#tab-system-acl-state-group-write").prop("checked",32&t.state),l.$dialog.find("#tab-system-acl-state-every-read").prop("checked",4&t.state),l.$dialog.find("#tab-system-acl-state-every-write").prop("checked",2&t.state),void 0===t.file&&(t.file=1636),l.$dialog.find("#tab-system-acl-file-owner-read").prop("checked",1024&t.file),l.$dialog.find("#tab-system-acl-file-owner-write").prop("checked",512&t.file),l.$dialog.find("#tab-system-acl-file-group-read").prop("checked",64&t.file),l.$dialog.find("#tab-system-acl-file-group-write").prop("checked",32&t.file),l.$dialog.find("#tab-system-acl-file-every-read").prop("checked",4&t.file),l.$dialog.find("#tab-system-acl-file-every-write").prop("checked",2&t.file),l.$dialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")})}(),function(){var e,t=l.$dialog.find("#tab-system-certs");if(l.systemCerts&&l.systemCerts.native.certificates){var n=[];for(var i in l.systemCerts.native.certificates)l.systemCerts.native.certificates.hasOwnProperty(i)&&n.push({name:i,certificate:(e=l.systemCerts.native.certificates[i],e.replace(/(?:\\[rn]|[\r\n]+)+/g,""))});if(values2table("tab-system-certs",n,{onChange:function(e){l.$dialog.find(".btn-save").removeClass("disabled")}}),l.systemCerts.nonEdit&&l.systemCerts.nonEdit.native&&l.systemCerts.nonEdit.native.certificates){var a=l.$dialog.find("#grid-certs");a.find("input").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),a.find("select").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),a.find(".btn-floating").each(function(){$(this).addClass("disabled")})}}else t.html(_("permissionError"));installFileUpload(t,1e4,function(e,t){if(e)h(e,!0);else{try{t=atob(t.split(",")[1])}catch(e){return void h(_("Cannot read file!"),!0)}if(-1!==(t=t.replace(/(\r\n|\n|\r)/gm,"")).indexOf("BEGIN RSA PRIVATE KEY"))m("private",t);else if(-1!==t.indexOf("BEGIN PRIVATE KEY"))m("private",t);else if(-1!==t.indexOf("BEGIN CERTIFICATE")){for(var n=t.split("-----END CERTIFICATE-----"),i=0,a=0;a'),c.find(".tab-dialog-new-icon .treetable-icon").attr("src",t),c.find(".tab-dialog-new-icon-clear").show()}}),"string"==typeof e&&(g.main.objects[e]&&g.main.objects[e].common&&(l.name=g.main.objects[e].common.name,l.icon=g.main.objects[e].common.icon,l.color=g.main.objects[e].common.color,l.desc=g.main.objects[e].common.desc,(o="group"===g.main.objects[e].type)&&(l.acl=g.main.objects[e].common.acl)),d=e,l.id=e),c.find(".tab-dialog-new-title").text(!0===e?_("Create new group"):l.id?_("Change"):_("Create new user")),l.id){var t=l.id.split(".");l.id=t.pop(),s=t.join(".")}c.find("#tab-users-dialog-new-name").val(translateName(l.name)).off("change").on("change",function(){var e=g.$grid.find("#tab-users-dialog-new-id"),t=e.val(),n=$(this).val();n=n.trim().replace(FORBIDDEN_CHARS,"_").replace(/\./g,"_").toLowerCase(),t&&a||!(o&&"administrator"!==t&&"user"!==t||!o&&"admin"!==t)||(e.val(n),i=n,c.find("#tab-users-dialog-new-preview").val(s+"."+(n||"#")),M.updateTextFields("#tab-users-dialog-new")),b(c)}).off("keyup").on("keyup",function(){$(this).trigger("change")}),c.find("#tab-users-dialog-new-desc").val(l.desc).off("change").on("change",function(){b(c)}).off("keyup").on("keyup",function(){$(this).trigger("change")}),i=l.id,c.find("#tab-users-dialog-new-id").val(l.id).off("change").on("change",function(){var e=$(this).val();i!==e&&(a=!0,i=e,c.find("#tab-users-dialog-new-preview").val(s+"."+(e||"#")),M.updateTextFields("#tab-users-dialog-new"),b(c))}).off("keyup").on("keyup",function(){$(this).trigger("change")}),c.find(".tab-dialog-create").addClass("disabled").off("click").text(_(d?"Change":"Create")).on("click",function(e){var n;l.name=c.find("#tab-users-dialog-new-name").val(),l.id=c.find("#tab-users-dialog-new-id").val(),l.desc=c.find("#tab-users-dialog-new-desc").val(),o?(n=l.acl,g.$grid.find(".edit-group-permissions").each(function(){var e=$(this).data("type"),t=$(this).data("operation");n[e]=n[e]||{},n[e][t]=$(this).prop("checked")}),function(i,a,s){if("system.group.administrator"===a&&"administrator"!==s.id)return i.stopPropagation(),u(_('Cannot change name of "%s"',"administrator"),!0);if("system.group.user"===a&&"user"!==s.id)return i.stopPropagation(),u(_('Cannot change name of "%s"',"user"),!0);if(!s.id)return i.stopPropagation(),u(_("ID may not be empty"),!0);if(a)if("system.group."+s.id!==a){if(g.main.objects["system.group."+s.id])return i.stopPropagation(),u(_("ID yet exists"),!0);g.main.socket.emit("getObject",a,function(e,t){if(e)h(_("Cannot change group: ")+e,!0);else{var n=s.id;t.common.name=s.name,t.common.color=s.color,t.common.icon=s.icon,t.common.desc=s.desc,delete s.id,g.main.socket.emit("delObject",a,function(e){e?(h(_("Cannot rename group: ")+e,!0),i.stopPropagation()):g.main.socket.emit("setObject",n,t,function(e){e?h(_("Cannot change group: ")+e,!0):h(_("Updated"))})})}})}else delete s.id,g.main.socket.emit("extendObject",a,{common:s},function(e,t){e?h(_("Cannot change group: ")+e,!0):h(_("Updated"))});else{if(!s.id)return i.stopPropagation(),u(_("ID may not be empty"),!0);g.main.socket.emit("addGroup",s.id,s.desc,null,function(e,t){e?h(_("Cannot create group: ")+e,!0):g.main.socket.emit("extendObject",t._id,{common:s},function(e){e?h(_("Cannot add group: ")+e,!0):h(_("Created"))})})}}(e,d,l)):(delete l.acl,r(e,d,l))}),c.find("#tab-users-dialog-new-preview").val(s+"."+(l.id||"#")),l.icon?(c.find(".tab-dialog-new-icon").show().html(g.main.getIcon(d)),c.find(".tab-dialog-new-icon-clear").show()):(c.find(".tab-dialog-new-icon").hide(),c.find(".tab-dialog-new-icon-clear").hide()),l.color=l.color||!1,l.color?c.find(".tab-dialog-new-color").val(l.color):c.find(".tab-dialog-new-color").val(),u(_("Drop the icons here")),c.find(".tab-dialog-new-upload").off("click").on("click",function(){c.find(".drop-file").trigger("click")}),c.find(".tab-dialog-new-icon-clear").off("click").on("click",function(){l.icon&&(l.icon="",c.find(".tab-dialog-new-icon").hide(),c.find(".tab-dialog-new-icon-clear").hide(),b(c))}),c.find(".tab-dialog-new-color-clear").off("click").on("click",function(){l.color&&(b(c),c.find(".tab-dialog-new-color-clear").hide(),c.find(".tab-dialog-new-colorpicker").colorpicker({component:".btn",color:l.color,container:c.find(".tab-dialog-new-colorpicker")}).colorpicker("setValue",""),l.color="")});var n=Date.now();try{c.find(".tab-dialog-new-colorpicker").colorpicker("destroy")}catch(e){}c.find(".tab-dialog-new-colorpicker").colorpicker({component:".btn",color:l.color,container:c.find(".tab-dialog-new-colorpicker")}).colorpicker("setValue",l.color).on("showPicker.colorpicker",function(){var e=c.find(".modal-content");e[0].scrollTop=e[0].scrollHeight}).on("changeColor.colorpicker",function(e){100'+_(a+" permissions")+"",i+='';for(var s=0;s"+t[s]+"":i+="";i+="",i+="";for(var o=0;o'}else i+="";i+=""}i+="",c.find("#tab-users-dialog-new-rights").html(i),c.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),c.find('input[type="checkbox"]').off("change").on("change",function(){b(c)}),m(d,l.acl),M.updateTextFields("#tab-users-dialog-new")}),c.find("ul.tabs .tab-dialog-new-tabs").show()):(c.find("ul.tabs .tab-dialog-new-tabs").each(function(){$(this).find('a[href="#tab-users-dialog-new-rights"]').length&&$(this).hide()}),M.updateTextFields("#tab-users-dialog-new")),c.find("ul.tabs").mtabs(),g.main.noSelect||c.find("ul.tabs").mtabs("select","tab-users-dialog-new-main"),c.modal().modal("open")}function t(){g.list.sort(),g.groups.sort();var e="";e+='
                        ';for(var t=function(e,t){for(var n={},i=0;i'+g.main.getIcon(c)+l+'close'}var d="",u=!1;a.color&&(d="background: "+a.color+"; ",g.main.invertColor(a.color)&&(u=!0,d+="color: white;"));var m=a.desc;"object"==typeof m&&(m=m[systemLang]||m.en),e+='
                      • ',e+=" "+(g.main.getIcon(g.list[n],null,null,"icon")||''),e+=''+i+"",e+="

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

                        ",e+=' '+(a.enabled?"check_box":"check_box_outline_blank")+"",e+=' edit',e+=' delete
                        ',e+=s||"",e+="
                      • "}e+="
                      ",g.$gridUsers.html(e),g.$grid.find("#tab-users-btn-new-user").on("click",function(){y(!1)}),g.$gridUsers.find(".tab-users-enabled-user").on("click",function(){var e=$(this).data("user");if("system.user.admin"===e)return h(_("Cannot disable admin!"),!0),!1;var t=$(this),n=g.main.objects[e]&&g.main.objects[e].common&&g.main.objects[e].common.enabled;n=!n,g.main.socket.emit("extendObject",e,{common:{enabled:n}},function(e){e?h(_("Cannot modify user!")+e,!0):(h(_("Updated")),t.find("i").text(n?"check_box":"check_box_outline_blank"))})}),g.$gridUsers.find(".delete-content").off("click").on("click",function(){var t=$(this).data("user");$(this).hasClass("disabled")||(g.main.objects[t]&&"user"===g.main.objects[t].type?g.main.confirmMessage(_("Are you sure to delete %s?",t),null,"help",function(e){e&&p(t)}):h(_('Object "%s" does not exists. Update the page.',t),!0))}),g.$gridUsers.find(".edit-content").on("click",function(){y($(this).data("user"))}),g.$gridUsers.find(".tab-users-remove-group").on("click",function(){var i=$(this).data("user"),e=$(this).data("group");g.main.socket.emit("getObject",e,function(e,t){if(t&&t.common&&t.common.members){var n=t.common.members.indexOf(i);-1!==n?(t.common.members.splice(n,1),g.main.socket.emit("setObject",t._id,t,function(e){e?h(_("Error: %s",e),!0):h(_("Removed"))})):h(_("%s is not in the list"),!0)}})})}function n(){var e="";e+='
                        ';for(var t=0;t'+g.main.getIcon(c)+r+'close'}var l="",d=!1;i.color&&(l="background: "+i.color+"; ",g.main.invertColor(i.color)&&(d=!0,l+="color: white;"));var u=i.desc;"object"==typeof u&&(u=u[systemLang]||u.en),e+='
                      • ',e+=" "+(g.main.getIcon(g.groups[t],null,null,"icon")||''),e+=' '+n+"",e+="

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

                        ",e+=' edit',e+=' delete
                        ',e+=a||"",e+="
                      • "}e+="
                      ",g.$gridGroups.html(e),g.$grid.find("#tab-users-btn-new-group").on("click",function(){y(!0)}),g.$gridGroups.find(".delete-content").on("click",function(){var n=$(this).data("group");$(this).hasClass("disabled")||(g.main.objects[n]&&"group"===g.main.objects[n].type?g.main.confirmMessage(_("Are you sure to delete %s?",n),null,"help",function(e){var t;e&&(t=n,g.main.objects[t]&&"group"===g.main.objects[t].type?g.main.objects[t].common&&g.main.objects[t].common.dontDelete?h(_("Object may not be deleted"),!0):g.main.socket.emit("delObject",t,function(e){e?h(_("Group may not be deleted: %s",e),!0):h(_("Group deleted"))}):h(_("Invalid object: %s",t),!0))}):h(_('Object "%s" does not exists. Update the page.',n),!0))}),g.$gridGroups.find(".edit-content").on("click",function(){y($(this).data("group"))}),g.$gridGroups.find(".tab-users-remove-user").on("click",function(){var i=$(this).data("user"),e=$(this).data("group");g.main.socket.emit("getObject",e,function(e,t){if(t&&t.common&&t.common.members){var n=t.common.members.indexOf(i);if(-1!==n){if(t.common.members.splice(n,1),!t._id)return void console.error("INVLAID ID");g.main.socket.emit("setObject",t._id,t,function(e){e?h(_("Error: %s",e),!0):h(_("Removed"))})}else h(_("%s is not in the list"),!0)}})})}this.groups=[],this.list=[],this.$grid=$("#tab-users"),this.$gridUsers=this.$grid.find(".tab-users-list-users .tab-users-body"),this.$gridGroups=this.$grid.find(".tab-users-list-groups .tab-users-body"),this.main=e,this.aclGroups=null,this.prepare=function(){},this._postInit=function(){var e;t(),g.$gridUsers.find("ul").sortable({connectWith:"#tab-users .tab-users-list-groups .treetable",items:".users-type-draggable",appendTo:g.$gridUsers,refreshPositions:!0,helper:function(e,t){return $('
                      '+t.find(".treetable-icon-empty+span").text()+"
                      ")},zIndex:999990,revert:!1,scroll:!1,start:function(e,t){var n=t.item.prev();t.item.data("prev",n),g.$grid.addClass("dragging")},stop:function(e,t){g.$grid.removeClass("dragging")},update:function(e,t){var n=t.item.data("prev");n&&n.length?$(n).after(t.item):$(this).prepend(t.item)}}).disableSelection(),n(),(e=g.$gridGroups.find("ul>li")).droppable("instance")&&e.droppable("destroy"),e.droppable({accept:".users-type-draggable",over:function(e,t){if($(this).addClass("tab-accept-item"),$(this).hasClass("not-empty")&&!$(this).hasClass("expanded")){var n,i=$(this).data("tt-id");(n=$(this).data("timer"))&&clearTimeout(n),$(this).data("timer",setTimeout(function(){g.$gridGroups.treeTable("expand",i)},1e3))}},out:function(e,t){var n;$(this).removeClass("tab-accept-item"),(n=$(this).data("timer"))&&(clearTimeout(n),$(this).data("timer",null))},tolerance:"pointer",drop:function(e,t){$(this).removeClass("tab-accept-item");var n=t.draggable.data("tt-id"),i=$(this).data("tt-id");g.main.socket.emit("getObject",i,function(e,t){t&&t.common&&(t.common.members=t.common.members||[],-1===t.common.members.indexOf(n)?(t.common.members.push(n),t.common.members.sort(),g.main.socket.emit("setObject",t._id,t,function(e){e?h(_("Error: %s",e),!0):h(_("%s added to %s",n,t._id))})):h(_("Is yet in the list")))})}})},this.init=function(e){this.inited&&!e||(void 0!==this.$gridUsers&&this._postInit(),this.inited||(h(_("You can drag&drop users to groups"),5e3),this.inited=!0,this.main.subscribeObjects("system.user.*"),this.main.subscribeObjects("system.group.*")))},this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("system.user.*"),this.main.unsubscribeObjects("system.group.*"))},this.objectChange=function(e,t,n){if(e.match(/^system\.user\./)){if(t)-1===this.list.indexOf(e)&&this.list.push(e);else{var i=this.list.indexOf(e);-1!==i&&this.list.splice(i,1)}this.timer&&clearTimeout(this.timer),this.timer=setTimeout(function(){g.timer=null,g._postInit()},200)}else if(e.match(/^system\.group\./)){if(t)-1===this.groups.indexOf(e)&&this.groups.push(e);else{var a=this.groups.indexOf(e);-1!==a&&this.groups.splice(a,1)}this.timer&&clearTimeout(this.timer),this.timer=setTimeout(function(){g.timer=null,g._postInit()},200)}}}!function(C){C(document).ready(function(){var e=location.pathname+"socket.io";location.pathname.match(/^\/admin\//)&&(e="/socket.io");var s,y={},v={objects:{},states:{},currentHost:"",currentTab:null,currentDialog:null,currentUser:"",subscribesStates:{},subscribesObjects:{},subscribesLogs:0,socket:io.connect("/",{path:e}),systemConfig:null,instances:null,objectsLoaded:!1,waitForRestart:!1,tabs:null,dialogs:{},selectId:null,config:{},ignoreJSupdate:!1,addEventMessage:function(e,t,n,i){g.events.add(e,t,n,i)},saveConfig:function(e,t){e&&(v.config[e]=t),"undefined"!=typeof storage&&storage.set("adminConfig",JSON.stringify(v.config))},saveTabs:function(){this.socket.emit("setObject","system.config",this.systemConfig,function(e){e&&this.showError(e)})},upToDate:function(e,t){return e=e.split("."),t=t.split("."),e[0]=parseInt(e[0],10),t[0]=parseInt(t[0],10),!(e[0]>t[0])&&(e[0]!==t[0]||(e[1]=parseInt(e[1],10),t[1]=parseInt(t[1],10),!(e[1]>t[1])&&(e[1]!==t[1]||(e[2]=parseInt(e[2],10),t[2]=parseInt(t[2],10),e[2]<=t[2]))))},cmdExec:function(e,t,n){e=e||v.currentHost,c.val(""),l.modal("open"),s="$ ./yunkong2 "+t,l.data("finished",!1).find(".btn").html(_("In background")),l.find(".command").html(s),l.find(".progress-dont-close").removeClass("disabled"),p.find(".button-command").removeClass("error").addClass("in-progress"),l.data("max",null),l.data("error",""),h.addClass("indeterminate").removeClass("determinate"),t.match(/^upload /)?l.find(".progress-text").html(_("Upload started...")).removeClass("error"):t.match(/^del [-_\w\d]+\.[\d]+$/)?l.find(".progress-text").html(_("Removing of instance...")).removeClass("error"):t.match(/^del /)?l.find(".progress-text").html(_("Removing of adapter...")).removeClass("error"):t.match(/^url /)?l.find(".progress-text").html(_("Install or update from URL...")).removeClass("error"):t.match(/^add /)?l.find(".progress-text").html(_("Add instance...")).removeClass("error"):l.find(".progress-text").html(_("Started...")).removeClass("error"),c.val(s),r=Math.floor(268435454*Math.random())+1,o=n,v.socket.emit("cmdExec",e,r,t,function(e){e?(s+="\n"+_(e),c.val(s),o=null,n(e)):n&&n()})},confirmMessage:function(e,t,n,i,a){if("function"==typeof i)a=i,m.find(".modal-footer").html(''+_("Ok")+''+_("Cancel")+""),m.find(".modal-footer .modal-action").on("click",function(){var e=m.data("callback");e&&e(C(this).data("result"))});else if("object"==typeof i){for(var s="",o=i.length-1;0<=o;o--)s+=''+i[o]+"";m.find(".modal-footer").html(s),m.find(".modal-footer .modal-action").on("click",function(){var e=m.data("callback");e&&e(C(this).data("id"))})}m.find(".dialog-title").text(t||_("Please confirm")),n?m.find(".dialog-icon").show().html(n):m.find(".dialog-icon").hide(),m.find(".dialog-text").html(e),m.data("callback",a),m.modal("open")},showMessage:function(e,t,n){u.find(".dialog-title").text(t||_("Message")),n?u.find(".dialog-icon").show().html(n):u.find(".dialog-icon").hide(),u.find(".dialog-text").html(e),u.modal("open")},showError:function(e){v.showMessage(_(e),_("Error"),"error_outline")},showToast:function(e,t,n,i,a,s){e&&e instanceof jQuery&&(e=e[0]),"string"==typeof(s=s||[])&&(s=[s]),a&&s.push("dropZone-error"),M.toast({parentSelector:e||C("body")[0],html:t+(n?''+n+"":""),displayLength:i||3e3,classes:s})},formatDate:function(e,t){if(!e)return"";var n,i=typeof e;return"string"===i?t?e.substring(8):e:("object"!==i&&(e=e<9466812e5?new Date(1e3*e):new Date(e)),t?i=(n=e.getDate())<10?"0"+n:n:(i=e.getFullYear(),i+=(n=e.getMonth()+1)<10?"-0"+n:"-"+n,i+=(n=e.getDate())<10?"-0"+n:"-"+n),i+=(n=e.getHours())<10?" 0"+n:" "+n,i+=(n=e.getMinutes())<10?":0"+n:":"+n,i+=(n=e.getSeconds())<10?":0"+n:":"+n,i+=(n=e.getMilliseconds())<10?".00"+n:n<100?".0"+n:"."+n)},updateWizard:function(){var e=C("#button-wizard");v.objects["system.adapter.discovery.0"]?(e.data("inited")||(e.data("inited",!0),e.on("click",function(){v.navigate({tab:"instances",dialog:"config",params:"system.adapter.discovery.0"})}).attr("title",_("Device discovery"))),e.show(),!v.systemConfig.common.wizard&&v.systemConfig.common.licenseConfirmed&&e.trigger("click")):e.hide()},getUser:function(){if(v.currentUser){if(v.objects[v.currentUser]){var e=v.objects[v.currentUser],t="";if(t=e&&e.common&&e.common.name?translateName(e.common.name):(t=v.currentUser.replace(/^system\.user\./))[0].toUpperCase()+t.substring(1).toLowerCase(),e&&e.common&&e.common.icon){var n={};n[v.currentUser]=e,C("#current-user-icon").html(v.getIcon(v.currentUser,null,n))}else C("#current-user-icon").html('account_circle');C("#current-user").html(t);for(var i=[],a=0;aone object or all children of %s too?',t),null,"help_outline",[_("_All"),_("Only one"),_("Cancel")],function(e){0===e?v._delObjects(t,!0,n):1===e&&v._delObjects(t,!1,n)}):v.confirmMessage(_("Are you sure to delete %s?",t),null,"help_outline",function(e){e&&v._delObjects(t,!0,n)}):i&&i.children?v.confirmMessage(_("Are you sure to delete all children of %s?",t),null,"help_outline",function(e){e&&v._delObjects(t,!0,n)}):v.showMessage(_('Object "%s" does not exists. Update the page.',t),_("Error"),"help_outline",function(e){e&&v._delObjects(t,!0,n)})}},g={hosts:new Hosts(gMain=v),objects:new Objects(v),adapters:new Adapters(v),instances:new Instances(v),users:new Users(v),enums:new Enums(v),events:new Events(v),logs:new Logs(v),states:null,intro:new Intro(v)};"undefined"!=typeof States&&(g.states=new States(v)),v.instances=g.instances.list,v.tabs=g,v.dialogs={system:new System(v),customs:new Customs(v),config:new Config(v),editobject:new EditObject(v),issue:new Issue(v),readme:new Readme(v)};var o=null,r=null,c=C("#stdout"),l=C("#dialog-command"),d=C("#dialog-license-main"),u=C("#dialog-message"),m=C("#dialog-confirm"),h=l.find(".progress div"),f=C("#admin_sidemenu_menu"),p=C("#admin_sidemenu_main"),t=!0;if("ontouchstart"in window||navigator.maxTouchPoints||C("body").addClass("desktop-screen"),-1!==navigator.userAgent.indexOf("Safari")&&-1===navigator.userAgent.indexOf("Chrome")&&-1===navigator.userAgent.indexOf("Android")?(C("body").addClass("safari"),v.browser="safari",v.noSelect=!0):detectIE()&&(C("body").addClass("ie"),v.browser="ie",v.browserVersion=detectIE(),v.noSelect=!0,C("#host-adapters-btn").css("margin-top","10px")),"undefined"!=typeof storage)try{v.config=storage.get("adminConfig"),v.config?v.config=JSON.parse(v.config):v.config={}}catch(e){console.log("Cannot load edit config"),v.config={}}function b(e){C("#admin_sidemenu_dialog").html(""),C("html").off("click",b)}function w(){if(function(){var e="",i=[];C(".admin-tab").each(function(){var e=C(this).attr("id");v.systemConfig.common.tabs&&-1===v.systemConfig.common.tabs.indexOf(e)||i.push({line:'
                    • '+(T[e]&&T[e].icon?''+T[e].icon+"":'live_help')+_(C(this).data("name"))+"
                    • ",id:e})}),C(".tab-custom").each(function(){var e=C(this).attr("id");if(!v.systemConfig.common.tabs||-1!==v.systemConfig.common.tabs.indexOf(e)){var t;if(T[e]&&T[e].icon)t=T[e].icon;else{var n="system.adapter."+e.substring(4);v.objects[n]&&v.objects[n].adminTab&&v.objects[n]["fa-icon"]&&(t=v.objects[n]["fa-icon"])}i.push({line:'
                    • '+(t?''+t+"":'live_help')+C(this).data("name")+"
                    • ",id:e})}}),i.sort(function(e,t){return T[e.id]||T[t.id]?T[e.id]?T[t.id]?T[e.id].orderT[t.id].order?1:0:-1:1:0});for(var t=0;t
                        ';for(var s in y){var o=y[s],r="chk-"+s;a+="
                      • '+_(o)+""}a+="
                      ",t.append(a),t.find(".chk-tab").off("change").on("change",function(e){var t=C(this).attr("id").substr(4);if(C(this).prop("checked"))v.systemConfig.common.tabs.push(t);else{var n=v.systemConfig.common.tabs.indexOf(t);-1!==t&&v.systemConfig.common.tabs.splice(n,1)}v.saveTabs(),j()}),t.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=C(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")})}),v.updateWizard(),C("#button-logout").on("click",function(){window.location.href="/logout/"}),window.onhashchange=function(){v.navigateDo()},v.navigateDo(),C("#events_threshold").on("click",function(){v.socket.emit("eventsThreshold",!1)})}function j(){var n=[],e=[];y={};for(var t=0;t'+m+"\n",C("#"+d).length)C("#"+d).hide().appendTo(C("body"));else{var f='
                      ';C(f).hide().appendTo(C("body")),C("#"+d).find(".iframe-in-tab").on("load",function(){var e=C(this).contents().find("body>header");e&&e.length||(e=C(this).contents().find("head")),e&&e.length&&e.append('')})}}}if(C(".tab-custom").each(function(){-1===n.indexOf(C(this).attr("id"))&&C("#"+C(this).attr("id")).remove()}),v.systemConfig.common.tabs||(v.systemConfig.common.tabs=n),C(".link-replace").length){var p=0,b=setTimeout(function(){b=null,w()},100);C(".link-replace").each(function(){p++,v.tabs.instances._replaceLinks(C(this).data("src"),C(this).data("adapter"),C(this).data("instance"),C(this).attr("id"),function(e,t,n,i){C("#"+i).data("src",e).removeClass("link-replace"),--p||b&&(clearTimeout(b),b=null,w())})})}else w()}function L(a){v.socket.emit("getAllObjects",function(e,i){e?window.alert(_(e)):setTimeout(function(){var e;for(var t in v.objects=i,v.objects)v.objects.hasOwnProperty(t)&&"_design"!==t.slice(0,7)&&("instance"===(e=v.objects[t]).type&&v.instances.push(t),"enum"===e.type&&g.enums.list.push(t),"user"===e.type&&g.users.list.push(t),"group"===e.type&&g.users.groups.push(t),"adapter"===e.type&&g.adapters.list.push(t),"host"===e.type&&g.hosts.addHost(e),e.common&&e.common.history&&(e.common.custom=JSON.parse(JSON.stringify(e.common.history)),delete e.common.history));for(var n in v.objectsLoaded=!0,v.initHostsList(!0),j(),v.dialogs)v.dialogs.hasOwnProperty(n)&&"function"==typeof v.dialogs[n].prepare&&v.dialogs[n].prepare();!function n(i,a){a=a||0,i&&a'+a.icon+"";var s;n="instance"===e.type?"/adapter/"+e.common.name+"/"+e.common.icon:e._id.match(/^system\.adapter\./)?(s=e._id.split(".",3),"/"===a.icon[0]?s[2]+=a.icon:s[2]+="/"+a.icon,"/adapter/"+s[2]):(s=e._id.split(".",2),"/"===a.icon[0]?s[0]+=a.icon:s[0]+="/"+a.icon,"/adapter/"+s[0])}i=e.type}return{icon:n,alt:i}}v.initHostsList=function(e){var t=C("#host-adapters");if(!e||!t.data("inited")){t.data("inited",!0),v.currentHost=v.currentHost||v.config.currentHost||"";for(var n,i=[],a=0;a'+v.getHostIcon(v.objects[v.tabs.hosts.list[a].id],"imgHost left")+v.tabs.hosts.list[a].name+""),v.currentHost||(v.currentHost=v.tabs.hosts.list[a].name),v.currentHost===v.tabs.hosts.list[a].name&&(n=v.tabs.hosts.list[a].id);t.html(i);var s=C("#host-adapters-btn").show();s.text(_("Host:")+" "+v.currentHost).dropdown(),v.objects[n]&&v.objects[n].common&&v.objects[n].common.color,s.append(C(v.getHostIcon(v.objects[n],"imgHost left"))),v.tabs.hosts.list.length<2?s.addClass("disabled"):s.removeClass("disabled"),t.find("a").on("click",function(){var e=C(this).data("value"),t="system.host."+e+".alive";v.states[t]&&v.states[t].val&&"null"!==v.states[t].val?(v.currentHost=e,C("#host-adapters-btn").text(_("Host:")+" "+v.currentHost).append(C(this).find(".imgHost").clone()),console.log(v.currentTab),T["tab-"+v.currentTab]&&T["tab-"+v.currentTab].host&&(v.tabs[v.currentTab]&&"function"==typeof v.tabs[v.currentTab].destroy&&v.tabs[v.currentTab].destroy(),v.tabs[v.currentTab]&&"function"==typeof v.tabs[v.currentTab].init&&v.tabs[v.currentTab].init()),v.saveConfig("currentHost",v.currentHost)):v.showMessage(_("Host %s is offline",C(this).val()))})}},v.resubscribeStates=function(){for(var e in v.subscribesStates)v.subscribesStates.hasOwnProperty(e)&&v.subscribesStates[e]&&(console.debug("Re-Subscribe: "+e),v.socket.emit("subscribe",e))},v.resubscribeObjects=function(){for(var e in v.subscribesObjects)v.subscribesObjects.hasOwnProperty(e)&&v.subscribesObjects[e]&&v.socket.emit("subscribeObjects",e)},v.resubscribeLogs=function(){v.subscribesLogs&&(console.debug("Subscribe LOG"),v.socket.emit("requireLog",!0))},v.subscribeStates=function(e){if(e)if("object"==typeof e)for(var t=0;tiframe");d.attr("src")&&(console.log("clear"),d.attr("src",""))}}if(v.currentTab=n,o.hide().appendTo("body"),i||(r.addClass("admin-sidemenu-body-content").show().appendTo(s),o=r),g[n]&&"function"==typeof g[n].init&&g[n].init(),r.length&&(c=r.data("src")))if(-1===c.indexOf("%")){var u=r.find(">iframe");u.length&&!u.attr("src")&&u.attr("src",c)}else f.data("problem-link","tab-"+n)}var m=f.find('.admin-sidemenu-items[data-tab="tab-'+n+'"]');f.find(".admin-sidemenu-items").not(m).removeClass("admin-sidemenu-active"),m.addClass("admin-sidemenu-active"),T["tab-"+n]&&T["tab-"+n].host?C("#host-adapters-btn").css("opacity",1):C("#host-adapters-btn").css("opacity",.3),document.title="云控2 - "+n,v.currentDialog!==i&&(v.dialogs[v.currentDialog]&&"function"==typeof v.dialogs[v.currentDialog].destroy&&v.dialogs[v.currentDialog].destroy(),(v.currentDialog=i)&&v.dialogs[i]?("function"==typeof v.dialogs[i].init&&v.dialogs[i].init(a?a.split(","):void 0),g[v.currentTab]&&g[v.currentTab].saveScroll&&g[v.currentTab].saveScroll(),o.hide().appendTo("body"),C("#dialog-"+i).addClass("admin-sidemenu-body-content").show().appendTo(s)):o.attr("id")!==r.attr("id")&&(o.hide().appendTo("body"),r.addClass("admin-sidemenu-body-content").show().appendTo(s),g[v.currentTab]&&g[v.currentTab].restoreScroll&&g[v.currentTab].restoreScroll()))}})},v.getIconFromObj=function(e,t,n){var i="",a="";if(e&&e.common)if(e.common.icon){var s=N(e);i=s.icon,a=s.alt}else t=t||"lib/css/fancytree/","device"===e.type?(i=t+"device.png",a="device"):"channel"===e.type?(i=t+"channel.png",a="channel"):"state"===e.type&&(i=t+"state.png",a="state");return i?''+(a||':""},v.getIcon=function(e,t,n,i){return v.getIconFromObj((n||v.objects)[e],t,i)},v.getHostIcon=function(e,t){var n="",i="";if(e&&e.common&&e.common.icon){var a=N(e);n=a.icon,i=a.alt}return''+(i=i||'},v.formatBytes=function(e){if(Math.abs(e)<1024)return e+" B";for(var t=["KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],n=-1;e/=1024,++n,1024<=Math.abs(e)&&n'+t.admin.styles+"")}}if(v.systemConfig&&v.systemConfig.common&&v.systemConfig.common.tabs){var i=v.systemConfig.common.tabs.indexOf("tab-log");-1!==i&&(v.systemConfig.common.tabs[i]="tab-logs")}v.socket.emit("getObject","system.repositories",function(e,t){v.dialogs.system.systemRepos=t,v.socket.emit("getObject","system.certificates",function(e,t){setTimeout(function(){if(v.dialogs.system.systemCerts=t,"permissionError"===a)v.systemConfig={common:{language:systemLang},error:"permissionError"};else if(!a&&v.systemConfig&&v.systemConfig.common){if(systemLang=v.systemConfig.common.language||systemLang,v.systemConfig.common.city=v.systemConfig.common.city||"",v.systemConfig.common.country=v.systemConfig.common.country||"",v.systemConfig.common.longitude=v.systemConfig.common.longitude||"",v.systemConfig.common.latitude=v.systemConfig.common.latitude||"",!v.systemConfig.common.licenseConfirmed){var n=(v.systemConfig.common.language||window.navigator.userLanguage||window.navigator.language||"").substring(0,2);"en"!==n&&(n="cn"),systemLang=n,d.find(".license_text").html(license[n]||license.en),d.find(".license_checkbox").prop("checked",!1),d.find(".license_language").data("licenseConfirmed",!1).val(n).on("change",function(){n=C(this).val(),d.find(".license_language_label").html(translateWord("Select language",n)),d.find(".license_text").html(license[n]||license.en),d.find(".license_checkbox").html(translateWord("license_checkbox",n)),d.find(".license_agree .translate").html(translateWord("agree",n)),d.find(".license_non_agree .translate").html(translateWord("not agree",n)),d.find(".license_terms").html(translateWord("License terms",n)),d.find(".license_agreement_label").html(translateWord("license agreement",n))}).select(),d.find(".license_diag").on("change",function(){C(this).prop("checked")?d.find(".license_agree").removeClass("disabled"):d.find(".license_agree").addClass("disabled")}),d.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=C(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),d.modal({dismissible:!1,complete:function(){d.find(".license_text").html(""),location.reload()}}).modal("open"),d.find(".license_agree").addClass("disabled").off("click").on("click",function(e){e.preventDefault(),e.stopPropagation(),v.socket.emit("getObject","system.config",function(e,t){!e&&t?(t.common=t.common||{},t.common.licenseConfirmed=!0,t.common.language=n,v.socket.emit("setObject","system.config",t,function(e){e&&v.showError(e),d.modal("close"),d.find(".license_agree").off("click"),d.find(".license_non_agree").off("click")})):v.showError(_("Cannot confirm: "+e))})}),d.find(".license_non_agree").off("click").on("click",function(e){location.reload()})}}else v.systemConfig={type:"config",common:{name:"system.config",city:"",country:"",longitude:"",latitude:"",language:"",tempUnit:"°C",currency:"",dateFormat:"DD.MM.YYYY",isFloatComma:!0,licenseConfirmed:!1,defaultHistory:"",tabs:["tab-intro","tab-adapters","tab-instances","tab-objects","tab-logs","tab-scenes","tab-javascript","tab-text2command-0"]}},v.systemConfig.common.language=window.navigator.userLanguage||window.navigator.language,"en"!==v.systemConfig.common.language&&(v.systemConfig.common.language="cn");for(var e in translateCron(),translateAll(),"function"==typeof initGridLanguage&&initGridLanguage(v.systemConfig.common.language),l.modal({dismissible:!1}),u.modal(),m.modal({dismissible:!1}),l.find(".progress-show-more").off("change").on("change",function(){var e=C(this).prop("checked");v.saveConfig("progressMore",e),e?l.find(".textarea").show():l.find(".textarea").hide()}),void 0===v.config.progressClose&&(v.config.progressClose=!0),l.find(".progress-dont-close input").on("change",function(){v.saveConfig("progressClose",C(this).prop("checked"))}),l.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=C(this).prev();e.parent().parent().hasClass("switch")||e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),l.find(".progress-dont-close input").prop("checked",v.config.progressClose),l.find(".progress-show-more").prop("checked",!!v.config.progressMore).trigger("change"),l.find(".btn").on("click",function(){l.data("finished")?p.find(".button-command").hide():p.find(".button-command").show()}),p.find(".button-command").on("click",function(){l.modal("open")}),g)g.hasOwnProperty(e)&&g[e]&&"function"==typeof g[e].prepare&&g[e].prepare();var i;i=L,g.states&&g.states.clear(),v.socket.emit("getStates",function(e,t){v.states=t,"function"==typeof i&&setTimeout(function(){i()},0)})},0)})})})})):(v.resubscribeStates(),v.resubscribeObjects(),v.resubscribeLogs()),v.waitForRestart&&location.reload()}),v.socket.on("disconnect",function(){C("#connecting").show()}),v.socket.on("reconnect",function(){C("#connecting").hide(),v.waitForRestart&&location.reload()}),v.socket.on("repoUpdated",function(){setTimeout(function(){g.adapters.init(!0)},0)}),v.socket.on("reauthenticate",function(){location.reload()})})}(jQuery);var license={en:'The MIT License (MIT)

                      Copyright © 2014-2018 spacen

                      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
                      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
                      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                      ',cn:'The MIT License (MIT)

                      Copyright © 2014-2018 spacen

                      Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
                      The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
                      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                      '},addAll2FilterCombobox=!1;function IobListHeader(e,h){if(!(this instanceof IobListHeader))return new IobListHeader(e,h);var f,a,p;void 0===h&&(h={}),void 0===h.colWidthOffset&&(h.colWidthOffset=0),"TABLE"===(p="object"==typeof e?$(e):$("#"+e))[0].tagName&&(p=p.find("tr:first")),e=p[0];var n,b=this;b.selectIdOffset=[],p.html(""),this.setList=function(e){var t;(t="string"==typeof e?("#"!==e[0]&&(e="#"+e),$(e)):e)&&t.length&&("TD"!==t[0].tagName&&"TH"!==t[0].tagName&&((t=t.find(">thead>tr:first>th,>thead>tr:first>td")).length||(t=e.find(">tbody>tr:first>th,>tr:first>th,>tbody>tr:first>td, >tr:first>td"))),a=t)},h.list&&this.setList(h.list),this.syncHeader=function(){if("object"==typeof a){var e=function(){a.each(function(e,t){if(!(e>=a.length-1)){var n=$(t).width(),i=b.selectIdOffset[e]||0;n+i&&$(f[e]).width(Math.round(n+i))}}),a.length&&!b.selectIdOffset.length&&(b.selectIdOffset[0]=0,a.each(function(e,t){var n=$(a[e]).offset().left;n&&(b.selectIdOffset[e]=n-$(f[e]).offset().left)}),e())};e()}},$(window).on("resize",function(e,t){n&&clearTimeout(n),n=setTimeout(b.syncHeader.bind(b),100)}),this.doFilter=function(){},b.ids=[],b.add=function(t,m,e,n){void 0===e&&(e=m);var i,a,s=!(i=e)||a&&"#"===i[0]?i:(h.prefix&&i.substr(0,h.prefix.length)!==h.prefix&&(i=h.prefix+"-"+i),(a?"#":"")+i);m=_(m);var o="";switch(t){case"combobox":o=' ';break;case"edit":o=' ';break;case"text":o=''+m+""}p.append(""+o+"");var r="#"+s,g=$(r),c=b[e]={$filter:g,val:g.val.bind(g),selectedVal:g.val()||""};if(b.ids.push(e),"combobox"===t&&(c.options=[],c.checkAddOption=function(e,t,n){if(-1===this.options.indexOf(e)){this.options.push(e),this.options.sort();for(var i,a,s=g.val(),o=n?"":(i=m,a=s,addAll2FilterCombobox&&(i=i?_(i)+" ("+_("all")+")":_("all")),'"),r=0,c=this.options.length;r"+t+""}},n))for(var l=0;lclose'),g.on("change",function(e){d&&clearTimeout(d),c.selectedVal=g.val(),d=setTimeout(b.doFilter,"combobox"!==t?400:0),c.selectedVal?g.parent().addClass("filter-active"):g.parent().removeClass("filter-active")}).on("keyup",function(e){13===e.which?b.doFilter():g.trigger("change")}),f=p.find(">th"),c}}function values2table(r,c,e){"object"==typeof r&&(e=c,c=r,r="");var l=e&&e.maxRaw||null,d=e&&e.onChange||null,u=e&&e.onReady||null;c=c||[];var o,s=[],m=(o=r?$("#"+r):$("body")).find(".table-button-add");if(m.data("raw",c.length),l&&m.data("maxRaw",l),m.data("inited")||(m.data("inited",!0),m.on("click",function(){if(!m.data("maxRaw")||m.data("raw")';for(var a=0;a';else if("select"===s[a].type.substring(0,6)){f+=("multiple"===s[a].type.substring(7,16)?'"}else f+='';if(g[a]){p="text-align: center; "+(g[a].style||"")+(g[a].tdstyle||"");for(var v=0;v':f+='';g[a].class&&(t+=' class="'+g[a].class+'" ')}p.length||b.length?t+=' style="'+p+b+'">'+f+"":t+=">"+f+""}t+=""}var w=h.find(".table-lines");w.length||(h.append(''),w=h.find(".table-lines")),w.html(t),w.find(".values-input").each(function(){var e=$(this),t=e.attr("type"),n=e.data("name"),i=e.data("index");e.data("old-value",c[i][n]),"checkbox"===t?e.prop("checked",c[i][n]):e.val(c[i][n])}),w.find("a[data-command]").each(function(){var e=$(this).data("command");"delete"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),d&&d(),setTimeout(function(){"function"==typeof tableEvents&&tableEvents(e,t,"delete"),values2table(r,c,d,u,l)},100),m.data("maxRaw")&&m.data("raw",m.data("raw")-1)}).addClass("red").find(".material-icons").html("delete"):"up"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),c.splice(e-1,0,t),d&&d(),setTimeout(function(){values2table(e,c,d,u,l)},100)}).find("i").html("arrow_upward"):"down"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),c.splice(e+1,0,t),d&&d(),setTimeout(function(){values2table(e,c,d,u,l)},100)}).find("i").html("arrow_downward"):"pair"===e?$(this).on("click",function(){if("function"==typeof tableEvents){var e=$(this).data("index"),t=c[e];tableEvents(e,t,"pair")}}).attr("title",_("pair")).find("i").html("insert_link"):"unpair"===e&&$(this).on("click",function(){if("function"==typeof tableEvents){var e=$(this).data("index"),t=c[e];tableEvents(e,t,"unpair")}}).attr("title",_("unpair")).find("i").html("not_interested")}),w.find(".values-input").on("change.adaptersettings",function(){var e=$(this).data("index"),t=$(this).data("name");"checkbox"===$(this).attr("type")?($(this).prop("checked").toString()!==$(this).data("old-value")&&d&&d(t,e),c[e][t]=$(this).prop("checked")):($(this).val()!==$(this).data("old-value")&&d&&d(t,e),c[e][t]=$(this).val())}).on("keyup",function(){$(this).trigger("change.adaptersettings")})}"function"==typeof u&&u()}function table2values(e){var t;t=e?$("#"+e):$("body");var n=[];t.find(".table-values th").each(function(){var e=$(this).data("name");e?n.push(e):n.push("___ignore___")});var i=[],a=0;return t.find(".table-lines tr").each(function(){i[a]={},$(this).find("td").each(function(){var e=$(this).find("input");if(e.length){var t=e.data("name");"checkbox"===e.attr("type")?i[a][t]=e.prop("checked"):i[a][t]=e.val()}var n=$(this).find("select");if(n.length){t=n.data("name");i[a][t]=n.val()||""}}),a++}),i}var systemLang="en",systemDictionary={};function translateWord(e,t,n){if(!e)return"";if(t=t||systemLang,(n=n||systemDictionary)[e=e.toString()]){var i=n[e][t];if(i)return i;if("en"!==t&&(i=n[e].en))return i}else"string"!=typeof e||e.match(/_tooltip$/)?"string"!=typeof e&&console.warn("Trying to translate non-text:"+e):console.log('"'+e+'": {"en": "'+e+'", "cn": "'+e+'"},');return e}function translateAll(e,i,a){i=i||systemLang,a=a||systemDictionary,e||(e="body");var t=$(e);t.find(".translate").each(function(e){var t=$(this).attr("data-lang");t||(t=$(this).html(),$(this).attr("data-lang",t));var n=translateWord(t,i,a);n&&$(this).html(n)}),t.find(".translateV").each(function(e){var t=$(this).attr("data-lang-value");t||(t=$(this).attr("value"),$(this).attr("data-lang-value",t));var n=translateWord(t,i,a);n&&$(this).attr("value",n)}),t.find(".translateT").each(function(e){var t=$(this).attr("data-lang-title");t||(t=$(this).attr("title"),$(this).attr("data-lang-title",t));var n=translateWord(t,i,a);n&&$(this).attr("title",n)}),t.find(".translateP").each(function(e){var t=$(this).attr("data-lang-placeholder");t||(t=$(this).attr("placeholder"),$(this).attr("data-lang-placeholder",t));var n=translateWord(t,i,a);n&&$(this).attr("placeholder",n)})}function translateName(e){return e&&"object"==typeof e?e[systemLang]||e.en:e}var _=function(e,t,n,i){var a=(e=translateWord(e)).indexOf("%s");return-1===a||-1===(a=(e=e.replace("%s",t)).indexOf("%s"))||-1!==(a=(e=e.replace("%s",n)).indexOf("%s"))&&(e=e.replace("%s",i)),e};!function(X){if(!X.fn.treeTable){var t={init:function(e){e.imgPath=e.imgPath||"lib/css/fancytree/";for(var t=0;t';n+='
                        ';for(var i=e.rows,a=0;a'+(d?"":'')+''+l+""}n+="
                      ";var u=X(this),m=X(n);u.find(".treetablelist-buttons").remove(),u.find(".treetable-list").remove(),u.find(".tree-table-buttons").remove(),u.find(".tree-table-main").remove(),u.prepend(m);var g=X(m).find(".treetablelist-buttons"),h=X(m).find(".treetable-list");h.sortable({cancel:".treetable-list-folder",axis:"y"}).data("options",e);var f=this;g.find(".treetable-list-btn-ok").button({icons:{primary:"ui-icon-check"},text:!1}).css({width:24,height:24}).on("click",function(){var i="",a=[];h.find("li").each(function(){var e=X(this).data("id");if(X(this).hasClass("treetable-list-folder"))i=e;else{var t=e.split("."),n=t.pop();t.join(".")!==i&&a.push({oldId:e,newId:i+"."+n})}}),function t(n,i,a){if(i&&i.length){var e=i.shift();n.moveId&&n.moveId(e.oldId,e.newId,function(e){setTimeout(function(){t(n,i,a)},50)})}else a&&a()}(e,a,function(){p.call(f,e)})}),g.find(".treetable-list-btn-cancel").button({icons:{primary:"ui-icon-cancel"},text:!1}).css({width:24,height:24}).on("click",function(){p.call(f,e)})}function ne(e,t,n){var i="",a="",s=e&&e.common;if(s)if(s.icon){if(s.icon.match(/^data:image\//))i=s.icon;else{if(-1===s.icon.indexOf("."))return''+s.icon+"";var o;i="instance"===e.type?"/adapter/"+e.common.name+"/"+e.common.icon:e._id.match(/^system\.adapter\./)?(o=e._id.split(".",3),"/"===e.common.icon[0]?o[2]+=e.common.icon:o[2]+="/"+e.common.icon,"/adapter/"+o[2]):(o=e._id.split(".",2),"/"===e.common.icon[0]?o[0]+=e.common.icon:o[0]+="/"+e.common.icon,"/adapter/"+o[0])}a=e.type}else t=t||"lib/css/fancytree/","device"===e.type?(i=t+"device.png",a="device"):"channel"===e.type?(i=t+"channel.png",a="channel"):"state"===e.type&&(i=t+"state.png",a="state");return i?''+a+'':""}function p(i){var e="",t=window.M&&window.M.toast?"a":"button";if(i.panelButtons){e+='
                      ';for(var n=0;n",window.M&&window.M.toast&&(e+=''+(i.panelButtons[n].icon||"")+""),e+="";i.moveId&&(e+="<"+t+' class="btn-floating waves-effect waves-light blue treetable-sort" title="'+_("reorder")+'">',window.M&&window.M.toast&&(e+='import_export'),e+=""),e+="
                      "}e+='
                      ',e+=" ",e+=' ';for(var a=0;a",e+=' ',e+=' ',e+=" "):e+=" "+_(i.columns[a])+"";i.buttons&&(e+=" "),e+=" ",e+="",e+="";var s=[],o=i.root?new RegExp("^"+i.root.replace(/\./g,"\\.")+"\\."):null,r=-1!==i.columns.indexOf("instance")?[]:null;for(var c in i.objects){var l;if(i.objects.hasOwnProperty(c))if(r&&"instance"===i.objects[c].type&&(l=c.match(/^system\.adapter\.javascript\.(\d+)$/))&&r.push(l[1]),!o||o.test(c)){var d=i.objects[c].common,u={id:c,parent:null,_class:"treetable-"+i.objects[c].type};"channel"===i.objects[c].type&&(u.folder=!0);for(var m=0;mt.id?1:e.id',s[z].children&&s[z].children.length&&(e+=''+s[z].children.length+"")):e+='"}if(i.buttons){e+='"}e+=""}e+="";var R=X(this),H=X(e);R.find("span:first-child").remove(),R.find(".treetablelist-buttons").remove(),R.find(".treetable-list").remove(),R.find(".tree-table-buttons").remove(),R.find(".tree-table-main").remove(),R.prepend(H),i.rows=s;var B=X(H[1]).find(">table"),G=X(H[0]);B.data("options",i),B.treetable({expandable:!0,clickableNodeNames:!0,expanderTemplate:"",indenterTemplate:'',onNodeExpand:q,onNodeCollapse:ee,stringCollapse:_("collapse"),stringExpand:_("expand")});var F=B.find("tbody");if(F.on("click","tr",function(){X(".selected").not(this).removeClass("selected"),X(this).addClass("selected");var e=X(this).parent().parent().data("options"),t=X(this).data("tt-id");e.onChange&&e.onChange(X(this).data("tt-id"),e.oldId),e.oldId=t}),i.buttons)for(var Z=0;Z"%s"?',en:'Are you sure to delete "%s"?'},'Are you sure to delete all children of %s?':{cn:'确定删除 %s 的全部子项?',en:'Are you sure to delete all children of %s?'},"Are you sure to delete all children of %s?":{cn:'你确定删除 "%s"全部的子项目?',en:'Are you sure to delete "%s" and all children?'},"Are you sure to delete script %s?":{cn:"你确定删除脚本 '%s'?",en:"Are you sure to delete script '%s'?"},"Are you sure you want to delete adapter %s?":{cn:"你确定删除适配器: %s?",en:"Are you sure you want to delete adapter %s?"},"Are you sure you want to delete the instance %s?":{cn:"你确定要删除这个实例: %s?",en:"Are you sure you want to delete the instance %s?"},"Are you sure?":{cn:"你确定吗?",en:"Are you sure?"},"Are you sure? Changes are not saved.":{cn:"数据没有保存,你确定啊吗?",en:"Are you sure? Changes are not saved."},Aug:{cn:"Aug",en:"Aug"},August:{cn:"August",en:"August"},Available:{cn:"可用的",en:"Available"},"Available version:":{cn:"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:"点击图标打开链接",en:"Click on icon to open a link"},Close:{cn:"关闭",en:"close"},"Collapse all nodes":{cn:"收起全部",en:"Collapse all nodes"},Color:{cn:"颜色",en:"Color"},"Configuration not saved.":{cn:"配置信息没有存储.",en:"Configuration not saved."},"Connected to %s: ":{cn:"Connected to %s: ",en:"Connected to %s: "},"Connected to host: ":{cn:"Connected to host: ",en:"Connected to host: "},"Copy log":{cn:"复制",en:"Copy log"},"Copy to clipboard":{cn:"拷贝",en:"Copy to clipboard"},"Country:":{cn:"国家/地区",en:"Country"},Create:{cn:"创建",en:"Create"},"Create new category":{cn:"新建分类",en:"Create new category"},"Create new category, like %s":{cn:"创建新的分类, like %s",en:"Create new category, like %s"},"Create new enum":{cn:"新建枚举",en:"Create new enum"},"Create new enum, like %s":{cn:"创建新的枚举, like %s",en:"Create new enum, like %s"},"Create new group":{cn:"新建群组",en:"Create new group"},"Create new user":{cn:"创建新用户",en:"Create new user"},Created:{cn:"Created",en:"Created"},Croatia:{cn:"Croatia",en:"Croatia"},"Cron expression":{cn:"Cron expression",en:"Cron expression"},"Currency:":{cn:"货币",en:"Currency"},Custom:{cn:"自定义",en:"Custom"},D$ecember:{cn:"D$ecember",en:"D$ecember"},"DD.MM.YY":{cn:"DD.MM.YY",en:"DD.MM.YY"},"DD.MM.YYYY":{cn:"DD.MM.YYYY",en:"DD.MM.YYYY"},"DD/MM/YYYY":{cn:"DD/MM/YYYY",en:"DD/MM/YYYY"},"Date From":{cn:"Date From",en:"Date From"},"Date To":{cn:"Date To",en:"Date To"},"Date format:":{cn:"时间格式",en:"Date format"},"Deactivated. Click to start.":{cn:"Deactivated. Click to start.",en:"Deactivated. Click to start."},"Debug outputs:":{cn:"调试输出",en:"Debug outputs"},Dec:{cn:"Dec",en:"Dec"},December:{cn:"December",en:"December"},"Default ACL":{cn:"缺省 ACL",en:"Default ACL"},"Default history instance:":{cn:"缺省的数据记录实例",en:"Default history instance"},"Delete attribute":{cn:"删除",en:"Delete attribute"},"Delete category":{cn:"删除",en:"Delete category"},"Delete enum":{cn:"删除",en:"Delete enum"},"Delete member":{cn:"删除",en:"Delete member"},"Delete object":{cn:"删除",en:"Delete object"},Denmark:{cn:"Denmark",en:"Denmark"},Description:{cn:"说明",en:"Description"},Device:{cn:"Device",en:"Device"},"Device discovery":{cn:"Device discovery",en:"Device discovery"},"Disk free":{cn:"磁盘空闲",en:"Disk free"},"Disk free:":{cn:"磁盘空闲:",en:"Disk free:"},"Disk size":{cn:"磁盘大小",en:"Disk size"},'Do you want to delete just one object or all children of %s too?':{cn:'Do you want to delete just one object or all children of %s too?',en:'Do you want to delete just one object or all children of %s too?'},"Do you want to upgrade all adapters?":{cn:"Do you want to upgrade all adapters?",en:"Do you want to upgrade all adapters?"},"Domains:":{cn:"Domains",en:"Domains"},Dominica:{cn:"Dominica",en:"Dominica"},"Done with error: %s":{cn:"Done with error: %s",en:"Done with error: %s"},"Download log":{cn:"下载",en:"Download log"},"Drop the files here":{cn:"拖放文件到这里",en:"Drop the files here"},"Drop the icons here":{cn:"拖放图标文件到这里",en:"Drop the icons here"},Ecuador:{cn:"Ecuador",en:"Ecuador"},Edit:{cn:"编辑",en:"Edit"},"Edit category":{cn:"编辑 category",en:"Edit category"},"Edit enum":{cn:"编辑 enum",en:"Edit enum"},"Edit in dialog":{cn:"编辑 in dialog",en:"Edit in dialog"},"Edit object":{cn:"编辑 object",en:"Edit object"},Egypt:{cn:"Egypt",en:"Egypt"},"El Salvador":{cn:"El Salvador",en:"El Salvador"},"Email for account:":{cn:"Email for account",en:"Email for account"},Enums:{cn:"枚举",en:"Enums"},Error:{cn:"错误",en:"Error"},Event:{cn:"类型",en:"Type"},Events:{cn:"事件",en:"Events"},Everyone:{cn:"Everyone",en:"Everyone"},"Expand all nodes":{cn:"Expand all nodes",en:"Expand all nodes"},"Failed to open JSON File":{cn:"Failed to open JSON file",en:"Failed to open JSON file"},"Falkland Islands (Malvinas)":{cn:"Falkland Islands (Malvinas)",en:"Falkland Islands (Malvinas)"},"Faroe Islands":{cn:"Faroe Islands",en:"Faroe Islands"},Feb:{cn:"Feb",en:"Feb"},February:{cn:"February",en:"February"},"File is too big!":{cn:"文件太大!",en:"File is too big!"},"File rights":{cn:"File rights",en:"File rights"},"Filter:":{cn:"查找",en:"Filter"},"Filtered out":{cn:"Everything is filtered out",en:"Everything is filtered out"},"Find coordinates...":{cn:"Find coordinates...",en:"Find coordinates..."},"Float divider:":{cn:"小数点",en:"Float divider"},"Free RAM:":{cn:"Free:",en:"Free:"},Fri:{cn:"Fri",en:"Fri"},From:{cn:"From: ",en:"From: "},"From github":{cn:"软件仓库",en:"From github"},Function:{cn:"Function",en:"Function"},"Generated ID:":{cn:"Generated ID",en:"Generated ID"},"Go to Github...":{cn:"Go to Github...",en:"Go to Github..."},Group:{cn:"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:"上传图标",en:"Icon upload"},"In background":{cn:"后台运行",en:"In background"},Info:{cn:"信息",en:"Info"},Insert:{cn:"插入",en:"Insert"},Install:{cn:"安装",en:"Install"},"Install adapter from URL":{cn:"安装或升级",en:"Install or update the adapter from URL"},"Install adapter from github":{cn:"软件仓库安装或升级",en:"Install or update the adapter from Github"},"Install from custom URL":{cn:"自定义 URL 安装",en:"Install from custom URL"},"Install or update from URL...":{cn:"正在安装...",en:"Install or update from URL..."},"Installation counter":{cn:"Installations counter",en:"Installations counter"},"Installations counter":{cn:"Installations counter",en:"Installations counter"},Installed:{cn:"已安装",en:"Installed"},"Installed from group":{cn:"Installed from group",en:"Installed from group"},"Installed instances":{cn:"已安装的实例",en:"Installed instances"},"Installed version":{cn:"已安装版本",en:"Installed version"},Instances:{cn:"实例",en:"Instances"},Instructions:{cn:"指令",en:"Instructions"},Intro:{cn:"总览",en:"Overview"},"Invalid version of %s":{cn:"Invalid version of %s",en:"Invalid version of %s"},"Invalid version of %s. Required %s":{cn:"Invalid version of %s. Required %s",en:"Invalid version of %s. Required %s"},"Is yet in the list":{cn:"已经在列表中",en:"It's already in the list"},Jan:{cn:"Jan",en:"Jan"},January:{cn:"January",en:"January"},Jul:{cn:"七月",en:"Jul"},July:{cn:"July",en:"July"},Jun:{cn:"Jun",en:"Jun"},June:{cn:"June",en:"June"},"Known bugs for":{cn:"Known bugs for",en:"Known bugs for"},"Last changed":{cn:"上次修改",en:"Last changed"},"Last update":{cn:"上次更新",en:"Last update"},"Latitude:":{cn:"纬度",en:"Latitude"},"Let's Encrypt settings":{cn:"Let's Encrypt settings",en:"Let's Encrypt settings"},"Let's encrypt SSL":{cn:"Let's encrypt SSL",en:"Let's encrypt SSL"},License:{cn:"许可",en:"License"},"License terms":{cn:"许可条款",en:"License terms"},"Listen on all IPs":{cn:"Listen on all IPs",en:"Listen on all IPs"},"Loading...":{cn:"正在加载...",en:"Loading..."},Log:{cn:"日志",en:"Log"},"Log file will be deleted. Are you sure?":{cn:"日志文件将被删除,你确定吗?",en:"Log file will be deleted. Are you sure?"},"Log size:":{cn:"文件大小",en:"Log size"},"Login timeout(sec):":{cn:"登录超时 (秒)",en:"Login timeout (sec)"},Logout:{cn:"退出",en:"Logout"},"Longitude:":{cn:"经度",en:"Longitude"},MB:{cn:"Mb",en:"Mb"},Main:{cn:"Main",en:"Main"},"Main settings":{cn:"主设置",en:"Main settings"},"Manually created":{cn:"手工创建",en:"Manually created"},Mar:{cn:"三月",en:"Mar"},March:{cn:"三月",en:"March"},Members:{cn:"Members",en:"Members"},Message:{cn:"消息",en:"Message"},"Message buffer overflow. Losing oldest":{cn:"Message buffer overflow. Losing oldest.",en:"Message buffer overflow. Losing oldest."},Model:{cn:"型号",en:"Model"},Mon:{cn:"Mon",en:"Mon"},NPM:{cn:"NPM",en:"NPM"},Name:{cn:"名称",en:"Name"},"Name:":{cn:"名称",en:"Name"},New:{cn:"新建",en:"New"},"New category":{cn:"新类别",en:"New category"},"New enum":{cn:"新类别",en:"New enum"},"New group":{cn:"新群组",en:"New group"},"New object":{cn:"新对象",en:"New object"},"New objekt":{cn:"新对象",en:"New object"},"New user":{cn:"新用户",en:"New user"},"No data":{cn:"暂无数据",en:"No data"},"No states selected!":{cn:"No states selected!",en:"No states selected!"},"No version of %s":{cn:"No version of %s",en:"No version of %s"},"Node.js":{cn:"Node.js",en:"Node.js"},Norway:{cn:"Norway",en:"Norway"},"Not exists":{cn:"不存在",en:"Does not exist"},"Note:":{cn:"Note",en:"Note"},Nov:{cn:"十一月",en:"Nov"},November:{cn:"十一月",en:"November"},OS:{cn:"OS",en:"OS"},'Object "%s" does not exists. Update the page.':{cn:'Object "%s" 不存在,请刷新.',en:'Object "%s" does not exist. Update the page.'},"Object may not be deleted":{cn:"对象不能被删除",en:"Object may not be deleted"},"Object rights":{cn:"对象权限",en:"Object rights"},Objects:{cn:"对象",en:"Objects"},Oct:{cn:"十月",en:"Oct"},October:{cn:"十月",en:"October"},Ok:{cn:"确认",en:"Ok"},"Only one":{cn:"Only one",en:"Only one"},"Open original":{cn:"在新标签中打开",en:"Open on new tab"},Owner:{cn:"Owner",en:"Owner"},"Owner group":{cn:"Owner group",en:"Owner group"},"Owner user":{cn:"Owner user",en:"Owner user"},Parent:{cn:"父类",en:"Parent"},"Parse error":{cn:"Parse error",en:"Parse error"},Password:{cn:"密码",en:"Password"},"Password and confirmation are not equal!":{cn:"Password and confirmation are not equal!",en:"Password and confirmation are not equal!"},"Password cannot be empty!":{cn:"密码不能为空!",en:"Password cannot be empty!"},"Password repeat":{cn:"Password repeat",en:"Password repeat"},"Path to storage:":{cn:"存储路径",en:"Path to storage"},"Pause output":{cn:"暂停输出",en:"Pause output"},Platform:{cn:"平台",en:"Platform"},"Please confirm":{cn:"请确认",en:"Please confirm"},"Port to check the domain:":{cn:"Port to check the domain",en:"Port to check the domain"},"Preserve ID":{cn:"Preserve ID",en:"Preserve ID"},Preview:{cn:"Preview",en:"Preview"},"Processing...":{cn:"处理中...",en:"Processing..."},RAM:{cn:"内存",en:"RAM"},"RAM total usage:":{cn:"RAM总使用量:",en:"Total RAM usage:"},"RAM usage":{cn:"使用内存",en:"RAM usage"},"Rebuild tree":{cn:"重建树",en:"Rebuild tree"},"Recently updated":{cn:"Recently updated",en:"Recently updated"},"Refresh log":{cn:"刷新",en:"Refresh log"},Removed:{cn:"已删除",en:"Removed"},"Removing of adapter...":{cn:"Removing of adapter...",en:"Removing of adapter..."},"Removing of instance...":{cn:"Removing of instance...",en:"Removing of instance..."},Rename:{cn:"重命名",en:"Rename"},Repositories:{cn:"软件仓库",en:"Repositories"},Rights:{cn:"权限",en:"Access rights"},Role:{cn:"角色",en:"Role"},Room:{cn:"场景",en:"Room"},"Running: ":{cn:"Running: ",en:"Running: "},"Sao Tome and Principe":{cn:"Sao Tome and Principe",en:"Sao Tome and Principe"},Sat:{cn:"星期六",en:"Sat"},Save:{cn:"保存",en:"Save"},"Save Objecttree as JSON File":{cn:"将对象保存为 JSON 文件",en:"Save objects tree as JSON file"},"Save Objecttree is not possible":{cn:"Saving the objects tree is not possible",en:"Saving the objects tree is not possible"},"Save configuration":{cn:"保存配置",en:"Save configuration"},Script:{cn:"脚本",en:"Script"},Scripts:{cn:"脚本",en:"Scripts"},Select:{cn:"Select",en:"Select"},"Select ID":{cn:"Select ID",en:"Select ID"},"Select adapter:":{cn:"选择适配器",en:"Select adapter"},"Select language":{cn:"选择语言",en:"Select language"},"Select options":{cn:"选项",en:"Select options"},"Sent data:":{cn:"Sent data",en:"Sent data"},Sep:{cn:"九月",en:"Sep"},September:{cn:"九月",en:"September"},Set:{cn:"Set",en:"Set"},"Set CRON":{cn:"Set",en:"Set"},"Set CRON schedule for restarts":{cn:"Set CRON schedule for restarts",en:"Set CRON schedule for restarts"},Settings:{cn:"设置",en:"Settings"},"Settings for %s":{cn:"Settings for %s",en:"Settings for %s"},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:"运行",en:"System uptime"},Table:{cn:"Table",en:"Table"},Taiwan:{cn:"中国台湾",en:"Taiwan"},"Temperature units:":{cn:"温度单位",en:"Temperature units"},'This version of node.js "%s" on "%s" is deprecated. Please install node.js 6, 8 or newer':{cn:'yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version ("%s") on host "%s" to one of the supported versions. We recommend to use Node.js 6.',en:'yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version ("%s") on host "%s" to one of the supported versions. We recommend to use Node.js 6.'},Thu:{cn:"Thu",en:"Thu"},Time:{cn:"Time",en:"Time"},"Time From":{cn:"Time From",en:"Time From"},"Time To":{cn:"Time To",en:"Time To"},"Time stamp":{cn:"Time stamp",en:"Time stamp"},Title:{cn:"标题",en:"Title"},To:{cn:"To",en:"To"},Today:{cn:"今日",en:"Today"},"Toggle expert mode":{cn:"切换模式",en:"Toggle expert mode"},"Toggle states view":{cn:"切换状态视图",en:"Toggle the states view"},"Too many events":{cn:"Too many events",en:"Too many events"},"Total count in group":{cn:"Total count in group",en:"Total count in group"},"Trigger event":{cn:"触发事件",en:"Trigger event"},Type:{cn:"Type",en:"Type"},"URL or file path:":{cn:"URL或安装包路径",en:"URL or file path"},"Unknown file format!":{cn:"文件格式无效!",en:"Unknown file format!"},"Unsupported image format":{cn:"不支持的格式",en:"Unsupported image format"},Update:{cn:"更新",en:"Update"},"Update objects":{cn:"更新",en:"Update objects"},"Update states":{cn:"更新",en:"Update states"},Updated:{cn:"已更新",en:"Updated"},"Upgrade all adapters":{cn:"升级所有适配器",en:"Upgrade all adapters"},Upload:{cn:"文件上传",en:"File upload"},"Upload admin started":{cn:"上传配置",en:"Upload of configuration is started"},"Upload started...":{cn:"上传开始...",en:"Upload started..."},Uptime:{cn:"Uptime",en:"Uptime"},Uruguay:{cn:"Uruguay",en:"Uruguay"},"Use Lets Encrypt certificates:":{cn:"Use Let's Encrypt certificates",en:"Use Let's Encrypt certificates"},"Use this instance for automatic update:":{cn:"Use this instance for automatic update",en:"Use this instance for automatic update"},User:{cn:"用户",en:"User"},"User deleted":{cn:"用户已删除",en:"User deleted"},"User does not exist":{cn:"这个用户不存在",en:"User does not exist"},"User yet exists":{cn:"这个用户已经存在",en:"User already exists"},Users:{cn:"用户",en:"Users"},Value:{cn:"Value",en:"Value"},"Values of %s":{cn:"Values of %s",en:"Values of %s"},"Vatican City State":{cn:"Vatican City State",en:"Vatican City State"},Wed:{cn:"Wed",en:"Wed"},With:{cn:"With",en:"With"},Without:{cn:"Without",en:"Without"},"You are going to add new instance: ":{cn:"添加新的实例: ",en:"You are going to add new instance: "},"You can check changelog here":{cn:'You can check the changelog here',en:'You can check the changelog here'},"You can drag&drop the devices, channels and states to enums":{cn:"可将 devices,channels,states 拖放到枚举区",en:"You can drag&drop the devices, channels and states to enums"},"You can drag&drop users to groups":{cn:"支持拖放用户",en:"You can drag&drop users to groups"},"You can't see events via cloud":{cn:"You can't see events via cloud",en:"You can't see events via cloud"},"Your home":{cn:"Your home",en:"Your home"},_All:{cn:"全部",en:"All"},"_Toggle expert mode":{cn:"切换模式",en:"Toggle expert mode"},__different__:{cn:"different",en:"different"},"a-z":{cn:"a-z",en:"a-z"},ack:{cn:"ack",en:"ack"},actions:{cn:"actions",en:"actions"},active:{cn:"active",en:"active"},"adapter with updates":{cn:"adapters with updates",en:"adapters with updates"},"adapters count":{cn:"适配器数",en:"adapters count"},add:{cn:"添加",en:"Add"},"add children":{cn:"添加子节点",en:"add children"},"add instance":{cn:"添加实例",en:"add instance"},"add repository":{cn:"添加仓库",en:"add repository"},agree:{cn:"同意",en:"agree"},alarm_group:{cn:"Alarm",en:"Alarm"},alive:{cn:"alive",en:"alive"},all:{cn:"all",en:"all"},alpha:{cn:"alpha",en:"alpha"},array:{cn:"array",en:"array"},auto:{cn:"auto",en:"auto"},available:{cn:"最新",en:"available"},beta:{cn:"beta",en:"beta"},boolean:{cn:"boolean",en:"boolean"},bug:{cn:"bugtracker",en:"bugtracker"},cancel:{cn:"取消",en:"Cancel"},cert_path_note:{cn:"例如 '/opt/certs/cert.pem', 也可以直接拖放文件",en:"You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop"},certificate:{cn:"certificate",en:"certificate"},"change view mode":{cn:"模式",en:"change view mode"},channel:{cn:"channel",en:"channel"},clear:{cn:"清除",en:"clear"},"climate-control_group":{cn:"Climate Control",en:"Climate Control"},"close on ready":{cn:"完成后自动关闭",en:"close on ready"},collapse:{cn:"收起",en:"collapse"},"collapse all":{cn:"收起",en:"collapse all"},comma:{cn:"comma",en:"comma"},"command execution":{cn:"执行命令 ",en:"Command execution"},common:{cn:"公共",en:"common"},"common adapters_group":{cn:"公共",en:"Common"},common_color:{cn:"颜色",en:"color"},common_def:{cn:"缺省值",en:"default value"},common_desc:{cn:"说明",en:"description"},common_icon:{cn:"图标",en:"icon"},common_max:{cn:"最大值",en:"max value"},common_min:{cn:"最小值",en:"minimal value"},common_read:{cn:"允许读",en:"read allowed"},common_role:{cn:"角色",en:"role"},common_states:{cn:"预定义值",en:"predefined values"},common_type:{cn:"类型",en:"type"},common_unit:{cn:"量度单位",en:"measure unit"},common_write:{cn:"允许写",en:"write allowed"},communication_group:{cn:"通信",en:"Communication"},config:{cn:"设置",en:"Settings"},"config instance":{cn:"配置实例",en:"config instance"},"confirm password":{cn:"密码确认",en:"Confirm password"},connected:{cn:"已连接",en:"connected"},copy:{cn:"复制",en:"copy"},"copy note":{cn:"Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close.",en:"Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close."},"create operation":{cn:"创建",en:"create"},"custom enum":{cn:"自定义枚举",en:"?ustom enum"},"custom group":{cn:"自定义群组",en:"Custom group"},daemon:{cn:"daemon",en:"daemon"},"date-and-time_group":{cn:"日期和时间",en:"Date and Time"},daysShortText:{cn:"d.",en:"d."},debug:{cn:"debug",en:"debug"},delete:{cn:"删除",en:"delete"},"delete adapter":{cn:"删除",en:"delete adapter"},"delete group":{cn:"删除",en:"delete group"},"delete instance":{cn:"删除",en:"delete instance"},"delete operation":{cn:"删除",en:"delete"},"delete script":{cn:"删除",en:"delete script"},"delete user":{cn:"删除",en:"delete user"},desc:{cn:"desc",en:"desc"},description:{cn:"说明",en:"Description"},device:{cn:"device",en:"device"},"diag-note":{cn:"We worked hard to create this project. In return we expect from you some usage statistics.
                      Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.
                      Thank you!",en:"We worked hard to create this project. In return we expect from you some usage statistics.
                      Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.
                      Thank you!"},edit:{cn:"编辑",en:"edit"},"edit enum":{cn:"编辑",en:"edit enum"},"edit file":{cn:"编辑",en:"edit file"},"edit group":{cn:"编辑",en:"edit group"},"edit instance":{cn:"编辑",en:"edit instance"},"edit script":{cn:"编辑",en:"edit script"},"edit user":{cn:"修改",en:"edit user"},"edit value":{cn:"编辑",en:"Edit value"},enabled:{cn:"enabled",en:"enabled"},energy_group:{cn:"能源",en:"Energy"},engine:{cn:"engine",en:"engine"},"engine type":{cn:"engine type",en:"engine type"},error:{cn:"错误",en:"error"},events:{cn:"events",en:"events"},"execute operation":{cn:"Execute operation",en:"Execute operation"},expand:{cn:"展开",en:"expand"},"expand all":{cn:"展开所有",en:"expand all"},extended:{cn:"extended",en:"extended"},false:{cn:"false",en:"false"},"file permissions":{cn:"文件许可",en:"File permissions"},from:{cn:"来自",en:"from"},garden_group:{cn:"农业",en:"Garden"},general_group:{cn:"基本",en:"General"},geoposition_group:{cn:"地理位置",en:"Geo position"},groups:{cn:"groups",en:"groups"},hardware_group:{cn:"硬件",en:"Hardware"},history:{cn:"数据",en:"history"},"history data":{cn:"数据",en:"history data"},host:{cn:"主机",en:"host"},household_group:{cn:"Household",en:"Household"},"http operation":{cn:"http",en:"http"},id:{cn:"ID",en:"ID"},info:{cn:"信息",en:"info"},infrastructure_group:{cn:"环境",en:"Infrastructure"},install:{cn:"安装",en:"install"},"install specific version":{cn:"安装指定版本",en:"Install a specific version"},installed:{cn:"已安装",en:"installed"},"installed adapters":{cn:"Filter adapters with existing instances",en:"Filter adapters with existing instances"},instance:{cn:"实例",en:"instance"},"instance number":{cn:"Desired instance number",en:"Desired instance number"},"yunkong2 Enums":{cn:"yunkong2 enums",en:"yunkong2 enums"},"yunkong2 States":{cn:"yunkong2 states",en:"yunkong2 states"},"yunkong2 adapter instances":{cn:"yunkong2 adapter instances",en:"yunkong2 adapter instances"},"yunkong2 adapter scripts":{cn:"yunkong2 adapter scripts",en:"yunkong2 adapter scripts"},"yunkong2 adapters":{cn:"yunkong2 adapters",en:"yunkong2 adapters"},"yunkong2 certificates":{cn:"yunkong2 certificates",en:"yunkong2 certificates"},"yunkong2 groups":{cn:"yunkong2 groups",en:"yunkong2 groups"},"yunkong2 hosts":{cn:"yunkong2 hosts",en:"yunkong2 hosts"},"yunkong2 repositories":{cn:"yunkong2 repositories",en:"yunkong2 repositories"},"yunkong2 users":{cn:"yunkong2 users",en:"yunkong2 users"},"iot-system_group":{cn:"物联网",en:"IoT systems"},"iot-systems_group":{cn:"物联网系统",en:"IoT Systems"},keywords:{cn:"关键字",en:"keywords"},lc:{cn:"Last change",en:"Last change"},less:{cn:"精简",en:"less"},letsnecrypt_help:{cn:'This are settings for Let\'s Encrypt account. To get the free certificates for your domain. You can read more here.',en:'This are settings for Let\'s Encrypt account. To get the free certificates for your domain. You can read more here.'},letsnecrypt_help_domains:{cn:"E.g: 'example.com, www.example.com'",en:"E.g: 'example.com, www.example.com'"},letsnecrypt_help_email:{cn:"Please use your email address. It will be used for your account.",en:"Please use your email address. It will be used for your account."},letsnecrypt_help_path:{cn:"Directory name where the certificates will be stored. This is always relative to configuration directory",en:"Directory name where the certificates will be stored. This is always relative to configuration directory"},license:{cn:"许可",en:"license"},"license agreement":{cn:"许可协议",en:"license agreement"},"license not agree":{cn:"不同意!",en:"Do not agree with the license!"},license_checkbox:{cn:"同意全部的许可条款",en:"I agree with the collection of anonymous statistics.
                      (This can be disabled in settings)"},lighting_group:{cn:"照明",en:"Lighting"},link:{cn:"link",en:"link"},list:{cn:"list",en:"list"},"list operation":{cn:"list elements",en:"list elements"},logic_group:{cn:"逻辑",en:"Logic"},loglevel:{cn:"loglevel",en:"loglevel"},media_group:{cn:"媒体",en:"Media"},members:{cn:"members",en:"members"},memlimit:{cn:"RAM limit",en:"RAM limit"},message:{cn:"消息",en:"message"},messaging_group:{cn:"信使",en:"Messaging"},"misc-data_group":{cn:"Misc. data",en:"Misc. data"},mixed:{cn:"mixed",en:"mixed"},mode:{cn:"mode",en:"mode"},more:{cn:"详细",en:"more"},multi:{cn:"multistate",en:"multistate"},multimedia_group:{cn:"多媒体",en:"Multimedia"},name:{cn:"名称",en:"name"},native:{cn:"native",en:"native"},network_group:{cn:"网络",en:"Network"},"new certificate":{cn:"new certificate",en:"new certificate"},"new group":{cn:"new group",en:"new group"},"new script":{cn:"new script",en:"new script"},"new user":{cn:"新建用户",en:"new user"},newObject:{cn:"New object",en:"New object"},"no-city":{cn:"no city",en:"no city"},"node-red":{cn:"node-red",en:"node-red"},none:{cn:"none",en:"none"},normal:{cn:"normal",en:"normal"},"not ack":{cn:"not ack",en:"not ack"},"not agree":{cn:"不同意",en:"not agree"},"npm error":{cn:"npm error",en:"npm error"},number:{cn:"number",en:"number"},object:{cn:"object",en:"object"},"object permissions":{cn:"Object permissions",en:"Object permissions"},of:{cn:"/",en:"of"},ok:{cn:"确定",en:"Ok"},"open web page":{cn:"Open web page of adapter",en:"Open web page of adapter"},os:{cn:"OS",en:"operating system"},"other permissions":{cn:"Other permissions",en:"Other permissions"},"parent name":{cn:"parent name",en:"parent name"},password:{cn:"密码",en:"Password"},permissionError:{cn:"Permission error",en:"Permission error"},planned:{cn:"planned",en:"planned"},platform:{cn:"平台",en:"platform"},point:{cn:"point",en:"point"},process:{cn:"process",en:"process"},protocols_group:{cn:"协议",en:"Protocols"},raw:{cn:"Raw (开发)",en:"Raw (experts only)"},read:{cn:"read",en:"read"},"read operation":{cn:"read",en:"read"},readme:{cn:"readme",en:"readme"},reload:{cn:"刷新",en:"reload"},"reload instance":{cn:"reload instance",en:"reload instance"},rest:{cn:"REST (read only)",en:"rest (read only)"},restart:{cn:"重启",en:"auto restart"},"restart script":{cn:"重启脚本",en:"restart script"},role:{cn:"角色",en:"role"},save:{cn:"保存",en:"save"},schedule_group:{cn:"计划",en:"Schedule"},script_group:{cn:"逻辑和脚本",en:"Scripts and Logic"},"select member by double click":{cn:"select member by double clicking",en:"select member by double clicking"},"sendto operation":{cn:"Send-to operation",en:"Send-to operation"},service_group:{cn:"Maintenance",en:"Maintenance"},severity:{cn:"安防",en:"severity"},stable:{cn:"stable",en:"stable"},state:{cn:"state",en:"state"},"state permissions":{cn:"状态许可",en:"State permissions"},storage_group:{cn:"存储",en:"Storage"},string:{cn:"string",en:"string"},subscribe:{cn:"subscribe",en:"subscribe"},switch:{cn:"switch",en:"switch"},terminal:{cn:"Terminal",en:"Terminal"},"third-party_group":{cn:"第三方",en:"Third party"},"this adapter does not allow multiple instances":{cn:"这个适配器不允许运行多个实例",en:"This adapter does not allow multiple instances"},title:{cn:"标题",en:"title"},today:{cn:"今日",en:"today"},true:{cn:"true",en:"true"},ts:{cn:"时间",en:"Timestamp"},type:{cn:"type",en:"type"},unit:{cn:"unit",en:"unit"},update:{cn:"更新",en:"update"},"update adapter information":{cn:"update adapter information",en:"update adapter information"},"update-part1":{cn:"Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:",en:"Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:"},updated:{cn:"已更新",en:"updated"},updates:{cn:"updates",en:"updates"},upload:{cn:"上传",en:"Upload"},"user permissions":{cn:"用户权限",en:"user permissions"},users:{cn:"用户",en:"users"},"users permissions":{cn:"用户权限",en:"User permissions"},utility_group:{cn:"公用",en:"Utility"},val:{cn:"val",en:"val"},value:{cn:"value",en:"value"},"value.from":{cn:"Changed from",en:"Changed from"},"value.lc":{cn:"Last change",en:"Last change"},"value.q":{cn:"Quality code",en:"Quality code"},"value.ts":{cn:"Timestamp",en:"Timestamp"},"value.val":{cn:"value",en:"value"},version:{cn:"版本",en:"version"},vis_group:{cn:"yunkong2.vis",en:"yunkong2.vis"},visualisation_group:{cn:"可视化",en:"Visualisation"},"visualization-icons_group":{cn:"可视化 图标",en:"Visualization Icons"},"visualization-widgets_group":{cn:"可视化 部件",en:"Visualization Widgets"},visualization_group:{cn:"可视化",en:"Visualisation"},warn:{cn:"warn",en:"warn"},weather_group:{cn:"天气",en:"Weather"},wetty:{cn:"Wetty",en:"Wetty"},write:{cn:"write",en:"write"},"write operation":{cn:"write",en:"write"},yesterday:{cn:"昨天",en:"yesterday"},Speed:{cn:"主频",en:"Speed"},"%s object(s) processed":{cn:"%s objects were processed",en:"%s objects were processed"},"%s was imported":{cn:"%s was imported",en:"%s was imported"},"Ignore warning":{cn:"Ignore warning",en:"Ignore warning"},Filter:{cn:"查找",en:"Filter"},Afghanistan:{cn:"Afghanistan",en:"Afghanistan"},Albania:{cn:"Albania",en:"Albania"},Algeria:{cn:"Algeria",en:"Algeria"},"American Samoa":{cn:"American Samoa",en:"American Samoa"},Andorra:{cn:"Andorra",en:"Andorra"},Angola:{cn:"Angola",en:"Angola"},Anguilla:{cn:"Anguilla",en:"Anguilla"},Antarctica:{cn:"Antarctica",en:"Antarctica"},"Antigua and Barbuda":{cn:"Antigua and Barbuda",en:"Antigua and Barbuda"},Argentina:{cn:"Argentina",en:"Argentina"},Armenia:{cn:"Armenia",en:"Armenia"},Aruba:{cn:"Aruba",en:"Aruba"},Australia:{cn:"Australia",en:"Australia"},Austria:{cn:"Austria",en:"Austria"},"Authentication was deactivated":{cn:"Authentication was deactivated",en:"Authentication was deactivated"},Azerbaijan:{cn:"Azerbaijan",en:"Azerbaijan"},Background:{cn:"Background",en:"Background"},"Background color of the login screen":{cn:"Background color of the login screen",en:"Background color of the login screen"},"Background image":{cn:"Background image",en:"Background image"},Bahamas:{cn:"Bahamas",en:"Bahamas"},Bahrain:{cn:"Bahrain",en:"Bahrain"},Bangladesh:{cn:"Bangladesh",en:"Bangladesh"},Barbados:{cn:"Barbados",en:"Barbados"},Belarus:{cn:"Belarus",en:"Belarus"},Belgium:{cn:"Belgium",en:"Belgium"},Belize:{cn:"Belize",en:"Belize"},Benin:{cn:"Benin",en:"Benin"},Bermuda:{cn:"Bermuda",en:"Bermuda"},Bhutan:{cn:"Bhutan",en:"Bhutan"},Bolivia:{cn:"Bolivia",en:"Bolivia"},"Bosnia and Herzegovina":{cn:"Bosnia and Herzegovina",en:"Bosnia and Herzegovina"},Botswana:{cn:"Botswana",en:"Botswana"},"Bouvet Island":{cn:"Bouvet Island",en:"Bouvet Island"},Brazil:{cn:"Brazil",en:"Brazil"},"British Indian Ocean Territory":{cn:"British Indian Ocean Territory",en:"British Indian Ocean Territory"},"Brunei Darussalam":{cn:"Brunei Darussalam",en:"Brunei Darussalam"},Bulgaria:{cn:"Bulgaria",en:"Bulgaria"},"Burkina Faso":{cn:"Burkina Faso",en:"Burkina Faso"},Burundi:{cn:"Burundi",en:"Burundi"},Cambodia:{cn:"Cambodia",en:"Cambodia"},Cameroon:{cn:"Cameroon",en:"Cameroon"},Canada:{cn:"Canada",en:"Canada"},"Cape Verde":{cn:"Cape Verde",en:"Cape Verde"},"Cayman Islands":{cn:"Cayman Islands",en:"Cayman Islands"},"Central African Republic":{cn:"Central African Republic",en:"Central African Republic"},Chad:{cn:"Chad",en:"Chad"},Chile:{cn:"Chile",en:"Chile"},"Christmas Island":{cn:"Christmas Island",en:"Christmas Island"},"Cocos Islands":{cn:"Cocos Islands",en:"Cocos Islands"},Colombia:{cn:"Colombia",en:"Colombia"},Comoros:{cn:"Comoros",en:"Comoros"},Congo:{cn:"Congo",en:"Congo"},"Cook Islands":{cn:"Cook Islands",en:"Cook Islands"},"Costa Rica":{cn:"Costa Rica",en:"Costa Rica"},Cuba:{cn:"Cuba",en:"Cuba"},Cyprus:{cn:"Cyprus",en:"Cyprus"},"Czech Republic":{cn:"Czech Republic",en:"Czech Republic"},"Disable authentication":{cn:"Disable authentication",en:"Disable authentication"},Djibouti:{cn:"Djibouti",en:"Djibouti"},"Dominican Republic":{cn:"Dominican Republic",en:"Dominican Republic"},"East Timor":{cn:"East Timor",en:"East Timor"},"Enabled:":{cn:"Enabled",en:"Enabled"},"Equatorial Guinea":{cn:"Equatorial Guinea",en:"Equatorial Guinea"},Eritrea:{cn:"Eritrea",en:"Eritrea"},Estonia:{cn:"Estonia",en:"Estonia"},Ethiopia:{cn:"Ethiopia",en:"Ethiopia"},Fiji:{cn:"Fiji",en:"Fiji"},Finland:{cn:"Finland",en:"Finland"},France:{cn:"France",en:"France"},"French Guiana":{cn:"French Guiana",en:"French Guiana"},"French Polynesia":{cn:"French Polynesia",en:"French Polynesia"},"French Southern Territories":{cn:"French Southern Territories",en:"French Southern Territories"},Gabon:{cn:"Gabon",en:"Gabon"},Gambia:{cn:"Gambia",en:"Gambia"},Georgia:{cn:"Georgia",en:"Georgia"},Germany:{cn:"Germany",en:"Germany"},Ghana:{cn:"Ghana",en:"Ghana"},Gibraltar:{cn:"Gibraltar",en:"Gibraltar"},Greece:{cn:"Greece",en:"Greece"},Greenland:{cn:"Greenland",en:"Greenland"},Grenada:{cn:"Grenada",en:"Grenada"},Guadeloupe:{cn:"Guadeloupe",en:"Guadeloupe"},Guam:{cn:"Guam",en:"Guam"},Guatemala:{cn:"Guatemala",en:"Guatemala"},Guernsey:{cn:"Guernsey",en:"Guernsey"},Guinea:{cn:"Guinea",en:"Guinea"},"Guinea-Bissau":{cn:"Guinea-Bissau",en:"Guinea-Bissau"},Guyana:{cn:"Guyana",en:"Guyana"},Haiti:{cn:"Haiti",en:"Haiti"},Honduras:{cn:"Honduras",en:"Honduras"},Hungary:{cn:"Hungary",en:"Hungary"},Iceland:{cn:"Iceland",en:"Iceland"},India:{cn:"India",en:"India"},Indonesia:{cn:"Indonesia",en:"Indonesia"},Iran:{cn:"Iran",en:"Iran"},Iraq:{cn:"Iraq",en:"Iraq"},Ireland:{cn:"Ireland",en:"Ireland"},"Isle of Man":{cn:"Isle of Man",en:"Isle of Man"},Israel:{cn:"Israel",en:"Israel"},Italy:{cn:"Italy",en:"Italy"},"Ivory Coast":{cn:"Ivory Coast",en:"Ivory Coast"},Jamaica:{cn:"Jamaica",en:"Jamaica"},Japan:{cn:"Japan",en:"Japan"},Jersey:{cn:"Jersey",en:"Jersey"},Jordan:{cn:"Jordan",en:"Jordan"},Kazakhstan:{cn:"Kazakhstan",en:"Kazakhstan"},Kenya:{cn:"Kenya",en:"Kenya"},Kiribati:{cn:"Kiribati",en:"Kiribati"},Korea:{cn:"Korea",en:"Korea"},Kosovo:{cn:"Kosovo",en:"Kosovo"},Kuwait:{cn:"Kuwait",en:"Kuwait"},Kyrgyzstan:{cn:"Kyrgyzstan",en:"Kyrgyzstan"},"Lao People's Democratic Republic":{cn:"Lao People's Democratic Republic",en:"Lao People's Democratic Republic"},Latvia:{cn:"Latvia",en:"Latvia"},Lebanon:{cn:"Lebanon",en:"Lebanon"},Lesotho:{cn:"Lesotho",en:"Lesotho"},Liberia:{cn:"Liberia",en:"Liberia"},"Libyan Arab Jamahiriya":{cn:"Libyan Arab Jamahiriya",en:"Libyan Arab Jamahiriya"},Liechtenstein:{cn:"Liechtenstein",en:"Liechtenstein"},Lithuania:{cn:"Lithuania",en:"Lithuania"},Luxembourg:{cn:"Luxembourg",en:"Luxembourg"},Macau:{cn:"Macau",en:"Macau"},Macedonia:{cn:"Macedonia",en:"Macedonia"},Madagascar:{cn:"Madagascar",en:"Madagascar"},Mai:{cn:"Mai",en:"Mai"},Malawi:{cn:"Malawi",en:"Malawi"},Malaysia:{cn:"Malaysia",en:"Malaysia"},Maldives:{cn:"Maldives",en:"Maldives"},Mali:{cn:"Mali",en:"Mali"},Malta:{cn:"Malta",en:"Malta"},"Marshall Islands":{cn:"Marshall Islands",en:"Marshall Islands"},Martinique:{cn:"Martinique",en:"Martinique"},Mauritania:{cn:"Mauritania",en:"Mauritania"},Mauritius:{cn:"Mauritius",en:"Mauritius"},Mayotte:{cn:"Mayotte",en:"Mayotte"},Mexico:{cn:"Mexico",en:"Mexico"},Micronesia:{cn:"Micronesia",en:"Micronesia"},Moldova:{cn:"Moldova",en:"Moldova"},Monaco:{cn:"Monaco",en:"Monaco"},Mongolia:{cn:"Mongolia",en:"Mongolia"},Montenegro:{cn:"Montenegro",en:"Montenegro"},Montserrat:{cn:"Montserrat",en:"Montserrat"},Morocco:{cn:"Morocco",en:"Morocco"},Mozambique:{cn:"Mozambique",en:"Mozambique"},Myanmar:{cn:"Myanmar",en:"Myanmar"},Namibia:{cn:"Namibia",en:"Namibia"},Nauru:{cn:"Nauru",en:"Nauru"},Nepal:{cn:"Nepal",en:"Nepal"},Netherlands:{cn:"Netherlands",en:"Netherlands"},"Netherlands Antilles":{cn:"Netherlands Antilles",en:"Netherlands Antilles"},"New Caledonia":{cn:"New Caledonia",en:"New Caledonia"},"New Zealand":{cn:"New Zealand",en:"New Zealand"},Nicaragua:{cn:"Nicaragua",en:"Nicaragua"},Niger:{cn:"Niger",en:"Niger"},Nigeria:{cn:"Nigeria",en:"Nigeria"},Niue:{cn:"Niue",en:"Niue"},"Norfolk Island":{cn:"Norfolk Island",en:"Norfolk Island"},"Northern Mariana Islands":{cn:"Northern Mariana Islands",en:"Northern Mariana Islands"},Oman:{cn:"Oman",en:"Oman"},Pakistan:{cn:"Pakistan",en:"Pakistan"},Palau:{cn:"Palau",en:"Palau"},Palestine:{cn:"Palestine",en:"Palestine"},Panama:{cn:"Panama",en:"Panama"},"Papua New Guinea":{cn:"Papua New Guinea",en:"Papua New Guinea"},Paraguay:{cn:"Paraguay",en:"Paraguay"},Peru:{cn:"Peru",en:"Peru"},Philippines:{cn:"Philippines",en:"Philippines"},Pitcairn:{cn:"Pitcairn",en:"Pitcairn"},Poland:{cn:"Poland",en:"Poland"},Popular:{cn:"Popular",en:"Popular"},"Popular first":{cn:"Popular first",en:"Popular first"},Portugal:{cn:"Portugal",en:"Portugal"},"Puerto Rico":{cn:"Puerto Rico",en:"Puerto Rico"},Qatar:{cn:"Qatar",en:"Qatar"},Reunion:{cn:"Reunion",en:"Reunion"},Romania:{cn:"Romania",en:"Romania"},"Russian Federation":{cn:"Russian Federation",en:"Russian Federation"},Rwanda:{cn:"Rwanda",en:"Rwanda"},"Saint Kitts and Nevis":{cn:"Saint Kitts and Nevis",en:"Saint Kitts and Nevis"},"Saint Lucia":{cn:"Saint Lucia",en:"Saint Lucia"},"Saint Vincent and the Grenadines":{cn:"Saint Vincent and the Grenadines",en:"Saint Vincent and the Grenadines"},Samoa:{cn:"Samoa",en:"Samoa"},"San Marino":{cn:"San Marino",en:"San Marino"},"Saudi Arabia":{cn:"Saudi Arabia",en:"Saudi Arabia"},Senegal:{cn:"Senegal",en:"Senegal"},Serbia:{cn:"Serbia",en:"Serbia"},Slovakia:{cn:"Slovakia",en:"Slovakia"},Slovenia:{cn:"Slovenia",en:"Slovenia"},"Solomon Islands":{cn:"Solomon Islands",en:"Solomon Islands"},Somalia:{cn:"Somalia",en:"Somalia"},"South Africa":{cn:"South Africa",en:"South Africa"},"South Georgia South Sandwich Islands":{cn:"South Georgia South Sandwich Islands",en:"South Georgia South Sandwich Islands"},Spain:{cn:"Spain",en:"Spain"},"Sri Lanka":{cn:"Sri Lanka",en:"Sri Lanka"},"St. Helena":{cn:"St. Helena",en:"St. Helena"},"St. Pierre and Miquelon":{cn:"St. Pierre and Miquelon",en:"St. Pierre and Miquelon"},Sudan:{cn:"Sudan",en:"Sudan"},Suriname:{cn:"Suriname",en:"Suriname"},"Svalbard and Jan Mayen Islands":{cn:"Svalbard and Jan Mayen Islands",en:"Svalbard and Jan Mayen Islands"},Swaziland:{cn:"Swaziland",en:"Swaziland"},Sweden:{cn:"Sweden",en:"Sweden"},Switzerland:{cn:"Switzerland",en:"Switzerland"},"Syrian Arab Republic":{cn:"Syrian Arab Republic",en:"Syrian Arab Republic"},Tajikistan:{cn:"Tajikistan",en:"Tajikistan"},Tanzania:{cn:"Tanzania",en:"Tanzania"},Thailand:{cn:"Thailand",en:"Thailand"},Togo:{cn:"Togo",en:"Togo"},Tokelau:{cn:"Tokelau",en:"Tokelau"},Tonga:{cn:"Tonga",en:"Tonga"},"Trinidad and Tobago":{cn:"Trinidad and Tobago",en:"Trinidad and Tobago"},Tue:{cn:"Tue",en:"Tue"},Tunisia:{cn:"Tunisia",en:"Tunisia"},Turkey:{cn:"Turkey",en:"Turkey"},Turkmenistan:{cn:"Turkmenistan",en:"Turkmenistan"},"Turks and Caicos Islands":{cn:"Turks and Caicos Islands",en:"Turks and Caicos Islands"},Tuvalu:{cn:"Tuvalu",en:"Tuvalu"},Uganda:{cn:"Uganda",en:"Uganda"},Ukraine:{cn:"Ukraine",en:"Ukraine"},"Uncheck All":{cn:"Uncheck All",en:"Uncheck All"},"United Arab Emirates":{cn:"United Arab Emirates",en:"United Arab Emirates"},"United Kingdom":{cn:"United Kingdom",en:"United Kingdom"},"United States":{cn:"United States",en:"United States"},"United States minor outlying islands":{cn:"United States minor outlying islands",en:"United States minor outlying islands"},Unsecure_Auth:{cn:"The password will be sent via unsecure connection. To protect your passwords enable the secure connection (HTTPS)!",en:"The password will be sent via unsecure connection. To protect your passwords enable the secure connection (HTTPS)!"},Uzbekistan:{cn:"Uzbekistan",en:"Uzbekistan"},Vanuatu:{cn:"Vanuatu",en:"Vanuatu"},Venezuela:{cn:"Venezuela",en:"Venezuela"},Vietnam:{cn:"Vietnam",en:"Vietnam"},"Virgin Islands (British)":{cn:"Virgin Islands (British)",en:"Virgin Islands (British)"},"Virgin Islands (U.S.)":{cn:"Virgin Islands (U.S.)",en:"Virgin Islands (U.S.)"},"Wallis and Futuna Islands":{cn:"Wallis and Futuna Islands",en:"Wallis and Futuna Islands"},"Warning!":{cn:"Warning!",en:"Warning!"},"Western Sahara":{cn:"Western Sahara",en:"Western Sahara"},Yemen:{cn:"Yemen",en:"Yemen"},Zaire:{cn:"Zaire",en:"Zaire"},Zambia:{cn:"Zambia",en:"Zambia"},Zimbabwe:{cn:"Zimbabwe",en:"Zimbabwe"},silly:{cn:"silly",en:"silly"},"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 251f638..8fa4743 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","startsWith","endsWith","prop","parts","split","cmdExec","exitCode","init","showError","select","$input","prev","mtabs","nShow","tab","adaptersInstallTab","noSelect","confirmMessage","result","updateExpertMode","tabs","instances","which","undefined","adaptersIsTiles","adaptersIsList","adaptersOnlyInstalled","adaptersOnlyUpdatable","adaptersCurrentFilter","adaptersCurrentType","currentOrder","adaptersCurrentOrder","adaptersIsCollapsed","parse","browser","browserVersion","filterTimer","clearTimeout","target","filterNodes","getAdaptersInfo","host","update","updateRepo","callback","curRunning","socket","emit","repo","systemConfig","activeRepo","_repository","error","_installed","enableColResize","fn","colResizable","liveDrag","sortChildren","c1","c2","inst1","ret","t1","titleLang","t2","repository","installedList","rawVersion","adaptersToUpdate","listInstalled","listNonInstalled","nowObj","localTexts","add instance","upload","Available version:","Active instances","Installed version","readme","delete adapter","install specific version","all","Last update","Installations counter","today","yesterday","1 %d days ago","2 %d days ago","5 %d days ago","controller","versionDate","nogit","meta","getVersionString","updatable","updatableError","color","tmp","getVersionClass","i","rawInstalled","icon","extIcon","_instances","_enabled","upToDate","z","enabled","type","states","image","stat","join","highlight","licenseUrl","iGroup","jj","folder","expanded","igroup","j","akeys","keys","newData","u","ad","tTypes","g","$types","dropdown","constrainWidth","gutter","reload","width","height","round","left","$big","insertAfter","h","top","innerHeight","documentElement","clientHeight","big","classes","updateCounter","restoreScroll","saveScroll","scrollTop","counter","$updates","appendTo","objectsLoaded","subscribeObjects","subscribeStates","hosts","getHosts","destroy","unsubscribeObjects","unsubscribeStates","$dialogAddInstance","min","used","index","m","e","dismissible","complete","showAddInstanceDialog","$dialogLicense","response","body","z-index","toString","showLicenseDialog","isAgree","navigate","dialog","params","aName","waitForRestart","$button","versions","id","menu","nnews","$adaptersMenu","first","objectChange","_isInited","stateChange","state","$adapter","opacity","Config","$dialog","$configFrame","navigateGetParams","materialize","allStored","frames","changed","close","configId","shift","Customs","$table","$outer","hdr","lastHistoryTimeStamp","$tableDateFrom","$tableDateTo","$tableTimeFrom","$tableTimeTo","$chartDateFrom","$chartDateTo","$historyTableInstance","$historyChartInstance","STR_DIFFERENT","updateTable","delay","historyTimeout","loadHistoryTable","getCustomTemplate","ajax","headers","Accept","cache","success","_data","jqXHR","responseText","onButtonSave","stopPropagation","preventDefault","$tabs","ids","currentCustoms","wordDifferent","instance","field","indeterminate","f","custom","_default","found","custom_","inst","setCustoms","loadHistoryChart","initTab","customEnabled","check","supportCustoms","initCustomsTabs","$customTabs","collapsed","commons","role","sett","_attr","img","def","append","toUpperCase","prepend","$headerActive","showCustomsData","translateAll","collapsible","onOpenEnd","el","_collapsed","pos","onCloseEnd","M","updateTextFields","resizeHistory","isSilent","isDownload","request","aggregate","from","ack","q","fileName","dateFrom","Datepicker","getInstance","timeFrom","dateTo","timeTo","empty","setHours","setMinutes","setSeconds","setMilliseconds","end","part__","start","count","toISOString","err","res","filename","element","csv","ts","formatDate","lc","installColResize","IobListHeader","colWidthOffset","prefix","add","partialRefresh","marginLeft","postbackSafe","onResize","syncHeader","createElement","setAttribute","encodeURIComponent","style","display","appendChild","click","removeChild","port","chart","isSecure","native","secure","$chart","linkTemplate","hostname","encodeURI","isFloatComma","pop","showMessage","$iFrame","_ids","isUpdate","warn","$historyTableInstanceBtn","$historyTableDownloadBtn","$historyChartInstanceBtn","insta","setDate","i18n","clear","done","months","monthsShort","weekdaysShort","weekdays","weekdaysAbbrev","n","datepicker","defaultDate","showDaysInNextAndPreviousMonths","minYear","maxYear","setDefaultDate","firstDay","onSelect","date","timepicker","defaultTime","twelveHour","doneText","clearText","cancelText","autoClose","onShow","EditObject","loadObjectFields","selector","object","part","objectType","systemDictionary","saveObjectFields","$htmlId","write","read","max","d","duration","isError","showToast","$dialogNewField","prepared","$dialogSave","iconVal","_prepare","save","editor","setValue","$name","focus","mautocomplete","unit","minLength","keypress","ace","edit","getSession","setMode","$blockScrolling","saveFromTabs","_obj","getValue","load","trim","installFileUpload","isSetDefaultState","users","translateName","groups","_id","acl","owner","ownerGroup","getIconFromObj","$color","parent","colorpicker","component","container","toHex","saveFromRaw","cb","Enums","$gridEnum","$gridList","updateTimers","editMode","tasks","standardEnums","enum.rooms","cn","members","dontDelete","enum.functions","enum.favorites","standardGroups","enum.rooms.living_room","enum.rooms.sleeping_room","enum.rooms.kitchen","enum.rooms.office","enum.rooms.nursery","enum.rooms.wc","enum.rooms.garage","enum.functions.light","enum.functions.blinds","enum.functions.weather","enum.functions.heating","enum.functions.backlight","enum.functions.household","enum.functions.audio","enum.functions.security","selectId","bind","apply","enumRename","oldId","newId","newCommon","task","_enumRename","nondeletable","len","_rev","prepareNewEnum","getName","createOrEditEnum","drawEnum","$page","se","invertColor","getIcon","$filter","eid","$btn","limit","initFilter","drawEnumsTiles","$tableBody","$items","droppable","deleteEnum","removeMember","switchEditMode","drawEnumsTable","setupDroppableTiles","treeTable","root","columns","colors","icons","widths","buttonsWidth","buttons","primary","_delObjects","panelButtons","enumEdit","onChange","onReady","setupDroppableTable","items","regex","RegExp","test","getEnumsChildren","addMember","$treetable","accept","over","ui","timer","out","tolerance","drop","draggable","$collection","parentId","idChanged","nameVal","idVal","originalIdVal","colorVal","isIdEditable","$id","$modal","scrollHeight","isEnabled","$editButton","_initObjectTree","_$items","$trs","enumIsTiles","settings","noDialog","expertModeRegEx","texts","cancel","ID","room","function","value","selectid","wait","ok","with","without","copyToClipboard","refresh","button","sortable","connectWith","refreshPositions","helper","$target","zIndex","revert","scroll","$prev","item","stop","after","disableSelection","setupDraggable","permissions","unshift","action","Events","$header","$pause","isRemote","pause","$counterSpan","columnResizeInit","doFilter","filterEvents","defineProperty","selectedVal","toLocaleLowerCase","enumerateble","widthSet","updateResizersHeight","getValues","isShow","stateOrObj","isMessage","isState","checkAddOption","getElementById","outerHTML","visible","isNaN","fileHandler","file","dataTransfer","files","$dz","size","reader","FileReader","onload","evt","readAsDataURL","$dropZone","ondragover","ondragleave","ondrop","Hosts","showUpdateInfo","path","platform","applyFilter","someVisible","showOneHostRow","alive","getHostIcon","os","showOneHostTile","words","hostsIsTiles","$hostsFilter","filterTimeout","hostsFilter","titleVal","editHost","infoTimeout","hostsToUpdate","availableVersion","showHostsTile","showHostsTable","runningVersion","addHost","addr","hardware","networkInterfaces","eth","num","internal","address","initHostsList","updateTimer","Instances","getLinkVar","_var","link","resolveLink","vars","links","adptr","firtsLink","updateLed","instanceId","$led","webExtension","webInstance","hover","calculateTotalRam","processes","mem","$totalRam","$running_processes","calculateFreeMem","memState","totalmem","$freeMem","strVal","tdp","calculateDiskMem","diskSize","diskFree","diskWarning","$diskFree","formatBytes","calculateRam","memoryLimitMB","toFixed","showOneAdapter","rootElem","form","justContent","localLinks","localLink","replaceInLink","__first","isRun","onlyWWW","noConfig","hostsText","schedule","restartSchedule","loglevel","onQuickEditField","_instanceId","setupCron","alert","showCronDialog","newValue","invisible","reg","filterHost","_isShow","options","oldVal","innerHTML","textAlign","opt","blur","$gridHead","x","nachkomma","$filterClear","instancesFilter","instancesFilterHost","replaceLink","elem","_replaceLink","_replaceLinks","arg","showTip","l","instanceForm","getInstances","last","$mem","$e","onEdit","_link","https","$instancesMenu","mouseleave","open","resize","Intro","formatSeconds","seconds","hours","minutes","$template","formatInfo","Uptime","System uptime","RAM","bytes","GB","MB","Speed","mhz","Disk size","Disk free","execCommand","buildInfoCard","$card","clone","removeAttr","intro","hasWarning","replaceWith","clippy","item_","formatted","buildOneCard","welcomeScreen","web","urlText","noIntro","_first","showTiles","$cards","editActive","aa","aaa","welcomeUrl","welcomeScreenPro","getCards","values","actual","updateConfig","startkey","endkey","doc","rows","updateTimeout","Issue","$dialogIssue","showdown","setFlavor","getJSON","bug","issue","$issueElement","html_url","login","Converter","makeHtml","issueDate","created_at","toLocaleDateString","weekday","year","month","day","hour","minute","second","labels","Logs","filters","severity","message","lines","doSubscribe","line","charCodeAt","subscribeLogs","reverse","ll","name_","$tabLogs","isReload","Objects","subscribes","syncEnum","enumName","newArray","enums","toCheck","_syncEnum","enumIds","enumId","requestStates","pattern","unsubscribeAll","loadObjects","objs","$dialogNewObject","stype","reinit","dialogs","customs","stats","useValues","useHistory","showButtonsForNotExistingObjects","expand","editDialog","States","toggleValues","expandedCallback","childrenCount","hasStates","subscribe","collapsedCallback","unsubscribe","material-icon","delObject","history.0","input","addEventListener","r","contents","json","readAsText","handleFileSelect","map","search","quickEdit","quickEditCallback","oldValue","newAck","typ","customButtonFilter","subscribeAll","Readme","md2html","mainUrl","trimArr","$divReadme","$divChangeLog","$divLicense","$divLogo","adapterName","localStorage","getItem","setItem","fillDiv","removeItem","get","orgUrl","logo","changeLog","splitReadMe","lastIndexOf","$elemId","animate","offset","initMap","system","mapLoaded","updateMap","System","mapTimer","mapInited","longitude","latitude","systemRepos","systemCerts","useOpenLayers","string2cert","str","p","addCert","table2values","newText","certificate","values2table","initRepoGrid","repositories","$system_activeRepo","selectedRepo","isFound","updateRepoListSelect","nonEdit","$repos","languageChanged","activeRepoChanged","defaultNewAcl","old","finishEditingRights","language","diag","certificates","letsEncrypt","toast","label","immediately","ol","point","proj","fromLonLat","OSM","markerSource","Vector","markerStyle","Style","Icon","anchor","anchorXUnits","anchorYUnits","src","oMap","Map","layers","layer","Tile","view","View","center","zoom","marker","Feature","geometry","geom","Point","addFeature","lonLat","toLonLat","coordinate","getView","getZoom","setGeometry","setView","google","maps","lat","lng","Marker","$system_defaultHistory","dataType","initRights","cert","atob","_m","initCertsGrid","errRepo","errCerts","certs","errConfig","Users","synchronizeUser","userId","userGroups","showMessageInDialog","firstUpper","deleteUser","delUserFromGroups","updateUser","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","%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 \n if (url.startsWith(\"http\") && url.endsWith(\".git\")) url = \"git+\" + url;\n \n debug = that.$installDialog.find('#install-url-debug').prop('checked') ? ' --debug' : '';\n adapter = '';\n } else {\n var parts = that.$installDialog.find('#install-github-link').val().split(' ');\n url = parts[0];\n debug = that.$installDialog.find('#install-github-debug').prop('checked') ? ' --debug' : '';\n adapter = ' ' + parts[1];\n }\n\n if (!url) {\n that.main.showError(_('Invalid link'));\n return;\n }\n\n that.main.cmdExec(null, 'url \"' + url + '\"' + adapter + debug, function (exitCode) {\n if (!exitCode) {\n that.init(true, true);\n }\n });\n });\n that.$installDialog.find('#install-github-link').select();\n // workaround for materialize checkbox problem\n that.$installDialog.find('input[type=\"checkbox\"]+span').off('click').on('click', function () {\n var $input = $(this).prev();\n if (!$input.prop('disabled')) {\n $input.prop('checked', !$input.prop('checked')).trigger('change');\n }\n });\n that.$installDialog.modal('open');\n that.$installDialog.find('.tabs').mtabs({\n nShow: function (tab) {\n if (!tab) return;\n that.main.saveConfig('adaptersInstallTab', $(tab).attr('id'));\n }\n });\n\n if (that.main.config.adaptersInstallTab && !that.main.noSelect) {\n that.$installDialog.find('.tabs').mtabs('select', that.main.config.adaptersInstallTab);\n }\n });\n\n this.$tab.find('#btn_upgrade_all').off('click').on('click', function () {\n that.main.confirmMessage(_('Do you want to upgrade all adapters?'), _('Please confirm'), 'help', function (result) {\n if (result) {\n that.main.cmdExec(null, 'upgrade', function (exitCode) {\n if (!exitCode) that._postInit(true);\n });\n }\n });\n });\n\n this.$tab.find('#btn_adapters_expert_mode').on('click', function () {\n that.main.config.expertMode = !that.main.config.expertMode;\n that.main.saveConfig('expertMode', that.main.config.expertMode);\n that.updateExpertMode();\n that.main.tabs.instances.updateExpertMode();\n });\n\n if (that.main.config.expertMode) {\n that.$tab.find('#btn_adapters_expert_mode').addClass('red lighten-3');\n }\n\n // save last selected adapter\n this.$installDialog.find('#install-github-link').on('change', function () {\n that.main.saveConfig('adaptersGithub', $(this).val());\n });\n this.$installDialog.find('#install-url-link').on('keyup', function (event) {\n if (event.which === 13) {\n that.$installDialog.find('#dialog-install-url-button').trigger('click');\n }\n });\n\n // Load settings\n this.isTiles = (this.main.config.adaptersIsTiles !== undefined && this.main.config.adaptersIsTiles !== null) ? this.main.config.adaptersIsTiles : true;\n this.isList = this.main.config.adaptersIsList || false;\n this.onlyInstalled = this.main.config.adaptersOnlyInstalled || false;\n this.onlyUpdatable = this.main.config.adaptersOnlyUpdatable || false;\n this.currentFilter = this.main.config.adaptersCurrentFilter || '';\n this.currentType = this.main.config.adaptersCurrentType || '';\n this.currentOrder = this.main.config.adaptersCurrentOrder || 'a-z';\n this.isCollapsed = this.main.config.adaptersIsCollapsed ? JSON.parse(this.main.config.adaptersIsCollapsed) : {};\n if (this.currentFilter) {\n this.$tab.find('.filter-input').addClass('input-not-empty').val(that.currentFilter);\n this.$tab.find('.filter-clear').show();\n } else {\n this.$tab.find('.filter-clear').hide();\n }\n\n if (this.onlyInstalled) {\n this.$tab.find('#btn_filter_adapters').addClass('red lighten-3');\n } else {\n this.$tab.find('#btn_filter_adapters').removeClass('red lighten-3');\n }\n\n if (this.onlyUpdatable) {\n this.$tab.find('#btn_filter_updates').addClass('red lighten-3');\n } else {\n this.$tab.find('#btn_filter_updates').removeClass('red lighten-3');\n }\n\n // fix for IE\n if (this.main.browser === 'ie' && this.main.browserVersion <= 10) {\n this.isTiles = false;\n this.$tab.find('#btn_switch_adapters').hide();\n }\n\n onExpertmodeChanged();\n\n this.$tab.find('#btn_refresh_adapters').on('click', function () {\n that.init(true, true);\n });\n\n // add filter processing\n this.$tab.find('.filter-input').on('keyup', function () {\n $(this).trigger('change');\n }).on('change', function (event) {\n if (that.filterTimer) {\n clearTimeout(that.filterTimer);\n }\n that.filterTimer = setTimeout(function () {\n that.filterTimer = null;\n that.currentFilter = that.$tab.find('.filter-input').val().toLowerCase();\n event && event.target && $(event.target)[that.currentFilter ? 'addClass' : 'removeClass']('input-not-empty');\n if (that.currentFilter) {\n that.$tab.find('.filter-clear').show();\n } else {\n that.$tab.find('.filter-clear').hide();\n }\n\n that.main.saveConfig('adaptersCurrentFilter', that.currentFilter);\n if (that.isTiles) {\n filterTiles();\n } else {\n that.$grid.fancytree('getTree').filterNodes(customFilter, false);\n }\n }, 400);\n });\n\n this.$tab.find('.filter-clear').on('click', function () {\n that.$tab.find('.filter-input').val('').trigger('change');\n });\n\n if (this.isTiles) {\n this.$tab.find('#btn_switch_adapters').find('i').text('view_list');\n that.$tab.removeClass('view-table').addClass('view-tiles');\n prepareTiles();\n } else {\n that.$tab.removeClass('view-tiles').addClass('view-table');\n prepareTable();\n }\n };\n\n this.updateExpertMode = function () {\n this.init(true);\n onExpertmodeChanged();\n };\n\n function customFilter(node) {\n //if (node.parent && node.parent.match) return true;\n\n if (that.currentFilter) {\n if (!that.data[node.key]) return false;\n\n var title = that.data[node.key].title;\n if (title && typeof title === 'object') {\n title = title[systemLang] || title.en;\n }\n var desc = that.data[node.key].desc;\n if (desc && typeof desc === 'object') {\n desc = desc[systemLang] || desc.en;\n }\n\n if ((that.data[node.key].name && that.data[node.key].name.toLowerCase().indexOf(that.currentFilter) !== -1) ||\n (title && title.toLowerCase().indexOf(that.currentFilter) !== -1) ||\n (that.data[node.key].keywords && that.data[node.key].keywords.toLowerCase().indexOf(that.currentFilter) !== -1) ||\n (desc && desc.toLowerCase().indexOf(that.currentFilter) !== -1)){\n return true;\n } else {\n return false;\n }\n } else {\n return true;\n }\n }\n\n this.getAdaptersInfo = function (host, update, updateRepo, callback) {\n if (!host) return;\n\n if (!callback) throw 'Callback cannot be null or undefined';\n if (update) {\n // Do not update too often\n if (!this.curRepoLastUpdate || ((new Date()).getTime() - this.curRepoLastUpdate > 1000)) {\n this.curRepository = null;\n this.curInstalled = null;\n }\n }\n\n if (this.curRunning) {\n this.curRunning.push(callback);\n return;\n }\n\n if (!this.curRepository || this.curRepoLastHost !== host) {\n this.curRepository = null;\n this.main.socket.emit('sendToHost', host, 'getRepository', {repo: this.main.systemConfig.common.activeRepo, update: updateRepo}, function (_repository) {\n if (_repository === 'permissionError') {\n console.error('May not read \"getRepository\"');\n _repository = {};\n }\n\n that.curRepository = _repository || {};\n if (that.curRepository && that.curInstalled && that.curRunning) {\n that.curRepoLastUpdate = (new Date()).getTime();\n setTimeout(function () {\n for (var c = 0; c < that.curRunning.length; c++) {\n that.curRunning[c](that.curRepository, that.curInstalled);\n }\n that.curRunning = null;\n }, 0);\n }\n });\n }\n if (!this.curInstalled || this.curRepoLastHost !== host) {\n this.curInstalled = null;\n this.main.socket.emit('sendToHost', host, 'getInstalled', null, function (_installed) {\n if (_installed === 'permissionError') {\n console.error('May not read \"getInstalled\"');\n _installed = {};\n }\n\n that.curInstalled = _installed || {};\n if (that.curRepository && that.curInstalled) {\n that.curRepoLastUpdate = (new Date()).getTime();\n setTimeout(function () {\n for (var c = 0; c < that.curRunning.length; c++) {\n that.curRunning[c](that.curRepository, that.curInstalled);\n }\n that.curRunning = null;\n }, 0);\n }\n });\n }\n\n this.curRepoLastHost = host;\n\n if (this.curInstalled && this.curRepository) {\n setTimeout(function () {\n if (that.curRunning) {\n for (var c = 0; c < that.curRunning.length; c++) {\n that.curRunning[c](that.curRepository, that.curInstalled);\n }\n that.curRunning = null;\n }\n if (callback) callback(that.curRepository, that.curInstalled);\n }, 0);\n } else {\n this.curRunning = [callback];\n }\n };\n\n this.enableColResize = function () {\n if (!$.fn.colResizable) return;\n if (this.$grid.is(':visible')) {\n this.$grid.colResizable({liveDrag: true});\n }\n };\n\n function getNews(actualVersion, adapter) {\n var text = '';\n if (adapter.news) {\n for (var v in adapter.news) {\n if (adapter.news.hasOwnProperty(v)) {\n if (systemLang === v) text += (text ? '\\n' : '') + adapter.news[v];\n if (v === 'en' || v === 'cn') continue;\n if (v === actualVersion) break;\n text += (text ? '\\n' : '') + (adapter.news[v][systemLang] || adapter.news[v].en);\n }\n }\n }\n return text;\n }\n\n function checkDependencies(dependencies) {\n if (!dependencies) return '';\n // like [{\"js-controller\": \">=0.10.1\"}]\n var adapters;\n if (dependencies instanceof Array) {\n adapters = {};\n for (var a = 0; a < dependencies.length; a++) {\n if (typeof dependencies[a] === 'string') continue;\n for (var b in dependencies[a]) {\n if (dependencies[a].hasOwnProperty(b)) {\n adapters[b] = dependencies[a][b];\n }\n }\n }\n } else {\n adapters = dependencies;\n }\n\n for (var adapter in adapters) {\n if (adapters.hasOwnProperty(adapter)) {\n if (adapter === 'js-controller') {\n if (!semver.satisfies(that.main.objects['system.host.' + that.main.currentHost].common.installedVersion, adapters[adapter])) return _('Invalid version of %s. Required %s', adapter, adapters[adapter]);\n } else {\n if (!that.main.objects['system.adapter.' + adapter] || !that.main.objects['system.adapter.' + adapter].common || !that.main.objects['system.adapter.' + adapter].common.installedVersion) return _('No version of %s', adapter);\n if (!semver.satisfies(that.main.objects['system.adapter.' + adapter].common.installedVersion, adapters[adapter])) return _('Invalid version of %s', adapter);\n }\n }\n }\n return '';\n }\n\n this.sortTree = function() {\n function sort(c1, c2) {\n //var d1 = that.data[c1.key], d2 = that.data[c1.key];\n var inst1 = c1.data.installed || 0, inst2 = c2.data.installed || 0;\n var ret = inst2 - inst1;\n if (ret) return ret;\n var t1 = c1.titleLang || c1.title || '';\n if (typeof t1 === 'object') {\n t1 = t1[systemLang] || t1.en;\n }\n var t2 = c2.titleLang || c2.title || '';\n if (typeof t2 === 'object') {\n t2 = t2[systemLang] || t2.en;\n }\n\n t1 = t1.toLowerCase();\n t2 = t2.toLowerCase();\n if (t1 > t2) return 1;\n if (t1 < t2) return -1;\n return 0;\n }\n that.$grid.fancytree('getRootNode').sortChildren(sort, true);\n };\n\n function getInterval(time, todayText, yesterdayText, x1DayAgoText, x2DaysAgoText, x5DaysAgoText, now) {\n now = now || Date.now();\n if (!time) return '';\n if (typeof time === 'string' || typeof time === 'number') {\n time = new Date(time);\n }\n var interval = now.getTime() - time.getTime();\n var days = Math.floor(interval / (24 * 3600000));\n if (days === 0) {\n if (now.getDate() === time.getDate()) {\n return todayText;\n } else {\n return yesterdayText;\n }\n } else if (days === 1) {\n if (now.getDate() - time.getDate() === 1) {\n return yesterdayText;\n } else {\n return x2DaysAgoText.replace('%d', days + 1);\n }\n } else {\n var t = days % 10;\n var tt = days % 100;\n // 2, 3, 4, 22, 23, 24, 32, 33, 34, 111, ...x2, x3, h4\n if ((tt < 10 || tt > 20) && t >= 2 && t <= 4) {\n return x2DaysAgoText.replace('%d', days);\n } else\n // 1, 21, 31, 41, 121....\n if ((tt < 10 || tt > 20) && t === 1) {\n return x1DayAgoText.replace('%d', days);\n } else {\n return x5DaysAgoText.replace('%d', days);\n }\n }\n }\n\n this._postInit = function (update, updateRepo) {\n if (typeof this.$grid !== 'undefined') {\n\n that.$tab.find('.process-adapters').show();\n\n this.$grid.find('tbody').html('');\n\n this.getAdaptersInfo(this.main.currentHost, update, updateRepo, function (repository, installedList) {\n var obj;\n var version;\n var rawVersion;\n var adapter;\n var adaptersToUpdate = 0;\n\n var listInstalled = [];\n var listNonInstalled = [];\n var nowObj = new Date();\n var localTexts = {\n 'add instance': _('add instance'),\n 'update': _('update'),\n 'upload': _('upload'),\n 'Available version:': _('Available version:'),\n 'Active instances': _('Active instances'),\n 'Installed version': _('Installed version'),\n 'readme': _('readme'),\n 'delete adapter': _('delete adapter'),\n 'install specific version': _('install specific version'),\n 'all': _('all'),\n 'Last update': _('Last update'),\n 'Installations counter': _('Installation counter'),\n 'today': _('today'),\n 'yesterday': _('yesterday'),\n '1 %d days ago': _('1 %d days ago'),\n '2 %d days ago': _('2 %d days ago'),\n '5 %d days ago': _('5 %d days ago')\n };\n\n if (installedList) {\n for (adapter in installedList) {\n if (!installedList.hasOwnProperty(adapter)) continue;\n obj = installedList[adapter];\n if (!obj || obj.controller || adapter === 'hosts') continue;\n listInstalled.push(adapter);\n }\n listInstalled.sort();\n }\n\n that.urls = {};\n // List of adapters for repository\n for (adapter in repository) {\n if (!repository.hasOwnProperty(adapter)) continue;\n if (installedList && installedList[adapter] && !installedList[adapter].versionDate) {\n installedList[adapter].versionDate = repository[adapter].versionDate;\n }\n\n // it is not possible to install this adapter from git\n if (!repository[adapter].nogit) {\n that.urls[adapter] = repository[adapter].meta;\n }\n obj = repository[adapter];\n if (!obj || obj.controller) continue;\n version = '';\n if (installedList && installedList[adapter]) continue;\n listNonInstalled.push(adapter);\n }\n listNonInstalled.sort();\n\n function getVersionString(version, updatable, news, updatableError) {\n //var span = getVersionSpan(version);\n var color = getVersionClass(version);\n var title = color + '\\n\\r' + (news || '');\n //version = '
                      ',!x&&i.colors&&s[z].color&&(e+='
                      '),!x&&i.icons&&(e+=ne(i.objects[s[z].id],i.imgPath)||'
                       
                      '),"enabled"===O)e+='";else if("groups"===O)for(var E=0;E'+ne(i.objects[S],null,"")+s[z].groups[E].name+""}else if("instance"===O)if(void 0!==s[z].instance&&1';for(var Y=0;Y"+r[Y]+"";e+=k+=""}else e+=""+(void 0===s[z].instance?"":s[z].instance)+"";else if("icon"===O)e+=ne(i.objects[s[z].id],i.imgPath);else{var Q=s[z][O]||"";Q&&"object"==typeof Q&&Q.en&&(Q=Q[systemLang]||Q.en),e+=""+Q+""}e+="
                      ';for(var P="",U=0;U ':(P+="<"+t+' data-id="'+s[z].id+'" class="select-button-'+U+' select-button-custom td-button" style="margin-right: 3px;" data-parent="'+s[z].parent+'" data-children="'+!!s[z].realChildren+'" title="'+(i.buttons[U].title||"")+'">',window.M&&window.M.toast&&(P+=''+(i.buttons[U].icon||"")+""),P+="");e+=P+"
                      ' +\n version = //'
                      ' +\n '
                      ' +\n '' +\n '' +\n '
                      ' + version + '';\n if (updatable) { //xxx\n version += '';\n }\n version += '
                      ';\n return version;\n }\n\n that.tree = [];\n that.data = {};\n\n // list of the installed adapters\n for (var i = 0; i < listInstalled.length; i++) {\n adapter = listInstalled[i];\n\n obj = installedList ? installedList[adapter] : null;\n\n if (!obj || obj.controller || adapter === 'hosts') continue;\n var installed = '';\n var rawInstalled = '';\n var icon = obj.icon;\n version = '';\n\n if (repository[adapter] && repository[adapter].version) version = repository[adapter].version;\n\n if (repository[adapter] && repository[adapter].extIcon) icon = repository[adapter].extIcon;\n\n var _instances = 0;\n var _enabled = 0;\n if (obj.version) {\n var news = '';\n var updatable = false;\n var updatableError = '';\n if (!that.main.upToDate(version, obj.version)) {\n news = getNews(obj.version, repository[adapter]);\n // check if version is compatible with current adapters and js-controller\n updatable = true;\n updatableError = checkDependencies(repository[adapter].dependencies);\n adaptersToUpdate++;\n }\n // TODO: move style to class\n installed = '' +\n '';\n\n // Show information about installed and enabled instances\n for (var z = 0; z < that.main.instances.length; z++) {\n if (that.main.objects[that.main.instances[z]] &&\n that.main.objects[that.main.instances[z]].common.name === adapter) {\n _instances++;\n if (that.main.objects[that.main.instances[z]].common.enabled) _enabled++;\n }\n }\n\n\n if (_instances) {\n // TODO: move style to class\n installed += '';\n } else {\n // TODO: move style to class\n installed += '';\n }\n // TODO: move style to class\n installed += '';\n rawInstalled = '' + obj.version + '';\n\n //tmp = installed.split('.');\n // if (updatable) { //xxx\n // //TODO\n // // installed += '';\n // // version = version.replace('class=\"', 'class=\"updateReady ');\n // // $('a[href=\"#tab-adapters\"]').addClass('updateReady');\n // } else if (that.onlyUpdatable) {\n // continue;\n // }\n\n installed += '
                      ';\n if (_enabled !== _instances) {\n installed += '' + _instances + '';\n if (_enabled) installed += ' ~ ';\n }\n if (_enabled) installed += '' + _enabled + '';\n installed += '' + obj.version + '
                      ';\n if (!updatable && that.onlyUpdatable) continue;\n }\n rawVersion = version;\n version = getVersionString(version, updatable, news, updatableError);\n\n var group = (obj.type || that.types[adapter] || 'common adapters') + '_group';\n var desc = (typeof obj.desc === 'object') ? (obj.desc[systemLang] || obj.desc.en) : obj.desc;\n desc = desc || '';\n desc += showUploadProgress(group, adapter, that.main.states['system.adapter.' + adapter + '.upload'] ? that.main.states['system.adapter.' + adapter + '.upload'].val : 0);\n var title = obj.titleLang || obj.title;\n title = (typeof title === 'object') ? (title[systemLang] || title.en) : title;\n\n that.data[adapter] = {\n image: icon ? '' : '',\n icon: icon || '',\n stat: repository[adapter] ? repository[adapter].stat : 0,\n name: adapter,\n title: (title || '').replace('yunkong2 Visualisation - ', ''),\n desc: desc,\n news: news,\n updatableError: updatableError,\n keywords: obj.keywords ? obj.keywords.join(' ') : '',\n version: version,\n installed: installed,\n rawVersion: rawVersion,\n instances: _instances,\n rawInstalled: rawInstalled,\n versionDate: obj.versionDate,\n updatable: updatable,\n bold: obj.highlight || false,\n install: '' +\n '' +\n ((that.main.config.expertMode) ? '' : '') +\n '' +\n ((that.main.config.expertMode) ? '' : ''),\n // platform: obj.platform, actually there is only one platform\n group: group,\n license: obj.license || '',\n licenseUrl: obj.licenseUrl || ''\n };\n\n if (!obj.type) console.log('\"' + adapter + '\": \"common adapters\",');\n if (obj.type && that.types[adapter]) console.log('Adapter \"' + adapter + '\" has own type. Remove from admin.');\n\n if (!that.isList) {\n var iGroup = -1;\n for (var jj = 0; jj < that.tree.length; jj++) {\n if (that.tree[jj].key === that.data[adapter].group) {\n iGroup = jj;\n break;\n }\n }\n if (iGroup < 0) {\n if (!localTexts[that.data[adapter].group]) localTexts[that.data[adapter].group] = _(that.data[adapter].group);\n that.tree.push({\n title: localTexts[that.data[adapter].group],\n desc: showUploadProgress(group),\n key: that.data[adapter].group,\n folder: true,\n expanded: !that.isCollapsed[that.data[adapter].group],\n children: [],\n icon: that.groupImages[that.data[adapter].group]\n });\n iGroup = that.tree.length - 1;\n }\n that.tree[iGroup].children.push({\n icon: icon,\n title: that.data[adapter].title || adapter,\n key: adapter\n });\n } else {\n that.tree.push({\n icon: icon,\n title: that.data[adapter].title || adapter,\n key: adapter\n });\n }\n }\n //that.sortTree();\n\n if (!that.onlyInstalled && !that.onlyUpdatable) {\n for (i = 0; i < listNonInstalled.length; i++) {\n adapter = listNonInstalled[i];\n\n obj = repository[adapter];\n if (!obj || obj.controller) continue;\n version = '';\n if (installedList && installedList[adapter]) continue;\n\n if (obj && obj.version) {\n version = obj.version;\n rawVersion = version;\n version = getVersionString(version);\n }\n\n var group = (obj.type || that.types[adapter] || 'common adapters') + '_group';\n var desc = (typeof obj.desc === 'object') ? (obj.desc[systemLang] || obj.desc.en) : obj.desc;\n desc = desc || '';\n desc += showUploadProgress(group, adapter, that.main.states['system.adapter.' + adapter + '.upload'] ? that.main.states['system.adapter.' + adapter + '.upload'].val : 0);\n\n title = obj.titleLang || obj.title;\n title = (typeof title === 'object') ? (title[systemLang] || title.en) : title;\n\n that.data[adapter] = {\n image: obj.extIcon ? '' : '',\n icon: obj.extIcon,\n stat: obj.stat,\n name: adapter,\n title: (title || '').replace('yunkong2 Visualisation - ', ''),\n desc: desc,\n keywords: obj.keywords ? obj.keywords.join(' ') : '',\n rawVersion: rawVersion,\n version: version,\n bold: obj.highlight,\n installed: '',\n versionDate: obj.versionDate,\n install: '' +\n '' +\n '' +\n ((that.main.config.expertMode) ? '' : ''),\n // TODO do not show adapters not for this platform\n // platform: obj.platform, // actually there is only one platform\n license: obj.license || '',\n licenseUrl: obj.licenseUrl || '',\n group: group\n };\n\n if (!obj.type) console.log('\"' + adapter + '\": \"common adapters\",');\n if (obj.type && that.types[adapter]) console.log('Adapter \"' + adapter + '\" has own type. Remove from admin.');\n\n if (!that.isList) {\n var igroup = -1;\n for (var j = 0; j < that.tree.length; j++){\n if (that.tree[j].key === that.data[adapter].group) {\n igroup = j;\n break;\n }\n }\n if (igroup < 0) {\n if (!localTexts[that.data[adapter].group]) localTexts[that.data[adapter].group] = _(that.data[adapter].group);\n that.tree.push({\n title: localTexts[that.data[adapter].group],\n key: that.data[adapter].group,\n folder: true,\n expanded: !that.isCollapsed[that.data[adapter].group],\n children: [],\n icon: that.groupImages[that.data[adapter].group]\n });\n igroup = that.tree.length - 1;\n }\n that.tree[igroup].children.push({\n title: that.data[adapter].title || adapter,\n icon: obj.extIcon,\n desc: showUploadProgress(group),\n key: adapter\n });\n } else {\n that.tree.push({\n icon: obj.extIcon,\n title: that.data[adapter].title || adapter,\n key: adapter\n });\n }\n }\n }\n\n if (that.currentOrder === 'popular' || that.currentOrder === 'updated') {\n var akeys = Object.keys(that.data);\n\n if (that.currentOrder === 'popular') {\n akeys.sort(function (a, b) {\n if (that.data[a].stat > that.data[b].stat) return -1;\n if (that.data[a].stat < that.data[b].stat) return 1;\n return 0;\n });\n } else if (that.currentOrder === 'updated') {\n akeys.sort(function (a, b) {\n if (that.data[a].versionDate && !that.data[b].versionDate) return -1;\n if (!that.data[a].versionDate && that.data[b].versionDate) return 1;\n if (that.data[a].versionDate > that.data[b].versionDate) return -1;\n if (that.data[a].versionDate < that.data[b].versionDate) return 1;\n if (a > b) return -1;\n if (a < b) return 1;\n return 0;\n });\n }\n var newData = {};\n for (var u = 0; u < akeys.length; u++) {\n newData[akeys[u]] = that.data[akeys[u]];\n }\n that.data = newData;\n }\n\n // build tiles\n if (that.isTiles && (that.main.browser !== 'ie' || that.main.browserVersion > 10)) {\n var text = '';\n var types = [];\n for (var a in that.data) {\n if (!that.data.hasOwnProperty(a)) continue;\n var ad = that.data[a];\n if (types.indexOf(ad.group) === -1) {\n types.push(ad.group);\n }\n// text += '
                      ';\n// text += '
                      ';\n// text += '
                      ' + ad.title + '
                      ';\n// if (that.currentOrder === 'popular' && ad.stat) {\n// text += '
                      ' + ad.stat + '
                      ';\n// } else if (that.currentOrder === 'updated' && ad.versionDate) {\n// text += '
                      ' + getInterval(ad.versionDate, localTexts['today'], localTexts['yesterday'], localTexts['1 %d days ago'], localTexts['2 %d days ago'], localTexts['5 %d days ago'], nowObj) + '
                      ';\n// }\n// text += '
                      ';\n// text += '
                      ';\n// text += ' ';\n// text += '
                      ' + ad.desc + '
                      ';\n// text += '
                      ';\n// text += '
                      ';\n// text += '
                      ' + ad.version + (ad.installed ? '' + ad.rawInstalled : '') + '
                      ';\n// text += '
                      ' + ad.install + '
                      ';\n// text += '
                      ';\n// text += '
                      ';\n\n text += '
                      ';\n text += '
                      ';\n text += '
                      ';\n text += '
                      ';\n text += ' ';\n text += ' ' + ad.title + '';\n text += ' more_vert';\n text += '
                        ';\n text += '
                      • ' + localTexts['Available version:'] + ' ' + ad.rawVersion + '' +\n (ad.updatable ? '' : '') +\n '
                      • ';\n if (ad.installed) {\n text += '
                      • ' + localTexts['Installed version'] + ': '+ ad.rawInstalled + '
                      • ';\n }\n if (ad.instances) {\n text += '
                      • ' + _('Installed instances') + ': ' + ad.instances + '
                      • ';\n }\n text += '
                      ';\n text += '
                      ';\n text += '
                      ';\n text += '
                      ';\n text += ' close';\n text += '

                      ' + ad.desc + '

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

                      Modal Header

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

                          ' + that.list[se] + '


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

                              ' + that.list[se] + '


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