diff --git a/src/js/words.js b/src/js/words.js index 996d908..2e0787a 100644 --- a/src/js/words.js +++ b/src/js/words.js @@ -5,68 +5,649 @@ systemDictionary = { " for %s": { "cn": " for %s", "en": " for %s"}, "%s added to %s": { "cn": "%s added to %s", "en": "%s added to %s"}, - "%s object(s) processed": { "cn": "%s objects were processed", "en": "%s objects were processed"}, "%s processes": { "cn": "%s processes", "en": "%s processes"}, - "%s was imported": { "cn": "%s was imported", "en": "%s was imported"}, "(without prefix)": { "cn": "(without prefix)", "en": "(without prefix)"}, "1 %d days ago": { "cn": "%d days ago", "en": "%d days ago"}, "2 %d days ago": { "cn": "%d days ago", "en": "%d days ago"}, "5 %d days ago": { "cn": "%d days ago", "en": "%d days ago"}, "A-Z": { "cn": "A-Z", "en": "A-Z"}, - "Access control": { "cn": "Access control", "en": "Access control"}, - "Access control list": { "cn": "Access control list", "en": "Access control list"}, + "Access control": { "cn": "访问控制", "en": "Access control"}, + "Access control list": { "cn": "控制列表", "en": "Access control list"}, "Acknowledged": { "cn": "Acknowledged", "en": "Acknowledged"}, "Activated. Click to stop.": { "cn": "Activated. Click to stop.", "en": "Activated. Click to stop."}, - "Active instances": { "cn": "Active instances", "en": "Active instances"}, - "Active repository:": { "cn": "Active repository", "en": "Active repository"}, - "Adapter configuration": { "cn": "Adapter configuration", "en": "Adapter configuration"}, + "Active instances": { "cn": "活跃实例", "en": "Active instances"}, + "Active repository:": { "cn": "缺省的软件仓库", "en": "Active repository"}, + "Adapter configuration": { "cn": "适配器配置", "en": "Adapter configuration"}, "Adapter settings for %s states": { "cn": "Adapter settings for %s states", "en": "Adapter settings for %s states"}, "Adapters": { "cn": "适配器", "en": "Adapters"}, - "Adapters from this Group installed": { "cn": "Adapters from this group installed", "en": "Adapters from this group installed"}, - "Add": { "cn": "Add", "en": "Add"}, + "Adapters from this Group installed": { "cn": "个适配器", "en": "Adapters from this group installed"}, + "Add": { "cn": "添加", "en": "Add"}, "Add Objecttree from JSON File": { "cn": "Add objects tree from JSON file", "en": "Add objects tree from JSON file"}, "Add certificate from file": { "cn": "Add certificate from file", "en": "Add certificate from file"}, - "Add instance...": { "cn": "Adding instance...", "en": "Adding instance..."}, + "Add instance...": { "cn": "添加实例...", "en": "Adding instance..."}, "Add member": { "cn": "Add member", "en": "Add member"}, "Add new child object to selected parent": { "cn": "Add new child object to selected parent", "en": "Add new child object to selected parent"}, "Add new field": { "cn": "Add new field", "en": "Add new field"}, "Add new issue": { "cn": "Report a bug", "en": "Report a bug"}, "Add new object: ": { "cn": "Add new object: ", "en": "Add new object: "}, "Add new object: %s": { "cn": "Add new object: %s", "en": "Add new object: %s"}, - "Address:": { "cn": "Address", "en": "Address"}, + "Address:": { "cn": "地址", "en": "Address"}, "Admin is not enabled in cloud settings!": { "cn": "Admin is not enabled in cloud settings!", "en": "Admin is not enabled in cloud settings!"}, "Administrator": { "cn": "Administrator", "en": "Administrator"}, + "All": { "cn": "全部", "en": "All"}, + "Apr": { "cn": "Apr", "en": "Apr"}, + "April": { "cn": "April", "en": "April"}, + "Architecture": { "cn": "Architecture", "en": "Architecture"}, + "Are you sure to delete %s?": { "cn": "确定删除 \"%s\"?", "en": "Are you sure to delete \"%s\"?"}, + "Are you sure to delete all children of %s?": {"cn": "确定删除 %s 的全部子项?", "en": "Are you sure to delete all children of %s?"}, + "Are you sure to delete all children of %s?": { "cn": "你确定删除 \"%s\"全部的子项目?", "en": "Are you sure to delete \"%s\" and all children?"}, + "Are you sure to delete script %s?": { "cn": "你确定删除脚本 '%s'?", "en": "Are you sure to delete script '%s'?"}, + "Are you sure you want to delete adapter %s?": { "cn": "你确定删除适配器: %s?", "en": "Are you sure you want to delete adapter %s?"}, + "Are you sure you want to delete the instance %s?": {"cn": "你确定要删除这个实例: %s?", "en": "Are you sure you want to delete the instance %s?"}, + "Are you sure?": { "cn": "你确定吗?", "en": "Are you sure?"}, + "Are you sure? Changes are not saved.": { "cn": "数据没有保存,你确定啊吗?", "en": "Are you sure? Changes are not saved."}, + "Aug": { "cn": "Aug", "en": "Aug"}, + "August": { "cn": "August", "en": "August"}, + "Available": { "cn": "Available", "en": "Available"}, + "Available version:": { "cn": "Available version", "en": "Available version"}, + "CPUs": { "cn": "CPUs", "en": "CPUs"}, + "Calendar": { "cn": "Calendar", "en": "Calendar"}, + "Cancel": { "cn": "取消", "en": "Cancel"}, + "Cannot create user: ": { "cn": "不能创建 用户: ", "en": "Cannot create user: "}, + "Cannot delete user: ": { "cn": "不能删除用户: ", "en": "Cannot delete user: "}, + "Cannot disable admin!": { "cn": "不能停用管理员!", "en": "Cannot disable admin!"}, + "Cannot read file!": { "cn": "无法读取文件!", "en": "Cannot read file!"}, + "Cannot read version from NPM": { "cn": "Could not read version from NPM", "en": "Could not read version from NPM"}, + "Cannot set password: ": { "cn": "不能设置密码: ", "en": "Cannot set password: "}, + "Certificates": { "cn": "证书", "en": "Certificates"}, + "Change": { "cn": "修改", "en": "Change"}, + "Changelog": { "cn": "Change log", "en": "Change log"}, + "Channel": { "cn": "Channel", "en": "Channel"}, + "Chart": { "cn": "Chart", "en": "Chart"}, + "Chart for %s": { "cn": "Chart for %s", "en": "Chart for %s"}, + "Check all": { "cn": "检查所有", "en": "Check all"}, + "China": { "cn": "中国", "en": "China"}, + "City:": { "cn": "城市", "en": "City"}, + "Clear": { "cn": "清除", "en": "Clear"}, + "Clear list": { "cn": "清除", "en": "Clear list"}, + "Clear log": { "cn": "清除", "en": "Clear log"}, + "Clear on disk permanent": { "cn": "Clear on disk permanent", "en": "Clear on disk permanent"}, + "Click do activate events again, or just wait one minute": {"cn": "Click do activate events again, or just wait one minute", "en": "Click do activate events again, or just wait one minute"}, + "Click on icon": { "cn": "Click on icon to open a link", "en": "Click on icon to open a link"}, + "Close": { "cn": "关闭", "en": "close"}, + "Collapse all nodes": { "cn": "收起全部", "en": "Collapse all nodes"}, + "Color": { "cn": "颜色", "en": "Color"}, + "Configuration not saved.": { "cn": "配置信息没有存储.", "en": "Configuration not saved."}, + "Connected to %s: ": { "cn": "Connected to %s: ", "en": "Connected to %s: "}, + "Connected to host: ": { "cn": "Connected to host: ", "en": "Connected to host: "}, + "Copy log": { "cn": "复制", "en": "Copy log"}, + "Copy to clipboard": { "cn": "拷贝", "en": "Copy to clipboard"}, + "Country:": { "cn": "国家/地区", "en": "Country"}, + "Create": { "cn": "创建", "en": "Create"}, + "Create new category": { "cn": "Create new category", "en": "Create new category"}, + "Create new category, like %s": { "cn": "Create new category, like %s", "en": "Create new category, like %s"}, + "Create new enum": { "cn": "创建新的枚举", "en": "Create new enum"}, + "Create new enum, like %s": { "cn": "Create new enum, like %s", "en": "Create new enum, like %s"}, + "Create new group": { "cn": "Create new group", "en": "Create new group"}, + "Create new user": { "cn": "创建新用户", "en": "Create new user"}, + "Created": { "cn": "Created", "en": "Created"}, + "Croatia": { "cn": "Croatia", "en": "Croatia"}, + "Cron expression": { "cn": "Cron expression", "en": "Cron expression"}, + "Currency:": { "cn": "货币", "en": "Currency"}, + "Custom": { "cn": "自定义", "en": "Custom"}, + "D$ecember": { "cn": "D$ecember", "en": "D$ecember"}, + "DD.MM.YY": { "cn": "DD.MM.YY", "en": "DD.MM.YY"}, + "DD.MM.YYYY": { "cn": "DD.MM.YYYY", "en": "DD.MM.YYYY"}, + "DD/MM/YYYY": { "cn": "DD/MM/YYYY", "en": "DD/MM/YYYY"}, + "Date From": { "cn": "Date From", "en": "Date From"}, + "Date To": { "cn": "Date To", "en": "Date To"}, + "Date format:": { "cn": "时间格式", "en": "Date format"}, + "Deactivated. Click to start.": { "cn": "Deactivated. Click to start.", "en": "Deactivated. Click to start."}, + "Debug outputs:": { "cn": "调试输出", "en": "Debug outputs"}, + "Dec": { "cn": "Dec", "en": "Dec"}, + "December": { "cn": "December", "en": "December"}, + "Default ACL": { "cn": "缺省 ACL", "en": "Default ACL"}, + "Default history instance:": { "cn": "缺省的数据记录实例", "en": "Default history instance"}, + "Delete attribute": { "cn": "删除", "en": "Delete attribute"}, + "Delete category": { "cn": "删除", "en": "Delete category"}, + "Delete enum": { "cn": "删除", "en": "Delete enum"}, + "Delete member": { "cn": "删除", "en": "Delete member"}, + "Delete object": { "cn": "删除", "en": "Delete object"}, + "Denmark": { "cn": "Denmark", "en": "Denmark"}, + "Description": { "cn": "说明", "en": "Description"}, + "Device": { "cn": "Device", "en": "Device"}, + "Device discovery": { "cn": "Device discovery", "en": "Device discovery"}, + "Disk free": { "cn": "磁盘空闲", "en": "Disk free"}, + "Disk free:": { "cn": "磁盘空闲:", "en": "Disk free:"}, + "Disk size": { "cn": "磁盘大小", "en": "Disk size"}, + "Do you want to delete just one object or all children of %s too?": {"cn": "Do you want to delete just one object or all children of %s too?", "en": "Do you want to delete just one object or all children of %s too?"}, + "Do you want to upgrade all adapters?": { "cn": "Do you want to upgrade all adapters?", "en": "Do you want to upgrade all adapters?"}, + "Domains:": { "cn": "Domains", "en": "Domains"}, + "Dominica": { "cn": "Dominica", "en": "Dominica"}, + "Done with error: %s": { "cn": "Done with error: %s", "en": "Done with error: %s"}, + "Download log": { "cn": "下载", "en": "Download log"}, + "Drop the files here": { "cn": "拖放文件到这里", "en": "Drop the files here"}, + "Drop the icons here": { "cn": "拖放图标文件到这里", "en": "Drop the icons here"}, + "Ecuador": { "cn": "Ecuador", "en": "Ecuador"}, + "Edit": { "cn": "编辑", "en": "Edit"}, + "Edit category": { "cn": "编辑 category", "en": "Edit category"}, + "Edit enum": { "cn": "编辑 enum", "en": "Edit enum"}, + "Edit in dialog": { "cn": "编辑 in dialog", "en": "Edit in dialog"}, + "Edit object": { "cn": "编辑 object", "en": "Edit object"}, + "Egypt": { "cn": "Egypt", "en": "Egypt"}, + "El Salvador": { "cn": "El Salvador", "en": "El Salvador"}, + "Email for account:": { "cn": "Email for account", "en": "Email for account"}, + "Enums": { "cn": "枚举", "en": "Enums"}, + "Error": { "cn": "错误", "en": "Error"}, + "Event": { "cn": "类型", "en": "Type"}, + "Events": { "cn": "事件", "en": "Events"}, + "Everyone": { "cn": "Everyone", "en": "Everyone"}, + "Expand all nodes": { "cn": "Expand all nodes", "en": "Expand all nodes"}, + "Failed to open JSON File": { "cn": "Failed to open JSON file", "en": "Failed to open JSON file"}, + "Falkland Islands (Malvinas)": { "cn": "Falkland Islands (Malvinas)", "en": "Falkland Islands (Malvinas)"}, + "Faroe Islands": { "cn": "Faroe Islands", "en": "Faroe Islands"}, + "Feb": { "cn": "Feb", "en": "Feb"}, + "February": { "cn": "February", "en": "February"}, + "File is too big!": { "cn": "File is too big!", "en": "File is too big!"}, + "File rights": { "cn": "File rights", "en": "File rights"}, + "Filter:": { "cn": "查找", "en": "Filter"}, + "Filtered out": { "cn": "Everything is filtered out", "en": "Everything is filtered out"}, + "Find coordinates...": { "cn": "Find coordinates...", "en": "Find coordinates..."}, + "Float divider:": { "cn": "小数点", "en": "Float divider"}, + "Free RAM:": { "cn": "空闲:", "en": "Free:"}, + "Fri": { "cn": "Fri", "en": "Fri"}, + "From": { "cn": "From: ", "en": "From: "}, + "From github": { "cn": "软件仓库", "en": "From github"}, + "Function": { "cn": "Function", "en": "Function"}, + "Generated ID:": { "cn": "Generated ID", "en": "Generated ID"}, + "Go to Github...": { "cn": "Go to Github...", "en": "Go to Github..."}, + "Group": { "cn": "Group", "en": "Group"}, + "Groups": { "cn": "Groups", "en": "Groups"}, + "Has no permission to %s %s %s": { "cn": "Has no permission to %s %s %s", "en": "Has no permission to %s %s %s"}, + "Heard and Mc Donald Islands": { "cn": "Heard and Mc Donald Islands", "en": "Heard and Mc Donald Islands"}, + "Heartbeat: ": { "cn": "心跳: ", "en": "Heartbeat: "}, + "Hong Kong": { "cn": "中国香港", "en": "Hong Kong"}, + "Host": { "cn": "Host", "en": "Host"}, + "Host %s is offline": { "cn": "Host %s is offline", "en": "Host %s is offline"}, + "Host:": { "cn": "Host", "en": "Host"}, + "Hosts": { "cn": "Hosts", "en": "Hosts"}, + "ID": { "cn": "ID", "en": "ID"}, + "Icon upload": { "cn": "Icon upload", "en": "Icon upload"}, + "In background": { "cn": "后台运行", "en": "In background"}, + "Info": { "cn": "信息", "en": "Info"}, + "Insert": { "cn": "插入", "en": "Insert"}, + "Install": { "cn": "安装", "en": "Install"}, + "Install adapter from URL": { "cn": "安装或升级", "en": "Install or update the adapter from URL"}, + "Install adapter from github": { "cn": "软件仓库安装或升级", "en": "Install or update the adapter from Github"}, + "Install from custom URL": { "cn": "自定义 URL 安装", "en": "Install from custom URL"}, + "Install or update from URL...": { "cn": "正在安装...", "en": "Install or update from URL..."}, + "Installation counter": { "cn": "Installations counter", "en": "Installations counter"}, + "Installations counter": { "cn": "Installations counter", "en": "Installations counter"}, + "Installed": { "cn": "已安装", "en": "Installed"}, + "Installed from group": { "cn": "Installed from group", "en": "Installed from group"}, + "Installed instances": { "cn": "已安装的实例", "en": "Installed instances"}, + "Installed version": { "cn": "已安装版本", "en": "Installed version"}, + "Instances": { "cn": "实例", "en": "Instances"}, + "Instructions": { "cn": "指令", "en": "Instructions"}, + "Intro": { "cn": "总览", "en": "Overview"}, + "Invalid version of %s": { "cn": "Invalid version of %s", "en": "Invalid version of %s"}, + "Invalid version of %s. Required %s": { "cn": "Invalid version of %s. Required %s", "en": "Invalid version of %s. Required %s"}, + "Is yet in the list": { "cn": "已经在列表中", "en": "It's already in the list"}, + "Jan": { "cn": "Jan", "en": "Jan"}, + "January": { "cn": "January", "en": "January"}, + "Jul": { "cn": "七月", "en": "Jul"}, + "July": { "cn": "July", "en": "July"}, + "Jun": { "cn": "Jun", "en": "Jun"}, + "June": { "cn": "June", "en": "June"}, + "Known bugs for": { "cn": "Known bugs for", "en": "Known bugs for"}, + "Last changed": { "cn": "上次修改", "en": "Last changed"}, + "Last update": { "cn": "上次更新", "en": "Last update"}, + "Latitude:": { "cn": "纬度", "en": "Latitude"}, + "Let's Encrypt settings": { "cn": "Let's Encrypt settings", "en": "Let's Encrypt settings"}, + "Let's encrypt SSL": { "cn": "Let's encrypt SSL", "en": "Let's encrypt SSL"}, + "License": { "cn": "许可", "en": "License"}, + "License terms": { "cn": "许可条款", "en": "License terms"}, + "Listen on all IPs": { "cn": "Listen on all IPs", "en": "Listen on all IPs"}, + "Loading...": { "cn": "正在加载...", "en": "Loading..."}, + "Log": { "cn": "日志", "en": "Log"}, + "Log file will be deleted. Are you sure?": { "cn": "日志文件将被删除,你确定吗?", "en": "Log file will be deleted. Are you sure?"}, + "Log size:": { "cn": "文件大小", "en": "Log size"}, + "Login timeout(sec):": { "cn": "登录超时 (秒)", "en": "Login timeout (sec)"}, + "Logout": { "cn": "退出", "en": "Logout"}, + "Longitude:": { "cn": "经度", "en": "Longitude"}, + "MB": { "cn": "Mb", "en": "Mb"}, + "Main": { "cn": "Main", "en": "Main"}, + "Main settings": { "cn": "主设置", "en": "Main settings"}, + "Manually created": { "cn": "手工创建", "en": "Manually created"}, + "Mar": { "cn": "三月", "en": "Mar"}, + "March": { "cn": "三月", "en": "March"}, + "Members": { "cn": "Members", "en": "Members"}, + "Message": { "cn": "消息", "en": "Message"}, + "Message buffer overflow. Losing oldest": { "cn": "Message buffer overflow. Losing oldest.", "en": "Message buffer overflow. Losing oldest."}, + "Model": { "cn": "Model", "en": "Model"}, + "Mon": { "cn": "Mon", "en": "Mon"}, + "NPM": { "cn": "NPM", "en": "NPM"}, + "Name": { "cn": "名称", "en": "Name"}, + "Name:": { "cn": "名称", "en": "Name"}, + "New": { "cn": "新建", "en": "New"}, + "New category": { "cn": "新类别", "en": "New category"}, + "New enum": { "cn": "新类别", "en": "New enum"}, + "New group": { "cn": "新群组", "en": "New group"}, + "New object": { "cn": "新对象", "en": "New object"}, + "New objekt": { "cn": "新对象", "en": "New object"}, + "New user": { "cn": "新用户", "en": "New user"}, + "No data": { "cn": "暂无数据", "en": "No data"}, + "No states selected!": { "cn": "No states selected!", "en": "No states selected!"}, + "No version of %s": { "cn": "No version of %s", "en": "No version of %s"}, + "Node.js": { "cn": "Node.js", "en": "Node.js"}, + "Norway": { "cn": "Norway", "en": "Norway"}, + "Not exists": { "cn": "不存在", "en": "Does not exist"}, + "Note:": { "cn": "Note", "en": "Note"}, + "Nov": { "cn": "十一月", "en": "Nov"}, + "November": { "cn": "十一月", "en": "November"}, + "OS": { "cn": "OS", "en": "OS"}, + "Object \"%s\" does not exists. Update the page.": {"cn": "Object \"%s\" 不存在,请刷新.", "en": "Object \"%s\" does not exist. Update the page."}, + "Object may not be deleted": { "cn": "对象不能被删除", "en": "Object may not be deleted"}, + "Object rights": { "cn": "对象权限", "en": "Object rights"}, + "Objects": { "cn": "对象", "en": "Objects"}, + "Oct": { "cn": "十月", "en": "Oct"}, + "October": { "cn": "十月", "en": "October"}, + "Ok": { "cn": "确认", "en": "Ok"}, + "Only one": { "cn": "Only one", "en": "Only one"}, + "Open original": { "cn": "在新标签中打开", "en": "Open on new tab"}, + "Owner": { "cn": "Owner", "en": "Owner"}, + "Owner group": { "cn": "Owner group", "en": "Owner group"}, + "Owner user": { "cn": "Owner user", "en": "Owner user"}, + "Parent": { "cn": "Parent", "en": "Parent"}, + "Parse error": { "cn": "Parse error", "en": "Parse error"}, + "Password": { "cn": "密码", "en": "Password"}, + "Password and confirmation are not equal!": { "cn": "Password and confirmation are not equal!", "en": "Password and confirmation are not equal!"}, + "Password cannot be empty!": { "cn": "密码不能为空!", "en": "Password cannot be empty!"}, + "Password repeat": { "cn": "Password repeat", "en": "Password repeat"}, + "Path to storage:": { "cn": "存储路径", "en": "Path to storage"}, + "Pause output": { "cn": "暂停输出", "en": "Pause output"}, + "Platform": { "cn": "平台", "en": "Platform"}, + "Please confirm": { "cn": "请确认", "en": "Please confirm"}, + "Port to check the domain:": { "cn": "Port to check the domain", "en": "Port to check the domain"}, + "Preserve ID": { "cn": "Preserve ID", "en": "Preserve ID"}, + "Preview": { "cn": "Preview", "en": "Preview"}, + "Processing...": { "cn": "处理中...", "en": "Processing..."}, + "RAM": { "cn": "内存", "en": "RAM"}, + "RAM total usage:": { "cn": "总内存使用:", "en": "Total RAM usage:"}, + "RAM usage": { "cn": "使用内存", "en": "RAM usage"}, + "Rebuild tree": { "cn": "重建", "en": "Rebuild tree"}, + "Recently updated": { "cn": "Recently updated", "en": "Recently updated"}, + "Refresh log": { "cn": "刷新", "en": "Refresh log"}, + "Removed": { "cn": "已删除", "en": "Removed"}, + "Removing of adapter...": { "cn": "Removing of adapter...", "en": "Removing of adapter..."}, + "Removing of instance...": { "cn": "Removing of instance...", "en": "Removing of instance..."}, + "Rename": { "cn": "重命名", "en": "Rename"}, + "Repositories": { "cn": "软件仓库", "en": "Repositories"}, + "Rights": { "cn": "权限", "en": "Access rights"}, + "Role": { "cn": "角色", "en": "Role"}, + "Room": { "cn": "场景", "en": "Room"}, + "Running: ": { "cn": "Running: ", "en": "Running: "}, + "Sao Tome and Principe": { "cn": "Sao Tome and Principe", "en": "Sao Tome and Principe"}, + "Sat": { "cn": "星期六", "en": "Sat"}, + "Save": { "cn": "保存", "en": "Save"}, + "Save Objecttree as JSON File": { "cn": "Save objects tree as JSON file", "en": "Save objects tree as JSON file"}, + "Save Objecttree is not possible": { "cn": "Saving the objects tree is not possible", "en": "Saving the objects tree is not possible"}, + "Save configuration": { "cn": "保存配置", "en": "Save configuration"}, + "Script": { "cn": "脚本", "en": "Script"}, + "Scripts": { "cn": "脚本", "en": "Scripts"}, + "Select": { "cn": "Select", "en": "Select"}, + "Select ID": { "cn": "Select ID", "en": "Select ID"}, + "Select adapter:": { "cn": "选择适配器", "en": "Select adapter"}, + "Select language": { "cn": "选择语言", "en": "Select language"}, + "Select options": { "cn": "选项", "en": "Select options"}, + "Sent data:": { "cn": "Sent data", "en": "Sent data"}, + "Sep": { "cn": "九月", "en": "Sep"}, + "September": { "cn": "九月", "en": "September"}, + "Set": { "cn": "Set", "en": "Set"}, + "Set CRON": { "cn": "Set", "en": "Set"}, + "Set CRON schedule for restarts": { "cn": "Set CRON schedule for restarts", "en": "Set CRON schedule for restarts"}, + "Settings": { "cn": "设置", "en": "Settings"}, + "Settings for %s": { "cn": "Settings for %s", "en": "Settings for %s"}, + "Seychelles": { "cn": "Seychelles", "en": "Seychelles"}, + "Show instances only for current host": { "cn": "Show instances only for current host", "en": "Show instances only for current host"}, + "Show values of instance": { "cn": "Show values of instance", "en": "Show values of instance"}, + "Show...": { "cn": "显示...", "en": "Show..."}, + "Size: %s, Available: %s": { "cn": "大小: %s, 剩余: %s"}, + "Some data are not stored. Discard?": { "cn": "有一些修改了的配置信息没有保存. 确认码?", "en": "Some data are not stored. Discard?"}, + "Sort alphabetically": { "cn": "Sort alphabetically by name", "en": "Sort alphabetically by name"}, + "Started...": { "cn": "Started...", "en": "Started..."}, + "State": { "cn": "Datapoint", "en": "Datapoint"}, + "State type": { "cn": "State type", "en": "State type"}, + "States": { "cn": "状态", "en": "States"}, + "States rights": { "cn": "状态权限", "en": "States rights"}, + "Statistics": { "cn": "统计", "en": "Statistics"}, + "Statistics:": { "cn": "统计", "en": "Statistics"}, + "Storage of %s": { "cn": "Storage of %s", "en": "Storage of %s"}, + "Storage of %s states": { "cn": "Storage of %s states", "en": "Storage of %s states"}, + "Success!": { "cn": "成功!", "en": "Success!"}, + "Suggestion": { "cn": "推荐", "en": "Recommendation"}, + "Sun": { "cn": "星期天", "en": "Sun"}, + "System": { "cn": "系统", "en": "System"}, + "System language:": { "cn": "语言", "en": "System language"}, + "System settings": { "cn": "系统设置", "en": "System settings"}, + "System uptime": { "cn": "System uptime", "en": "System uptime"}, + "Table": { "cn": "Table", "en": "Table"}, + "Taiwan": { "cn": "中国台湾", "en": "Taiwan"}, + "Temperature units:": { "cn": "温度单位", "en": "Temperature units"}, + "This version of node.js \"%s\" on \"%s\" is deprecated. Please install node.js 6, 8 or newer": {"cn": "yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version (\"%s\") on host \"%s\" to one of the supported versions. We recommend to use Node.js 6.", "en": "yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version (\"%s\") on host \"%s\" to one of the supported versions. We recommend to use Node.js 6."}, + "Thu": { "cn": "Thu", "en": "Thu"}, + "Time": { "cn": "Time", "en": "Time"}, + "Time From": { "cn": "Time From", "en": "Time From"}, + "Time To": { "cn": "Time To", "en": "Time To"}, + "Time stamp": { "cn": "Time stamp", "en": "Time stamp"}, + "Title": { "cn": "标题", "en": "Title"}, + "To": { "cn": "To", "en": "To"}, + "Today": { "cn": "今日", "en": "Today"}, + "Toggle expert mode": { "cn": "切换模式", "en": "Toggle expert mode"}, + "Toggle states view": { "cn": "切换状态视图", "en": "Toggle the states view"}, + "Too many events": { "cn": "Too many events", "en": "Too many events"}, + "Total count in group": { "cn": "Total count in group", "en": "Total count in group"}, + "Trigger event": { "cn": "触发事件", "en": "Trigger event"}, + "Type": { "cn": "Type", "en": "Type"}, + "URL or file path:": { "cn": "URL或安装包路径", "en": "URL or file path"}, + "Unknown file format!": { "cn": "Unknown file format!", "en": "Unknown file format!"}, + "Unsupported image format": { "cn": "Unsupported image format", "en": "Unsupported image format"}, + "Update": { "cn": "更新", "en": "Update"}, + "Update objects": { "cn": "更新", "en": "Update objects"}, + "Update states": { "cn": "更新", "en": "Update states"}, + "Updated": { "cn": "已更新", "en": "Updated"}, + "Upgrade all adapters": { "cn": "升级所有适配器", "en": "Upgrade all adapters"}, + "Upload": { "cn": "文件上传", "en": "File upload"}, + "Upload admin started": { "cn": "Upload of configuration is started", "en": "Upload of configuration is started"}, + "Upload started...": { "cn": "上传开始...", "en": "Upload started..."}, + "Uptime": { "cn": "Uptime", "en": "Uptime"}, + "Uruguay": { "cn": "Uruguay", "en": "Uruguay"}, + "Use Lets Encrypt certificates:": { "cn": "Use Let's Encrypt certificates", "en": "Use Let's Encrypt certificates"}, + "Use this instance for automatic update:": { "cn": "Use this instance for automatic update", "en": "Use this instance for automatic update"}, + "User": { "cn": "用户", "en": "User"}, + "User deleted": { "cn": "用户以删除", "en": "User deleted"}, + "User does not exist": { "cn": "这个用户不存在", "en": "User does not exist"}, + "User yet exists": { "cn": "这个用户已经存在", "en": "User already exists"}, + "Users": { "cn": "用户", "en": "Users"}, + "Value": { "cn": "Value", "en": "Value"}, + "Values of %s": { "cn": "Values of %s", "en": "Values of %s"}, + "Vatican City State": { "cn": "Vatican City State", "en": "Vatican City State"}, + "Wed": { "cn": "Wed", "en": "Wed"}, + "With": { "cn": "With", "en": "With"}, + "Without": { "cn": "Without", "en": "Without"}, + "You are going to add new instance: ": { "cn": "You are going to add new instance: ", "en": "You are going to add new instance: "}, + "You can check changelog here": { "cn": "You can check the changelog here", "en": "You can check the changelog here"}, + "You can drag&drop the devices, channels and states to enums": {"cn": "You can drag&drop the devices, channels and states to enums", "en": "You can drag&drop the devices, channels and states to enums"}, + "You can drag&drop users to groups": { "cn": "You can drag&drop users to groups", "en": "You can drag&drop users to groups"}, + "You can't see events via cloud": { "cn": "You can't see events via cloud", "en": "You can't see events via cloud"}, + "Your home": { "cn": "Your home", "en": "Your home"}, + "_All": { "cn": "全部", "en": "All"}, + "_Toggle expert mode": { "cn": "切换模式", "en": "Toggle expert mode"}, + "__different__": { "cn": "different", "en": "different"}, + "a-z": { "cn": "a-z", "en": "a-z"}, + "ack": { "cn": "ack", "en": "ack"}, + "actions": { "cn": "actions", "en": "actions"}, + "active": { "cn": "active", "en": "active"}, + "adapter with updates": { "cn": "adapters with updates", "en": "adapters with updates"}, + "adapters count": { "cn": "适配器数", "en": "adapters count"}, + "add": { "cn": "添加", "en": "Add"}, + "add children": { "cn": "添加子节点", "en": "add children"}, + "add instance": { "cn": "添加实例", "en": "add instance"}, + "add repository": { "cn": "添加仓库", "en": "add repository"}, + "agree": { "cn": "同意", "en": "agree"}, + "alarm_group": { "cn": "Alarm", "en": "Alarm"}, + "alive": { "cn": "alive", "en": "alive"}, + "all": { "cn": "all", "en": "all"}, + "alpha": { "cn": "alpha", "en": "alpha"}, + "array": { "cn": "array", "en": "array"}, + "auto": { "cn": "auto", "en": "auto"}, + "available": { "cn": "最新", "en": "available"}, + "beta": { "cn": "beta", "en": "beta"}, + "boolean": { "cn": "boolean", "en": "boolean"}, + "bug": { "cn": "bugtracker", "en": "bugtracker"}, + "cancel": { "cn": "取消", "en": "Cancel"}, + "cert_path_note": { "cn": "You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop", "en": "You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop"}, + "certificate": { "cn": "certificate", "en": "certificate"}, + "change view mode": { "cn": "模式", "en": "change view mode"}, + "channel": { "cn": "channel", "en": "channel"}, + "clear": { "cn": "清除", "en": "clear"}, + "climate-control_group": { "cn": "Climate Control", "en": "Climate Control"}, + "close on ready": { "cn": "完成后自动关闭", "en": "close on ready"}, + "collapse": { "cn": "收起", "en": "collapse"}, + "collapse all": { "cn": "收起", "en": "collapse all"}, + "comma": { "cn": "comma", "en": "comma"}, + "command execution": { "cn": "执行命令 ", "en": "Command execution"}, + "common": { "cn": "公共", "en": "common"}, + "common adapters_group": { "cn": "公共", "en": "Common"}, + "common_color": { "cn": "颜色", "en": "color"}, + "common_def": { "cn": "缺省值", "en": "default value"}, + "common_desc": { "cn": "说明", "en": "description"}, + "common_icon": { "cn": "图标", "en": "icon"}, + "common_max": { "cn": "最大值", "en": "max value"}, + "common_min": { "cn": "最小值", "en": "minimal value"}, + "common_read": { "cn": "允许读", "en": "read allowed"}, + "common_role": { "cn": "角色", "en": "role"}, + "common_states": { "cn": "预定义值", "en": "predefined values"}, + "common_type": { "cn": "类型", "en": "type"}, + "common_unit": { "cn": "量度单位", "en": "measure unit"}, + "common_write": { "cn": "允许写", "en": "write allowed"}, + "communication_group": { "cn": "通信", "en": "Communication"}, + "config": { "cn": "设置", "en": "Settings"}, + "config instance": { "cn": "配置实例", "en": "config instance"}, + "confirm password": { "cn": "密码确认", "en": "Confirm password"}, + "connected": { "cn": "已连接", "en": "connected"}, + "copy": { "cn": "复制", "en": "copy"}, + "copy note": { "cn": "Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close.", "en": "Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close."}, + "create operation": { "cn": "创建", "en": "create"}, + "custom enum": { "cn": "自定义枚举", "en": "?ustom enum"}, + "custom group": { "cn": "自定义群组", "en": "Custom group"}, + "daemon": { "cn": "daemon", "en": "daemon"}, + "date-and-time_group": { "cn": "日期和时间", "en": "Date and Time"}, + "daysShortText": { "cn": "d.", "en": "d."}, + "debug": { "cn": "debug", "en": "debug"}, + "delete": { "cn": "删除", "en": "delete"}, + "delete adapter": { "cn": "删除", "en": "delete adapter"}, + "delete group": { "cn": "删除", "en": "delete group"}, + "delete instance": { "cn": "删除", "en": "delete instance"}, + "delete operation": { "cn": "删除", "en": "delete"}, + "delete script": { "cn": "删除", "en": "delete script"}, + "delete user": { "cn": "删除", "en": "delete user"}, + "desc": { "cn": "desc", "en": "desc"}, + "description": { "cn": "说明", "en": "Description"}, + "device": { "cn": "device", "en": "device"}, + "diag-note": { "cn": "We worked hard to create this project. In return we expect from you some usage statistics.
Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.
Thank you!", "en": "We worked hard to create this project. In return we expect from you some usage statistics.
Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.
Thank you!"}, + "edit": { "cn": "编辑", "en": "edit"}, + "edit enum": { "cn": "编辑", "en": "edit enum"}, + "edit file": { "cn": "编辑", "en": "edit file"}, + "edit group": { "cn": "编辑", "en": "edit group"}, + "edit instance": { "cn": "编辑", "en": "edit instance"}, + "edit script": { "cn": "编辑", "en": "edit script"}, + "edit user": { "cn": "修改", "en": "edit user"}, + "edit value": { "cn": "编辑", "en": "Edit value"}, + "enabled": { "cn": "enabled", "en": "enabled"}, + "energy_group": { "cn": "能源", "en": "Energy"}, + "engine": { "cn": "engine", "en": "engine"}, + "engine type": { "cn": "engine type", "en": "engine type"}, + "error": { "cn": "错误", "en": "error"}, + "events": { "cn": "events", "en": "events"}, + "execute operation": { "cn": "Execute operation", "en": "Execute operation"}, + "expand": { "cn": "展开", "en": "expand"}, + "expand all": { "cn": "展开所有", "en": "expand all"}, + "extended": { "cn": "extended", "en": "extended"}, + "false": { "cn": "false", "en": "false"}, + "file permissions": { "cn": "文件许可", "en": "File permissions"}, + "from": { "cn": "来自", "en": "from"}, + "garden_group": { "cn": "农业", "en": "Garden"}, + "general_group": { "cn": "基本", "en": "General"}, + "geoposition_group": { "cn": "地理位置", "en": "Geo position"}, + "groups": { "cn": "groups", "en": "groups"}, + "hardware_group": { "cn": "硬件", "en": "Hardware"}, + "history": { "cn": "数据", "en": "history"}, + "history data": { "cn": "数据", "en": "history data"}, + "host": { "cn": "主机", "en": "host"}, + "household_group": { "cn": "Household", "en": "Household"}, + "http operation": { "cn": "http", "en": "http"}, + "id": { "cn": "ID", "en": "ID"}, + "info": { "cn": "信息", "en": "info"}, + "infrastructure_group": { "cn": "环境", "en": "Infrastructure"}, + "install": { "cn": "安装", "en": "install"}, + "install specific version": { "cn": "安装指定版本", "en": "Install a specific version"}, + "installed": { "cn": "已安装", "en": "installed"}, + "installed adapters": { "cn": "Filter adapters with existing instances", "en": "Filter adapters with existing instances"}, + "instance": { "cn": "实例", "en": "instance"}, + "instance number": { "cn": "Desired instance number", "en": "Desired instance number"}, + "yunkong2 Enums": { "cn": "yunkong2 enums", "en": "yunkong2 enums"}, + "yunkong2 States": { "cn": "yunkong2 states", "en": "yunkong2 states"}, + "yunkong2 adapter instances": { "cn": "yunkong2 adapter instances", "en": "yunkong2 adapter instances"}, + "yunkong2 adapter scripts": { "cn": "yunkong2 adapter scripts", "en": "yunkong2 adapter scripts"}, + "yunkong2 adapters": { "cn": "yunkong2 adapters", "en": "yunkong2 adapters"}, + "yunkong2 certificates": { "cn": "yunkong2 certificates", "en": "yunkong2 certificates"}, + "yunkong2 groups": { "cn": "yunkong2 groups", "en": "yunkong2 groups"}, + "yunkong2 hosts": { "cn": "yunkong2 hosts", "en": "yunkong2 hosts"}, + "yunkong2 repositories": { "cn": "yunkong2 repositories", "en": "yunkong2 repositories"}, + "yunkong2 users": { "cn": "yunkong2 users", "en": "yunkong2 users"}, + "iot-system_group": { "cn": "物联网", "en": "IoT systems"}, + "iot-systems_group": { "cn": "物联网系统", "en": "IoT Systems"}, + "keywords": { "cn": "关键字", "en": "keywords"}, + "lc": { "cn": "Last change", "en": "Last change"}, + "less": { "cn": "精简", "en": "less"}, + "letsnecrypt_help": { "cn": "This are settings for Let's Encrypt account. To get the free certificates for your domain. You can read more here.", "en": "This are settings for Let's Encrypt account. To get the free certificates for your domain. You can read more here."}, + "letsnecrypt_help_domains": { "cn": "E.g: 'example.com, www.example.com'", "en": "E.g: 'example.com, www.example.com'"}, + "letsnecrypt_help_email": { "cn": "Please use your email address. It will be used for your account.", "en": "Please use your email address. It will be used for your account."}, + "letsnecrypt_help_path": { "cn": "Directory name where the certificates will be stored. This is always relative to configuration directory", "en": "Directory name where the certificates will be stored. This is always relative to configuration directory"}, + "license": { "cn": "许可", "en": "license"}, + "license agreement": { "cn": "许可协议", "en": "license agreement"}, + "license not agree": { "cn": "不同意!", "en": "Do not agree with the license!"}, + "license_checkbox": { "cn": "同意全部的许可条款", "en": "I agree with the collection of anonymous statistics.
(This can be disabled in settings)"}, + "lighting_group": { "cn": "照明", "en": "Lighting"}, + "link": { "cn": "link", "en": "link"}, + "list": { "cn": "list", "en": "list"}, + "list operation": { "cn": "list elements", "en": "list elements"}, + "logic_group": { "cn": "逻辑", "en": "Logic"}, + "loglevel": { "cn": "loglevel", "en": "loglevel"}, + "media_group": { "cn": "媒体", "en": "Media"}, + "members": { "cn": "members", "en": "members"}, + "memlimit": { "cn": "RAM limit", "en": "RAM limit"}, + "message": { "cn": "消息", "en": "message"}, + "messaging_group": { "cn": "信使", "en": "Messaging"}, + "misc-data_group": { "cn": "Misc. data", "en": "Misc. data"}, + "mixed": { "cn": "mixed", "en": "mixed"}, + "mode": { "cn": "mode", "en": "mode"}, + "more": { "cn": "详细", "en": "more"}, + "multi": { "cn": "multistate", "en": "multistate"}, + "multimedia_group": { "cn": "多媒体", "en": "Multimedia"}, + "name": { "cn": "名称", "en": "name"}, + "native": { "cn": "原生", "en": "native"}, + "network_group": { "cn": "网络", "en": "Network"}, + "new certificate": { "cn": "new certificate", "en": "new certificate"}, + "new group": { "cn": "new group", "en": "new group"}, + "new script": { "cn": "new script", "en": "new script"}, + "new user": { "cn": "新建用户", "en": "new user"}, + "newObject": { "cn": "New object", "en": "New object"}, + "no-city": { "cn": "no city", "en": "no city"}, + "node-red": { "cn": "node-red", "en": "node-red"}, + "none": { "cn": "none", "en": "none"}, + "normal": { "cn": "normal", "en": "normal"}, + "not ack": { "cn": "not ack", "en": "not ack"}, + "not agree": { "cn": "不同意", "en": "not agree"}, + "npm error": { "cn": "npm error", "en": "npm error"}, + "number": { "cn": "number", "en": "number"}, + "object": { "cn": "object", "en": "object"}, + "object permissions": { "cn": "Object permissions", "en": "Object permissions"}, + "of": { "cn": "/", "en": "of"}, + "ok": { "cn": "确定", "en": "Ok"}, + "open web page": { "cn": "Open web page of adapter", "en": "Open web page of adapter"}, + "os": { "cn": "OS", "en": "operating system"}, + "other permissions": { "cn": "Other permissions", "en": "Other permissions"}, + "parent name": { "cn": "parent name", "en": "parent name"}, + "password": { "cn": "密码", "en": "Password"}, + "permissionError": { "cn": "Permission error", "en": "Permission error"}, + "planned": { "cn": "planned", "en": "planned"}, + "platform": { "cn": "平台", "en": "platform"}, + "point": { "cn": "point", "en": "point"}, + "process": { "cn": "process", "en": "process"}, + "protocols_group": { "cn": "协议", "en": "Protocols"}, + "raw": { "cn": "Raw (开发)", "en": "Raw (experts only)"}, + "read": { "cn": "read", "en": "read"}, + "read operation": { "cn": "read", "en": "read"}, + "readme": { "cn": "readme", "en": "readme"}, + "reload": { "cn": "刷新", "en": "reload"}, + "reload instance": { "cn": "reload instance", "en": "reload instance"}, + "rest": { "cn": "复位 (read only)", "en": "rest (read only)"}, + "restart": { "cn": "自动重启", "en": "auto restart"}, + "restart script": { "cn": "重启脚本", "en": "restart script"}, + "role": { "cn": "角色", "en": "role"}, + "save": { "cn": "保存", "en": "save"}, + "schedule_group": { "cn": "计划", "en": "Schedule"}, + "script_group": { "cn": "逻辑和脚本", "en": "Scripts and Logic"}, + "select member by double click": { "cn": "select member by double clicking", "en": "select member by double clicking"}, + "sendto operation": { "cn": "Send-to operation", "en": "Send-to operation"}, + "service_group": { "cn": "Maintenance", "en": "Maintenance"}, + "severity": { "cn": "安防", "en": "severity"}, + "stable": { "cn": "stable", "en": "stable"}, + "state": { "cn": "state", "en": "state"}, + "state permissions": { "cn": "状态许可", "en": "State permissions"}, + "storage_group": { "cn": "存储", "en": "Storage"}, + "string": { "cn": "string", "en": "string"}, + "subscribe": { "cn": "subscribe", "en": "subscribe"}, + "switch": { "cn": "switch", "en": "switch"}, + "terminal": { "cn": "Terminal", "en": "Terminal"}, + "third-party_group": { "cn": "第三方", "en": "Third party"}, + "this adapter does not allow multiple instances": {"cn": "这个适配器不允许运行多个实例", "en": "This adapter does not allow multiple instances"}, + "title": { "cn": "标题", "en": "title"}, + "today": { "cn": "今日", "en": "today"}, + "true": { "cn": "true", "en": "true"}, + "ts": { "cn": "时间", "en": "Timestamp"}, + "type": { "cn": "type", "en": "type"}, + "unit": { "cn": "unit", "en": "unit"}, + "update": { "cn": "更新", "en": "update"}, + "update adapter information": { "cn": "update adapter information", "en": "update adapter information"}, + "update-part1": { "cn": "Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:", "en": "Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:"}, + "updated": { "cn": "已更新", "en": "updated"}, + "updates": { "cn": "updates", "en": "updates"}, + "upload": { "cn": "上传", "en": "Upload"}, + "user permissions": { "cn": "用户权限", "en": "user permissions"}, + "users": { "cn": "用户", "en": "users"}, + "users permissions": { "cn": "用户权限", "en": "User permissions"}, + "utility_group": { "cn": "公用", "en": "Utility"}, + "val": { "cn": "val", "en": "val"}, + "value": { "cn": "value", "en": "value"}, + "value.from": { "cn": "Changed from", "en": "Changed from"}, + "value.lc": { "cn": "Last change", "en": "Last change"}, + "value.q": { "cn": "Quality code", "en": "Quality code"}, + "value.ts": { "cn": "Timestamp", "en": "Timestamp"}, + "value.val": { "cn": "value", "en": "value"}, + "version": { "cn": "版本", "en": "version"}, + "vis_group": { "cn": "yunkong2.vis", "en": "yunkong2.vis"}, + "visualisation_group": { "cn": "可视化", "en": "Visualisation"}, + "visualization-icons_group": { "cn": "可视化 图标", "en": "Visualization Icons"}, + "visualization-widgets_group": { "cn": "可视化 部件", "en": "Visualization Widgets"}, + "visualization_group": { "cn": "可视化", "en": "Visualisation"}, + "warn": { "cn": "warn", "en": "warn"}, + "weather_group": { "cn": "气候", "en": "Weather"}, + "wetty": { "cn": "Wetty", "en": "Wetty"}, + "write": { "cn": "write", "en": "write"}, + "write operation": { "cn": "write", "en": "write"}, + "yesterday": { "cn": "昨天", "en": "yesterday"}, + "%s object(s) processed": { "cn": "%s objects were processed", "en": "%s objects were processed"}, + "%s was imported": { "cn": "%s was imported", "en": "%s was imported"}, + "Ignore warning": { "cn": "Ignore warning", "en": "Ignore warning"}, + "Filter": { "cn": "Filter", "en": "Filter"}, "Afghanistan": { "cn": "Afghanistan", "en": "Afghanistan"}, "Albania": { "cn": "Albania", "en": "Albania"}, "Algeria": { "cn": "Algeria", "en": "Algeria"}, - "All": { "cn": "All", "en": "All"}, "American Samoa": { "cn": "American Samoa", "en": "American Samoa"}, "Andorra": { "cn": "Andorra", "en": "Andorra"}, "Angola": { "cn": "Angola", "en": "Angola"}, "Anguilla": { "cn": "Anguilla", "en": "Anguilla"}, "Antarctica": { "cn": "Antarctica", "en": "Antarctica"}, "Antigua and Barbuda": { "cn": "Antigua and Barbuda", "en": "Antigua and Barbuda"}, - "Apr": { "cn": "Apr", "en": "Apr"}, - "April": { "cn": "April", "en": "April"}, - "Architecture": { "cn": "Architecture", "en": "Architecture"}, - "Are you sure to delete %s?": { "cn": "Are you sure to delete \"%s\"?", "en": "Are you sure to delete \"%s\"?"}, - "Are you sure to delete all children of %s?": {"cn": "Are you sure to delete all children of %s?", "en": "Are you sure to delete all children of %s?"}, - "Are you sure to delete all children of %s?": { "cn": "Are you sure to delete \"%s\" and all children?", "en": "Are you sure to delete \"%s\" and all children?"}, - "Are you sure to delete script %s?": { "cn": "Are you sure to delete script '%s'?", "en": "Are you sure to delete script '%s'?"}, - "Are you sure you want to delete adapter %s?": { "cn": "Are you sure you want to delete adapter %s?", "en": "Are you sure you want to delete adapter %s?"}, - "Are you sure you want to delete the instance %s?": {"cn": "Are you sure you want to delete the instance %s?", "en": "Are you sure you want to delete the instance %s?"}, - "Are you sure?": { "cn": "Are you sure?", "en": "Are you sure?"}, - "Are you sure? Changes are not saved.": { "cn": "Are you sure? Changes are not saved.", "en": "Are you sure? Changes are not saved."}, "Argentina": { "cn": "Argentina", "en": "Argentina"}, "Armenia": { "cn": "Armenia", "en": "Armenia"}, "Aruba": { "cn": "Aruba", "en": "Aruba"}, - "Aug": { "cn": "Aug", "en": "Aug"}, - "August": { "cn": "August", "en": "August"}, "Australia": { "cn": "Australia", "en": "Australia"}, "Austria": { "cn": "Austria", "en": "Austria"}, "Authentication was deactivated": { "cn": "Authentication was deactivated", "en": "Authentication was deactivated"}, - "Available": { "cn": "Available", "en": "Available"}, - "Available version:": { "cn": "Available version", "en": "Available version"}, "Azerbaijan": { "cn": "Azerbaijan", "en": "Azerbaijan"}, "Background": { "cn": "Background", "en": "Background"}, "Background color of the login screen": { "cn": "Background color of the login screen", "en": "Background color of the login screen"}, @@ -91,162 +672,48 @@ systemDictionary = { "Bulgaria": { "cn": "Bulgaria", "en": "Bulgaria"}, "Burkina Faso": { "cn": "Burkina Faso", "en": "Burkina Faso"}, "Burundi": { "cn": "Burundi", "en": "Burundi"}, - "CPUs": { "cn": "CPUs", "en": "CPUs"}, - "Calendar": { "cn": "Calendar", "en": "Calendar"}, "Cambodia": { "cn": "Cambodia", "en": "Cambodia"}, "Cameroon": { "cn": "Cameroon", "en": "Cameroon"}, "Canada": { "cn": "Canada", "en": "Canada"}, - "Cancel": { "cn": "Cancel", "en": "Cancel"}, - "Cannot create user: ": { "cn": "Cannot create user: ", "en": "Cannot create user: "}, - "Cannot delete user: ": { "cn": "Cannot delete user: ", "en": "Cannot delete user: "}, - "Cannot disable admin!": { "cn": "Cannot disable admin!", "en": "Cannot disable admin!"}, - "Cannot read file!": { "cn": "Cannot read file!", "en": "Cannot read file!"}, - "Cannot read version from NPM": { "cn": "Could not read version from NPM", "en": "Could not read version from NPM"}, - "Cannot set password: ": { "cn": "Cannot set password: ", "en": "Cannot set password: "}, "Cape Verde": { "cn": "Cape Verde", "en": "Cape Verde"}, "Cayman Islands": { "cn": "Cayman Islands", "en": "Cayman Islands"}, "Central African Republic": { "cn": "Central African Republic", "en": "Central African Republic"}, - "Certificates": { "cn": "Certificates", "en": "Certificates"}, "Chad": { "cn": "Chad", "en": "Chad"}, - "Change": { "cn": "Change", "en": "Change"}, - "Changelog": { "cn": "Change log", "en": "Change log"}, - "Channel": { "cn": "Channel", "en": "Channel"}, - "Chart": { "cn": "Chart", "en": "Chart"}, - "Chart for %s": { "cn": "Chart for %s", "en": "Chart for %s"}, - "Check all": { "cn": "Check all", "en": "Check all"}, "Chile": { "cn": "Chile", "en": "Chile"}, - "China": { "cn": "China", "en": "China"}, "Christmas Island": { "cn": "Christmas Island", "en": "Christmas Island"}, - "City:": { "cn": "City", "en": "City"}, - "Clear": { "cn": "Clear", "en": "Clear"}, - "Clear list": { "cn": "Clear list", "en": "Clear list"}, - "Clear log": { "cn": "Clear log", "en": "Clear log"}, - "Clear on disk permanent": { "cn": "Clear on disk permanent", "en": "Clear on disk permanent"}, - "Click do activate events again, or just wait one minute": {"cn": "Click do activate events again, or just wait one minute", "en": "Click do activate events again, or just wait one minute"}, - "Click on icon": { "cn": "Click on icon to open a link", "en": "Click on icon to open a link"}, - "Close": { "cn": "close", "en": "close"}, "Cocos Islands": { "cn": "Cocos Islands", "en": "Cocos Islands"}, - "Collapse all nodes": { "cn": "Collapse all nodes", "en": "Collapse all nodes"}, "Colombia": { "cn": "Colombia", "en": "Colombia"}, - "Color": { "cn": "Color", "en": "Color"}, "Comoros": { "cn": "Comoros", "en": "Comoros"}, - "Configuration not saved.": { "cn": "Configuration not saved.", "en": "Configuration not saved."}, "Congo": { "cn": "Congo", "en": "Congo"}, - "Connected to %s: ": { "cn": "Connected to %s: ", "en": "Connected to %s: "}, - "Connected to host: ": { "cn": "Connected to host: ", "en": "Connected to host: "}, "Cook Islands": { "cn": "Cook Islands", "en": "Cook Islands"}, - "Copy log": { "cn": "Copy log", "en": "Copy log"}, - "Copy to clipboard": { "cn": "Copy to clipboard", "en": "Copy to clipboard"}, "Costa Rica": { "cn": "Costa Rica", "en": "Costa Rica"}, - "Country:": { "cn": "Country", "en": "Country"}, - "Create": { "cn": "Create", "en": "Create"}, - "Create new category": { "cn": "Create new category", "en": "Create new category"}, - "Create new category, like %s": { "cn": "Create new category, like %s", "en": "Create new category, like %s"}, - "Create new enum": { "cn": "Create new enum", "en": "Create new enum"}, - "Create new enum, like %s": { "cn": "Create new enum, like %s", "en": "Create new enum, like %s"}, - "Create new group": { "cn": "Create new group", "en": "Create new group"}, - "Create new user": { "cn": "Create new user", "en": "Create new user"}, - "Created": { "cn": "Created", "en": "Created"}, - "Croatia": { "cn": "Croatia", "en": "Croatia"}, - "Cron expression": { "cn": "Cron expression", "en": "Cron expression"}, "Cuba": { "cn": "Cuba", "en": "Cuba"}, - "Currency:": { "cn": "Currency", "en": "Currency"}, - "Custom": { "cn": "Custom", "en": "Custom"}, "Cyprus": { "cn": "Cyprus", "en": "Cyprus"}, "Czech Republic": { "cn": "Czech Republic", "en": "Czech Republic"}, - "D$ecember": { "cn": "D$ecember", "en": "D$ecember"}, - "DD.MM.YY": { "cn": "DD.MM.YY", "en": "DD.MM.YY"}, - "DD.MM.YYYY": { "cn": "DD.MM.YYYY", "en": "DD.MM.YYYY"}, - "DD/MM/YYYY": { "cn": "DD/MM/YYYY", "en": "DD/MM/YYYY"}, - "Date From": { "cn": "Date From", "en": "Date From"}, - "Date To": { "cn": "Date To", "en": "Date To"}, - "Date format:": { "cn": "Date format", "en": "Date format"}, - "Deactivated. Click to start.": { "cn": "Deactivated. Click to start.", "en": "Deactivated. Click to start."}, - "Debug outputs:": { "cn": "Debug outputs", "en": "Debug outputs"}, - "Dec": { "cn": "Dec", "en": "Dec"}, - "December": { "cn": "December", "en": "December"}, - "Default ACL": { "cn": "Default ACL", "en": "Default ACL"}, - "Default history instance:": { "cn": "Default history instance", "en": "Default history instance"}, - "Delete attribute": { "cn": "Delete attribute", "en": "Delete attribute"}, - "Delete category": { "cn": "Delete category", "en": "Delete category"}, - "Delete enum": { "cn": "Delete enum", "en": "Delete enum"}, - "Delete member": { "cn": "Delete member", "en": "Delete member"}, - "Delete object": { "cn": "Delete object", "en": "Delete object"}, - "Denmark": { "cn": "Denmark", "en": "Denmark"}, - "Description": { "cn": "Description", "en": "Description"}, - "Device": { "cn": "Device", "en": "Device"}, - "Device discovery": { "cn": "Device discovery", "en": "Device discovery"}, "Disable authentication": { "cn": "Disable authentication", "en": "Disable authentication"}, - "Disk free": { "cn": "Disk free", "en": "Disk free"}, - "Disk free:": { "cn": "Disk free:", "en": "Disk free:"}, - "Disk size": { "cn": "Disk size", "en": "Disk size"}, "Djibouti": { "cn": "Djibouti", "en": "Djibouti"}, - "Do you want to delete just 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"}, "Dominican Republic": { "cn": "Dominican Republic", "en": "Dominican Republic"}, - "Done with error: %s": { "cn": "Done with error: %s", "en": "Done with error: %s"}, - "Download log": { "cn": "Download log", "en": "Download log"}, - "Drop the files here": { "cn": "Drop the files here", "en": "Drop the files here"}, - "Drop the icons here": { "cn": "Drop the icons here", "en": "Drop the icons here"}, "East Timor": { "cn": "East Timor", "en": "East Timor"}, - "Ecuador": { "cn": "Ecuador", "en": "Ecuador"}, - "Edit": { "cn": "Edit", "en": "Edit"}, - "Edit category": { "cn": "Edit category", "en": "Edit category"}, - "Edit enum": { "cn": "Edit enum", "en": "Edit enum"}, - "Edit in dialog": { "cn": "Edit in dialog", "en": "Edit in dialog"}, - "Edit object": { "cn": "Edit object", "en": "Edit object"}, - "Egypt": { "cn": "Egypt", "en": "Egypt"}, - "El Salvador": { "cn": "El Salvador", "en": "El Salvador"}, - "Email for account:": { "cn": "Email for account", "en": "Email for account"}, "Enabled:": { "cn": "Enabled", "en": "Enabled"}, - "Enums": { "cn": "Enums", "en": "Enums"}, "Equatorial Guinea": { "cn": "Equatorial Guinea", "en": "Equatorial Guinea"}, "Eritrea": { "cn": "Eritrea", "en": "Eritrea"}, - "Error": { "cn": "Error", "en": "Error"}, "Estonia": { "cn": "Estonia", "en": "Estonia"}, "Ethiopia": { "cn": "Ethiopia", "en": "Ethiopia"}, - "Event": { "cn": "Type", "en": "Type"}, - "Events": { "cn": "Events", "en": "Events"}, - "Everyone": { "cn": "Everyone", "en": "Everyone"}, - "Expand all nodes": { "cn": "Expand all nodes", "en": "Expand all nodes"}, - "Failed to open JSON File": { "cn": "Failed to open JSON file", "en": "Failed to open JSON file"}, - "Falkland Islands (Malvinas)": { "cn": "Falkland Islands (Malvinas)", "en": "Falkland Islands (Malvinas)"}, - "Faroe Islands": { "cn": "Faroe Islands", "en": "Faroe Islands"}, - "Feb": { "cn": "Feb", "en": "Feb"}, - "February": { "cn": "February", "en": "February"}, "Fiji": { "cn": "Fiji", "en": "Fiji"}, - "File is too big!": { "cn": "File is too big!", "en": "File is too big!"}, - "File rights": { "cn": "File rights", "en": "File rights"}, - "Filter": { "cn": "Filter", "en": "Filter"}, - "Filter:": { "cn": "Filter", "en": "Filter"}, - "Filtered out": { "cn": "Everything is filtered out", "en": "Everything is filtered out"}, - "Find coordinates...": { "cn": "Find coordinates...", "en": "Find coordinates..."}, "Finland": { "cn": "Finland", "en": "Finland"}, - "Float divider:": { "cn": "Float divider", "en": "Float divider"}, "France": { "cn": "France", "en": "France"}, - "Free RAM:": { "cn": "Free:", "en": "Free:"}, "French Guiana": { "cn": "French Guiana", "en": "French Guiana"}, "French Polynesia": { "cn": "French Polynesia", "en": "French Polynesia"}, "French Southern Territories": { "cn": "French Southern Territories", "en": "French Southern Territories"}, - "Fri": { "cn": "Fri", "en": "Fri"}, - "From": { "cn": "From: ", "en": "From: "}, - "From github": { "cn": "From github", "en": "From github"}, - "Function": { "cn": "Function", "en": "Function"}, "Gabon": { "cn": "Gabon", "en": "Gabon"}, "Gambia": { "cn": "Gambia", "en": "Gambia"}, - "Generated ID:": { "cn": "Generated ID", "en": "Generated ID"}, "Georgia": { "cn": "Georgia", "en": "Georgia"}, "Germany": { "cn": "Germany", "en": "Germany"}, "Ghana": { "cn": "Ghana", "en": "Ghana"}, "Gibraltar": { "cn": "Gibraltar", "en": "Gibraltar"}, - "Go to Github...": { "cn": "Go to Github...", "en": "Go to Github..."}, "Greece": { "cn": "Greece", "en": "Greece"}, "Greenland": { "cn": "Greenland", "en": "Greenland"}, "Grenada": { "cn": "Grenada", "en": "Grenada"}, - "Group": { "cn": "Group", "en": "Group"}, - "Groups": { "cn": "Groups", "en": "Groups"}, "Guadeloupe": { "cn": "Guadeloupe", "en": "Guadeloupe"}, "Guam": { "cn": "Guam", "en": "Guam"}, "Guatemala": { "cn": "Guatemala", "en": "Guatemala"}, @@ -255,119 +722,55 @@ systemDictionary = { "Guinea-Bissau": { "cn": "Guinea-Bissau", "en": "Guinea-Bissau"}, "Guyana": { "cn": "Guyana", "en": "Guyana"}, "Haiti": { "cn": "Haiti", "en": "Haiti"}, - "Has no permission to %s %s %s": { "cn": "Has no permission to %s %s %s", "en": "Has no permission to %s %s %s"}, - "Heard and Mc Donald Islands": { "cn": "Heard and Mc Donald Islands", "en": "Heard and Mc Donald Islands"}, - "Heartbeat: ": { "cn": "Heartbeat: ", "en": "Heartbeat: "}, "Honduras": { "cn": "Honduras", "en": "Honduras"}, - "Hong Kong": { "cn": "Hong Kong", "en": "Hong Kong"}, - "Host": { "cn": "Host", "en": "Host"}, - "Host %s is offline": { "cn": "Host %s is offline", "en": "Host %s is offline"}, - "Host:": { "cn": "Host", "en": "Host"}, - "Hosts": { "cn": "Hosts", "en": "Hosts"}, "Hungary": { "cn": "Hungary", "en": "Hungary"}, - "ID": { "cn": "ID", "en": "ID"}, "Iceland": { "cn": "Iceland", "en": "Iceland"}, - "Icon upload": { "cn": "Icon upload", "en": "Icon upload"}, - "Ignore warning": { "cn": "Ignore warning", "en": "Ignore warning"}, - "In background": { "cn": "In background", "en": "In background"}, "India": { "cn": "India", "en": "India"}, "Indonesia": { "cn": "Indonesia", "en": "Indonesia"}, - "Info": { "cn": "Info", "en": "Info"}, - "Insert": { "cn": "Insert", "en": "Insert"}, - "Install": { "cn": "Install", "en": "Install"}, - "Install adapter from URL": { "cn": "Install or update the adapter from URL", "en": "Install or update the adapter from URL"}, - "Install adapter from github": { "cn": "Install or update the adapter from Github", "en": "Install or update the adapter from Github"}, - "Install from custom URL": { "cn": "Install from custom URL", "en": "Install from custom URL"}, - "Install or update from URL...": { "cn": "Install or update from URL...", "en": "Install or update from URL..."}, - "Installation counter": { "cn": "Installations counter", "en": "Installations counter"}, - "Installations counter": { "cn": "Installations counter", "en": "Installations counter"}, - "Installed": { "cn": "Installed", "en": "Installed"}, - "Installed from group": { "cn": "Installed from group", "en": "Installed from group"}, - "Installed instances": { "cn": "Installed instances", "en": "Installed instances"}, - "Installed version": { "cn": "Installed version", "en": "Installed version"}, - "Instances": { "cn": "Instances", "en": "Instances"}, - "Instructions": { "cn": "Instructions", "en": "Instructions"}, - "Intro": { "cn": "Overview", "en": "Overview"}, - "Invalid version of %s": { "cn": "Invalid version of %s", "en": "Invalid version of %s"}, - "Invalid version of %s. Required %s": { "cn": "Invalid version of %s. Required %s", "en": "Invalid version of %s. Required %s"}, "Iran": { "cn": "Iran", "en": "Iran"}, "Iraq": { "cn": "Iraq", "en": "Iraq"}, "Ireland": { "cn": "Ireland", "en": "Ireland"}, - "Is yet in the list": { "cn": "It's already in the list", "en": "It's already in the list"}, "Isle of Man": { "cn": "Isle of Man", "en": "Isle of Man"}, "Israel": { "cn": "Israel", "en": "Israel"}, "Italy": { "cn": "Italy", "en": "Italy"}, "Ivory Coast": { "cn": "Ivory Coast", "en": "Ivory Coast"}, "Jamaica": { "cn": "Jamaica", "en": "Jamaica"}, - "Jan": { "cn": "Jan", "en": "Jan"}, - "January": { "cn": "January", "en": "January"}, "Japan": { "cn": "Japan", "en": "Japan"}, "Jersey": { "cn": "Jersey", "en": "Jersey"}, "Jordan": { "cn": "Jordan", "en": "Jordan"}, - "Jul": { "cn": "Jul", "en": "Jul"}, - "July": { "cn": "July", "en": "July"}, - "Jun": { "cn": "Jun", "en": "Jun"}, - "June": { "cn": "June", "en": "June"}, "Kazakhstan": { "cn": "Kazakhstan", "en": "Kazakhstan"}, "Kenya": { "cn": "Kenya", "en": "Kenya"}, "Kiribati": { "cn": "Kiribati", "en": "Kiribati"}, - "Known bugs for": { "cn": "Known bugs for", "en": "Known bugs for"}, "Korea": { "cn": "Korea", "en": "Korea"}, "Kosovo": { "cn": "Kosovo", "en": "Kosovo"}, "Kuwait": { "cn": "Kuwait", "en": "Kuwait"}, "Kyrgyzstan": { "cn": "Kyrgyzstan", "en": "Kyrgyzstan"}, "Lao People's Democratic Republic": { "cn": "Lao People's Democratic Republic", "en": "Lao People's Democratic Republic"}, - "Last changed": { "cn": "Last changed", "en": "Last changed"}, - "Last update": { "cn": "Last update", "en": "Last update"}, - "Latitude:": { "cn": "Latitude", "en": "Latitude"}, "Latvia": { "cn": "Latvia", "en": "Latvia"}, "Lebanon": { "cn": "Lebanon", "en": "Lebanon"}, "Lesotho": { "cn": "Lesotho", "en": "Lesotho"}, - "Let's Encrypt settings": { "cn": "Let's Encrypt settings", "en": "Let's Encrypt settings"}, - "Let's encrypt SSL": { "cn": "Let's encrypt SSL", "en": "Let's encrypt SSL"}, "Liberia": { "cn": "Liberia", "en": "Liberia"}, "Libyan Arab Jamahiriya": { "cn": "Libyan Arab Jamahiriya", "en": "Libyan Arab Jamahiriya"}, - "License": { "cn": "License", "en": "License"}, - "License terms": { "cn": "License terms", "en": "License terms"}, "Liechtenstein": { "cn": "Liechtenstein", "en": "Liechtenstein"}, - "Listen on all IPs": { "cn": "Listen on all IPs", "en": "Listen on all IPs"}, "Lithuania": { "cn": "Lithuania", "en": "Lithuania"}, - "Loading...": { "cn": "Loading...", "en": "Loading..."}, - "Log": { "cn": "Log", "en": "Log"}, - "Log file will be deleted. Are you sure?": { "cn": "Log file will be deleted. Are you sure?", "en": "Log file will be deleted. Are you sure?"}, - "Log size:": { "cn": "Log size", "en": "Log size"}, - "Login timeout(sec):": { "cn": "Login timeout (sec)", "en": "Login timeout (sec)"}, - "Logout": { "cn": "Logout", "en": "Logout"}, - "Longitude:": { "cn": "Longitude", "en": "Longitude"}, "Luxembourg": { "cn": "Luxembourg", "en": "Luxembourg"}, - "MB": { "cn": "Mb", "en": "Mb"}, "Macau": { "cn": "Macau", "en": "Macau"}, "Macedonia": { "cn": "Macedonia", "en": "Macedonia"}, "Madagascar": { "cn": "Madagascar", "en": "Madagascar"}, "Mai": { "cn": "Mai", "en": "Mai"}, - "Main": { "cn": "Main", "en": "Main"}, - "Main settings": { "cn": "Main settings", "en": "Main settings"}, "Malawi": { "cn": "Malawi", "en": "Malawi"}, "Malaysia": { "cn": "Malaysia", "en": "Malaysia"}, "Maldives": { "cn": "Maldives", "en": "Maldives"}, "Mali": { "cn": "Mali", "en": "Mali"}, "Malta": { "cn": "Malta", "en": "Malta"}, - "Manually created": { "cn": "Manually created", "en": "Manually created"}, - "Mar": { "cn": "Mar", "en": "Mar"}, - "March": { "cn": "March", "en": "March"}, "Marshall Islands": { "cn": "Marshall Islands", "en": "Marshall Islands"}, "Martinique": { "cn": "Martinique", "en": "Martinique"}, "Mauritania": { "cn": "Mauritania", "en": "Mauritania"}, "Mauritius": { "cn": "Mauritius", "en": "Mauritius"}, "Mayotte": { "cn": "Mayotte", "en": "Mayotte"}, - "Members": { "cn": "Members", "en": "Members"}, - "Message": { "cn": "Message", "en": "Message"}, - "Message buffer overflow. Losing oldest": { "cn": "Message buffer overflow. Losing oldest.", "en": "Message buffer overflow. Losing oldest."}, "Mexico": { "cn": "Mexico", "en": "Mexico"}, "Micronesia": { "cn": "Micronesia", "en": "Micronesia"}, - "Model": { "cn": "Model", "en": "Model"}, "Moldova": { "cn": "Moldova", "en": "Moldova"}, - "Mon": { "cn": "Mon", "en": "Mon"}, "Monaco": { "cn": "Monaco", "en": "Monaco"}, "Mongolia": { "cn": "Mongolia", "en": "Mongolia"}, "Montenegro": { "cn": "Montenegro", "en": "Montenegro"}, @@ -375,98 +778,37 @@ systemDictionary = { "Morocco": { "cn": "Morocco", "en": "Morocco"}, "Mozambique": { "cn": "Mozambique", "en": "Mozambique"}, "Myanmar": { "cn": "Myanmar", "en": "Myanmar"}, - "NPM": { "cn": "NPM", "en": "NPM"}, - "Name": { "cn": "Name", "en": "Name"}, - "Name:": { "cn": "Name", "en": "Name"}, "Namibia": { "cn": "Namibia", "en": "Namibia"}, "Nauru": { "cn": "Nauru", "en": "Nauru"}, "Nepal": { "cn": "Nepal", "en": "Nepal"}, "Netherlands": { "cn": "Netherlands", "en": "Netherlands"}, "Netherlands Antilles": { "cn": "Netherlands Antilles", "en": "Netherlands Antilles"}, - "New": { "cn": "New", "en": "New"}, "New Caledonia": { "cn": "New Caledonia", "en": "New Caledonia"}, "New Zealand": { "cn": "New Zealand", "en": "New Zealand"}, - "New category": { "cn": "New category", "en": "New category"}, - "New enum": { "cn": "New enum", "en": "New enum"}, - "New group": { "cn": "New group", "en": "New group"}, - "New object": { "cn": "New object", "en": "New object"}, - "New objekt": { "cn": "New object", "en": "New object"}, - "New user": { "cn": "New user", "en": "New user"}, "Nicaragua": { "cn": "Nicaragua", "en": "Nicaragua"}, "Niger": { "cn": "Niger", "en": "Niger"}, "Nigeria": { "cn": "Nigeria", "en": "Nigeria"}, "Niue": { "cn": "Niue", "en": "Niue"}, - "No data": { "cn": "No data", "en": "No data"}, - "No states selected!": { "cn": "No states selected!", "en": "No states selected!"}, - "No version of %s": { "cn": "No version of %s", "en": "No version of %s"}, - "Node.js": { "cn": "Node.js", "en": "Node.js"}, "Norfolk Island": { "cn": "Norfolk Island", "en": "Norfolk Island"}, "Northern Mariana Islands": { "cn": "Northern Mariana Islands", "en": "Northern Mariana Islands"}, - "Norway": { "cn": "Norway", "en": "Norway"}, - "Not exists": { "cn": "Does not exist", "en": "Does not exist"}, - "Note:": { "cn": "Note", "en": "Note"}, - "Nov": { "cn": "Nov", "en": "Nov"}, - "November": { "cn": "November", "en": "November"}, - "OS": { "cn": "OS", "en": "OS"}, - "Object \"%s\" does not exists. Update the page.": {"cn": "Object \"%s\" does not exist. Update the page.", "en": "Object \"%s\" does not exist. Update the page."}, - "Object may not be deleted": { "cn": "Object may not be deleted", "en": "Object may not be deleted"}, - "Object rights": { "cn": "Object rights", "en": "Object rights"}, - "Objects": { "cn": "Objects", "en": "Objects"}, - "Oct": { "cn": "Oct", "en": "Oct"}, - "October": { "cn": "October", "en": "October"}, - "Ok": { "cn": "Ok", "en": "Ok"}, "Oman": { "cn": "Oman", "en": "Oman"}, - "Only one": { "cn": "Only one", "en": "Only one"}, - "Open original": { "cn": "Open on new tab", "en": "Open on new tab"}, - "Owner": { "cn": "Owner", "en": "Owner"}, - "Owner group": { "cn": "Owner group", "en": "Owner group"}, - "Owner user": { "cn": "Owner user", "en": "Owner user"}, "Pakistan": { "cn": "Pakistan", "en": "Pakistan"}, "Palau": { "cn": "Palau", "en": "Palau"}, "Palestine": { "cn": "Palestine", "en": "Palestine"}, "Panama": { "cn": "Panama", "en": "Panama"}, "Papua New Guinea": { "cn": "Papua New Guinea", "en": "Papua New Guinea"}, "Paraguay": { "cn": "Paraguay", "en": "Paraguay"}, - "Parent": { "cn": "Parent", "en": "Parent"}, - "Parse error": { "cn": "Parse error", "en": "Parse error"}, - "Password": { "cn": "Password", "en": "Password"}, - "Password and confirmation are not equal!": { "cn": "Password and confirmation are not equal!", "en": "Password and confirmation are not equal!"}, - "Password cannot be empty!": { "cn": "Password cannot be empty!", "en": "Password cannot be empty!"}, - "Password repeat": { "cn": "Password repeat", "en": "Password repeat"}, - "Path to storage:": { "cn": "Path to storage", "en": "Path to storage"}, - "Pause output": { "cn": "Pause output", "en": "Pause output"}, "Peru": { "cn": "Peru", "en": "Peru"}, "Philippines": { "cn": "Philippines", "en": "Philippines"}, "Pitcairn": { "cn": "Pitcairn", "en": "Pitcairn"}, - "Platform": { "cn": "Platform", "en": "Platform"}, - "Please confirm": { "cn": "Please confirm", "en": "Please confirm"}, "Poland": { "cn": "Poland", "en": "Poland"}, "Popular": { "cn": "Popular", "en": "Popular"}, "Popular first": { "cn": "Popular first", "en": "Popular first"}, - "Port to check the domain:": { "cn": "Port to check the domain", "en": "Port to check the domain"}, "Portugal": { "cn": "Portugal", "en": "Portugal"}, - "Preserve ID": { "cn": "Preserve ID", "en": "Preserve ID"}, - "Preview": { "cn": "Preview", "en": "Preview"}, - "Processing...": { "cn": "Processing...", "en": "Processing..."}, "Puerto Rico": { "cn": "Puerto Rico", "en": "Puerto Rico"}, "Qatar": { "cn": "Qatar", "en": "Qatar"}, - "RAM": { "cn": "RAM", "en": "RAM"}, - "RAM total usage:": { "cn": "Total RAM usage:", "en": "Total RAM usage:"}, - "RAM usage": { "cn": "RAM usage", "en": "RAM usage"}, - "Rebuild tree": { "cn": "Rebuild tree", "en": "Rebuild tree"}, - "Recently updated": { "cn": "Recently updated", "en": "Recently updated"}, - "Refresh log": { "cn": "Refresh log", "en": "Refresh log"}, - "Removed": { "cn": "Removed", "en": "Removed"}, - "Removing of adapter...": { "cn": "Removing of adapter...", "en": "Removing of adapter..."}, - "Removing of instance...": { "cn": "Removing of instance...", "en": "Removing of instance..."}, - "Rename": { "cn": "Rename", "en": "Rename"}, - "Repositories": { "cn": "Repositories", "en": "Repositories"}, "Reunion": { "cn": "Reunion", "en": "Reunion"}, - "Rights": { "cn": "Access rights", "en": "Access rights"}, - "Role": { "cn": "Role", "en": "Role"}, "Romania": { "cn": "Romania", "en": "Romania"}, - "Room": { "cn": "Room", "en": "Room"}, - "Running: ": { "cn": "Running: ", "en": "Running: "}, "Russian Federation": { "cn": "Russian Federation", "en": "Russian Federation"}, "Rwanda": { "cn": "Rwanda", "en": "Rwanda"}, "Saint Kitts and Nevis": { "cn": "Saint Kitts and Nevis", "en": "Saint Kitts and Nevis"}, @@ -474,43 +816,13 @@ systemDictionary = { "Saint Vincent and the Grenadines": { "cn": "Saint Vincent and the Grenadines", "en": "Saint Vincent and the Grenadines"}, "Samoa": { "cn": "Samoa", "en": "Samoa"}, "San Marino": { "cn": "San Marino", "en": "San Marino"}, - "Sao Tome and Principe": { "cn": "Sao Tome and Principe", "en": "Sao Tome and Principe"}, - "Sat": { "cn": "Sat", "en": "Sat"}, "Saudi Arabia": { "cn": "Saudi Arabia", "en": "Saudi Arabia"}, - "Save": { "cn": "Save", "en": "Save"}, - "Save Objecttree as JSON File": { "cn": "Save objects tree as JSON file", "en": "Save objects tree as JSON file"}, - "Save Objecttree is not possible": { "cn": "Saving the objects tree is not possible", "en": "Saving the objects tree is not possible"}, - "Save configuration": { "cn": "Save configuration", "en": "Save configuration"}, - "Script": { "cn": "Script", "en": "Script"}, - "Scripts": { "cn": "Scripts", "en": "Scripts"}, - "Select": { "cn": "Select", "en": "Select"}, - "Select ID": { "cn": "Select ID", "en": "Select ID"}, - "Select adapter:": { "cn": "Select adapter", "en": "Select adapter"}, - "Select language": { "cn": "Select language", "en": "Select language"}, - "Select options": { "cn": "Select options", "en": "Select options"}, "Senegal": { "cn": "Senegal", "en": "Senegal"}, - "Sent data:": { "cn": "Sent data", "en": "Sent data"}, - "Sep": { "cn": "Sep", "en": "Sep"}, - "September": { "cn": "September", "en": "September"}, "Serbia": { "cn": "Serbia", "en": "Serbia"}, - "Set": { "cn": "Set", "en": "Set"}, - "Set CRON": { "cn": "Set", "en": "Set"}, - "Set CRON schedule for restarts": { "cn": "Set CRON schedule for restarts", "en": "Set CRON schedule for restarts"}, - "Settings": { "cn": "Settings", "en": "Settings"}, - "Settings for %s": { "cn": "Settings for %s", "en": "Settings for %s"}, - "Seychelles": { "cn": "Seychelles", "en": "Seychelles"}, - "Show instances only for current host": { "cn": "Show instances only for current host", "en": "Show instances only for current host"}, - "Show values of instance": { "cn": "Show values of instance", "en": "Show values of instance"}, - "Show...": { "cn": "Show...", "en": "Show..."}, - "Sierra Leone": { "cn": "Sierra Leone", "en": "Sierra Leone"}, - "Singapore": { "cn": "Singapore", "en": "Singapore"}, - "Size: %s, Free: %s": { "cn": "Size: %s, Available: %s", "en": "Size: %s, Available: %s"}, "Slovakia": { "cn": "Slovakia", "en": "Slovakia"}, "Slovenia": { "cn": "Slovenia", "en": "Slovenia"}, "Solomon Islands": { "cn": "Solomon Islands", "en": "Solomon Islands"}, "Somalia": { "cn": "Somalia", "en": "Somalia"}, - "Some data are not stored. Discard?": { "cn": "Some data are not stored. Discard?", "en": "Some data are not stored. Discard?"}, - "Sort alphabetically": { "cn": "Sort alphabetically by name", "en": "Sort alphabetically by name"}, "South Africa": { "cn": "South Africa", "en": "South Africa"}, "South Georgia South Sandwich Islands": { "cn": "South Georgia South Sandwich Islands", "en": "South Georgia South Sandwich Islands"}, "Spain": { "cn": "Spain", "en": "Spain"}, @@ -518,52 +830,19 @@ systemDictionary = { "Sri Lanka": { "cn": "Sri Lanka", "en": "Sri Lanka"}, "St. Helena": { "cn": "St. Helena", "en": "St. Helena"}, "St. Pierre and Miquelon": { "cn": "St. Pierre and Miquelon", "en": "St. Pierre and Miquelon"}, - "Started...": { "cn": "Started...", "en": "Started..."}, - "State": { "cn": "Datapoint", "en": "Datapoint"}, - "State type": { "cn": "State type", "en": "State type"}, - "States": { "cn": "States", "en": "States"}, - "States rights": { "cn": "States rights", "en": "States rights"}, - "Statistics": { "cn": "Statistics", "en": "Statistics"}, - "Statistics:": { "cn": "Statistics", "en": "Statistics"}, - "Storage of %s": { "cn": "Storage of %s", "en": "Storage of %s"}, - "Storage of %s states": { "cn": "Storage of %s states", "en": "Storage of %s states"}, - "Success!": { "cn": "Success!", "en": "Success!"}, "Sudan": { "cn": "Sudan", "en": "Sudan"}, - "Suggestion": { "cn": "Recommendation", "en": "Recommendation"}, - "Sun": { "cn": "Sun", "en": "Sun"}, "Suriname": { "cn": "Suriname", "en": "Suriname"}, "Svalbard and Jan Mayen Islands": { "cn": "Svalbard and Jan Mayen Islands", "en": "Svalbard and Jan Mayen Islands"}, "Swaziland": { "cn": "Swaziland", "en": "Swaziland"}, "Sweden": { "cn": "Sweden", "en": "Sweden"}, "Switzerland": { "cn": "Switzerland", "en": "Switzerland"}, "Syrian Arab Republic": { "cn": "Syrian Arab Republic", "en": "Syrian Arab Republic"}, - "System": { "cn": "System", "en": "System"}, - "System language:": { "cn": "System language", "en": "System language"}, - "System settings": { "cn": "System settings", "en": "System settings"}, - "System uptime": { "cn": "System uptime", "en": "System uptime"}, - "Table": { "cn": "Table", "en": "Table"}, - "Taiwan": { "cn": "Taiwan", "en": "Taiwan"}, "Tajikistan": { "cn": "Tajikistan", "en": "Tajikistan"}, "Tanzania": { "cn": "Tanzania", "en": "Tanzania"}, - "Temperature units:": { "cn": "Temperature units", "en": "Temperature units"}, "Thailand": { "cn": "Thailand", "en": "Thailand"}, - "This version of node.js \"%s\" on \"%s\" is deprecated. Please install node.js 6, 8 or newer": {"cn": "yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version (\"%s\") on host \"%s\" to one of the supported versions. We recommend to use Node.js 6.", "en": "yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version (\"%s\") on host \"%s\" to one of the supported versions. We recommend to use Node.js 6."}, - "Thu": { "cn": "Thu", "en": "Thu"}, - "Time": { "cn": "Time", "en": "Time"}, - "Time From": { "cn": "Time From", "en": "Time From"}, - "Time To": { "cn": "Time To", "en": "Time To"}, - "Time stamp": { "cn": "Time stamp", "en": "Time stamp"}, - "Title": { "cn": "Title", "en": "Title"}, - "To": { "cn": "To", "en": "To"}, - "Today": { "cn": "Today", "en": "Today"}, - "Toggle expert mode": { "cn": "Toggle expert mode", "en": "Toggle expert mode"}, - "Toggle states view": { "cn": "Toggle the states view", "en": "Toggle the states view"}, "Togo": { "cn": "Togo", "en": "Togo"}, "Tokelau": { "cn": "Tokelau", "en": "Tokelau"}, "Tonga": { "cn": "Tonga", "en": "Tonga"}, - "Too many events": { "cn": "Too many events", "en": "Too many events"}, - "Total count in group": { "cn": "Total count in group", "en": "Total count in group"}, - "Trigger event": { "cn": "Trigger event", "en": "Trigger event"}, "Trinidad and Tobago": { "cn": "Trinidad and Tobago", "en": "Trinidad and Tobago"}, "Tue": { "cn": "Tue", "en": "Tue"}, "Tunisia": { "cn": "Tunisia", "en": "Tunisia"}, @@ -571,8 +850,6 @@ systemDictionary = { "Turkmenistan": { "cn": "Turkmenistan", "en": "Turkmenistan"}, "Turks and Caicos Islands": { "cn": "Turks and Caicos Islands", "en": "Turks and Caicos Islands"}, "Tuvalu": { "cn": "Tuvalu", "en": "Tuvalu"}, - "Type": { "cn": "Type", "en": "Type"}, - "URL or file path:": { "cn": "URL or file path", "en": "URL or file path"}, "Uganda": { "cn": "Uganda", "en": "Uganda"}, "Ukraine": { "cn": "Ukraine", "en": "Ukraine"}, "Uncheck All": { "cn": "Uncheck All", "en": "Uncheck All"}, @@ -580,301 +857,25 @@ systemDictionary = { "United Kingdom": { "cn": "United Kingdom", "en": "United Kingdom"}, "United States": { "cn": "United States", "en": "United States"}, "United States minor outlying islands": { "cn": "United States minor outlying islands", "en": "United States minor outlying islands"}, - "Unknown file format!": { "cn": "Unknown file format!", "en": "Unknown file format!"}, "Unsecure_Auth": { "cn": "The password will be sent via unsecure connection. To protect your passwords enable the secure connection (HTTPS)!", "en": "The password will be sent via unsecure connection. To protect your passwords enable the secure connection (HTTPS)!"}, - "Unsupported image format": { "cn": "Unsupported image format", "en": "Unsupported image format"}, - "Update": { "cn": "Update", "en": "Update"}, - "Update objects": { "cn": "Update objects", "en": "Update objects"}, - "Update states": { "cn": "Update states", "en": "Update states"}, - "Updated": { "cn": "Updated", "en": "Updated"}, - "Upgrade all adapters": { "cn": "Upgrade all adapters", "en": "Upgrade all adapters"}, - "Upload": { "cn": "File upload", "en": "File upload"}, - "Upload admin started": { "cn": "Upload of configuration is started", "en": "Upload of configuration is started"}, - "Upload started...": { "cn": "Upload started...", "en": "Upload started..."}, - "Uptime": { "cn": "Uptime", "en": "Uptime"}, - "Uruguay": { "cn": "Uruguay", "en": "Uruguay"}, - "Use Lets Encrypt certificates:": { "cn": "Use Let's Encrypt certificates", "en": "Use Let's Encrypt certificates"}, - "Use this instance for automatic update:": { "cn": "Use this instance for automatic update", "en": "Use this instance for automatic update"}, - "User": { "cn": "User", "en": "User"}, - "User deleted": { "cn": "User deleted", "en": "User deleted"}, - "User does not exist": { "cn": "User does not exist", "en": "User does not exist"}, - "User yet exists": { "cn": "User already exists", "en": "User already exists"}, - "Users": { "cn": "Users", "en": "Users"}, "Uzbekistan": { "cn": "Uzbekistan", "en": "Uzbekistan"}, - "Value": { "cn": "Value", "en": "Value"}, - "Values of %s": { "cn": "Values of %s", "en": "Values of %s"}, "Vanuatu": { "cn": "Vanuatu", "en": "Vanuatu"}, - "Vatican City State": { "cn": "Vatican City State", "en": "Vatican City State"}, "Venezuela": { "cn": "Venezuela", "en": "Venezuela"}, "Vietnam": { "cn": "Vietnam", "en": "Vietnam"}, "Virgin Islands (British)": { "cn": "Virgin Islands (British)", "en": "Virgin Islands (British)"}, "Virgin Islands (U.S.)": { "cn": "Virgin Islands (U.S.)", "en": "Virgin Islands (U.S.)"}, "Wallis and Futuna Islands": { "cn": "Wallis and Futuna Islands", "en": "Wallis and Futuna Islands"}, "Warning!": { "cn": "Warning!", "en": "Warning!"}, - "Wed": { "cn": "Wed", "en": "Wed"}, "Western Sahara": { "cn": "Western Sahara", "en": "Western Sahara"}, - "With": { "cn": "With", "en": "With"}, - "Without": { "cn": "Without", "en": "Without"}, "Yemen": { "cn": "Yemen", "en": "Yemen"}, - "You are going to add new instance: ": { "cn": "You are going to add new instance: ", "en": "You are going to add new instance: "}, - "You can check changelog here": { "cn": "You can check the changelog here", "en": "You can check the changelog here"}, - "You can drag&drop the devices, channels and states to enums": {"cn": "You can drag&drop the devices, channels and states to enums", "en": "You can drag&drop the devices, channels and states to enums"}, - "You can drag&drop users to groups": { "cn": "You can drag&drop users to groups", "en": "You can drag&drop users to groups"}, - "You can't see events via cloud": { "cn": "You can't see events via cloud", "en": "You can't see events via cloud"}, - "Your home": { "cn": "Your home", "en": "Your home"}, "Zaire": { "cn": "Zaire", "en": "Zaire"}, "Zambia": { "cn": "Zambia", "en": "Zambia"}, "Zimbabwe": { "cn": "Zimbabwe", "en": "Zimbabwe"}, - "_All": { "cn": "All", "en": "All"}, - "_Toggle expert mode": { "cn": "Toggle expert mode", "en": "Toggle expert mode"}, - "__different__": { "cn": "different", "en": "different"}, - "a-z": { "cn": "a-z", "en": "a-z"}, - "ack": { "cn": "ack", "en": "ack"}, - "actions": { "cn": "actions", "en": "actions"}, - "active": { "cn": "active", "en": "active"}, - "adapter with updates": { "cn": "adapters with updates", "en": "adapters with updates"}, - "adapters count": { "cn": "adapters count", "en": "adapters count"}, - "add": { "cn": "Add", "en": "Add"}, - "add children": { "cn": "add children", "en": "add children"}, - "add instance": { "cn": "add instance", "en": "add instance"}, - "add repository": { "cn": "add repository", "en": "add repository"}, - "agree": { "cn": "agree", "en": "agree"}, - "alarm_group": { "cn": "Alarm", "en": "Alarm"}, - "alive": { "cn": "alive", "en": "alive"}, - "all": { "cn": "all", "en": "all"}, - "alpha": { "cn": "alpha", "en": "alpha"}, - "array": { "cn": "array", "en": "array"}, - "auto": { "cn": "auto", "en": "auto"}, - "available": { "cn": "available", "en": "available"}, - "beta": { "cn": "beta", "en": "beta"}, - "boolean": { "cn": "boolean", "en": "boolean"}, - "bug": { "cn": "bugtracker", "en": "bugtracker"}, - "cancel": { "cn": "Cancel", "en": "Cancel"}, - "cert_path_note": { "cn": "You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop", "en": "You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop"}, - "certificate": { "cn": "certificate", "en": "certificate"}, - "change view mode": { "cn": "change view mode", "en": "change view mode"}, - "channel": { "cn": "channel", "en": "channel"}, - "clear": { "cn": "clear", "en": "clear"}, - "climate-control_group": { "cn": "Climate Control", "en": "Climate Control"}, - "close on ready": { "cn": "close on ready", "en": "close on ready"}, - "collapse": { "cn": "collapse", "en": "collapse"}, - "collapse all": { "cn": "collapse all", "en": "collapse all"}, - "comma": { "cn": "comma", "en": "comma"}, - "command execution": { "cn": "Command execution", "en": "Command execution"}, - "common": { "cn": "common", "en": "common"}, - "common adapters_group": { "cn": "Common", "en": "Common"}, - "common_color": { "cn": "color", "en": "color"}, - "common_def": { "cn": "default value", "en": "default value"}, - "common_desc": { "cn": "description", "en": "description"}, - "common_icon": { "cn": "icon", "en": "icon"}, - "common_max": { "cn": "max value", "en": "max value"}, - "common_min": { "cn": "minimal value", "en": "minimal value"}, - "common_read": { "cn": "read allowed", "en": "read allowed"}, - "common_role": { "cn": "role", "en": "role"}, - "common_states": { "cn": "predefined values", "en": "predefined values"}, - "common_type": { "cn": "type", "en": "type"}, - "common_unit": { "cn": "measure unit", "en": "measure unit"}, - "common_write": { "cn": "write allowed", "en": "write allowed"}, - "communication_group": { "cn": "Communication", "en": "Communication"}, - "config": { "cn": "Settings", "en": "Settings"}, - "config instance": { "cn": "config instance", "en": "config instance"}, - "confirm password": { "cn": "Confirm password", "en": "Confirm password"}, - "connected": { "cn": "connected", "en": "connected"}, - "copy": { "cn": "copy", "en": "copy"}, - "copy note": { "cn": "Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close.", "en": "Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close."}, - "create operation": { "cn": "create", "en": "create"}, - "custom enum": { "cn": "?ustom enum", "en": "?ustom enum"}, - "custom group": { "cn": "Custom group", "en": "Custom group"}, - "daemon": { "cn": "daemon", "en": "daemon"}, - "date-and-time_group": { "cn": "Date and Time", "en": "Date and Time"}, - "daysShortText": { "cn": "d.", "en": "d."}, - "debug": { "cn": "debug", "en": "debug"}, - "delete": { "cn": "delete", "en": "delete"}, - "delete adapter": { "cn": "delete adapter", "en": "delete adapter"}, - "delete group": { "cn": "delete group", "en": "delete group"}, - "delete instance": { "cn": "delete instance", "en": "delete instance"}, - "delete operation": { "cn": "delete", "en": "delete"}, - "delete script": { "cn": "delete script", "en": "delete script"}, - "delete user": { "cn": "delete user", "en": "delete user"}, - "desc": { "cn": "desc", "en": "desc"}, - "description": { "cn": "Description", "en": "Description"}, - "device": { "cn": "device", "en": "device"}, - "diag-note": { "cn": "We worked hard to create this project. In return we expect from you some usage statistics.
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": "edit", "en": "edit"}, - "edit enum": { "cn": "edit enum", "en": "edit enum"}, - "edit enums": { "cn": "Edit enumerations for", "en": "Edit enumerations for"}, - "edit file": { "cn": "edit file", "en": "edit file"}, - "edit group": { "cn": "edit group", "en": "edit group"}, - "edit instance": { "cn": "edit instance", "en": "edit instance"}, - "edit script": { "cn": "edit script", "en": "edit script"}, - "edit user": { "cn": "edit user", "en": "edit user"}, - "edit value": { "cn": "Edit value", "en": "Edit value"}, - "enabled": { "cn": "enabled", "en": "enabled"}, - "energy_group": { "cn": "Energy", "en": "Energy"}, - "engine": { "cn": "engine", "en": "engine"}, - "engine type": { "cn": "engine type", "en": "engine type"}, - "error": { "cn": "error", "en": "error"}, - "events": { "cn": "events", "en": "events"}, - "execute operation": { "cn": "Execute operation", "en": "Execute operation"}, - "expand": { "cn": "expand", "en": "expand"}, - "expand all": { "cn": "expand all", "en": "expand all"}, - "extended": { "cn": "extended", "en": "extended"}, - "false": { "cn": "false", "en": "false"}, - "file permissions": { "cn": "File permissions", "en": "File permissions"}, - "from": { "cn": "from", "en": "from"}, - "garden_group": { "cn": "Garden", "en": "Garden"}, - "general_group": { "cn": "General", "en": "General"}, - "geoposition_group": { "cn": "Geo position", "en": "Geo position"}, - "groups": { "cn": "groups", "en": "groups"}, - "hardware_group": { "cn": "Hardware", "en": "Hardware"}, - "history": { "cn": "history", "en": "history"}, - "history data": { "cn": "history data", "en": "history data"}, - "host": { "cn": "host", "en": "host"}, - "household_group": { "cn": "Household", "en": "Household"}, - "http operation": { "cn": "http", "en": "http"}, - "id": { "cn": "ID", "en": "ID"}, - "info": { "cn": "info", "en": "info"}, - "infrastructure_group": { "cn": "Infrastructure", "en": "Infrastructure"}, - "install": { "cn": "install", "en": "install"}, - "install specific version": { "cn": "Install a specific version", "en": "Install a specific version"}, - "installed": { "cn": "installed", "en": "installed"}, - "installed adapters": { "cn": "Filter adapters with existing instances", "en": "Filter adapters with existing instances"}, - "instance": { "cn": "instance", "en": "instance"}, - "instance number": { "cn": "Desired instance number", "en": "Desired instance number"}, - "yunkong2 Enums": { "cn": "yunkong2 enums", "en": "yunkong2 enums"}, - "yunkong2 States": { "cn": "yunkong2 states", "en": "yunkong2 states"}, - "yunkong2 adapter instances": { "cn": "yunkong2 adapter instances", "en": "yunkong2 adapter instances"}, - "yunkong2 adapter scripts": { "cn": "yunkong2 adapter scripts", "en": "yunkong2 adapter scripts"}, - "yunkong2 adapters": { "cn": "yunkong2 adapters", "en": "yunkong2 adapters"}, - "yunkong2 certificates": { "cn": "yunkong2 certificates", "en": "yunkong2 certificates"}, - "yunkong2 groups": { "cn": "yunkong2 groups", "en": "yunkong2 groups"}, - "yunkong2 hosts": { "cn": "yunkong2 hosts", "en": "yunkong2 hosts"}, - "yunkong2 repositories": { "cn": "yunkong2 repositories", "en": "yunkong2 repositories"}, - "yunkong2 users": { "cn": "yunkong2 users", "en": "yunkong2 users"}, - "iot-system_group": { "cn": "IoT systems", "en": "IoT systems"}, - "iot-systems_group": { "cn": "IoT Systems", "en": "IoT Systems"}, - "keywords": { "cn": "keywords", "en": "keywords"}, - "lc": { "cn": "Last change", "en": "Last change"}, - "less": { "cn": "less", "en": "less"}, - "letsnecrypt_help": { "cn": "This are settings for Let's Encrypt account. To get the free certificates for your domain. You can read more 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": "license", "en": "license"}, - "license agreement": { "cn": "license agreement", "en": "license agreement"}, - "license not agree": { "cn": "Do not agree with the license!", "en": "Do not agree with the license!"}, - "license_checkbox": { "cn": "I agree with the collection of anonymous statistics.
(This can be disabled in settings)", "en": "I agree with the collection of anonymous statistics.
(This can be disabled in settings)"}, - "lighting_group": { "cn": "Lighting", "en": "Lighting"}, - "link": { "cn": "link", "en": "link"}, - "list": { "cn": "list", "en": "list"}, - "list operation": { "cn": "list elements", "en": "list elements"}, - "logic_group": { "cn": "Logic", "en": "Logic"}, - "loglevel": { "cn": "loglevel", "en": "loglevel"}, - "media_group": { "cn": "Media", "en": "Media"}, - "members": { "cn": "members", "en": "members"}, - "memlimit": { "cn": "RAM limit", "en": "RAM limit"}, - "message": { "cn": "message", "en": "message"}, - "messaging_group": { "cn": "Messaging", "en": "Messaging"}, - "misc-data_group": { "cn": "Misc. data", "en": "Misc. data"}, - "mixed": { "cn": "mixed", "en": "mixed"}, - "mode": { "cn": "mode", "en": "mode"}, - "more": { "cn": "more", "en": "more"}, - "multi": { "cn": "multistate", "en": "multistate"}, - "multimedia_group": { "cn": "Multimedia", "en": "Multimedia"}, - "name": { "cn": "name", "en": "name"}, - "native": { "cn": "native", "en": "native"}, - "network_group": { "cn": "Network", "en": "Network"}, - "new certificate": { "cn": "new certificate", "en": "new certificate"}, - "new group": { "cn": "new group", "en": "new group"}, - "new script": { "cn": "new script", "en": "new script"}, - "new user": { "cn": "new user", "en": "new user"}, - "newObject": { "cn": "New object", "en": "New object"}, - "no-city": { "cn": "no city", "en": "no city"}, - "node-red": { "cn": "node-red", "en": "node-red"}, - "none": { "cn": "none", "en": "none"}, - "normal": { "cn": "normal", "en": "normal"}, - "not ack": { "cn": "not ack", "en": "not ack"}, - "not agree": { "cn": "not agree", "en": "not agree"}, - "npm error": { "cn": "npm error", "en": "npm error"}, - "number": { "cn": "number", "en": "number"}, - "object": { "cn": "object", "en": "object"}, - "object permissions": { "cn": "Object permissions", "en": "Object permissions"}, - "of": { "cn": "of", "en": "of"}, - "ok": { "cn": "Ok", "en": "Ok"}, - "open web page": { "cn": "Open web page of adapter", "en": "Open web page of adapter"}, - "os": { "cn": "operating system", "en": "operating system"}, - "other permissions": { "cn": "Other permissions", "en": "Other permissions"}, - "parent name": { "cn": "parent name", "en": "parent name"}, - "password": { "cn": "Password", "en": "Password"}, - "permissionError": { "cn": "Permission error", "en": "Permission error"}, - "place here": { "cn": "place the files here", "en": "place the files here"}, - "planned": { "cn": "planned", "en": "planned"}, - "platform": { "cn": "platform", "en": "platform"}, - "point": { "cn": "point", "en": "point"}, - "popular": { "cn": "popular", "en": "popular"}, - "process": { "cn": "process", "en": "process"}, - "protocols_group": { "cn": "Protocols", "en": "Protocols"}, - "raw": { "cn": "Raw (experts only)", "en": "Raw (experts only)"}, - "read": { "cn": "read", "en": "read"}, - "read operation": { "cn": "read", "en": "read"}, - "readme": { "cn": "readme", "en": "readme"}, - "reload": { "cn": "reload", "en": "reload"}, - "reload instance": { "cn": "reload instance", "en": "reload instance"}, - "rest": { "cn": "rest (read only)", "en": "rest (read only)"}, - "restart": { "cn": "auto restart", "en": "auto restart"}, - "restart script": { "cn": "restart script", "en": "restart script"}, - "role": { "cn": "role", "en": "role"}, - "save": { "cn": "save", "en": "save"}, - "schedule_group": { "cn": "Schedule", "en": "Schedule"}, - "script_group": { "cn": "Scripts and Logic", "en": "Scripts and Logic"}, - "select member by double click": { "cn": "select member by double clicking", "en": "select member by double clicking"}, - "sendto operation": { "cn": "Send-to operation", "en": "Send-to operation"}, - "service_group": { "cn": "Maintenance", "en": "Maintenance"}, - "severity": { "cn": "severity", "en": "severity"}, "silly": { "cn": "silly", "en": "silly"}, - "stable": { "cn": "stable", "en": "stable"}, - "state": { "cn": "state", "en": "state"}, - "state permissions": { "cn": "State permissions", "en": "State permissions"}, - "storage_group": { "cn": "Storage", "en": "Storage"}, - "string": { "cn": "string", "en": "string"}, - "subscribe": { "cn": "subscribe", "en": "subscribe"}, - "switch": { "cn": "switch", "en": "switch"}, - "terminal": { "cn": "Terminal", "en": "Terminal"}, - "third-party_group": { "cn": "Third party", "en": "Third party"}, - "this adapter does not allow multiple instances": {"cn": "This adapter does not allow multiple instances", "en": "This adapter does not allow multiple instances"}, - "title": { "cn": "title", "en": "title"}, - "today": { "cn": "today", "en": "today"}, - "true": { "cn": "true", "en": "true"}, - "ts": { "cn": "Timestamp", "en": "Timestamp"}, - "type": { "cn": "type", "en": "type"}, - "unit": { "cn": "unit", "en": "unit"}, - "update": { "cn": "update", "en": "update"}, - "update adapter information": { "cn": "update adapter information", "en": "update adapter information"}, - "update-part1": { "cn": "Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:", "en": "Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:"}, - "updated": { "cn": "updated", "en": "updated"}, - "updates": { "cn": "updates", "en": "updates"}, - "upload": { "cn": "Upload", "en": "Upload"}, - "user permissions": { "cn": "user permissions", "en": "user permissions"}, - "users": { "cn": "users", "en": "users"}, - "users permissions": { "cn": "User permissions", "en": "User permissions"}, - "utility_group": { "cn": "Utility", "en": "Utility"}, - "val": { "cn": "val", "en": "val"}, - "value": { "cn": "value", "en": "value"}, - "value.from": { "cn": "Changed from", "en": "Changed from"}, - "value.lc": { "cn": "Last change", "en": "Last change"}, - "value.q": { "cn": "Quality code", "en": "Quality code"}, - "value.ts": { "cn": "Timestamp", "en": "Timestamp"}, - "value.val": { "cn": "value", "en": "value"}, - "version": { "cn": "version", "en": "version"}, - "vis_group": { "cn": "yunkong2.vis", "en": "yunkong2.vis"}, - "visualisation_group": { "cn": "Visualisation", "en": "Visualisation"}, - "visualization-icons_group": { "cn": "Visualization Icons", "en": "Visualization Icons"}, - "visualization-widgets_group": { "cn": "Visualization Widgets", "en": "Visualization Widgets"}, - "visualization_group": { "cn": "Visualisation", "en": "Visualisation"}, - "warn": { "cn": "warn", "en": "warn"}, - "weather_group": { "cn": "Weather", "en": "Weather"}, - "wetty": { "cn": "Wetty", "en": "Wetty"}, - "write": { "cn": "write", "en": "write"}, - "write operation": { "cn": "write", "en": "write"}, - "yesterday": { "cn": "yesterday", "en": "yesterday"}, + "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"}, }; diff --git a/www/index.html b/www/index.html index a61f104..e5baf58 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 +yunkong2.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 9b577a5..4a86795 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;AACA;AACA;AACA;AACA;AACA;AACA;ACpQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACniBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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 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 diff --git a/www/js/app.js b/www/js/app.js index 18d58d6..238030a 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -1,2 +1,2 @@ -"use strict";Array.prototype.remove=function(){for(var e,t,n=arguments,i=n.length;i&&this.length;)for(e=n[--i];-1!==(t=this.indexOf(e));)this.splice(t,1);return this},console.debug||(console.debug=console.log),"undefined"==typeof Number&&(console.log("define Number"),Number=function(e){return parseFloat(e)}),Object.assign||(Object.assign=$.extend);var $iframeDialog=null,configNotSaved=null,showConfig=null,defaults={},customPostInits={},FORBIDDEN_CHARS=/[\]\[*,;'"`<>\\\s?]/g,adapterRedirect=function(e,t){e&&setTimeout(function(){e+=document.location.pathname,e+=document.location.hash,document.location.href=e},t||5e3)},gMain=null;function detectIE(){var e=window.navigator.userAgent,t=e.indexOf("MSIE ");if(0td"),a=H.data[n.key];function s(e){return'
                  '+e+"
                  "}if(a){i.eq(0).css({overflow:"hidden","white-space":"nowrap"});var o=a.desc.indexOf("div>div").css("height: 22px !important"),u(2,a.keywords).attr("title",a.keywords),i.eq(3).html(a.installed),i.eq(4).html(a.version),u(5,a.license),u(6,a.install),H.initButtons(n.key),H.isCollapsed[a.group]&&(H.isCollapsed[a.group]=!1,H.main.saveConfig("adaptersIsCollapsed",JSON.stringify(H.isCollapsed)))}else{i.eq(0).css({"font-weight":"bold"}),i.eq(0).find("img").remove(),i.eq(0).find("span.fancytree-title").attr("style","padding-left: 0px !important");for(var c=0;c'+l+' / '+H.tree[c].children.length+"]",i.eq(1).html(s(''+l+" "+_("of")+' '+H.tree[c].children.length+" "+_("Adapters from this Group installed")));break}}function u(e,t){return i.eq(e).html(s(t))}},gridnav:{autofocusInput:!1,handleCursorKeys:!0},filter:{mode:"hide",autoApply:!0},collapse:function(e,t){H.isCollapsed[t.node.key]||(H.isCollapsed[t.node.key]=!0,H.main.saveConfig("adaptersIsCollapsed",JSON.stringify(H.isCollapsed)))}}),H.$tab.find("#btn_collapse_adapters").show().off("click").on("click",function(){H.$tab.find(".process-adapters").show(),setTimeout(function(){H.$grid.fancytree("getRootNode").visit(function(e){(!H.filterVals.length||e.match||e.subMatch)&&e.setExpanded(!1)}),H.$tab.find(".process-adapters").hide()},100)}),H.$tab.find("#btn_expand_adapters").show().off("click").on("click",function(){H.$tab.find(".process-adapters").show(),setTimeout(function(){H.$grid.fancytree("getRootNode").visit(function(e){(!H.filterVals.length||e.match||e.subMatch)&&e.setExpanded(!0)}),H.$tab.find(".process-adapters").hide()},100)}),H.$tab.find("#btn_list_adapters").show().off("click").on("click",function(){var e=H.$tab.find(".process-adapters");e.show(),H.isList=!H.isList,H.isList?(H.$tab.find("#btn_list_adapters").addClass("red lighten-3"),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide(),$(this).attr("title",_("list"))):(H.$tab.find("#btn_list_adapters").removeClass("red lighten-3"),H.$tab.find("#btn_expand_adapters").show(),H.$tab.find("#btn_collapse_adapters").show(),$(this).attr("title",_("tree"))),H.main.saveConfig("adaptersIsList",H.isList),e.show(),setTimeout(function(){H._postInit(!0),e.hide()},200)})),H.isList?(H.$tab.find("#btn_list_adapters").addClass("red lighten-3").attr("title",_("tree")),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide()):(H.$tab.find("#btn_list_adapters").removeClass("red lighten-3").attr("title",_("list")),H.$tab.find("#btn_expand_adapters").show(),H.$tab.find("#btn_collapse_adapters").show()),H.$tab.find(".filter-input").trigger("change")}function n(){H.$grid.hide(),H.$tiles.show(),H.$tab.find("#main-toolbar-table-types-btn").show(),H.$tab.find("#btn_list_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide(),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find(".filter-input").trigger("change")}function i(){H.onlyUpdatable?(H.$tab.find("#btn_filter_updates").addClass("red lighten-3"),H.$tab.find("#btn_upgrade_all").show()):(H.$tab.find("#btn_upgrade_all").hide(),H.$tab.find("#btn_filter_updates").removeClass("red lighten-3"))}function a(){H.main.config.expertMode?(H.$tab.find("#btn_adapters_expert_mode").addClass("red lighten-3"),H.$tab.find("#btn_upgrade_all").show()):(H.$tab.find("#btn_adapters_expert_mode").removeClass("red lighten-3"),i())}function G(){var t=!1;H.currentFilter?H.$tiles.find(".tile").each(function(){var e=$(this);(!H.currentType||e.hasClass("class-"+H.currentType))&&B({key:e.data("id")})?(t=!0,e.show()):e.hide()}):H.currentType?(H.$tiles.find(".tile").hide(),H.$tiles.find(".class-"+H.currentType).show(),H.$tiles.find(".tile").each(function(){if($(this).is(":visible"))return!(t=!0)})):H.$tiles.find(".tile").show().each(function(){if($(this).is(":visible"))return!(t=!0)}),t?H.$tiles.find(".filtered-out").hide():H.$tiles.find(".filtered-out").show()}function B(e){if(H.currentFilter){if(!H.data[e.key])return!1;var t=H.data[e.key].title;t&&"object"==typeof t&&(t=t[systemLang]||t.en);var n=H.data[e.key].desc;return n&&"object"==typeof n&&(n=n[systemLang]||n.en),!!(H.data[e.key].name&&-1!==H.data[e.key].name.toLowerCase().indexOf(H.currentFilter)||t&&-1!==t.toLowerCase().indexOf(H.currentFilter)||H.data[e.key].keywords&&-1!==H.data[e.key].keywords.toLowerCase().indexOf(H.currentFilter)||n&&-1!==n.toLowerCase().indexOf(H.currentFilter))}return!0}function F(e,t){var n="";if(t.news)for(var i in t.news)if(t.news.hasOwnProperty(i)){if(systemLang===i&&(n+=(n?"\n":"")+t.news[i]),"en"===i||"ru"===i||"de"===i)continue;if(i===e)break;n+=(n?"\n":"")+(t.news[i][systemLang]||t.news[i].en)}return n}function Z(e){if(!e)return"";var t;if(e instanceof Array){t={};for(var n=0;n'),i}this.curRepository=null,this.curRepoLastUpdate=null,this.curInstalled=null,this.curRepoLastHost=null,this.list=[],this.$tab=$("#tab-adapters"),this.$grid=this.$tab.find("#grid-adapters"),this.$tiles=this.$tab.find("#grid-adapters-tiles"),this.$installDialog=$("#dialog-install-url"),this.main=e,this.tree=[],this.data={},this.urls={},this.groupImages={"common adapters_group":"img/common.png",general_group:"img/common.png",hardware_group:"img/hardware.png",lighting_group:"img/hardware.png",energy_group:"img/hardware.png",household_group:"img/hardware.png","iot-systems_group":"img/hardware.png","climate-control_group":"img/hardware.png",infrastructure_group:"img/hardware.png",garden_group:"img/hardware.png",alarm_group:"img/hardware.png",script_group:"img/script.png",logic_group:"img/script.png",media_group:"img/media.png",multimedia_group:"img/media.png",communication_group:"img/communication.png",protocols_group:"img/communication.png",network_group:"img/communication.png",messaging_group:"img/communication.png",visualisation_group:"img/visualisation.png",visualization_group:"img/visualisation.png","visualization-icons_group":"img/visualisation.png","visualization-widgets_group":"img/visualisation.png",storage_group:"img/storage.png",weather_group:"img/weather.png",schedule_group:"img/schedule.png",vis_group:"img/vis.png","date-and-time_group":"img/service.png",geoposition_group:"img/service.png",utility_group:"img/service.png","misc-data_group":"img/service.png",service_group:"img/service.png","third-party_group":"img/service.png"},this.inited=!1,this.isList=!1,this.filterVals={length:0},this.onlyInstalled=!1,this.onlyUpdatable=!1,this.currentFilter="",this.currentType="",this.isCollapsed={},this.isTiles=!0,this.types={occ:"schedule"},this.prepare=function(){this.$tab.find("#btn_switch_adapters").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.isTiles=!H.isTiles,H.isTiles?(H.$tab.removeClass("view-table").addClass("view-tiles"),$(this).find("i").text("view_list")):($(this).find("i").text("view_module"),H.$tab.removeClass("view-tiles").addClass("view-table")),H.main.saveConfig("adaptersIsTiles",H.isTiles),setTimeout(function(){H.isTiles?n():t(),H._postInit(!0),H.$tab.find(".process-adapters").hide()},50)}),this.$tab.find("#btn_filter_adapters").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.onlyInstalled=!H.onlyInstalled,H.onlyInstalled?H.$tab.find("#btn_filter_adapters").addClass("red lighten-3"):H.$tab.find("#btn_filter_adapters").removeClass("red lighten-3"),H.main.saveConfig("adaptersOnlyInstalled",H.onlyInstalled),setTimeout(function(){H._postInit(!0),H.$tab.find(".process-adapters").hide()},50)}),this.$tab.find("#btn_filter_updates").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.onlyUpdatable=!H.onlyUpdatable,i(),H.main.saveConfig("adaptersOnlyUpdatable",H.onlyUpdatable),setTimeout(function(){H._postInit(!0),H.$tab.find(".process-adapters").hide()},200)}),this.$tab.find("#btn_filter_custom_url").off("click").on("click",function(){var e,t='",n=[];for(e in H.urls)H.urls.hasOwnProperty(e)&&n.push(e);n.sort();for(var i=0;i'+n[i]+"")}H.$installDialog.find("#install-github-link").html(t).val(H.main.config.adaptersGithub||""),H.$installDialog.modal(),H.$installDialog.find(".btn-install").off("click").on("click",function(){var e,t,n;if(!H.$installDialog.find('a[href="#tabs-install-github"]').hasClass("active"))e=H.$installDialog.find("#install-url-link").val(),t=H.$installDialog.find("#install-url-debug").prop("checked")?" --debug":"",n="";else{var i=H.$installDialog.find("#install-github-link").val().split(" ");e=i[0],t=H.$installDialog.find("#install-github-debug").prop("checked")?" --debug":"",n=" "+i[1]}e?H.main.cmdExec(null,'url "'+e+'"'+n+t,function(e){e||H.init(!0,!0)}):H.main.showError(_("Invalid link"))}),H.$installDialog.find("#install-github-link").select(),H.$installDialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),H.$installDialog.modal("open"),H.$installDialog.find(".tabs").mtabs({nShow:function(e){e&&H.main.saveConfig("adaptersInstallTab",$(e).attr("id"))}}),H.main.config.adaptersInstallTab&&!H.main.noSelect&&H.$installDialog.find(".tabs").mtabs("select",H.main.config.adaptersInstallTab)}),this.$tab.find("#btn_upgrade_all").off("click").on("click",function(){H.main.confirmMessage(_("Do you want to upgrade all adapters?"),_("Please confirm"),"help",function(e){e&&H.main.cmdExec(null,"upgrade",function(e){e||H._postInit(!0)})})}),this.$tab.find("#btn_adapters_expert_mode").on("click",function(){H.main.config.expertMode=!H.main.config.expertMode,H.main.saveConfig("expertMode",H.main.config.expertMode),H.updateExpertMode(),H.main.tabs.instances.updateExpertMode()}),H.main.config.expertMode&&H.$tab.find("#btn_adapters_expert_mode").addClass("red lighten-3"),this.$installDialog.find("#install-github-link").on("change",function(){H.main.saveConfig("adaptersGithub",$(this).val())}),this.$installDialog.find("#install-url-link").on("keyup",function(e){13===e.which&&H.$installDialog.find("#dialog-install-url-button").trigger("click")}),this.isTiles=void 0===this.main.config.adaptersIsTiles||null===this.main.config.adaptersIsTiles||this.main.config.adaptersIsTiles,this.isList=this.main.config.adaptersIsList||!1,this.onlyInstalled=this.main.config.adaptersOnlyInstalled||!1,this.onlyUpdatable=this.main.config.adaptersOnlyUpdatable||!1,this.currentFilter=this.main.config.adaptersCurrentFilter||"",this.currentType=this.main.config.adaptersCurrentType||"",this.currentOrder=this.main.config.adaptersCurrentOrder||"a-z",this.isCollapsed=this.main.config.adaptersIsCollapsed?JSON.parse(this.main.config.adaptersIsCollapsed):{},this.currentFilter?(this.$tab.find(".filter-input").addClass("input-not-empty").val(H.currentFilter),this.$tab.find(".filter-clear").show()):this.$tab.find(".filter-clear").hide(),this.onlyInstalled?this.$tab.find("#btn_filter_adapters").addClass("red lighten-3"):this.$tab.find("#btn_filter_adapters").removeClass("red lighten-3"),this.onlyUpdatable?this.$tab.find("#btn_filter_updates").addClass("red lighten-3"):this.$tab.find("#btn_filter_updates").removeClass("red lighten-3"),"ie"===this.main.browser&&this.main.browserVersion<=10&&(this.isTiles=!1,this.$tab.find("#btn_switch_adapters").hide()),a(),this.$tab.find("#btn_refresh_adapters").on("click",function(){H.init(!0,!0)}),this.$tab.find(".filter-input").on("keyup",function(){$(this).trigger("change")}).on("change",function(e){H.filterTimer&&clearTimeout(H.filterTimer),H.filterTimer=setTimeout(function(){H.filterTimer=null,H.currentFilter=H.$tab.find(".filter-input").val().toLowerCase(),e&&e.target&&$(e.target)[H.currentFilter?"addClass":"removeClass"]("input-not-empty"),H.currentFilter?H.$tab.find(".filter-clear").show():H.$tab.find(".filter-clear").hide(),H.main.saveConfig("adaptersCurrentFilter",H.currentFilter),H.isTiles?G():H.$grid.fancytree("getTree").filterNodes(B,!1)},400)}),this.$tab.find(".filter-clear").on("click",function(){H.$tab.find(".filter-input").val("").trigger("change")}),this.isTiles?(this.$tab.find("#btn_switch_adapters").find("i").text("view_list"),H.$tab.removeClass("view-table").addClass("view-tiles"),n()):(H.$tab.removeClass("view-tiles").addClass("view-table"),t())},this.updateExpertMode=function(){this.init(!0),a()},this.getAdaptersInfo=function(e,t,n,i){if(e){if(!i)throw"Callback cannot be null or undefined";t&&(!this.curRepoLastUpdate||1e3<(new Date).getTime()-this.curRepoLastUpdate)&&(this.curRepository=null,this.curInstalled=null),this.curRunning?this.curRunning.push(i):(this.curRepository&&this.curRepoLastHost===e||(this.curRepository=null,this.main.socket.emit("sendToHost",e,"getRepository",{repo:this.main.systemConfig.common.activeRepo,update:n},function(e){"permissionError"===e&&(console.error('May not read "getRepository"'),e={}),H.curRepository=e||{},H.curRepository&&H.curInstalled&&H.curRunning&&(H.curRepoLastUpdate=(new Date).getTime(),setTimeout(function(){for(var e=0;e'+e+'',t&&(e+=''),e+=""}c.sort(),H.tree=[],H.data={};for(var m=0;m';for(var w=0;w',b!==p&&(g+=''+p+"",b&&(g+=" ~ ")),b&&(g+=''+b+""),g+=""):g+='',g+=''+n.version+"",h=''+n.version+"",g+="",!y&&H.onlyUpdatable)continue}i=u(a=i,y,M,v);var j=(n.type||H.types[o]||"common adapters")+"_group";C=(C="object"==typeof n.desc?n.desc[systemLang]||n.desc.en:n.desc)||"",C+=W(j,o,H.main.states["system.adapter."+o+".upload"]?H.main.states["system.adapter."+o+".upload"].val:0);var N=n.titleLang||n.title;if(N="object"==typeof N?N[systemLang]||N.en:N,H.data[o]={image:f?'':"",icon:f||"",stat:e[o]?e[o].stat:0,name:o,title:(N||"").replace("yunkong2 Visualisation - ",""),desc:C,news:M,updatableError:v,keywords:n.keywords?n.keywords.join(" "):"",version:i,installed:g,rawVersion:a,instances:p,rawInstalled:h,versionDate:n.versionDate,updatable:y,bold:n.highlight||!1,install:''+(H.main.config.expertMode?'':"")+"'+(H.main.config.expertMode?'':""),group:j,license:n.license||"",licenseUrl:n.licenseUrl||""},n.type||console.log('"'+o+'": "common adapters",'),n.type&&H.types[o]&&console.log('Adapter "'+o+'" has own type. Remove from admin.'),H.isList)H.tree.push({icon:f,title:H.data[o].title||o,key:o});else{for(var L=-1,T=0;T':"",icon:n.extIcon,stat:n.stat,name:o,title:(N||"").replace("yunkong2 Visualisation - ",""),desc:C,keywords:n.keywords?n.keywords.join(" "):"",rawVersion:a,version:i,bold:n.highlight,installed:"",versionDate:n.versionDate,install:''+(H.main.config.expertMode?'':""),license:n.license||"",licenseUrl:n.licenseUrl||"",group:j},n.type||console.log('"'+o+'": "common adapters",'),n.type&&H.types[o]&&console.log('Adapter "'+o+'" has own type. Remove from admin.'),H.isList)H.tree.push({icon:n.extIcon,title:H.data[o].title||o,key:o});else{for(var D=-1,I=0;IH.data[t].stat?-1:H.data[e].statH.data[t].versionDate?-1:H.data[e].versionDate',z+='
                  ',z+='
                  ',z+='
                  ',z+=' ',z+=' '+x.title+"",z+=' more_vert',z+='
                    ',z+="
                  • "+d["Available version:"]+' "+x.rawVersion+""+(x.updatable?'':"")+"
                  • ",x.installed&&(z+="
                  • "+d["Installed version"]+': '+x.rawInstalled+"
                  • "),x.instances&&(z+="
                  • "+_("Installed instances")+': '+x.instances+"
                  • "),z+="
                  ",z+="
                  ",z+=' ',z+='
                  ',z+=' close',z+="

                  "+x.desc+"

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

                    "+g.list[l]+"


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

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

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

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

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

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

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

                  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
                  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
                  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                  '},addAll2FilterCombobox=!1;function IobListHeader(e,h){if(!(this instanceof IobListHeader))return new IobListHeader(e,h);var f,a,p;void 0===h&&(h={}),void 0===h.colWidthOffset&&(h.colWidthOffset=0),"TABLE"===(p="object"==typeof e?$(e):$("#"+e))[0].tagName&&(p=p.find("tr:first")),e=p[0];var n,b=this;b.selectIdOffset=[],p.html(""),this.setList=function(e){var t;(t="string"==typeof e?("#"!==e[0]&&(e="#"+e),$(e)):e)&&t.length&&("TD"!==t[0].tagName&&"TH"!==t[0].tagName&&((t=t.find(">thead>tr:first>th,>thead>tr:first>td")).length||(t=e.find(">tbody>tr:first>th,>tr:first>th,>tbody>tr:first>td, >tr:first>td"))),a=t)},h.list&&this.setList(h.list),this.syncHeader=function(){if("object"==typeof a){var e=function(){a.each(function(e,t){if(!(e>=a.length-1)){var n=$(t).width(),i=b.selectIdOffset[e]||0;n+i&&$(f[e]).width(Math.round(n+i))}}),a.length&&!b.selectIdOffset.length&&(b.selectIdOffset[0]=0,a.each(function(e,t){var n=$(a[e]).offset().left;n&&(b.selectIdOffset[e]=n-$(f[e]).offset().left)}),e())};e()}},$(window).on("resize",function(e,t){n&&clearTimeout(n),n=setTimeout(b.syncHeader.bind(b),100)}),this.doFilter=function(){},b.ids=[],b.add=function(t,m,e,n){void 0===e&&(e=m);var i,a,s=!(i=e)||a&&"#"===i[0]?i:(h.prefix&&i.substr(0,h.prefix.length)!==h.prefix&&(i=h.prefix+"-"+i),(a?"#":"")+i);m=_(m);var o="";switch(t){case"combobox":o=' ';break;case"edit":o=' ';break;case"text":o=''+m+""}p.append(""+o+"");var r="#"+s,g=$(r),c=b[e]={$filter:g,val:g.val.bind(g),selectedVal:g.val()||""};if(b.ids.push(e),"combobox"===t&&(c.options=[],c.checkAddOption=function(e,t,n){if(-1===this.options.indexOf(e)){this.options.push(e),this.options.sort();for(var i,a,s=g.val(),o=n?"":(i=m,a=s,addAll2FilterCombobox&&(i=i?_(i)+" ("+_("all")+")":_("all")),'"),r=0,c=this.options.length;r"+t+""}},n))for(var l=0;lclose'),g.on("change",function(e){d&&clearTimeout(d),c.selectedVal=g.val(),d=setTimeout(b.doFilter,"combobox"!==t?400:0),c.selectedVal?g.parent().addClass("filter-active"):g.parent().removeClass("filter-active")}).on("keyup",function(e){13===e.which?b.doFilter():g.trigger("change")}),f=p.find(">th"),c}}function values2table(r,c,e){"object"==typeof r&&(e=c,c=r,r="");var l=e&&e.maxRaw||null,d=e&&e.onChange||null,u=e&&e.onReady||null;c=c||[];var o,s=[],m=(o=r?$("#"+r):$("body")).find(".table-button-add");if(m.data("raw",c.length),l&&m.data("maxRaw",l),m.data("inited")||(m.data("inited",!0),m.on("click",function(){if(!m.data("maxRaw")||m.data("raw")';for(var a=0;a';else if("select"===s[a].type.substring(0,6)){f+=("multiple"===s[a].type.substring(7,16)?'"}else f+='';if(g[a]){p="text-align: center; "+(g[a].style||"")+(g[a].tdstyle||"");for(var v=0;v':f+='';g[a].class&&(t+=' class="'+g[a].class+'" ')}p.length||b.length?t+=' style="'+p+b+'">'+f+"":t+=">"+f+""}t+=""}var w=h.find(".table-lines");w.length||(h.append(''),w=h.find(".table-lines")),w.html(t),w.find(".values-input").each(function(){var e=$(this),t=e.attr("type"),n=e.data("name"),i=e.data("index");e.data("old-value",c[i][n]),"checkbox"===t?e.prop("checked",c[i][n]):e.val(c[i][n])}),w.find("a[data-command]").each(function(){var e=$(this).data("command");"delete"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),d&&d(),setTimeout(function(){"function"==typeof tableEvents&&tableEvents(e,t,"delete"),values2table(r,c,d,u,l)},100),m.data("maxRaw")&&m.data("raw",m.data("raw")-1)}).addClass("red").find(".material-icons").html("delete"):"up"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),c.splice(e-1,0,t),d&&d(),setTimeout(function(){values2table(e,c,d,u,l)},100)}).find("i").html("arrow_upward"):"down"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),c.splice(e+1,0,t),d&&d(),setTimeout(function(){values2table(e,c,d,u,l)},100)}).find("i").html("arrow_downward"):"pair"===e?$(this).on("click",function(){if("function"==typeof tableEvents){var e=$(this).data("index"),t=c[e];tableEvents(e,t,"pair")}}).attr("title",_("pair")).find("i").html("insert_link"):"unpair"===e&&$(this).on("click",function(){if("function"==typeof tableEvents){var e=$(this).data("index"),t=c[e];tableEvents(e,t,"unpair")}}).attr("title",_("unpair")).find("i").html("not_interested")}),w.find(".values-input").on("change.adaptersettings",function(){var e=$(this).data("index"),t=$(this).data("name");"checkbox"===$(this).attr("type")?($(this).prop("checked").toString()!==$(this).data("old-value")&&d&&d(t,e),c[e][t]=$(this).prop("checked")):($(this).val()!==$(this).data("old-value")&&d&&d(t,e),c[e][t]=$(this).val())}).on("keyup",function(){$(this).trigger("change.adaptersettings")})}"function"==typeof u&&u()}function table2values(e){var t;t=e?$("#"+e):$("body");var n=[];t.find(".table-values th").each(function(){var e=$(this).data("name");e?n.push(e):n.push("___ignore___")});var i=[],a=0;return t.find(".table-lines tr").each(function(){i[a]={},$(this).find("td").each(function(){var e=$(this).find("input");if(e.length){var t=e.data("name");"checkbox"===e.attr("type")?i[a][t]=e.prop("checked"):i[a][t]=e.val()}var n=$(this).find("select");if(n.length){t=n.data("name");i[a][t]=n.val()||""}}),a++}),i}var systemLang="en",systemDictionary={};function translateWord(e,t,n){if(!e)return"";if(t=t||systemLang,(n=n||systemDictionary)[e=e.toString()]){var i=n[e][t];if(i)return i;if("en"!==t&&(i=n[e].en))return i}else"string"!=typeof e||e.match(/_tooltip$/)?"string"!=typeof e&&console.warn("Trying to translate non-text:"+e):console.log('"'+e+'": {"en": "'+e+'", "de": "'+e+'", "ru": "'+e+'", "pt": "'+e+'", "nl": "'+e+'", "fr": "'+e+'", "es": "'+e+'", "pl": "'+e+'", "it": "'+e+'"},');return e}function translateAll(e,i,a){i=i||systemLang,a=a||systemDictionary,e||(e="body");var t=$(e);t.find(".translate").each(function(e){var t=$(this).attr("data-lang");t||(t=$(this).html(),$(this).attr("data-lang",t));var n=translateWord(t,i,a);n&&$(this).html(n)}),t.find(".translateV").each(function(e){var t=$(this).attr("data-lang-value");t||(t=$(this).attr("value"),$(this).attr("data-lang-value",t));var n=translateWord(t,i,a);n&&$(this).attr("value",n)}),t.find(".translateT").each(function(e){var t=$(this).attr("data-lang-title");t||(t=$(this).attr("title"),$(this).attr("data-lang-title",t));var n=translateWord(t,i,a);n&&$(this).attr("title",n)}),t.find(".translateP").each(function(e){var t=$(this).attr("data-lang-placeholder");t||(t=$(this).attr("placeholder"),$(this).attr("data-lang-placeholder",t));var n=translateWord(t,i,a);n&&$(this).attr("placeholder",n)})}function translateName(e){return e&&"object"==typeof e?e[systemLang]||e.en:e}var _=function(e,t,n,i){var a=(e=translateWord(e)).indexOf("%s");return-1===a||-1===(a=(e=e.replace("%s",t)).indexOf("%s"))||-1!==(a=(e=e.replace("%s",n)).indexOf("%s"))&&(e=e.replace("%s",i)),e};!function(X){if(!X.fn.treeTable){var t={init:function(e){e.imgPath=e.imgPath||"lib/css/fancytree/";for(var t=0;t';n+='
                    ';for(var i=e.rows,a=0;a'+(d?"":'')+''+l+""}n+="
                  ";var u=X(this),m=X(n);u.find(".treetablelist-buttons").remove(),u.find(".treetable-list").remove(),u.find(".tree-table-buttons").remove(),u.find(".tree-table-main").remove(),u.prepend(m);var g=X(m).find(".treetablelist-buttons"),h=X(m).find(".treetable-list");h.sortable({cancel:".treetable-list-folder",axis:"y"}).data("options",e);var f=this;g.find(".treetable-list-btn-ok").button({icons:{primary:"ui-icon-check"},text:!1}).css({width:24,height:24}).on("click",function(){var i="",a=[];h.find("li").each(function(){var e=X(this).data("id");if(X(this).hasClass("treetable-list-folder"))i=e;else{var t=e.split("."),n=t.pop();t.join(".")!==i&&a.push({oldId:e,newId:i+"."+n})}}),function t(n,i,a){if(i&&i.length){var e=i.shift();n.moveId&&n.moveId(e.oldId,e.newId,function(e){setTimeout(function(){t(n,i,a)},50)})}else a&&a()}(e,a,function(){p.call(f,e)})}),g.find(".treetable-list-btn-cancel").button({icons:{primary:"ui-icon-cancel"},text:!1}).css({width:24,height:24}).on("click",function(){p.call(f,e)})}function ne(e,t,n){var i="",a="",s=e&&e.common;if(s)if(s.icon){if(s.icon.match(/^data:image\//))i=s.icon;else{if(-1===s.icon.indexOf("."))return''+s.icon+"";var o;i="instance"===e.type?"/adapter/"+e.common.name+"/"+e.common.icon:e._id.match(/^system\.adapter\./)?(o=e._id.split(".",3),"/"===e.common.icon[0]?o[2]+=e.common.icon:o[2]+="/"+e.common.icon,"/adapter/"+o[2]):(o=e._id.split(".",2),"/"===e.common.icon[0]?o[0]+=e.common.icon:o[0]+="/"+e.common.icon,"/adapter/"+o[0])}a=e.type}else t=t||"lib/css/fancytree/","device"===e.type?(i=t+"device.png",a="device"):"channel"===e.type?(i=t+"channel.png",a="channel"):"state"===e.type&&(i=t+"state.png",a="state");return i?''+a+'':""}function p(i){var e="",t=window.M&&window.M.toast?"a":"button";if(i.panelButtons){e+='
                  ';for(var n=0;n",window.M&&window.M.toast&&(e+=''+(i.panelButtons[n].icon||"")+""),e+="";i.moveId&&(e+="<"+t+' class="btn-floating waves-effect waves-light blue treetable-sort" title="'+_("reorder")+'">',window.M&&window.M.toast&&(e+='import_export'),e+=""),e+="
                  "}e+='
                  ',e+=" ",e+=' ';for(var a=0;a",e+=' ',e+=' ',e+=" "):e+=" "+_(i.columns[a])+"";i.buttons&&(e+=" "),e+=" ",e+="",e+="";var s=[],o=i.root?new RegExp("^"+i.root.replace(/\./g,"\\.")+"\\."):null,r=-1!==i.columns.indexOf("instance")?[]:null;for(var c in i.objects){var l;if(i.objects.hasOwnProperty(c))if(r&&"instance"===i.objects[c].type&&(l=c.match(/^system\.adapter\.javascript\.(\d+)$/))&&r.push(l[1]),!o||o.test(c)){var d=i.objects[c].common,u={id:c,parent:null,_class:"treetable-"+i.objects[c].type};"channel"===i.objects[c].type&&(u.folder=!0);for(var m=0;mt.id?1:e.id',s[O].children&&s[O].children.length&&(e+=''+s[O].children.length+"")):e+='"}if(i.buttons){e+='"}e+=""}e+="";var P=X(this),H=X(e);P.find("span:first-child").remove(),P.find(".treetablelist-buttons").remove(),P.find(".treetable-list").remove(),P.find(".tree-table-buttons").remove(),P.find(".tree-table-main").remove(),P.prepend(H),i.rows=s;var G=X(H[1]).find(">table"),B=X(H[0]);G.data("options",i),G.treetable({expandable:!0,clickableNodeNames:!0,expanderTemplate:"",indenterTemplate:'',onNodeExpand:q,onNodeCollapse:ee,stringCollapse:_("collapse"),stringExpand:_("expand")});var F=G.find("tbody");if(F.on("click","tr",function(){X(".selected").not(this).removeClass("selected"),X(this).addClass("selected");var e=X(this).parent().parent().data("options"),t=X(this).data("tt-id");e.onChange&&e.onChange(X(this).data("tt-id"),e.oldId),e.oldId=t}),i.buttons)for(var Z=0;Z"%s"?',en:'Are you sure to delete "%s"?'},'Are you sure to delete all children of %s?':{cn:'Are you sure to delete all children of %s?',en:'Are you sure to delete all children of %s?'},"Are you sure to delete all children of %s?":{cn:'Are you sure to delete "%s" and all children?',en:'Are you sure to delete "%s" and all children?'},"Are you sure to delete script %s?":{cn:"Are you sure to delete script '%s'?",en:"Are you sure to delete script '%s'?"},"Are you sure you want to delete adapter %s?":{cn:"Are you sure you want to delete adapter %s?",en:"Are you sure you want to delete adapter %s?"},"Are you sure you want to delete the instance %s?":{cn:"Are you sure you want to delete the instance %s?",en:"Are you sure you want to delete the instance %s?"},"Are you sure?":{cn:"Are you sure?",en:"Are you sure?"},"Are you sure? Changes are not saved.":{cn:"Are you sure? Changes are not saved.",en:"Are you sure? Changes are not saved."},Argentina:{cn:"Argentina",en:"Argentina"},Armenia:{cn:"Armenia",en:"Armenia"},Aruba:{cn:"Aruba",en:"Aruba"},Aug:{cn:"Aug",en:"Aug"},August:{cn:"August",en:"August"},Australia:{cn:"Australia",en:"Australia"},Austria:{cn:"Austria",en:"Austria"},"Authentication was deactivated":{cn:"Authentication was deactivated",en:"Authentication was deactivated"},Available:{cn:"Available",en:"Available"},"Available version:":{cn:"Available version",en:"Available version"},Azerbaijan:{cn:"Azerbaijan",en:"Azerbaijan"},Background:{cn:"Background",en:"Background"},"Background color of the login screen":{cn:"Background color of the login screen",en:"Background color of the login screen"},"Background image":{cn:"Background image",en:"Background image"},Bahamas:{cn:"Bahamas",en:"Bahamas"},Bahrain:{cn:"Bahrain",en:"Bahrain"},Bangladesh:{cn:"Bangladesh",en:"Bangladesh"},Barbados:{cn:"Barbados",en:"Barbados"},Belarus:{cn:"Belarus",en:"Belarus"},Belgium:{cn:"Belgium",en:"Belgium"},Belize:{cn:"Belize",en:"Belize"},Benin:{cn:"Benin",en:"Benin"},Bermuda:{cn:"Bermuda",en:"Bermuda"},Bhutan:{cn:"Bhutan",en:"Bhutan"},Bolivia:{cn:"Bolivia",en:"Bolivia"},"Bosnia and Herzegovina":{cn:"Bosnia and Herzegovina",en:"Bosnia and Herzegovina"},Botswana:{cn:"Botswana",en:"Botswana"},"Bouvet Island":{cn:"Bouvet Island",en:"Bouvet Island"},Brazil:{cn:"Brazil",en:"Brazil"},"British Indian Ocean Territory":{cn:"British Indian Ocean Territory",en:"British Indian Ocean Territory"},"Brunei Darussalam":{cn:"Brunei Darussalam",en:"Brunei Darussalam"},Bulgaria:{cn:"Bulgaria",en:"Bulgaria"},"Burkina Faso":{cn:"Burkina Faso",en:"Burkina Faso"},Burundi:{cn:"Burundi",en:"Burundi"},CPUs:{cn:"CPUs",en:"CPUs"},Calendar:{cn:"Calendar",en:"Calendar"},Cambodia:{cn:"Cambodia",en:"Cambodia"},Cameroon:{cn:"Cameroon",en:"Cameroon"},Canada:{cn:"Canada",en:"Canada"},Cancel:{cn:"Cancel",en:"Cancel"},"Cannot create user: ":{cn:"Cannot create user: ",en:"Cannot create user: "},"Cannot delete user: ":{cn:"Cannot delete user: ",en:"Cannot delete user: "},"Cannot disable admin!":{cn:"Cannot disable admin!",en:"Cannot disable admin!"},"Cannot read file!":{cn:"Cannot read file!",en:"Cannot read file!"},"Cannot read version from NPM":{cn:"Could not read version from NPM",en:"Could not read version from NPM"},"Cannot set password: ":{cn:"Cannot set password: ",en:"Cannot set password: "},"Cape Verde":{cn:"Cape Verde",en:"Cape Verde"},"Cayman Islands":{cn:"Cayman Islands",en:"Cayman Islands"},"Central African Republic":{cn:"Central African Republic",en:"Central African Republic"},Certificates:{cn:"Certificates",en:"Certificates"},Chad:{cn:"Chad",en:"Chad"},Change:{cn:"Change",en:"Change"},Changelog:{cn:"Change log",en:"Change log"},Channel:{cn:"Channel",en:"Channel"},Chart:{cn:"Chart",en:"Chart"},"Chart for %s":{cn:"Chart for %s",en:"Chart for %s"},"Check all":{cn:"Check all",en:"Check all"},Chile:{cn:"Chile",en:"Chile"},China:{cn:"China",en:"China"},"Christmas Island":{cn:"Christmas Island",en:"Christmas Island"},"City:":{cn:"City",en:"City"},Clear:{cn:"Clear",en:"Clear"},"Clear list":{cn:"Clear list",en:"Clear list"},"Clear log":{cn:"Clear log",en:"Clear log"},"Clear on disk permanent":{cn:"Clear on disk permanent",en:"Clear on disk permanent"},"Click do activate events again, or just wait one minute":{cn:"Click do activate events again, or just wait one minute",en:"Click do activate events again, or just wait one minute"},"Click on icon":{cn:"Click on icon to open a link",en:"Click on icon to open a link"},Close:{cn:"close",en:"close"},"Cocos Islands":{cn:"Cocos Islands",en:"Cocos Islands"},"Collapse all nodes":{cn:"Collapse all nodes",en:"Collapse all nodes"},Colombia:{cn:"Colombia",en:"Colombia"},Color:{cn:"Color",en:"Color"},Comoros:{cn:"Comoros",en:"Comoros"},"Configuration not saved.":{cn:"Configuration not saved.",en:"Configuration not saved."},Congo:{cn:"Congo",en:"Congo"},"Connected to %s: ":{cn:"Connected to %s: ",en:"Connected to %s: "},"Connected to host: ":{cn:"Connected to host: ",en:"Connected to host: "},"Cook Islands":{cn:"Cook Islands",en:"Cook Islands"},"Copy log":{cn:"Copy log",en:"Copy log"},"Copy to clipboard":{cn:"Copy to clipboard",en:"Copy to clipboard"},"Costa Rica":{cn:"Costa Rica",en:"Costa Rica"},"Country:":{cn:"Country",en:"Country"},Create:{cn:"Create",en:"Create"},"Create new category":{cn:"Create new category",en:"Create new category"},"Create new category, like %s":{cn:"Create new category, like %s",en:"Create new category, like %s"},"Create new enum":{cn:"Create new enum",en:"Create new enum"},"Create new enum, like %s":{cn:"Create new enum, like %s",en:"Create new enum, like %s"},"Create new group":{cn:"Create new group",en:"Create new group"},"Create new user":{cn:"Create new user",en:"Create new user"},Created:{cn:"Created",en:"Created"},Croatia:{cn:"Croatia",en:"Croatia"},"Cron expression":{cn:"Cron expression",en:"Cron expression"},Cuba:{cn:"Cuba",en:"Cuba"},"Currency:":{cn:"Currency",en:"Currency"},Custom:{cn:"Custom",en:"Custom"},Cyprus:{cn:"Cyprus",en:"Cyprus"},"Czech Republic":{cn:"Czech Republic",en:"Czech Republic"},D$ecember:{cn:"D$ecember",en:"D$ecember"},"DD.MM.YY":{cn:"DD.MM.YY",en:"DD.MM.YY"},"DD.MM.YYYY":{cn:"DD.MM.YYYY",en:"DD.MM.YYYY"},"DD/MM/YYYY":{cn:"DD/MM/YYYY",en:"DD/MM/YYYY"},"Date From":{cn:"Date From",en:"Date From"},"Date To":{cn:"Date To",en:"Date To"},"Date format:":{cn:"Date format",en:"Date format"},"Deactivated. Click to start.":{cn:"Deactivated. Click to start.",en:"Deactivated. Click to start."},"Debug outputs:":{cn:"Debug outputs",en:"Debug outputs"},Dec:{cn:"Dec",en:"Dec"},December:{cn:"December",en:"December"},"Default ACL":{cn:"Default ACL",en:"Default ACL"},"Default history instance:":{cn:"Default history instance",en:"Default history instance"},"Delete attribute":{cn:"Delete attribute",en:"Delete attribute"},"Delete category":{cn:"Delete category",en:"Delete category"},"Delete enum":{cn:"Delete enum",en:"Delete enum"},"Delete member":{cn:"Delete member",en:"Delete member"},"Delete object":{cn:"Delete object",en:"Delete object"},Denmark:{cn:"Denmark",en:"Denmark"},Description:{cn:"Description",en:"Description"},Device:{cn:"Device",en:"Device"},"Device discovery":{cn:"Device discovery",en:"Device discovery"},"Disable authentication":{cn:"Disable authentication",en:"Disable authentication"},"Disk free":{cn:"Disk free",en:"Disk free"},"Disk free:":{cn:"Disk free:",en:"Disk free:"},"Disk size":{cn:"Disk size",en:"Disk size"},Djibouti:{cn:"Djibouti",en:"Djibouti"},'Do you want to delete just 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"},"Dominican Republic":{cn:"Dominican Republic",en:"Dominican Republic"},"Done with error: %s":{cn:"Done with error: %s",en:"Done with error: %s"},"Download log":{cn:"Download log",en:"Download log"},"Drop the files here":{cn:"Drop the files here",en:"Drop the files here"},"Drop the icons here":{cn:"Drop the icons here",en:"Drop the icons here"},"East Timor":{cn:"East Timor",en:"East Timor"},Ecuador:{cn:"Ecuador",en:"Ecuador"},Edit:{cn:"Edit",en:"Edit"},"Edit category":{cn:"Edit category",en:"Edit category"},"Edit enum":{cn:"Edit enum",en:"Edit enum"},"Edit in dialog":{cn:"Edit in dialog",en:"Edit in dialog"},"Edit object":{cn:"Edit object",en:"Edit object"},Egypt:{cn:"Egypt",en:"Egypt"},"El Salvador":{cn:"El Salvador",en:"El Salvador"},"Email for account:":{cn:"Email for account",en:"Email for account"},"Enabled:":{cn:"Enabled",en:"Enabled"},Enums:{cn:"Enums",en:"Enums"},"Equatorial Guinea":{cn:"Equatorial Guinea",en:"Equatorial Guinea"},Eritrea:{cn:"Eritrea",en:"Eritrea"},Error:{cn:"Error",en:"Error"},Estonia:{cn:"Estonia",en:"Estonia"},Ethiopia:{cn:"Ethiopia",en:"Ethiopia"},Event:{cn:"Type",en:"Type"},Events:{cn:"Events",en:"Events"},Everyone:{cn:"Everyone",en:"Everyone"},"Expand all nodes":{cn:"Expand all nodes",en:"Expand all nodes"},"Failed to open JSON File":{cn:"Failed to open JSON file",en:"Failed to open JSON file"},"Falkland Islands (Malvinas)":{cn:"Falkland Islands (Malvinas)",en:"Falkland Islands (Malvinas)"},"Faroe Islands":{cn:"Faroe Islands",en:"Faroe Islands"},Feb:{cn:"Feb",en:"Feb"},February:{cn:"February",en:"February"},Fiji:{cn:"Fiji",en:"Fiji"},"File is too big!":{cn:"File is too big!",en:"File is too big!"},"File rights":{cn:"File rights",en:"File rights"},Filter:{cn:"Filter",en:"Filter"},"Filter:":{cn:"Filter",en:"Filter"},"Filtered out":{cn:"Everything is filtered out",en:"Everything is filtered out"},"Find coordinates...":{cn:"Find coordinates...",en:"Find coordinates..."},Finland:{cn:"Finland",en:"Finland"},"Float divider:":{cn:"Float divider",en:"Float divider"},France:{cn:"France",en:"France"},"Free RAM:":{cn:"Free:",en:"Free:"},"French Guiana":{cn:"French Guiana",en:"French Guiana"},"French Polynesia":{cn:"French Polynesia",en:"French Polynesia"},"French Southern Territories":{cn:"French Southern Territories",en:"French Southern Territories"},Fri:{cn:"Fri",en:"Fri"},From:{cn:"From: ",en:"From: "},"From github":{cn:"From github",en:"From github"},Function:{cn:"Function",en:"Function"},Gabon:{cn:"Gabon",en:"Gabon"},Gambia:{cn:"Gambia",en:"Gambia"},"Generated ID:":{cn:"Generated ID",en:"Generated ID"},Georgia:{cn:"Georgia",en:"Georgia"},Germany:{cn:"Germany",en:"Germany"},Ghana:{cn:"Ghana",en:"Ghana"},Gibraltar:{cn:"Gibraltar",en:"Gibraltar"},"Go to Github...":{cn:"Go to Github...",en:"Go to Github..."},Greece:{cn:"Greece",en:"Greece"},Greenland:{cn:"Greenland",en:"Greenland"},Grenada:{cn:"Grenada",en:"Grenada"},Group:{cn:"Group",en:"Group"},Groups:{cn:"Groups",en:"Groups"},Guadeloupe:{cn:"Guadeloupe",en:"Guadeloupe"},Guam:{cn:"Guam",en:"Guam"},Guatemala:{cn:"Guatemala",en:"Guatemala"},Guernsey:{cn:"Guernsey",en:"Guernsey"},Guinea:{cn:"Guinea",en:"Guinea"},"Guinea-Bissau":{cn:"Guinea-Bissau",en:"Guinea-Bissau"},Guyana:{cn:"Guyana",en:"Guyana"},Haiti:{cn:"Haiti",en:"Haiti"},"Has no permission to %s %s %s":{cn:"Has no permission to %s %s %s",en:"Has no permission to %s %s %s"},"Heard and Mc Donald Islands":{cn:"Heard and Mc Donald Islands",en:"Heard and Mc Donald Islands"},"Heartbeat: ":{cn:"Heartbeat: ",en:"Heartbeat: "},Honduras:{cn:"Honduras",en:"Honduras"},"Hong Kong":{cn:"Hong Kong",en:"Hong Kong"},Host:{cn:"Host",en:"Host"},"Host %s is offline":{cn:"Host %s is offline",en:"Host %s is offline"},"Host:":{cn:"Host",en:"Host"},Hosts:{cn:"Hosts",en:"Hosts"},Hungary:{cn:"Hungary",en:"Hungary"},ID:{cn:"ID",en:"ID"},Iceland:{cn:"Iceland",en:"Iceland"},"Icon upload":{cn:"Icon upload",en:"Icon upload"},"Ignore warning":{cn:"Ignore warning",en:"Ignore warning"},"In background":{cn:"In background",en:"In background"},India:{cn:"India",en:"India"},Indonesia:{cn:"Indonesia",en:"Indonesia"},Info:{cn:"Info",en:"Info"},Insert:{cn:"Insert",en:"Insert"},Install:{cn:"Install",en:"Install"},"Install adapter from URL":{cn:"Install or update the adapter from URL",en:"Install or update the adapter from URL"},"Install adapter from github":{cn:"Install or update the adapter from Github",en:"Install or update the adapter from Github"},"Install from custom URL":{cn:"Install from custom URL",en:"Install from custom URL"},"Install or update from URL...":{cn:"Install or update from URL...",en:"Install or update from URL..."},"Installation counter":{cn:"Installations counter",en:"Installations counter"},"Installations counter":{cn:"Installations counter",en:"Installations counter"},Installed:{cn:"Installed",en:"Installed"},"Installed from group":{cn:"Installed from group",en:"Installed from group"},"Installed instances":{cn:"Installed instances",en:"Installed instances"},"Installed version":{cn:"Installed version",en:"Installed version"},Instances:{cn:"Instances",en:"Instances"},Instructions:{cn:"Instructions",en:"Instructions"},Intro:{cn:"Overview",en:"Overview"},"Invalid version of %s":{cn:"Invalid version of %s",en:"Invalid version of %s"},"Invalid version of %s. Required %s":{cn:"Invalid version of %s. Required %s",en:"Invalid version of %s. Required %s"},Iran:{cn:"Iran",en:"Iran"},Iraq:{cn:"Iraq",en:"Iraq"},Ireland:{cn:"Ireland",en:"Ireland"},"Is yet in the list":{cn:"It's already in the list",en:"It's already in the list"},"Isle of Man":{cn:"Isle of Man",en:"Isle of Man"},Israel:{cn:"Israel",en:"Israel"},Italy:{cn:"Italy",en:"Italy"},"Ivory Coast":{cn:"Ivory Coast",en:"Ivory Coast"},Jamaica:{cn:"Jamaica",en:"Jamaica"},Jan:{cn:"Jan",en:"Jan"},January:{cn:"January",en:"January"},Japan:{cn:"Japan",en:"Japan"},Jersey:{cn:"Jersey",en:"Jersey"},Jordan:{cn:"Jordan",en:"Jordan"},Jul:{cn:"Jul",en:"Jul"},July:{cn:"July",en:"July"},Jun:{cn:"Jun",en:"Jun"},June:{cn:"June",en:"June"},Kazakhstan:{cn:"Kazakhstan",en:"Kazakhstan"},Kenya:{cn:"Kenya",en:"Kenya"},Kiribati:{cn:"Kiribati",en:"Kiribati"},"Known bugs for":{cn:"Known bugs for",en:"Known bugs for"},Korea:{cn:"Korea",en:"Korea"},Kosovo:{cn:"Kosovo",en:"Kosovo"},Kuwait:{cn:"Kuwait",en:"Kuwait"},Kyrgyzstan:{cn:"Kyrgyzstan",en:"Kyrgyzstan"},"Lao People's Democratic Republic":{cn:"Lao People's Democratic Republic",en:"Lao People's Democratic Republic"},"Last changed":{cn:"Last changed",en:"Last changed"},"Last update":{cn:"Last update",en:"Last update"},"Latitude:":{cn:"Latitude",en:"Latitude"},Latvia:{cn:"Latvia",en:"Latvia"},Lebanon:{cn:"Lebanon",en:"Lebanon"},Lesotho:{cn:"Lesotho",en:"Lesotho"},"Let's Encrypt settings":{cn:"Let's Encrypt settings",en:"Let's Encrypt settings"},"Let's encrypt SSL":{cn:"Let's encrypt SSL",en:"Let's encrypt SSL"},Liberia:{cn:"Liberia",en:"Liberia"},"Libyan Arab Jamahiriya":{cn:"Libyan Arab Jamahiriya",en:"Libyan Arab Jamahiriya"},License:{cn:"License",en:"License"},"License terms":{cn:"License terms",en:"License terms"},Liechtenstein:{cn:"Liechtenstein",en:"Liechtenstein"},"Listen on all IPs":{cn:"Listen on all IPs",en:"Listen on all IPs"},Lithuania:{cn:"Lithuania",en:"Lithuania"},"Loading...":{cn:"Loading...",en:"Loading..."},Log:{cn:"Log",en:"Log"},"Log file will be deleted. Are you sure?":{cn:"Log file will be deleted. Are you sure?",en:"Log file will be deleted. Are you sure?"},"Log size:":{cn:"Log size",en:"Log size"},"Login timeout(sec):":{cn:"Login timeout (sec)",en:"Login timeout (sec)"},Logout:{cn:"Logout",en:"Logout"},"Longitude:":{cn:"Longitude",en:"Longitude"},Luxembourg:{cn:"Luxembourg",en:"Luxembourg"},MB:{cn:"Mb",en:"Mb"},Macau:{cn:"Macau",en:"Macau"},Macedonia:{cn:"Macedonia",en:"Macedonia"},Madagascar:{cn:"Madagascar",en:"Madagascar"},Mai:{cn:"Mai",en:"Mai"},Main:{cn:"Main",en:"Main"},"Main settings":{cn:"Main settings",en:"Main settings"},Malawi:{cn:"Malawi",en:"Malawi"},Malaysia:{cn:"Malaysia",en:"Malaysia"},Maldives:{cn:"Maldives",en:"Maldives"},Mali:{cn:"Mali",en:"Mali"},Malta:{cn:"Malta",en:"Malta"},"Manually created":{cn:"Manually created",en:"Manually created"},Mar:{cn:"Mar",en:"Mar"},March:{cn:"March",en:"March"},"Marshall Islands":{cn:"Marshall Islands",en:"Marshall Islands"},Martinique:{cn:"Martinique",en:"Martinique"},Mauritania:{cn:"Mauritania",en:"Mauritania"},Mauritius:{cn:"Mauritius",en:"Mauritius"},Mayotte:{cn:"Mayotte",en:"Mayotte"},Members:{cn:"Members",en:"Members"},Message:{cn:"Message",en:"Message"},"Message buffer overflow. Losing oldest":{cn:"Message buffer overflow. Losing oldest.",en:"Message buffer overflow. Losing oldest."},Mexico:{cn:"Mexico",en:"Mexico"},Micronesia:{cn:"Micronesia",en:"Micronesia"},Model:{cn:"Model",en:"Model"},Moldova:{cn:"Moldova",en:"Moldova"},Mon:{cn:"Mon",en:"Mon"},Monaco:{cn:"Monaco",en:"Monaco"},Mongolia:{cn:"Mongolia",en:"Mongolia"},Montenegro:{cn:"Montenegro",en:"Montenegro"},Montserrat:{cn:"Montserrat",en:"Montserrat"},Morocco:{cn:"Morocco",en:"Morocco"},Mozambique:{cn:"Mozambique",en:"Mozambique"},Myanmar:{cn:"Myanmar",en:"Myanmar"},NPM:{cn:"NPM",en:"NPM"},Name:{cn:"Name",en:"Name"},"Name:":{cn:"Name",en:"Name"},Namibia:{cn:"Namibia",en:"Namibia"},Nauru:{cn:"Nauru",en:"Nauru"},Nepal:{cn:"Nepal",en:"Nepal"},Netherlands:{cn:"Netherlands",en:"Netherlands"},"Netherlands Antilles":{cn:"Netherlands Antilles",en:"Netherlands Antilles"},New:{cn:"New",en:"New"},"New Caledonia":{cn:"New Caledonia",en:"New Caledonia"},"New Zealand":{cn:"New Zealand",en:"New Zealand"},"New category":{cn:"New category",en:"New category"},"New enum":{cn:"New enum",en:"New enum"},"New group":{cn:"New group",en:"New group"},"New object":{cn:"New object",en:"New object"},"New objekt":{cn:"New object",en:"New object"},"New user":{cn:"New user",en:"New user"},Nicaragua:{cn:"Nicaragua",en:"Nicaragua"},Niger:{cn:"Niger",en:"Niger"},Nigeria:{cn:"Nigeria",en:"Nigeria"},Niue:{cn:"Niue",en:"Niue"},"No data":{cn:"No data",en:"No data"},"No states selected!":{cn:"No states selected!",en:"No states selected!"},"No version of %s":{cn:"No version of %s",en:"No version of %s"},"Node.js":{cn:"Node.js",en:"Node.js"},"Norfolk Island":{cn:"Norfolk Island",en:"Norfolk Island"},"Northern Mariana Islands":{cn:"Northern Mariana Islands",en:"Northern Mariana Islands"},Norway:{cn:"Norway",en:"Norway"},"Not exists":{cn:"Does not exist",en:"Does not exist"},"Note:":{cn:"Note",en:"Note"},Nov:{cn:"Nov",en:"Nov"},November:{cn:"November",en:"November"},OS:{cn:"OS",en:"OS"},'Object "%s" does not exists. Update the page.':{cn:'Object "%s" does not exist. Update the page.',en:'Object "%s" does not exist. Update the page.'},"Object may not be deleted":{cn:"Object may not be deleted",en:"Object may not be deleted"},"Object rights":{cn:"Object rights",en:"Object rights"},Objects:{cn:"Objects",en:"Objects"},Oct:{cn:"Oct",en:"Oct"},October:{cn:"October",en:"October"},Ok:{cn:"Ok",en:"Ok"},Oman:{cn:"Oman",en:"Oman"},"Only one":{cn:"Only one",en:"Only one"},"Open original":{cn:"Open on new tab",en:"Open on new tab"},Owner:{cn:"Owner",en:"Owner"},"Owner group":{cn:"Owner group",en:"Owner group"},"Owner user":{cn:"Owner user",en:"Owner user"},Pakistan:{cn:"Pakistan",en:"Pakistan"},Palau:{cn:"Palau",en:"Palau"},Palestine:{cn:"Palestine",en:"Palestine"},Panama:{cn:"Panama",en:"Panama"},"Papua New Guinea":{cn:"Papua New Guinea",en:"Papua New Guinea"},Paraguay:{cn:"Paraguay",en:"Paraguay"},Parent:{cn:"Parent",en:"Parent"},"Parse error":{cn:"Parse error",en:"Parse error"},Password:{cn:"Password",en:"Password"},"Password and confirmation are not equal!":{cn:"Password and confirmation are not equal!",en:"Password and confirmation are not equal!"},"Password cannot be empty!":{cn:"Password cannot be empty!",en:"Password cannot be empty!"},"Password repeat":{cn:"Password repeat",en:"Password repeat"},"Path to storage:":{cn:"Path to storage",en:"Path to storage"},"Pause output":{cn:"Pause output",en:"Pause output"},Peru:{cn:"Peru",en:"Peru"},Philippines:{cn:"Philippines",en:"Philippines"},Pitcairn:{cn:"Pitcairn",en:"Pitcairn"},Platform:{cn:"Platform",en:"Platform"},"Please confirm":{cn:"Please confirm",en:"Please confirm"},Poland:{cn:"Poland",en:"Poland"},Popular:{cn:"Popular",en:"Popular"},"Popular first":{cn:"Popular first",en:"Popular first"},"Port to check the domain:":{cn:"Port to check the domain",en:"Port to check the domain"},Portugal:{cn:"Portugal",en:"Portugal"},"Preserve ID":{cn:"Preserve ID",en:"Preserve ID"},Preview:{cn:"Preview",en:"Preview"},"Processing...":{cn:"Processing...",en:"Processing..."},"Puerto Rico":{cn:"Puerto Rico",en:"Puerto Rico"},Qatar:{cn:"Qatar",en:"Qatar"},RAM:{cn:"RAM",en:"RAM"},"RAM total usage:":{cn:"Total RAM usage:",en:"Total RAM usage:"},"RAM usage":{cn:"RAM usage",en:"RAM usage"},"Rebuild tree":{cn:"Rebuild tree",en:"Rebuild tree"},"Recently updated":{cn:"Recently updated",en:"Recently updated"},"Refresh log":{cn:"Refresh log",en:"Refresh log"},Removed:{cn:"Removed",en:"Removed"},"Removing of adapter...":{cn:"Removing of adapter...",en:"Removing of adapter..."},"Removing of instance...":{cn:"Removing of instance...",en:"Removing of instance..."},Rename:{cn:"Rename",en:"Rename"},Repositories:{cn:"Repositories",en:"Repositories"},Reunion:{cn:"Reunion",en:"Reunion"},Rights:{cn:"Access rights",en:"Access rights"},Role:{cn:"Role",en:"Role"},Romania:{cn:"Romania",en:"Romania"},Room:{cn:"Room",en:"Room"},"Running: ":{cn:"Running: ",en:"Running: "},"Russian Federation":{cn:"Russian Federation",en:"Russian Federation"},Rwanda:{cn:"Rwanda",en:"Rwanda"},"Saint Kitts and Nevis":{cn:"Saint Kitts and Nevis",en:"Saint Kitts and Nevis"},"Saint Lucia":{cn:"Saint Lucia",en:"Saint Lucia"},"Saint Vincent and the Grenadines":{cn:"Saint Vincent and the Grenadines",en:"Saint Vincent and the Grenadines"},Samoa:{cn:"Samoa",en:"Samoa"},"San Marino":{cn:"San Marino",en:"San Marino"},"Sao Tome and Principe":{cn:"Sao Tome and Principe",en:"Sao Tome and Principe"},Sat:{cn:"Sat",en:"Sat"},"Saudi Arabia":{cn:"Saudi Arabia",en:"Saudi Arabia"},Save:{cn:"Save",en:"Save"},"Save Objecttree as JSON File":{cn:"Save objects tree as JSON file",en:"Save objects tree as JSON file"},"Save Objecttree is not possible":{cn:"Saving the objects tree is not possible",en:"Saving the objects tree is not possible"},"Save configuration":{cn:"Save configuration",en:"Save configuration"},Script:{cn:"Script",en:"Script"},Scripts:{cn:"Scripts",en:"Scripts"},Select:{cn:"Select",en:"Select"},"Select ID":{cn:"Select ID",en:"Select ID"},"Select adapter:":{cn:"Select adapter",en:"Select adapter"},"Select language":{cn:"Select language",en:"Select language"},"Select options":{cn:"Select options",en:"Select options"},Senegal:{cn:"Senegal",en:"Senegal"},"Sent data:":{cn:"Sent data",en:"Sent data"},Sep:{cn:"Sep",en:"Sep"},September:{cn:"September",en:"September"},Serbia:{cn:"Serbia",en:"Serbia"},Set:{cn:"Set",en:"Set"},"Set CRON":{cn:"Set",en:"Set"},"Set CRON schedule for restarts":{cn:"Set CRON schedule for restarts",en:"Set CRON schedule for restarts"},Settings:{cn:"Settings",en:"Settings"},"Settings for %s":{cn:"Settings for %s",en:"Settings for %s"},Seychelles:{cn:"Seychelles",en:"Seychelles"},"Show instances only for current host":{cn:"Show instances only for current host",en:"Show instances only for current host"},"Show values of instance":{cn:"Show values of instance",en:"Show values of instance"},"Show...":{cn:"Show...",en:"Show..."},"Sierra Leone":{cn:"Sierra Leone",en:"Sierra Leone"},Singapore:{cn:"Singapore",en:"Singapore"},"Size: %s, Free: %s":{cn:"Size: %s, Available: %s",en:"Size: %s, Available: %s"},Slovakia:{cn:"Slovakia",en:"Slovakia"},Slovenia:{cn:"Slovenia",en:"Slovenia"},"Solomon Islands":{cn:"Solomon Islands",en:"Solomon Islands"},Somalia:{cn:"Somalia",en:"Somalia"},"Some data are not stored. Discard?":{cn:"Some data are not stored. Discard?",en:"Some data are not stored. Discard?"},"Sort alphabetically":{cn:"Sort alphabetically by name",en:"Sort alphabetically by name"},"South Africa":{cn:"South Africa",en:"South Africa"},"South Georgia South Sandwich Islands":{cn:"South Georgia South Sandwich Islands",en:"South Georgia South Sandwich Islands"},Spain:{cn:"Spain",en:"Spain"},Speed:{cn:"Speed",en:"Speed"},"Sri Lanka":{cn:"Sri Lanka",en:"Sri Lanka"},"St. Helena":{cn:"St. Helena",en:"St. Helena"},"St. Pierre and Miquelon":{cn:"St. Pierre and Miquelon",en:"St. Pierre and Miquelon"},"Started...":{cn:"Started...",en:"Started..."},State:{cn:"Datapoint",en:"Datapoint"},"State type":{cn:"State type",en:"State type"},States:{cn:"States",en:"States"},"States rights":{cn:"States rights",en:"States rights"},Statistics:{cn:"Statistics",en:"Statistics"},"Statistics:":{cn:"Statistics",en:"Statistics"},"Storage of %s":{cn:'Storage of %s',en:'Storage of %s'},"Storage of %s states":{cn:'Storage of %s states',en:'Storage of %s states'},"Success!":{cn:"Success!",en:"Success!"},Sudan:{cn:"Sudan",en:"Sudan"},Suggestion:{cn:"Recommendation",en:"Recommendation"},Sun:{cn:"Sun",en:"Sun"},Suriname:{cn:"Suriname",en:"Suriname"},"Svalbard and Jan Mayen Islands":{cn:"Svalbard and Jan Mayen Islands",en:"Svalbard and Jan Mayen Islands"},Swaziland:{cn:"Swaziland",en:"Swaziland"},Sweden:{cn:"Sweden",en:"Sweden"},Switzerland:{cn:"Switzerland",en:"Switzerland"},"Syrian Arab Republic":{cn:"Syrian Arab Republic",en:"Syrian Arab Republic"},System:{cn:"System",en:"System"},"System language:":{cn:"System language",en:"System language"},"System settings":{cn:"System settings",en:"System settings"},"System uptime":{cn:"System uptime",en:"System uptime"},Table:{cn:"Table",en:"Table"},Taiwan:{cn:"Taiwan",en:"Taiwan"},Tajikistan:{cn:"Tajikistan",en:"Tajikistan"},Tanzania:{cn:"Tanzania",en:"Tanzania"},"Temperature units:":{cn:"Temperature units",en:"Temperature units"},Thailand:{cn:"Thailand",en:"Thailand"},'This version of node.js "%s" on "%s" is deprecated. Please install node.js 6, 8 or newer':{cn:'yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version ("%s") on host "%s" to one of the supported versions. We recommend to use Node.js 6.',en:'yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version ("%s") on host "%s" to one of the supported versions. We recommend to use Node.js 6.'},Thu:{cn:"Thu",en:"Thu"},Time:{cn:"Time",en:"Time"},"Time From":{cn:"Time From",en:"Time From"},"Time To":{cn:"Time To",en:"Time To"},"Time stamp":{cn:"Time stamp",en:"Time stamp"},Title:{cn:"Title",en:"Title"},To:{cn:"To",en:"To"},Today:{cn:"Today",en:"Today"},"Toggle expert mode":{cn:"Toggle expert mode",en:"Toggle expert mode"},"Toggle states view":{cn:"Toggle the states view",en:"Toggle the states view"},Togo:{cn:"Togo",en:"Togo"},Tokelau:{cn:"Tokelau",en:"Tokelau"},Tonga:{cn:"Tonga",en:"Tonga"},"Too many events":{cn:"Too many events",en:"Too many events"},"Total count in group":{cn:"Total count in group",en:"Total count in group"},"Trigger event":{cn:"Trigger event",en:"Trigger event"},"Trinidad and Tobago":{cn:"Trinidad and Tobago",en:"Trinidad and Tobago"},Tue:{cn:"Tue",en:"Tue"},Tunisia:{cn:"Tunisia",en:"Tunisia"},Turkey:{cn:"Turkey",en:"Turkey"},Turkmenistan:{cn:"Turkmenistan",en:"Turkmenistan"},"Turks and Caicos Islands":{cn:"Turks and Caicos Islands",en:"Turks and Caicos Islands"},Tuvalu:{cn:"Tuvalu",en:"Tuvalu"},Type:{cn:"Type",en:"Type"},"URL or file path:":{cn:"URL or file path",en:"URL or file path"},Uganda:{cn:"Uganda",en:"Uganda"},Ukraine:{cn:"Ukraine",en:"Ukraine"},"Uncheck All":{cn:"Uncheck All",en:"Uncheck All"},"United Arab Emirates":{cn:"United Arab Emirates",en:"United Arab Emirates"},"United Kingdom":{cn:"United Kingdom",en:"United Kingdom"},"United States":{cn:"United States",en:"United States"},"United States minor outlying islands":{cn:"United States minor outlying islands",en:"United States minor outlying islands"},"Unknown file format!":{cn:"Unknown file format!",en:"Unknown file format!"},Unsecure_Auth:{cn:"The password will be sent via unsecure connection. To protect your passwords enable the secure connection (HTTPS)!",en:"The password will be sent via unsecure connection. To protect your passwords enable the secure connection (HTTPS)!"},"Unsupported image format":{cn:"Unsupported image format",en:"Unsupported image format"},Update:{cn:"Update",en:"Update"},"Update objects":{cn:"Update objects",en:"Update objects"},"Update states":{cn:"Update states",en:"Update states"},Updated:{cn:"Updated",en:"Updated"},"Upgrade all adapters":{cn:"Upgrade all adapters",en:"Upgrade all adapters"},Upload:{cn:"File upload",en:"File upload"},"Upload admin started":{cn:"Upload of configuration is started",en:"Upload of configuration is started"},"Upload started...":{cn:"Upload started...",en:"Upload started..."},Uptime:{cn:"Uptime",en:"Uptime"},Uruguay:{cn:"Uruguay",en:"Uruguay"},"Use Lets Encrypt certificates:":{cn:"Use Let's Encrypt certificates",en:"Use Let's Encrypt certificates"},"Use this instance for automatic update:":{cn:"Use this instance for automatic update",en:"Use this instance for automatic update"},User:{cn:"User",en:"User"},"User deleted":{cn:"User deleted",en:"User deleted"},"User does not exist":{cn:"User does not exist",en:"User does not exist"},"User yet exists":{cn:"User already exists",en:"User already exists"},Users:{cn:"Users",en:"Users"},Uzbekistan:{cn:"Uzbekistan",en:"Uzbekistan"},Value:{cn:"Value",en:"Value"},"Values of %s":{cn:"Values of %s",en:"Values of %s"},Vanuatu:{cn:"Vanuatu",en:"Vanuatu"},"Vatican City State":{cn:"Vatican City State",en:"Vatican City State"},Venezuela:{cn:"Venezuela",en:"Venezuela"},Vietnam:{cn:"Vietnam",en:"Vietnam"},"Virgin Islands (British)":{cn:"Virgin Islands (British)",en:"Virgin Islands (British)"},"Virgin Islands (U.S.)":{cn:"Virgin Islands (U.S.)",en:"Virgin Islands (U.S.)"},"Wallis and Futuna Islands":{cn:"Wallis and Futuna Islands",en:"Wallis and Futuna Islands"},"Warning!":{cn:"Warning!",en:"Warning!"},Wed:{cn:"Wed",en:"Wed"},"Western Sahara":{cn:"Western Sahara",en:"Western Sahara"},With:{cn:"With",en:"With"},Without:{cn:"Without",en:"Without"},Yemen:{cn:"Yemen",en:"Yemen"},"You are going to add new instance: ":{cn:"You are going to add new instance: ",en:"You are going to add new instance: "},"You can check changelog here":{cn:'You can check the changelog here',en:'You can check the changelog here'},"You can drag&drop the devices, channels and states to enums":{cn:"You can drag&drop the devices, channels and states to enums",en:"You can drag&drop the devices, channels and states to enums"},"You can drag&drop users to groups":{cn:"You can drag&drop users to groups",en:"You can drag&drop users to groups"},"You can't see events via cloud":{cn:"You can't see events via cloud",en:"You can't see events via cloud"},"Your home":{cn:"Your home",en:"Your home"},Zaire:{cn:"Zaire",en:"Zaire"},Zambia:{cn:"Zambia",en:"Zambia"},Zimbabwe:{cn:"Zimbabwe",en:"Zimbabwe"},_All:{cn:"All",en:"All"},"_Toggle expert mode":{cn:"Toggle expert mode",en:"Toggle expert mode"},__different__:{cn:"different",en:"different"},"a-z":{cn:"a-z",en:"a-z"},ack:{cn:"ack",en:"ack"},actions:{cn:"actions",en:"actions"},active:{cn:"active",en:"active"},"adapter with updates":{cn:"adapters with updates",en:"adapters with updates"},"adapters count":{cn:"adapters count",en:"adapters count"},add:{cn:"Add",en:"Add"},"add children":{cn:"add children",en:"add children"},"add instance":{cn:"add instance",en:"add instance"},"add repository":{cn:"add repository",en:"add repository"},agree:{cn:"agree",en:"agree"},alarm_group:{cn:"Alarm",en:"Alarm"},alive:{cn:"alive",en:"alive"},all:{cn:"all",en:"all"},alpha:{cn:"alpha",en:"alpha"},array:{cn:"array",en:"array"},auto:{cn:"auto",en:"auto"},available:{cn:"available",en:"available"},beta:{cn:"beta",en:"beta"},boolean:{cn:"boolean",en:"boolean"},bug:{cn:"bugtracker",en:"bugtracker"},cancel:{cn:"Cancel",en:"Cancel"},cert_path_note:{cn:"You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop",en:"You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop"},certificate:{cn:"certificate",en:"certificate"},"change view mode":{cn:"change view mode",en:"change view mode"},channel:{cn:"channel",en:"channel"},clear:{cn:"clear",en:"clear"},"climate-control_group":{cn:"Climate Control",en:"Climate Control"},"close on ready":{cn:"close on ready",en:"close on ready"},collapse:{cn:"collapse",en:"collapse"},"collapse all":{cn:"collapse all",en:"collapse all"},comma:{cn:"comma",en:"comma"},"command execution":{cn:"Command execution",en:"Command execution"},common:{cn:"common",en:"common"},"common adapters_group":{cn:"Common",en:"Common"},common_color:{cn:"color",en:"color"},common_def:{cn:"default value",en:"default value"},common_desc:{cn:"description",en:"description"},common_icon:{cn:"icon",en:"icon"},common_max:{cn:"max value",en:"max value"},common_min:{cn:"minimal value",en:"minimal value"},common_read:{cn:"read allowed",en:"read allowed"},common_role:{cn:"role",en:"role"},common_states:{cn:"predefined values",en:"predefined values"},common_type:{cn:"type",en:"type"},common_unit:{cn:"measure unit",en:"measure unit"},common_write:{cn:"write allowed",en:"write allowed"},communication_group:{cn:"Communication",en:"Communication"},config:{cn:"Settings",en:"Settings"},"config instance":{cn:"config instance",en:"config instance"},"confirm password":{cn:"Confirm password",en:"Confirm password"},connected:{cn:"connected",en:"connected"},copy:{cn:"copy",en:"copy"},"copy note":{cn:"Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close.",en:"Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close."},"create operation":{cn:"create",en:"create"},"custom enum":{cn:"?ustom enum",en:"?ustom enum"},"custom group":{cn:"Custom group",en:"Custom group"},daemon:{cn:"daemon",en:"daemon"},"date-and-time_group":{cn:"Date and Time",en:"Date and Time"},daysShortText:{cn:"d.",en:"d."},debug:{cn:"debug",en:"debug"},delete:{cn:"delete",en:"delete"},"delete adapter":{cn:"delete adapter",en:"delete adapter"},"delete group":{cn:"delete group",en:"delete group"},"delete instance":{cn:"delete instance",en:"delete instance"},"delete operation":{cn:"delete",en:"delete"},"delete script":{cn:"delete script",en:"delete script"},"delete user":{cn:"delete user",en:"delete user"},desc:{cn:"desc",en:"desc"},description:{cn:"Description",en:"Description"},device:{cn:"device",en:"device"},"diag-note":{cn:"We worked hard to create this project. In return we expect from you some usage statistics.
                  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:"edit",en:"edit"},"edit enum":{cn:"edit enum",en:"edit enum"},"edit enums":{cn:"Edit enumerations for",en:"Edit enumerations for"},"edit file":{cn:"edit file",en:"edit file"},"edit group":{cn:"edit group",en:"edit group"},"edit instance":{cn:"edit instance",en:"edit instance"},"edit script":{cn:"edit script",en:"edit script"},"edit user":{cn:"edit user",en:"edit user"},"edit value":{cn:"Edit value",en:"Edit value"},enabled:{cn:"enabled",en:"enabled"},energy_group:{cn:"Energy",en:"Energy"},engine:{cn:"engine",en:"engine"},"engine type":{cn:"engine type",en:"engine type"},error:{cn:"error",en:"error"},events:{cn:"events",en:"events"},"execute operation":{cn:"Execute operation",en:"Execute operation"},expand:{cn:"expand",en:"expand"},"expand all":{cn:"expand all",en:"expand all"},extended:{cn:"extended",en:"extended"},false:{cn:"false",en:"false"},"file permissions":{cn:"File permissions",en:"File permissions"},from:{cn:"from",en:"from"},garden_group:{cn:"Garden",en:"Garden"},general_group:{cn:"General",en:"General"},geoposition_group:{cn:"Geo position",en:"Geo position"},groups:{cn:"groups",en:"groups"},hardware_group:{cn:"Hardware",en:"Hardware"},history:{cn:"history",en:"history"},"history data":{cn:"history data",en:"history data"},host:{cn:"host",en:"host"},household_group:{cn:"Household",en:"Household"},"http operation":{cn:"http",en:"http"},id:{cn:"ID",en:"ID"},info:{cn:"info",en:"info"},infrastructure_group:{cn:"Infrastructure",en:"Infrastructure"},install:{cn:"install",en:"install"},"install specific version":{cn:"Install a specific version",en:"Install a specific version"},installed:{cn:"installed",en:"installed"},"installed adapters":{cn:"Filter adapters with existing instances",en:"Filter adapters with existing instances"},instance:{cn:"instance",en:"instance"},"instance number":{cn:"Desired instance number",en:"Desired instance number"},"yunkong2 Enums":{cn:"yunkong2 enums",en:"yunkong2 enums"},"yunkong2 States":{cn:"yunkong2 states",en:"yunkong2 states"},"yunkong2 adapter instances":{cn:"yunkong2 adapter instances",en:"yunkong2 adapter instances"},"yunkong2 adapter scripts":{cn:"yunkong2 adapter scripts",en:"yunkong2 adapter scripts"},"yunkong2 adapters":{cn:"yunkong2 adapters",en:"yunkong2 adapters"},"yunkong2 certificates":{cn:"yunkong2 certificates",en:"yunkong2 certificates"},"yunkong2 groups":{cn:"yunkong2 groups",en:"yunkong2 groups"},"yunkong2 hosts":{cn:"yunkong2 hosts",en:"yunkong2 hosts"},"yunkong2 repositories":{cn:"yunkong2 repositories",en:"yunkong2 repositories"},"yunkong2 users":{cn:"yunkong2 users",en:"yunkong2 users"},"iot-system_group":{cn:"IoT systems",en:"IoT systems"},"iot-systems_group":{cn:"IoT Systems",en:"IoT Systems"},keywords:{cn:"keywords",en:"keywords"},lc:{cn:"Last change",en:"Last change"},less:{cn:"less",en:"less"},letsnecrypt_help:{cn:'This are settings for Let\'s Encrypt account. To get the free certificates for your domain. You can read more 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:"license",en:"license"},"license agreement":{cn:"license agreement",en:"license agreement"},"license not agree":{cn:"Do not agree with the license!",en:"Do not agree with the license!"},license_checkbox:{cn:"I agree with the collection of anonymous statistics.
                  (This can be disabled in settings)",en:"I agree with the collection of anonymous statistics.
                  (This can be disabled in settings)"},lighting_group:{cn:"Lighting",en:"Lighting"},link:{cn:"link",en:"link"},list:{cn:"list",en:"list"},"list operation":{cn:"list elements",en:"list elements"},logic_group:{cn:"Logic",en:"Logic"},loglevel:{cn:"loglevel",en:"loglevel"},media_group:{cn:"Media",en:"Media"},members:{cn:"members",en:"members"},memlimit:{cn:"RAM limit",en:"RAM limit"},message:{cn:"message",en:"message"},messaging_group:{cn:"Messaging",en:"Messaging"},"misc-data_group":{cn:"Misc. data",en:"Misc. data"},mixed:{cn:"mixed",en:"mixed"},mode:{cn:"mode",en:"mode"},more:{cn:"more",en:"more"},multi:{cn:"multistate",en:"multistate"},multimedia_group:{cn:"Multimedia",en:"Multimedia"},name:{cn:"name",en:"name"},native:{cn:"native",en:"native"},network_group:{cn:"Network",en:"Network"},"new certificate":{cn:"new certificate",en:"new certificate"},"new group":{cn:"new group",en:"new group"},"new script":{cn:"new script",en:"new script"},"new user":{cn:"new user",en:"new user"},newObject:{cn:"New object",en:"New object"},"no-city":{cn:"no city",en:"no city"},"node-red":{cn:"node-red",en:"node-red"},none:{cn:"none",en:"none"},normal:{cn:"normal",en:"normal"},"not ack":{cn:"not ack",en:"not ack"},"not agree":{cn:"not agree",en:"not agree"},"npm error":{cn:"npm error",en:"npm error"},number:{cn:"number",en:"number"},object:{cn:"object",en:"object"},"object permissions":{cn:"Object permissions",en:"Object permissions"},of:{cn:"of",en:"of"},ok:{cn:"Ok",en:"Ok"},"open web page":{cn:"Open web page of adapter",en:"Open web page of adapter"},os:{cn:"operating system",en:"operating system"},"other permissions":{cn:"Other permissions",en:"Other permissions"},"parent name":{cn:"parent name",en:"parent name"},password:{cn:"Password",en:"Password"},permissionError:{cn:"Permission error",en:"Permission error"},"place here":{cn:"place the files here",en:"place the files here"},planned:{cn:"planned",en:"planned"},platform:{cn:"platform",en:"platform"},point:{cn:"point",en:"point"},popular:{cn:"popular",en:"popular"},process:{cn:"process",en:"process"},protocols_group:{cn:"Protocols",en:"Protocols"},raw:{cn:"Raw (experts only)",en:"Raw (experts only)"},read:{cn:"read",en:"read"},"read operation":{cn:"read",en:"read"},readme:{cn:"readme",en:"readme"},reload:{cn:"reload",en:"reload"},"reload instance":{cn:"reload instance",en:"reload instance"},rest:{cn:"rest (read only)",en:"rest (read only)"},restart:{cn:"auto restart",en:"auto restart"},"restart script":{cn:"restart script",en:"restart script"},role:{cn:"role",en:"role"},save:{cn:"save",en:"save"},schedule_group:{cn:"Schedule",en:"Schedule"},script_group:{cn:"Scripts and Logic",en:"Scripts and Logic"},"select member by double click":{cn:"select member by double clicking",en:"select member by double clicking"},"sendto operation":{cn:"Send-to operation",en:"Send-to operation"},service_group:{cn:"Maintenance",en:"Maintenance"},severity:{cn:"severity",en:"severity"},silly:{cn:"silly",en:"silly"},stable:{cn:"stable",en:"stable"},state:{cn:"state",en:"state"},"state permissions":{cn:"State permissions",en:"State permissions"},storage_group:{cn:"Storage",en:"Storage"},string:{cn:"string",en:"string"},subscribe:{cn:"subscribe",en:"subscribe"},switch:{cn:"switch",en:"switch"},terminal:{cn:"Terminal",en:"Terminal"},"third-party_group":{cn:"Third party",en:"Third party"},"this adapter does not allow multiple instances":{cn:"This adapter does not allow multiple instances",en:"This adapter does not allow multiple instances"},title:{cn:"title",en:"title"},today:{cn:"today",en:"today"},true:{cn:"true",en:"true"},ts:{cn:"Timestamp",en:"Timestamp"},type:{cn:"type",en:"type"},unit:{cn:"unit",en:"unit"},update:{cn:"update",en:"update"},"update adapter information":{cn:"update adapter information",en:"update adapter information"},"update-part1":{cn:"Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:",en:"Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:"},updated:{cn:"updated",en:"updated"},updates:{cn:"updates",en:"updates"},upload:{cn:"Upload",en:"Upload"},"user permissions":{cn:"user permissions",en:"user permissions"},users:{cn:"users",en:"users"},"users permissions":{cn:"User permissions",en:"User permissions"},utility_group:{cn:"Utility",en:"Utility"},val:{cn:"val",en:"val"},value:{cn:"value",en:"value"},"value.from":{cn:"Changed from",en:"Changed from"},"value.lc":{cn:"Last change",en:"Last change"},"value.q":{cn:"Quality code",en:"Quality code"},"value.ts":{cn:"Timestamp",en:"Timestamp"},"value.val":{cn:"value",en:"value"},version:{cn:"version",en:"version"},vis_group:{cn:"yunkong2.vis",en:"yunkong2.vis"},visualisation_group:{cn:"Visualisation",en:"Visualisation"},"visualization-icons_group":{cn:"Visualization Icons",en:"Visualization Icons"},"visualization-widgets_group":{cn:"Visualization Widgets",en:"Visualization Widgets"},visualization_group:{cn:"Visualisation",en:"Visualisation"},warn:{cn:"warn",en:"warn"},weather_group:{cn:"Weather",en:"Weather"},wetty:{cn:"Wetty",en:"Wetty"},write:{cn:"write",en:"write"},"write operation":{cn:"write",en:"write"},yesterday:{cn:"yesterday",en:"yesterday"}}; +"use strict";Array.prototype.remove=function(){for(var e,t,n=arguments,i=n.length;i&&this.length;)for(e=n[--i];-1!==(t=this.indexOf(e));)this.splice(t,1);return this},console.debug||(console.debug=console.log),"undefined"==typeof Number&&(console.log("define Number"),Number=function(e){return parseFloat(e)}),Object.assign||(Object.assign=$.extend);var $iframeDialog=null,configNotSaved=null,showConfig=null,defaults={},customPostInits={},FORBIDDEN_CHARS=/[\]\[*,;'"`<>\\\s?]/g,adapterRedirect=function(e,t){e&&setTimeout(function(){e+=document.location.pathname,e+=document.location.hash,document.location.href=e},t||5e3)},gMain=null;function detectIE(){var e=window.navigator.userAgent,t=e.indexOf("MSIE ");if(0td"),a=H.data[n.key];function s(e){return'
                  '+e+"
                  "}if(a){i.eq(0).css({overflow:"hidden","white-space":"nowrap"});var o=a.desc.indexOf("div>div").css("height: 22px !important"),u(2,a.keywords).attr("title",a.keywords),i.eq(3).html(a.installed),i.eq(4).html(a.version),u(5,a.license),u(6,a.install),H.initButtons(n.key),H.isCollapsed[a.group]&&(H.isCollapsed[a.group]=!1,H.main.saveConfig("adaptersIsCollapsed",JSON.stringify(H.isCollapsed)))}else{i.eq(0).css({"font-weight":"bold"}),i.eq(0).find("img").remove(),i.eq(0).find("span.fancytree-title").attr("style","padding-left: 0px !important");for(var c=0;c'+l+' / '+H.tree[c].children.length+"]",i.eq(1).html(s(''+l+" "+_("of")+' '+H.tree[c].children.length+" "+_("Adapters from this Group installed")));break}}function u(e,t){return i.eq(e).html(s(t))}},gridnav:{autofocusInput:!1,handleCursorKeys:!0},filter:{mode:"hide",autoApply:!0},collapse:function(e,t){H.isCollapsed[t.node.key]||(H.isCollapsed[t.node.key]=!0,H.main.saveConfig("adaptersIsCollapsed",JSON.stringify(H.isCollapsed)))}}),H.$tab.find("#btn_collapse_adapters").show().off("click").on("click",function(){H.$tab.find(".process-adapters").show(),setTimeout(function(){H.$grid.fancytree("getRootNode").visit(function(e){(!H.filterVals.length||e.match||e.subMatch)&&e.setExpanded(!1)}),H.$tab.find(".process-adapters").hide()},100)}),H.$tab.find("#btn_expand_adapters").show().off("click").on("click",function(){H.$tab.find(".process-adapters").show(),setTimeout(function(){H.$grid.fancytree("getRootNode").visit(function(e){(!H.filterVals.length||e.match||e.subMatch)&&e.setExpanded(!0)}),H.$tab.find(".process-adapters").hide()},100)}),H.$tab.find("#btn_list_adapters").show().off("click").on("click",function(){var e=H.$tab.find(".process-adapters");e.show(),H.isList=!H.isList,H.isList?(H.$tab.find("#btn_list_adapters").addClass("red lighten-3"),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide(),$(this).attr("title",_("list"))):(H.$tab.find("#btn_list_adapters").removeClass("red lighten-3"),H.$tab.find("#btn_expand_adapters").show(),H.$tab.find("#btn_collapse_adapters").show(),$(this).attr("title",_("tree"))),H.main.saveConfig("adaptersIsList",H.isList),e.show(),setTimeout(function(){H._postInit(!0),e.hide()},200)})),H.isList?(H.$tab.find("#btn_list_adapters").addClass("red lighten-3").attr("title",_("tree")),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide()):(H.$tab.find("#btn_list_adapters").removeClass("red lighten-3").attr("title",_("list")),H.$tab.find("#btn_expand_adapters").show(),H.$tab.find("#btn_collapse_adapters").show()),H.$tab.find(".filter-input").trigger("change")}function n(){H.$grid.hide(),H.$tiles.show(),H.$tab.find("#main-toolbar-table-types-btn").show(),H.$tab.find("#btn_list_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide(),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find(".filter-input").trigger("change")}function i(){H.onlyUpdatable?(H.$tab.find("#btn_filter_updates").addClass("red lighten-3"),H.$tab.find("#btn_upgrade_all").show()):(H.$tab.find("#btn_upgrade_all").hide(),H.$tab.find("#btn_filter_updates").removeClass("red lighten-3"))}function a(){H.main.config.expertMode?(H.$tab.find("#btn_adapters_expert_mode").addClass("red lighten-3"),H.$tab.find("#btn_upgrade_all").show()):(H.$tab.find("#btn_adapters_expert_mode").removeClass("red lighten-3"),i())}function G(){var t=!1;H.currentFilter?H.$tiles.find(".tile").each(function(){var e=$(this);(!H.currentType||e.hasClass("class-"+H.currentType))&&B({key:e.data("id")})?(t=!0,e.show()):e.hide()}):H.currentType?(H.$tiles.find(".tile").hide(),H.$tiles.find(".class-"+H.currentType).show(),H.$tiles.find(".tile").each(function(){if($(this).is(":visible"))return!(t=!0)})):H.$tiles.find(".tile").show().each(function(){if($(this).is(":visible"))return!(t=!0)}),t?H.$tiles.find(".filtered-out").hide():H.$tiles.find(".filtered-out").show()}function B(e){if(H.currentFilter){if(!H.data[e.key])return!1;var t=H.data[e.key].title;t&&"object"==typeof t&&(t=t[systemLang]||t.en);var n=H.data[e.key].desc;return n&&"object"==typeof n&&(n=n[systemLang]||n.en),!!(H.data[e.key].name&&-1!==H.data[e.key].name.toLowerCase().indexOf(H.currentFilter)||t&&-1!==t.toLowerCase().indexOf(H.currentFilter)||H.data[e.key].keywords&&-1!==H.data[e.key].keywords.toLowerCase().indexOf(H.currentFilter)||n&&-1!==n.toLowerCase().indexOf(H.currentFilter))}return!0}function F(e,t){var n="";if(t.news)for(var i in t.news)if(t.news.hasOwnProperty(i)){if(systemLang===i&&(n+=(n?"\n":"")+t.news[i]),"en"===i||"cn"===i)continue;if(i===e)break;n+=(n?"\n":"")+(t.news[i][systemLang]||t.news[i].en)}return n}function Z(e){if(!e)return"";var t;if(e instanceof Array){t={};for(var n=0;n
                  ',!E&&i.colors&&s[O].color&&(e+='
                  '),!E&&i.icons&&(e+=ne(i.objects[s[O].id],i.imgPath)||'
                   
                  '),"enabled"===z)e+='";else if("groups"===z)for(var x=0;x'+ne(i.objects[$],null,"")+s[O].groups[x].name+""}else if("instance"===z)if(void 0!==s[O].instance&&1';for(var Y=0;Y"+r[Y]+"";e+=k+=""}else e+=""+(void 0===s[O].instance?"":s[O].instance)+"";else if("icon"===z)e+=ne(i.objects[s[O].id],i.imgPath);else{var R=s[O][z]||"";R&&"object"==typeof R&&R.en&&(R=R[systemLang]||R.en),e+=""+R+""}e+="
                  ';for(var Q="",U=0;U ':(Q+="<"+t+' data-id="'+s[O].id+'" class="select-button-'+U+' select-button-custom td-button" style="margin-right: 3px;" data-parent="'+s[O].parent+'" data-children="'+!!s[O].realChildren+'" title="'+(i.buttons[U].title||"")+'">',window.M&&window.M.toast&&(Q+=''+(i.buttons[U].icon||"")+""),Q+="");e+=Q+"
                  '),i}this.curRepository=null,this.curRepoLastUpdate=null,this.curInstalled=null,this.curRepoLastHost=null,this.list=[],this.$tab=$("#tab-adapters"),this.$grid=this.$tab.find("#grid-adapters"),this.$tiles=this.$tab.find("#grid-adapters-tiles"),this.$installDialog=$("#dialog-install-url"),this.main=e,this.tree=[],this.data={},this.urls={},this.groupImages={"common adapters_group":"img/common.png",general_group:"img/common.png",hardware_group:"img/hardware.png",lighting_group:"img/hardware.png",energy_group:"img/hardware.png",household_group:"img/hardware.png","iot-systems_group":"img/hardware.png","climate-control_group":"img/hardware.png",infrastructure_group:"img/hardware.png",garden_group:"img/hardware.png",alarm_group:"img/hardware.png",script_group:"img/script.png",logic_group:"img/script.png",media_group:"img/media.png",multimedia_group:"img/media.png",communication_group:"img/communication.png",protocols_group:"img/communication.png",network_group:"img/communication.png",messaging_group:"img/communication.png",visualisation_group:"img/visualisation.png",visualization_group:"img/visualisation.png","visualization-icons_group":"img/visualisation.png","visualization-widgets_group":"img/visualisation.png",storage_group:"img/storage.png",weather_group:"img/weather.png",schedule_group:"img/schedule.png",vis_group:"img/vis.png","date-and-time_group":"img/service.png",geoposition_group:"img/service.png",utility_group:"img/service.png","misc-data_group":"img/service.png",service_group:"img/service.png","third-party_group":"img/service.png"},this.inited=!1,this.isList=!1,this.filterVals={length:0},this.onlyInstalled=!1,this.onlyUpdatable=!1,this.currentFilter="",this.currentType="",this.isCollapsed={},this.isTiles=!0,this.types={occ:"schedule"},this.prepare=function(){this.$tab.find("#btn_switch_adapters").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.isTiles=!H.isTiles,H.isTiles?(H.$tab.removeClass("view-table").addClass("view-tiles"),$(this).find("i").text("view_list")):($(this).find("i").text("view_module"),H.$tab.removeClass("view-tiles").addClass("view-table")),H.main.saveConfig("adaptersIsTiles",H.isTiles),setTimeout(function(){H.isTiles?n():t(),H._postInit(!0),H.$tab.find(".process-adapters").hide()},50)}),this.$tab.find("#btn_filter_adapters").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.onlyInstalled=!H.onlyInstalled,H.onlyInstalled?H.$tab.find("#btn_filter_adapters").addClass("red lighten-3"):H.$tab.find("#btn_filter_adapters").removeClass("red lighten-3"),H.main.saveConfig("adaptersOnlyInstalled",H.onlyInstalled),setTimeout(function(){H._postInit(!0),H.$tab.find(".process-adapters").hide()},50)}),this.$tab.find("#btn_filter_updates").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.onlyUpdatable=!H.onlyUpdatable,i(),H.main.saveConfig("adaptersOnlyUpdatable",H.onlyUpdatable),setTimeout(function(){H._postInit(!0),H.$tab.find(".process-adapters").hide()},200)}),this.$tab.find("#btn_filter_custom_url").off("click").on("click",function(){var e,t='",n=[];for(e in H.urls)H.urls.hasOwnProperty(e)&&n.push(e);n.sort();for(var i=0;i'+n[i]+"")}H.$installDialog.find("#install-github-link").html(t).val(H.main.config.adaptersGithub||""),H.$installDialog.modal(),H.$installDialog.find(".btn-install").off("click").on("click",function(){var e,t,n;if(!H.$installDialog.find('a[href="#tabs-install-github"]').hasClass("active"))e=H.$installDialog.find("#install-url-link").val(),t=H.$installDialog.find("#install-url-debug").prop("checked")?" --debug":"",n="";else{var i=H.$installDialog.find("#install-github-link").val().split(" ");e=i[0],t=H.$installDialog.find("#install-github-debug").prop("checked")?" --debug":"",n=" "+i[1]}e?H.main.cmdExec(null,'url "'+e+'"'+n+t,function(e){e||H.init(!0,!0)}):H.main.showError(_("Invalid link"))}),H.$installDialog.find("#install-github-link").select(),H.$installDialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),H.$installDialog.modal("open"),H.$installDialog.find(".tabs").mtabs({nShow:function(e){e&&H.main.saveConfig("adaptersInstallTab",$(e).attr("id"))}}),H.main.config.adaptersInstallTab&&!H.main.noSelect&&H.$installDialog.find(".tabs").mtabs("select",H.main.config.adaptersInstallTab)}),this.$tab.find("#btn_upgrade_all").off("click").on("click",function(){H.main.confirmMessage(_("Do you want to upgrade all adapters?"),_("Please confirm"),"help",function(e){e&&H.main.cmdExec(null,"upgrade",function(e){e||H._postInit(!0)})})}),this.$tab.find("#btn_adapters_expert_mode").on("click",function(){H.main.config.expertMode=!H.main.config.expertMode,H.main.saveConfig("expertMode",H.main.config.expertMode),H.updateExpertMode(),H.main.tabs.instances.updateExpertMode()}),H.main.config.expertMode&&H.$tab.find("#btn_adapters_expert_mode").addClass("red lighten-3"),this.$installDialog.find("#install-github-link").on("change",function(){H.main.saveConfig("adaptersGithub",$(this).val())}),this.$installDialog.find("#install-url-link").on("keyup",function(e){13===e.which&&H.$installDialog.find("#dialog-install-url-button").trigger("click")}),this.isTiles=void 0===this.main.config.adaptersIsTiles||null===this.main.config.adaptersIsTiles||this.main.config.adaptersIsTiles,this.isList=this.main.config.adaptersIsList||!1,this.onlyInstalled=this.main.config.adaptersOnlyInstalled||!1,this.onlyUpdatable=this.main.config.adaptersOnlyUpdatable||!1,this.currentFilter=this.main.config.adaptersCurrentFilter||"",this.currentType=this.main.config.adaptersCurrentType||"",this.currentOrder=this.main.config.adaptersCurrentOrder||"a-z",this.isCollapsed=this.main.config.adaptersIsCollapsed?JSON.parse(this.main.config.adaptersIsCollapsed):{},this.currentFilter?(this.$tab.find(".filter-input").addClass("input-not-empty").val(H.currentFilter),this.$tab.find(".filter-clear").show()):this.$tab.find(".filter-clear").hide(),this.onlyInstalled?this.$tab.find("#btn_filter_adapters").addClass("red lighten-3"):this.$tab.find("#btn_filter_adapters").removeClass("red lighten-3"),this.onlyUpdatable?this.$tab.find("#btn_filter_updates").addClass("red lighten-3"):this.$tab.find("#btn_filter_updates").removeClass("red lighten-3"),"ie"===this.main.browser&&this.main.browserVersion<=10&&(this.isTiles=!1,this.$tab.find("#btn_switch_adapters").hide()),a(),this.$tab.find("#btn_refresh_adapters").on("click",function(){H.init(!0,!0)}),this.$tab.find(".filter-input").on("keyup",function(){$(this).trigger("change")}).on("change",function(e){H.filterTimer&&clearTimeout(H.filterTimer),H.filterTimer=setTimeout(function(){H.filterTimer=null,H.currentFilter=H.$tab.find(".filter-input").val().toLowerCase(),e&&e.target&&$(e.target)[H.currentFilter?"addClass":"removeClass"]("input-not-empty"),H.currentFilter?H.$tab.find(".filter-clear").show():H.$tab.find(".filter-clear").hide(),H.main.saveConfig("adaptersCurrentFilter",H.currentFilter),H.isTiles?G():H.$grid.fancytree("getTree").filterNodes(B,!1)},400)}),this.$tab.find(".filter-clear").on("click",function(){H.$tab.find(".filter-input").val("").trigger("change")}),this.isTiles?(this.$tab.find("#btn_switch_adapters").find("i").text("view_list"),H.$tab.removeClass("view-table").addClass("view-tiles"),n()):(H.$tab.removeClass("view-tiles").addClass("view-table"),t())},this.updateExpertMode=function(){this.init(!0),a()},this.getAdaptersInfo=function(e,t,n,i){if(e){if(!i)throw"Callback cannot be null or undefined";t&&(!this.curRepoLastUpdate||1e3<(new Date).getTime()-this.curRepoLastUpdate)&&(this.curRepository=null,this.curInstalled=null),this.curRunning?this.curRunning.push(i):(this.curRepository&&this.curRepoLastHost===e||(this.curRepository=null,this.main.socket.emit("sendToHost",e,"getRepository",{repo:this.main.systemConfig.common.activeRepo,update:n},function(e){"permissionError"===e&&(console.error('May not read "getRepository"'),e={}),H.curRepository=e||{},H.curRepository&&H.curInstalled&&H.curRunning&&(H.curRepoLastUpdate=(new Date).getTime(),setTimeout(function(){for(var e=0;e'+e+'',t&&(e+=''),e+=""}c.sort(),H.tree=[],H.data={};for(var m=0;m';for(var w=0;w',b!==p&&(g+=''+p+"",b&&(g+=" ~ ")),b&&(g+=''+b+""),g+=""):g+='',g+=''+n.version+"",h=''+n.version+"",g+="",!y&&H.onlyUpdatable)continue}i=u(a=i,y,M,v);var j=(n.type||H.types[o]||"common adapters")+"_group";C=(C="object"==typeof n.desc?n.desc[systemLang]||n.desc.en:n.desc)||"",C+=W(j,o,H.main.states["system.adapter."+o+".upload"]?H.main.states["system.adapter."+o+".upload"].val:0);var N=n.titleLang||n.title;if(N="object"==typeof N?N[systemLang]||N.en:N,H.data[o]={image:f?'':"",icon:f||"",stat:e[o]?e[o].stat:0,name:o,title:(N||"").replace("yunkong2 Visualisation - ",""),desc:C,news:M,updatableError:v,keywords:n.keywords?n.keywords.join(" "):"",version:i,installed:g,rawVersion:a,instances:p,rawInstalled:h,versionDate:n.versionDate,updatable:y,bold:n.highlight||!1,install:''+(H.main.config.expertMode?'':"")+"'+(H.main.config.expertMode?'':""),group:j,license:n.license||"",licenseUrl:n.licenseUrl||""},n.type||console.log('"'+o+'": "common adapters",'),n.type&&H.types[o]&&console.log('Adapter "'+o+'" has own type. Remove from admin.'),H.isList)H.tree.push({icon:f,title:H.data[o].title||o,key:o});else{for(var L=-1,T=0;T':"",icon:n.extIcon,stat:n.stat,name:o,title:(N||"").replace("yunkong2 Visualisation - ",""),desc:C,keywords:n.keywords?n.keywords.join(" "):"",rawVersion:a,version:i,bold:n.highlight,installed:"",versionDate:n.versionDate,install:''+(H.main.config.expertMode?'':""),license:n.license||"",licenseUrl:n.licenseUrl||"",group:j},n.type||console.log('"'+o+'": "common adapters",'),n.type&&H.types[o]&&console.log('Adapter "'+o+'" has own type. Remove from admin.'),H.isList)H.tree.push({icon:n.extIcon,title:H.data[o].title||o,key:o});else{for(var D=-1,I=0;IH.data[t].stat?-1:H.data[e].statH.data[t].versionDate?-1:H.data[e].versionDate',z+='
                  ',z+='
                  ',z+='
                  ',z+=' ',z+=' '+S.title+"",z+=' more_vert',z+='
                    ',z+="
                  • "+d["Available version:"]+' "+S.rawVersion+""+(S.updatable?'':"")+"
                  • ",S.installed&&(z+="
                  • "+d["Installed version"]+': '+S.rawInstalled+"
                  • "),S.instances&&(z+="
                  • "+_("Installed instances")+': '+S.instances+"
                  • "),z+="
                  ",z+="
                  ",z+=' ',z+='
                  ',z+=' close',z+="

                  "+S.desc+"

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

                    "+g.list[l]+"


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

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

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

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

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

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

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  Copyright © 2014-2018 bluefox, 2014 hobbyquaker

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

                  ' + ad.desc + '

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

                  Modal Header

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

                      ' + that.list[se] + '


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

                          ' + that.list[se] + '


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