@c8y/ng1-modules 1023.92.0 → 1023.97.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/locales/de.po +165 -3
- package/core/locales/es.po +165 -3
- package/core/locales/fr.po +165 -3
- package/core/locales/ja_JP.po +165 -3
- package/core/locales/ko.po +165 -3
- package/core/locales/nl.po +165 -3
- package/core/locales/pl.po +165 -3
- package/core/locales/pt_BR.po +165 -3
- package/core/locales/zh_CN.po +165 -3
- package/core/locales/zh_TW.po +165 -3
- package/core/ui/navigation/breadcrumbs.component.js +1 -1
- package/core/ui/title/title.controller.js +1 -1
- package/htmlWidget/htmlWidget.controller.js +1 -1
- package/package.json +1 -1
- package/scada/index.js +1 -1
- package/smartRules/controllers/list.js +1 -1
- package/smartRules/list/smartRulesList.component.js +1 -1
- package/smartRules/list/smartRulesList.html +10 -0
- package/smartRules/views/list.html +10 -0
package/core/locales/zh_TW.po
CHANGED
|
@@ -1127,6 +1127,9 @@ msgstr "添加固件补丁"
|
|
|
1127
1127
|
msgid "Add first asset property mapping."
|
|
1128
1128
|
msgstr "添加第一個资产属性映射。"
|
|
1129
1129
|
|
|
1130
|
+
msgid "Add first placeholder in the preview or code."
|
|
1131
|
+
msgstr "在预览或程式码中添加第一个占位符。"
|
|
1132
|
+
|
|
1130
1133
|
msgid "Add fragment"
|
|
1131
1134
|
msgstr "添加片段"
|
|
1132
1135
|
|
|
@@ -1268,6 +1271,9 @@ msgstr "添加或选择说明。"
|
|
|
1268
1271
|
msgid "Add pattern"
|
|
1269
1272
|
msgstr "添加模式"
|
|
1270
1273
|
|
|
1274
|
+
msgid "Add placeholder"
|
|
1275
|
+
msgstr "添加占位符"
|
|
1276
|
+
|
|
1271
1277
|
msgid "Add policy"
|
|
1272
1278
|
msgstr "添加策略"
|
|
1273
1279
|
|
|
@@ -1493,6 +1499,9 @@ msgstr "高級品牌"
|
|
|
1493
1499
|
msgid "Advanced developer mode"
|
|
1494
1500
|
msgstr "高级开发人员模式"
|
|
1495
1501
|
|
|
1502
|
+
msgid "Advanced editor"
|
|
1503
|
+
msgstr "高级编辑器"
|
|
1504
|
+
|
|
1496
1505
|
msgid "Advanced settings"
|
|
1497
1506
|
msgstr "高级设置"
|
|
1498
1507
|
|
|
@@ -1942,6 +1951,9 @@ msgstr "发生内部错误,请重试上传。"
|
|
|
1942
1951
|
msgid "An object identifier value, typically an address identifying a device and its status."
|
|
1943
1952
|
msgstr "对象标识符值,通常是标识设备及其状态的地址。"
|
|
1944
1953
|
|
|
1954
|
+
msgid "Analyze and suggest"
|
|
1955
|
+
msgstr "分析並提出建議"
|
|
1956
|
+
|
|
1945
1957
|
msgid "Analyzing query…"
|
|
1946
1958
|
msgstr "分析查詢…"
|
|
1947
1959
|
|
|
@@ -2438,6 +2450,9 @@ msgstr "授权请求"
|
|
|
2438
2450
|
msgid "Auto"
|
|
2439
2451
|
msgstr "自动"
|
|
2440
2452
|
|
|
2453
|
+
msgid "Auto (from filename)"
|
|
2454
|
+
msgstr "自动(根据档案名称)"
|
|
2455
|
+
|
|
2441
2456
|
msgid "Auto apply constraints"
|
|
2442
2457
|
msgstr "自动应用约束"
|
|
2443
2458
|
|
|
@@ -2628,6 +2643,9 @@ msgstr "之前"
|
|
|
2628
2643
|
msgid "Below you can configure one or more OPC UA servers. The OPC UA agent will connect to these servers if they are enabled and the connection state is set to connected."
|
|
2629
2644
|
msgstr "您可以在下方配置一台或多台 OPC UA 服务器。如果启用了这些服务器并将连接状态设置为已连接,则 OPC UA 代理将连接到这些服务器。"
|
|
2630
2645
|
|
|
2646
|
+
msgid "Best guess"
|
|
2647
|
+
msgstr "最合理的推測"
|
|
2648
|
+
|
|
2631
2649
|
msgid "Billing mode"
|
|
2632
2650
|
msgstr "开单模式"
|
|
2633
2651
|
|
|
@@ -2769,6 +2787,9 @@ msgstr "麵包屑扩展,强化群组间导航体验。"
|
|
|
2769
2787
|
msgid "Browse"
|
|
2770
2788
|
msgstr "瀏覽"
|
|
2771
2789
|
|
|
2790
|
+
msgid "Browse or drop file here…"
|
|
2791
|
+
msgstr "在此浏览或拖放文件…"
|
|
2792
|
+
|
|
2772
2793
|
msgid "Browse path"
|
|
2773
2794
|
msgstr "浏览路径"
|
|
2774
2795
|
|
|
@@ -2959,6 +2980,9 @@ msgstr "CRL 檔案內容將覆蓋手動條目。"
|
|
|
2959
2980
|
msgid "CRL saved."
|
|
2960
2981
|
msgstr "CRL 已儲存。"
|
|
2961
2982
|
|
|
2983
|
+
msgid "CSS"
|
|
2984
|
+
msgstr "CSS"
|
|
2985
|
+
|
|
2962
2986
|
msgid "CSS encapsulation"
|
|
2963
2987
|
msgstr "CSS 封装"
|
|
2964
2988
|
|
|
@@ -4237,6 +4261,9 @@ msgstr "內容"
|
|
|
4237
4261
|
msgid "Content couldn't be loaded."
|
|
4238
4262
|
msgstr "無法載入內容。"
|
|
4239
4263
|
|
|
4264
|
+
msgid "Content is sourced from a remote URL and cannot be edited inline."
|
|
4265
|
+
msgstr "此內容取自遠端網址,無法直接在頁面中编辑。"
|
|
4266
|
+
|
|
4240
4267
|
msgid "Continue"
|
|
4241
4268
|
msgstr "继续"
|
|
4242
4269
|
|
|
@@ -4354,6 +4381,9 @@ msgstr "无法添加证书。带 {{fingerprint}} 指纹的证书已存在。"
|
|
|
4354
4381
|
msgid "Could not add identity. External ID \"{{externalId}}\" of the type \"{{type}}\" already exists."
|
|
4355
4382
|
msgstr "无法添加标识。\"{{type}}\" 类型的外部 ID \"{{externalId}}\" 已存在。"
|
|
4356
4383
|
|
|
4384
|
+
msgid "Could not apply the pasted SVG code."
|
|
4385
|
+
msgstr "无法应用贴上的 SVG 程式码。"
|
|
4386
|
+
|
|
4357
4387
|
msgid "Could not assign child devices."
|
|
4358
4388
|
msgstr "無法分配子設備。"
|
|
4359
4389
|
|
|
@@ -4576,6 +4606,9 @@ msgstr "无法删除租户 \"{{tenant}}\"。请首先删除其子租户。"
|
|
|
4576
4606
|
msgid "Could not set device protocol."
|
|
4577
4607
|
msgstr "无法设置设备协议。"
|
|
4578
4608
|
|
|
4609
|
+
msgid "Could not subscribe to mapped data."
|
|
4610
|
+
msgstr "无法订阅已映射的数据。"
|
|
4611
|
+
|
|
4579
4612
|
msgid "Could not subscribe to the microservice because another application with the same context path is already subscribed."
|
|
4580
4613
|
msgstr "无法订阅微服务,因为已订阅具有同一上下文路径的另一个应用程序。"
|
|
4581
4614
|
|
|
@@ -4594,6 +4627,9 @@ msgstr "无法更新用户 \"{{username}}\"。"
|
|
|
4594
4627
|
msgid "Could not upload the files."
|
|
4595
4628
|
msgstr "无法上传文件。"
|
|
4596
4629
|
|
|
4630
|
+
msgid "Could not upload the selected SVG file."
|
|
4631
|
+
msgstr "无法上传选择的 SVG 文件。"
|
|
4632
|
+
|
|
4597
4633
|
msgid "Could not use a reserved SQL keyword \"{{tenantId}}\" as a domain name."
|
|
4598
4634
|
msgstr "无法使用保留的 SQL 关键字 \"{{tenantId}}\" 作为域名。"
|
|
4599
4635
|
|
|
@@ -6287,6 +6323,9 @@ msgstr "在组导航器菜单下显示顶层组。"
|
|
|
6287
6323
|
msgid "Displays a customizable quick links widget"
|
|
6288
6324
|
msgstr "显示可自定义的快速链接小组件"
|
|
6289
6325
|
|
|
6326
|
+
msgid "Displays a dynamically updated SVG image for real-time device monitoring."
|
|
6327
|
+
msgstr "显示一张会动态更新的 SVG 图像,用於实时监控设备。"
|
|
6328
|
+
|
|
6290
6329
|
msgid "Displays a graph of selected data points"
|
|
6291
6330
|
msgstr "顯示所選擇數據點的圖形"
|
|
6292
6331
|
|
|
@@ -6547,6 +6586,12 @@ msgstr "对象 [{{id}}] 的 ParameterName \"{{name}}\" 重复,已重命名为
|
|
|
6547
6586
|
msgid "Duplicate application"
|
|
6548
6587
|
msgstr "重复应用程序"
|
|
6549
6588
|
|
|
6589
|
+
msgid "Duplicate as local"
|
|
6590
|
+
msgstr "复制为本地副本"
|
|
6591
|
+
|
|
6592
|
+
msgid "Duplicate as local smart rule"
|
|
6593
|
+
msgstr "复制为本机智能规则"
|
|
6594
|
+
|
|
6550
6595
|
msgid "Duplicate as regular dashboard"
|
|
6551
6596
|
msgstr "複製為常規儀錶板"
|
|
6552
6597
|
|
|
@@ -6676,6 +6721,9 @@ msgstr "编辑全局智能规则"
|
|
|
6676
6721
|
msgid "Edit holding register: \"{{name}}\""
|
|
6677
6722
|
msgstr "编辑保持寄存器:\"{{name}}\""
|
|
6678
6723
|
|
|
6724
|
+
msgid "Edit inline"
|
|
6725
|
+
msgstr "内嵌编辑"
|
|
6726
|
+
|
|
6679
6727
|
msgid "Edit input register: \"{{name}}\""
|
|
6680
6728
|
msgstr "编辑输入寄存器:\"{{name}}\""
|
|
6681
6729
|
|
|
@@ -6739,6 +6787,9 @@ msgstr "资产属性的可编辑表单。"
|
|
|
6739
6787
|
msgid "Editing`icons-category`"
|
|
6740
6788
|
msgstr "編輯"
|
|
6741
6789
|
|
|
6790
|
+
msgid "Editor language"
|
|
6791
|
+
msgstr "編輯語言"
|
|
6792
|
+
|
|
6742
6793
|
msgid "Email"
|
|
6743
6794
|
msgstr "电子邮件"
|
|
6744
6795
|
|
|
@@ -6939,6 +6990,9 @@ msgstr "查询序列号"
|
|
|
6939
6990
|
msgid "Enter address"
|
|
6940
6991
|
msgstr "输入地址"
|
|
6941
6992
|
|
|
6993
|
+
msgid "Enter at least 3 characters to search."
|
|
6994
|
+
msgstr "請輸入至少 3 個字元進行搜尋。"
|
|
6995
|
+
|
|
6942
6996
|
msgid "Enter one or more valid email addresses, separated with a comma."
|
|
6943
6997
|
msgstr "输入一个或多个以逗号分隔的有效电子邮件地址。"
|
|
6944
6998
|
|
|
@@ -7505,6 +7559,9 @@ msgstr "文件"
|
|
|
7505
7559
|
msgid "File \"{{ vm.details.name }}\" is ready for download."
|
|
7506
7560
|
msgstr "文件 \"{{ vm.details.name }}\" 准备就绪,可以下载。"
|
|
7507
7561
|
|
|
7562
|
+
msgid "File URL"
|
|
7563
|
+
msgstr "文件網址"
|
|
7564
|
+
|
|
7508
7565
|
msgid "File could not be loaded."
|
|
7509
7566
|
msgstr "无法加载文件。"
|
|
7510
7567
|
|
|
@@ -7550,6 +7607,9 @@ msgstr "已导出的数据文件可以从 {tenant-domain}/inventory/binaries/{bi
|
|
|
7550
7607
|
msgid "File(s) uploaded."
|
|
7551
7608
|
msgstr "已上傳檔案。"
|
|
7552
7609
|
|
|
7610
|
+
msgid "Filename"
|
|
7611
|
+
msgstr "檔案名稱"
|
|
7612
|
+
|
|
7553
7613
|
msgid "Files and folders`icons-category`"
|
|
7554
7614
|
msgstr "檔案和資料夾"
|
|
7555
7615
|
|
|
@@ -8264,6 +8324,9 @@ msgstr "產生匯出"
|
|
|
8264
8324
|
msgid "Generate public and private keys"
|
|
8265
8325
|
msgstr "生成公钥和私钥"
|
|
8266
8326
|
|
|
8327
|
+
msgid "Generate with AI"
|
|
8328
|
+
msgstr "透過 AI 生成"
|
|
8329
|
+
|
|
8267
8330
|
msgid "Generating report"
|
|
8268
8331
|
msgstr "正在生成报告"
|
|
8269
8332
|
|
|
@@ -9061,6 +9124,9 @@ msgstr "IMSI"
|
|
|
9061
9124
|
msgid "INCORRECT"
|
|
9062
9125
|
msgstr "不正确"
|
|
9063
9126
|
|
|
9127
|
+
msgid "INI / TOML / Properties"
|
|
9128
|
+
msgstr "INI / TOML / 属性"
|
|
9129
|
+
|
|
9064
9130
|
msgid "INTEGER"
|
|
9065
9131
|
msgstr "整数"
|
|
9066
9132
|
|
|
@@ -9584,6 +9650,9 @@ msgstr "我是您的 AI 程式碼助手,在此協助您為儀表板打造強
|
|
|
9584
9650
|
msgid "J2ME commands"
|
|
9585
9651
|
msgstr "J2ME 命令"
|
|
9586
9652
|
|
|
9653
|
+
msgid "JSON"
|
|
9654
|
+
msgstr "JSON"
|
|
9655
|
+
|
|
9587
9656
|
msgid "JSON parsed successfully."
|
|
9588
9657
|
msgstr "已成功解析 JSON。"
|
|
9589
9658
|
|
|
@@ -9596,6 +9665,9 @@ msgstr "JWKS URL"
|
|
|
9596
9665
|
msgid "JWT field"
|
|
9597
9666
|
msgstr "JWT 字段"
|
|
9598
9667
|
|
|
9668
|
+
msgid "JavaScript"
|
|
9669
|
+
msgstr "JavaScript"
|
|
9670
|
+
|
|
9599
9671
|
msgid "KPI"
|
|
9600
9672
|
msgstr "KPI"
|
|
9601
9673
|
|
|
@@ -10404,6 +10476,9 @@ msgstr "映射"
|
|
|
10404
10476
|
msgid "Mark as provided"
|
|
10405
10477
|
msgstr "標示為提供商"
|
|
10406
10478
|
|
|
10479
|
+
msgid "Markdown"
|
|
10480
|
+
msgstr "Markdown"
|
|
10481
|
+
|
|
10407
10482
|
msgid "Markdown widget"
|
|
10408
10483
|
msgstr "標記小組件"
|
|
10409
10484
|
|
|
@@ -10900,9 +10975,15 @@ msgstr "此名稱已被使用。請使用其他名稱。"
|
|
|
10900
10975
|
msgid "Name and email"
|
|
10901
10976
|
msgstr "名稱和电子邮件"
|
|
10902
10977
|
|
|
10978
|
+
msgid "Name does not match the required format."
|
|
10979
|
+
msgstr "名稱不符合必需格式。"
|
|
10980
|
+
|
|
10903
10981
|
msgid "Name is mandatory but has no restricted format or semantics."
|
|
10904
10982
|
msgstr "必須填寫名稱,對格式或語義沒有限制。"
|
|
10905
10983
|
|
|
10984
|
+
msgid "Name must be a valid identifier (only letters, digits, underscores, or dollar signs allowed, cannot start with a digit)."
|
|
10985
|
+
msgstr "名稱必須為有效的識別碼(僅允許使用字母、數字、底線或美元符號,且不能以數字開頭)。"
|
|
10986
|
+
|
|
10906
10987
|
msgid "Name must be unique among coils and discrete inputs."
|
|
10907
10988
|
msgstr "线圈和离散输入中的名称必须是唯一的。"
|
|
10908
10989
|
|
|
@@ -11669,6 +11750,9 @@ msgstr "没有此范围的权限。"
|
|
|
11669
11750
|
msgid "No permissions required."
|
|
11670
11751
|
msgstr "不需要授权。"
|
|
11671
11752
|
|
|
11753
|
+
msgid "No placeholder mappings"
|
|
11754
|
+
msgstr "沒有占位符映射"
|
|
11755
|
+
|
|
11672
11756
|
msgid "No plugin selected"
|
|
11673
11757
|
msgstr "未選擇插件"
|
|
11674
11758
|
|
|
@@ -12758,12 +12842,18 @@ msgstr "密碼"
|
|
|
12758
12842
|
msgid "Passwords do not match."
|
|
12759
12843
|
msgstr "密碼不匹配。"
|
|
12760
12844
|
|
|
12845
|
+
msgid "Paste SVG code here"
|
|
12846
|
+
msgstr "請將 SVG 程式碼貼在此處"
|
|
12847
|
+
|
|
12761
12848
|
msgid "Paste dashboard"
|
|
12762
12849
|
msgstr "粘贴面板"
|
|
12763
12850
|
|
|
12764
12851
|
msgid "Paste dashboard \"{{ dashboardName }}\""
|
|
12765
12852
|
msgstr "粘貼儀錶板 \"{{ dashboardName }}\""
|
|
12766
12853
|
|
|
12854
|
+
msgid "Paste text"
|
|
12855
|
+
msgstr "貼上文字"
|
|
12856
|
+
|
|
12767
12857
|
msgid "Paste the certificate in PEM format."
|
|
12768
12858
|
msgstr "以 PEM 格式粘贴证书。"
|
|
12769
12859
|
|
|
@@ -12898,6 +12988,15 @@ msgstr "圓餅圖选项"
|
|
|
12898
12988
|
msgid "Placeholder"
|
|
12899
12989
|
msgstr "占位符"
|
|
12900
12990
|
|
|
12991
|
+
msgid "Placeholder mappings"
|
|
12992
|
+
msgstr "占位符映射"
|
|
12993
|
+
|
|
12994
|
+
msgid "Placeholder name"
|
|
12995
|
+
msgstr "占位符名稱"
|
|
12996
|
+
|
|
12997
|
+
msgid "Placeholder name is required."
|
|
12998
|
+
msgstr "必需填寫占位符名稱。"
|
|
12999
|
+
|
|
12901
13000
|
msgid "Placeholder: {tenant} - suspended tenant's ID; {tenant-domain} - tenant's domain"
|
|
12902
13001
|
msgstr "占位符:{tenant} - 已暂停租户的 ID;{tenant-domain} - 租户的域"
|
|
12903
13002
|
|
|
@@ -12919,6 +13018,9 @@ msgstr "預留位置:{tenant-domain}、{host}、{token}、{username}、{email}
|
|
|
12919
13018
|
msgid "Placeholders: {user}, {exportApi}"
|
|
12920
13019
|
msgstr "占位符:{user}、{exportApi}"
|
|
12921
13020
|
|
|
13021
|
+
msgid "Plain text"
|
|
13022
|
+
msgstr "純文字"
|
|
13023
|
+
|
|
12922
13024
|
msgid "Platform administration`KEEP_ORIGINAL`"
|
|
12923
13025
|
msgstr "Platform administration"
|
|
12924
13026
|
|
|
@@ -12937,6 +13039,9 @@ msgstr "请联系平台管理员。"
|
|
|
12937
13039
|
msgid "Please note that this action is irreversible. Do you want to save your changes?"
|
|
12938
13040
|
msgstr "请注意,此操作无法恢复。您确定要保存更改吗?"
|
|
12939
13041
|
|
|
13042
|
+
msgid "Please paste SVG code before applying."
|
|
13043
|
+
msgstr "請在应用前貼上 SVG 程式碼。"
|
|
13044
|
+
|
|
12940
13045
|
msgid "Plugin installation"
|
|
12941
13046
|
msgstr "外掛程式安裝"
|
|
12942
13047
|
|
|
@@ -13366,6 +13471,9 @@ msgstr "查询 WLAN 状态"
|
|
|
13366
13471
|
msgid "Query analyzed"
|
|
13367
13472
|
msgstr "查詢已分析"
|
|
13368
13473
|
|
|
13474
|
+
msgid "Query analyzed."
|
|
13475
|
+
msgstr "查詢已分析。"
|
|
13476
|
+
|
|
13369
13477
|
msgid "Queue size"
|
|
13370
13478
|
msgstr "队列大小"
|
|
13371
13479
|
|
|
@@ -13915,6 +14023,9 @@ msgstr "已刪除小組件:{{ widgetList }}。"
|
|
|
13915
14023
|
msgid "Renamed asset property and updated references in HTML code."
|
|
13916
14024
|
msgstr "已重新命名资产属性,並更新 HTML 程式碼中的引用。"
|
|
13917
14025
|
|
|
14026
|
+
msgid "Renamed placeholder and updated references in code."
|
|
14027
|
+
msgstr "已重新命名占位符,並更新程式碼中的參照。"
|
|
14028
|
+
|
|
13918
14029
|
msgid "Render the first column (excluding computed and alarm types) as a link to the asset details."
|
|
13919
14030
|
msgstr "將第一欄(不包含計算值與警報類型)呈現為资产详细信息的链接。"
|
|
13920
14031
|
|
|
@@ -14287,6 +14398,12 @@ msgstr "运行连线命令"
|
|
|
14287
14398
|
msgid "S/N"
|
|
14288
14399
|
msgstr "序列号"
|
|
14289
14400
|
|
|
14401
|
+
msgid "SCADA"
|
|
14402
|
+
msgstr "SCADA"
|
|
14403
|
+
|
|
14404
|
+
msgid "SCADA SVG agent"
|
|
14405
|
+
msgstr "SCADA SVG 代理程式"
|
|
14406
|
+
|
|
14290
14407
|
msgid "SCHEDULED"
|
|
14291
14408
|
msgstr "已安排"
|
|
14292
14409
|
|
|
@@ -14419,9 +14536,21 @@ msgstr "已暂停"
|
|
|
14419
14536
|
msgid "SVG"
|
|
14420
14537
|
msgstr "SVG"
|
|
14421
14538
|
|
|
14539
|
+
msgid "SVG and mappings updated."
|
|
14540
|
+
msgstr "已更新 SVG 檔案及映射。"
|
|
14541
|
+
|
|
14542
|
+
msgid "SVG code applied."
|
|
14543
|
+
msgstr "已应用 SVG 程式码。"
|
|
14544
|
+
|
|
14545
|
+
msgid "SVG configuration"
|
|
14546
|
+
msgstr "SVG 設定"
|
|
14547
|
+
|
|
14422
14548
|
msgid "SVG content will be sanitized."
|
|
14423
14549
|
msgstr "SVG 内容将清除。"
|
|
14424
14550
|
|
|
14551
|
+
msgid "SVG file uploaded."
|
|
14552
|
+
msgstr "已上传 SVG 文件。"
|
|
14553
|
+
|
|
14425
14554
|
msgid "Sampling interval"
|
|
14426
14555
|
msgstr "采样间隔时间"
|
|
14427
14556
|
|
|
@@ -14578,6 +14707,9 @@ msgstr "搜索重置。全文搜索不支持过滤。"
|
|
|
14578
14707
|
msgid "Search results"
|
|
14579
14708
|
msgstr "搜索结果"
|
|
14580
14709
|
|
|
14710
|
+
msgid "Search users"
|
|
14711
|
+
msgstr "搜尋用户"
|
|
14712
|
+
|
|
14581
14713
|
msgid "Searching by exact match. Click for other search options:"
|
|
14582
14714
|
msgstr "正在按精确匹配搜索。单击可获取其他搜索选项:"
|
|
14583
14715
|
|
|
@@ -16811,6 +16943,9 @@ msgstr "開啟聲音探測器"
|
|
|
16811
16943
|
msgid "Switch to ModemMode"
|
|
16812
16944
|
msgstr "切换为 ModemMode"
|
|
16813
16945
|
|
|
16946
|
+
msgid "Switch to inline editing"
|
|
16947
|
+
msgstr "切換至內嵌编辑模式"
|
|
16948
|
+
|
|
16814
16949
|
msgid "Switch vibration detector off"
|
|
16815
16950
|
msgstr "关闭振动探测器"
|
|
16816
16951
|
|
|
@@ -17572,6 +17707,9 @@ msgstr "時間上下文可在小工具檢視模式中進行設定。"
|
|
|
17572
17707
|
msgid "The update method is determined by the widget type. Some widgets support real-time updates via WebSocket connection, while others use periodic refreshes."
|
|
17573
17708
|
msgstr "更新方式取決於小工具類型。部分小工具支援透過 WebSocket 連線進行即時更新,而其他小工具則採用定期刷新機制。"
|
|
17574
17709
|
|
|
17710
|
+
msgid "The uploaded file appears to be binary. Switching to inline editing will discard it. Do you want to continue?"
|
|
17711
|
+
msgstr "上传的文件似乎是二进位文件。若切换至内嵌编辑模式,该文件将会被删除。您要继续吗?"
|
|
17712
|
+
|
|
17575
17713
|
msgid "The uploaded image cannot be bigger than 4 MB. Please upload a smaller one."
|
|
17576
17714
|
msgstr "上传的图像不能大于 4 MB。请上传小图像。"
|
|
17577
17715
|
|
|
@@ -18367,6 +18505,9 @@ msgstr "在此輸入您的訊息..."
|
|
|
18367
18505
|
msgid "Type: {{ alarmType }}"
|
|
18368
18506
|
msgstr "類型: {{ alarmType }}"
|
|
18369
18507
|
|
|
18508
|
+
msgid "TypeScript"
|
|
18509
|
+
msgstr "TypeScript"
|
|
18510
|
+
|
|
18370
18511
|
msgid "Types"
|
|
18371
18512
|
msgstr "类型"
|
|
18372
18513
|
|
|
@@ -18681,6 +18822,9 @@ msgstr "已更新包可用性。"
|
|
|
18681
18822
|
msgid "Updated widgets: {{ widgetList }}."
|
|
18682
18823
|
msgstr "已更新小組件:{{ widgetList }}。"
|
|
18683
18824
|
|
|
18825
|
+
msgid "Updating SVG and mappings…"
|
|
18826
|
+
msgstr "更新 SVG 及映射…"
|
|
18827
|
+
|
|
18684
18828
|
msgid "Updating global roles will force you to log out. Do you want to proceed?"
|
|
18685
18829
|
msgstr "更新全局角色将强制您注销。是否要继续?"
|
|
18686
18830
|
|
|
@@ -19018,6 +19162,9 @@ msgstr "用戶名和登录别名必须不同。"
|
|
|
19018
19162
|
msgid "Username and password"
|
|
19019
19163
|
msgstr "用戶名和密码"
|
|
19020
19164
|
|
|
19165
|
+
msgid "Username must contain at least 3 characters."
|
|
19166
|
+
msgstr "用户名必须至少包含 3 个字元。"
|
|
19167
|
+
|
|
19021
19168
|
msgid "Username must not contain spaces nor slashes (\"/\", \"\\\") nor (\"+\"), (\":\"), (\"$\") signs."
|
|
19022
19169
|
msgstr "用戶名不得包含空格、斜线(\"/\"、\"\\\")以及 (\"+\")、(\":\")、(\"$\") 符号。"
|
|
19023
19170
|
|
|
@@ -19421,6 +19568,9 @@ msgstr "歡迎!"
|
|
|
19421
19568
|
msgid "What can I help you with?"
|
|
19422
19569
|
msgstr "有什麼可以幫您嗎?"
|
|
19423
19570
|
|
|
19571
|
+
msgid "What would you like to visualize in this SCADA widget?"
|
|
19572
|
+
msgstr "您希望在此 SCADA 小小组件中視覺化哪些內容?"
|
|
19573
|
+
|
|
19424
19574
|
msgid "When"
|
|
19425
19575
|
msgstr "当"
|
|
19426
19576
|
|
|
@@ -19580,6 +19730,9 @@ msgstr "小组件:最近的警报"
|
|
|
19580
19730
|
msgid "Widgets: Rotation"
|
|
19581
19731
|
msgstr "小组件:旋转"
|
|
19582
19732
|
|
|
19733
|
+
msgid "Widgets: SCADA"
|
|
19734
|
+
msgstr "小组件:SCADA"
|
|
19735
|
+
|
|
19583
19736
|
msgid "Widgets: Silo"
|
|
19584
19737
|
msgstr "小组件:接收器"
|
|
19585
19738
|
|
|
@@ -19646,12 +19799,18 @@ msgstr "X 軸輔助線"
|
|
|
19646
19799
|
msgid "X.509 certificate (PEM format)"
|
|
19647
19800
|
msgstr "X.509 证书(PEM 格式)"
|
|
19648
19801
|
|
|
19802
|
+
msgid "XML"
|
|
19803
|
+
msgstr "XML"
|
|
19804
|
+
|
|
19649
19805
|
msgid "Y-axis"
|
|
19650
19806
|
msgstr "Y 軸"
|
|
19651
19807
|
|
|
19652
19808
|
msgid "Y-axis helper lines"
|
|
19653
19809
|
msgstr "Y 軸輔助線"
|
|
19654
19810
|
|
|
19811
|
+
msgid "YAML"
|
|
19812
|
+
msgstr "YAML"
|
|
19813
|
+
|
|
19655
19814
|
msgid "Year"
|
|
19656
19815
|
msgstr "年"
|
|
19657
19816
|
|
|
@@ -20507,9 +20666,6 @@ msgstr "例如,一楼"
|
|
|
20507
20666
|
msgid "e.g. Forwarding measurements"
|
|
20508
20667
|
msgstr "例如,转发测量"
|
|
20509
20668
|
|
|
20510
|
-
msgid "e.g. Host configuration"
|
|
20511
|
-
msgstr "例如,主机配置"
|
|
20512
|
-
|
|
20513
20669
|
msgid "e.g. Host configuration applied to devices with type c8y_Linux"
|
|
20514
20670
|
msgstr "例如,应用于类型为 c8y_Linux 的设备的主机配置"
|
|
20515
20671
|
|
|
@@ -20741,6 +20897,9 @@ msgstr "例如,my-tenant"
|
|
|
20741
20897
|
msgid "e.g. myCustomOperation"
|
|
20742
20898
|
msgstr "例如,myCustomOperation"
|
|
20743
20899
|
|
|
20900
|
+
msgid "e.g. myPlaceholder"
|
|
20901
|
+
msgstr "例如:myPlaceholder"
|
|
20902
|
+
|
|
20744
20903
|
msgid "e.g. myProperty"
|
|
20745
20904
|
msgstr "例如,myProperty"
|
|
20746
20905
|
|
|
@@ -21293,6 +21452,9 @@ msgstr "{{ count }} 個月前"
|
|
|
21293
21452
|
msgid "{{ count }} patches"
|
|
21294
21453
|
msgstr "{{ count }} 个补丁"
|
|
21295
21454
|
|
|
21455
|
+
msgid "{{ count }} placeholders"
|
|
21456
|
+
msgstr "{{ count }} 占位符"
|
|
21457
|
+
|
|
21296
21458
|
msgid "{{ count }} selected"
|
|
21297
21459
|
msgstr "{{ count }} 已选择"
|
|
21298
21460
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{function
|
|
1
|
+
(()=>{function n(a,c,e,r,o){var n=_.debounce(function(){var n=o.get(c.path())||{},n=n.data?e.invoke(n.data):{};a.breadcrumbs=[],i(0,(n=>((n=r.when(n).then(u))._path=c.path(),n))(n))},10),t=(a.$on("$routeChangeSuccess",n),[o.$on("breadcrumbs",i),o.$on("preferredBreadcrumbChanged",n),o.$on("update",n)]);function u(n){return _.union(n,o.getLiveBreadcrumbs())}function i(n,t){t.then(function(n){var e,r;c.path()===t._path&&((e=o.getPreferredBreadcrumb())&&n.length&&(r=n[0][n[0].length-2],_.find([r],e)||(n=_.sortBy(n,function(n){return!_.find([n[n.length-2]],e)}))),a.breadcrumbs=n)})}a.$on("$destroy",function(){return t.forEach(function(n){return n()})})}n.$inject=["$scope","$location","$injector","$q","c8yBreadcrumbs"],angular.module("c8y.ui").component("c8yUiBreadcrumbs",{templateUrl:":::PLUGIN_PATH:::/ui/navigation/breadcrumbs.html",controller:n})})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{function t(t,e,n,i,o,
|
|
1
|
+
(()=>{function t(t,e,n,i,l,o,a,c){var d,u=this,p=t.find("head title"),r=p.text();function s(){var t=a.get(n.path())||{},t=t.data?i.invoke(t.data):{};t.title||t.subtitle||t.templateUrl||t.then?((t=o.when(t))._path=n.path(),m(0,t)):$()}function m(t,e){e.then(function(t){!_.isUndefined(e._path)&&e._path!==n.path()||(u.title=(_.isUndefined(t.title)?u:t).title,u.subtitle=t.subtitle,u.templateUrl=t.templateUrl,"component"!==u.displayMode&&(u.displayMode=u.templateUrl?"template":void 0),$(u.title))})}function f(){return l.find(".transclude-main-container")}function h(){u.displayMode=void 0,u.title="",u.subtitle=""}function $(t){var e=r;t&&(e="".concat(c.getString(t)," / ").concat(e)),p.text(e)}_.assign(u,{$onInit:function(){a.setMainComponent(u),e.$on("$routeChangeStart",h),e.$on("$routeChangeSuccess",_.debounce(s,10)),d=a.$on("title",m),s()},$onDestroy:function(){a.clearMainComponent(),d&&(d(),d=null)},setTitleElement:function(t){var e=f();e.empty(),e.append(t.show()),u.displayMode="component"},clearTitleElement:function(){f().empty(),u.displayMode=void 0},isTitleVisible:function(){return u.title||u.subtitle||"template"===u.displayMode&&u.templateUrl}})}t.$inject=["$document","$scope","$location","$injector","$element","$q","c8yTitle","gettextCatalog"],angular.module("c8y.ui").controller("TitleCtrl",t)})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{function e(t,i,c,n,s,a,d,u,
|
|
1
|
+
(()=>{function e(t,i,c,n,s,a,d,o,u,l){function r(e){t.device=e.device,t.devices={},t.variables=[],t.devices[e.device.id]=e.device,_.forEach(e.children,function(e){t.devices[e.id]=e}),t.variables.push(t.device),t.variables.push(t.devices)}function v(){t.reloading=!0;var e,i=y("devices");return y("device")||i?(e=t.child.config.device.id,i=i,d.all({device:s.detail(e).then(o.getResData),children:i?c.listChildren(e):[]}).then(r).then(function(){t.reloading=!1})):(t.reloading=!1,d.when())}function h(e,i){var c;!t.reloading&&t.device&&(t.device.id===i.id?(c=i,_.isEqual(c.childDevices,t.device.childDevices)&&_.isEqual(c.childAssets,t.device.childAssets)?(t.device=c,t.devices[c.id]=c):v()):(c=i,t.devices[c.id]&&(t.devices[c.id]=c)))}function f(e){return"/managedobjects/".concat(e)}function g(e){u.addListener(t.$id,f(e),u.realtimeActions().UPDATE,h),u.start(t.$id,f(e))}function p(){t.devices&&Object.keys(t.devices).forEach(function(e){u.stop(t.$id,f(e))}),t.device=null,t.devices=null}function y(e){var e=e.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1"),i=new RegExp("\\{\\{[^\\}]*\\b".concat(e,"\\b[^\\}]*}}")),e=new RegExp('ng[\\w-]*="[^"]*\\b'.concat(e,'\\b[^"]*'));return i.test(t.child.config.html)||e.test(t.child.config.html)}function C(){var e=[];t.countersLoaded=!1,y("devicesCount")&&e.push(l.getSummary().then(function(e){t.devicesCount=e.data.deviceWithChildrenCount,t.variables.push(t.devicesCount)})),y("deviceGroupsCount")&&e.push(s.getCount({fragmentType:"c8y_IsDeviceGroup"}).then(function(e){t.deviceGroupsCount=e,t.variables.push(t.deviceGroupsCount)})),y("usersCount")&&e.push(a.mustHaveAnyRole(["ROLE_USER_MANAGEMENT_READ"]).then(i.list).then(function(e){t.usersCount=e.length,t.variables.push(t.usersCount)})),y("criticalDevicesCount")&&e.push(s.list({fragmentType:"c8y_ActiveAlarmsStatus"}).then(function(e){t.criticalDevicesCount=_.filter(e,function(e){return e.c8y_ActiveAlarmsStatus&&e.c8y_ActiveAlarmsStatus.critical}).length,t.variables.push(t.criticalDevicesCount)})),y("onlineCount")&&e.push(c.list({pageSize:1e3}).then(function(e){t.onlineCount=_.filter(e,function(e){return n.isDeviceAvailable(e)}).length})),d.all(e).then(function(){t.countersLoaded=!0}),p(),v().then(function(){t.devices&&Object.keys(t.devices).forEach(g)})}_.assign(this,{$scope:t,isVariableUsed:y}),t.$watch("child.config.device",function(e,i){e&&!_.isEqual(e,i)&&C()},!0),t.$watch("child.config.html",function(e,i){void 0===e||_.isEqual(e,i)||C()}),t.$on("$destroy",p),t.variables=[],C()}e.$inject=["$scope","c8yUser","c8yDevices","c8yDeviceStatus","c8yInventory","c8yPermissions","$q","c8yBase","c8yRealtime","c8yStatistics"],angular.module("c8y.parts.htmlwidget").controller("HtmlWidgetCtrl",e)})();
|
package/package.json
CHANGED
package/scada/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}(()=>{function e(e,t){function c(n){n&&"object"===_typeof(n)&&(Array.isArray(n)?n.forEach(c):Object.keys(n).forEach(function(e){var t,o;"__target"===e&&n[e]&&"object"===_typeof(n[e])?(o=(t=n[e]).id,n[e]={id:o,name:t.name,c8y_IsDevice:t.c8y_IsDevice}):c(n[e])}))}e.add({name:"SCADA",description:t("Display a configurable SVG."),templateUrl:":::PLUGIN_PATH:::/views/component.html",configTemplateUrl:":::PLUGIN_PATH:::/views/componentConfig.html",previewImage:":::PLUGIN_PATH:::/img/scada-widget-pr.png",transformConfigWithContext:["config","context","dashboard",function(e,t,o){return o.deviceType&&e.deviceIds&&(e.deviceIds=_.mapValues(e.deviceIds,_.constant(t.id)),c(e)),e}],options:{groupsSelectable:!0}})}e.$inject=["c8yComponentsProvider","gettext"],angular.module("c8y.parts.scadaWidget",[]).config(e)})();
|
|
1
|
+
function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}(()=>{function e(e,t){function c(n){n&&"object"===_typeof(n)&&(Array.isArray(n)?n.forEach(c):Object.keys(n).forEach(function(e){var t,o;"__target"===e&&n[e]&&"object"===_typeof(n[e])?(o=(t=n[e]).id,n[e]={id:o,name:t.name,c8y_IsDevice:t.c8y_IsDevice}):c(n[e])}))}function o(e){return e.getFeatureStatePromise("ui.scada-widget.v2").then(function(e){return!e})}o.$inject=["c8yFeatureCacheService"],e.add({name:"SCADA",description:t("Display a configurable SVG."),templateUrl:":::PLUGIN_PATH:::/views/component.html",configTemplateUrl:":::PLUGIN_PATH:::/views/componentConfig.html",previewImage:":::PLUGIN_PATH:::/img/scada-widget-pr.png",transformConfigWithContext:["config","context","dashboard",function(e,t,o){return o.deviceType&&e.deviceIds&&(e.deviceIds=_.mapValues(e.deviceIds,_.constant(t.id)),c(e)),e}],options:{groupsSelectable:!0},showIf:o})}e.$inject=["c8yComponentsProvider","gettext"],angular.module("c8y.parts.scadaWidget",[]).config(e)})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{function e(i,r,e,o,t,n,
|
|
1
|
+
(()=>{function e(i,r,e,o,t,n,c,G,a,u,l,s,d,f,h,m,g,v){var p,C=r.deviceId||r.groupId,S={},A={},R={done:!1,inProgress:!1},y={true:{text:g("Enabled`rule`"),icon:"check-circle",cls:"text-success"},false:{text:g("Disabled`rule`"),icon:"ban",cls:"text-danger"}},T=s.getContext(),x=g("Global smart rules");function E(){return o.when().then(I).then(j).then(N).then(w).then(b).catch(X)}function I(){R.inProgress=!0}function b(){R.inProgress=!1,R.done=!0,R.error=!1}function X(e){e.data&&e.data.message&&l.danger(e.data.message),R.inProgress=!1,R.done=!0,R.error=!0}function j(){return h.list().then(k)}function k(e){_.forEach(e||[],function(e){S[e.name]=e})}function N(){var e=C?m.listByContext(C):o.resolve([]),t=f.hasPermissions().then(function(e){return e?m.list():o.when([])});return o.all({listByContext:e,list:t}).then(function(e){i.rules=(e=>{var t=e;return t=C?_.reject(e,(e=>{var n=new RegExp("".concat(e,"/dashboard"));return function(e){var t=_.get(e,"config.url","");return O(e)&&!n.test(t)}})(C)):t})(_.concat(e.listByContext,e.list))})}function O(e){return"sendDashboardsViaEmail"===e.ruleTemplateName}function D(e){return m.hasSource(e,C)}function w(){var e,t;return!(Array.isArray(i.rules)&&0<i.rules.length)||null===(t=s.getContext()).context?o.resolve():(e=c.childAssets(t.id,{skipDetail:!0,params:{pageSize:2e3,withChildren:!1}}),t=c.childDevices(t.id,{params:{pageSize:2e3,withChildren:!1}}),o.all([e,t]).then(_.flatten).then(function(e){i.children=e}).then(function(){i.ruleChildren={},_.forEach(i.rules,function(e){i.ruleChildren[e.id]=M(e)})}))}function M(t){return _.filter(i.children,function(e){return m.hasSource(t,e)})}function P(e){var t=_.get(S,"".concat(_.get(e,"ruleTemplateName"),"._active")),n=A.canAddRules;return e&&!t&&(n=!1),_.isUndefined(n)&&(e=i.context?a.isAllowed({adminMOs:[i.context.id]}):o.all({isAllowedInventory:a.isAllowed({anyRole:["ROLE_INVENTORY_ADMIN","ROLE_MANAGED_OBJECT_ADMIN"]}),isAllowedSmartRules:a.isAllowed({anyRole:["ROLE_SMARTRULE_ADMIN","ROLE_CEP_MANAGEMENT_ADMIN"]})}).then(function(e){return e.isAllowedInventory&&e.isAllowedSmartRules}),A.canAddRules=e.then(function(e){return A.canAddRules=e,A.canAddRules}),n=!1),n}function L(t){A.rules=A.rules||{};var n=A.rules,e=n[t.id];return _.isUndefined(e)&&(n[t.id]=a.isAllowed({adminMOs:[t.id]}).then(function(e){return n[t.id]=e,n[t.id]}),e=!1),e}function U(e){var e=e&&"c8y_SmartRule"===e.type,t=T.context===s.CONTEXT.DEVICE||T.context===s.CONTEXT.GROUP||T.context===s.CONTEXT.APPLICATION||"ecosystem/microservice/microservices"===T.context;return!e||!t}_.assign(i,{isOpen:{},moId:C,loadingStatus:R,refresh:E,paging:{refresh:E},ruleTemplates:S,getLinkToDM:function(){var e={deviceId:C};return t(p||"")(e)},add:function(){m.addNewWithUI().then(E)},edit:function(e){m.editWithUI(e).then(E)},clone:function(e){var t=e&&e.c8y_Context&&e.c8y_Context.id;(t?m.cloneWithUI(e,t,!0):m.cloneWithUI(e)).then(E)},cloneAsLocal:function(e){m.cloneWithUI(e,C).then(E)},remove:function(e){u({title:g("Delete smart rule"),body:v.getString('You are about to delete smart rule "{{name}}". Do you want to proceed?',e),labels:{ok:g("Delete")},status:"danger"}).then(angular.bind(m,m.remove,e)).then(function(){return _.pull(i.rules,e)}).then(function(){return l.success(g("Smart rule deleted."))})},hasSource:D,getChildrenEnabledForSmartRule:M,toggleRuleActivationForContextMO:function(e){if(D(e))return m.deactivate(e,C,!1).then(function(){l.success(v.getString('Smart rule "{{name}}" deactivated.',e))});return m.activate(e,C,!1).then(function(){l.success(v.getString('Smart rule "{{name}}" activated.',e))})},toggleRuleActivationForChildrenMOs:function(e,n){var t=_.filter(n,function(t){return!_.find(i.ruleChildren[e.id],function(e){return e.id===t.id})}),r=_.filter(i.ruleChildren[e.id],function(t){return!_.find(n,function(e){return t.id===e.id})});return m.updateSources(e,t,r,!1).then(N).then(w).then(function(){l.success(v.getString('Smart rule "{{name}}" activated/deactivated for children.',e))})},tooltip:function(e){var t={activate:{"for group":g("Activate for this group"),"for device":g("Activate for this device"),"for object":g("Activate for this object")},deactivate:{"for group":g("Deactivate for this group"),"for device":g("Deactivate for this device"),"for object":g("Deactivate for this object")}},e=e.enabled&&D(e)?"deactivate":"activate",n=r.groupId?s.CONTEXT.GROUP:"object";return n=r.deviceId?s.CONTEXT.DEVICE:n,t[e]["for ".concat(n)]},type:function(e){var t,e=S[e.ruleTemplateName];e&&(t=e.label.full?v.getString(e.label.full):"".concat(v.getString(e.label.input)," ").concat(v.getString(e.label.output)));return t},status:function(e){return y[e.enabled].text},statusIcon:function(e){return y[e.enabled].icon},statusClass:function(e){return y[e.enabled].cls},showTitle:function(){return null!==s.getContext().context},title:x,context:T,inputIcon:function(e){var t,e=S[e.ruleTemplateName];e&&(t=e.paramGroups.input.icon);return t},outputIcon:function(e){var t,e=S[e.ruleTemplateName];e&&(t=e.paramGroups.output.icon);return t},canAddRules:P,canDuplicate:function(e){return P(e)&&U(e)},canDuplicateAsLocal:function(e){return P(e)&&(e=>{var e=e&&"c8y_SmartRule"===e.type,t=T.context===s.CONTEXT.DEVICE||T.context===s.CONTEXT.GROUP||T.context===s.CONTEXT.APPLICATION||"ecosystem/microservice/microservices"===T.context;return e&&t})(e)},canEdit:function(e){return L(e)&&U(e)},canRemove:L,canModify:L,canApplyOnChildren:function(e){return!O(e)},canSeeSection:function(){var e=A.canSeeSection;_.isUndefined(e)&&(A.canSeeSection=(n.checkIfModulesExist(["c8y.cockpit.config"])?f.shouldShowLocalSmartRules():o.when(!1)).then(function(e){return A.canSeeSection=e,A.canSeeSection}),e=!1);return e},isConfigurationGlobalSmartRulesContext:void 0,getRuleCardTitle:function(e){return"c8y_SmartRule"===e.type?g("Global smart rule"):g("Local smart rule")},getRuleIcon:function(e){return m.getRuleIcon(e)}}),i.isConfigurationGlobalSmartRulesContext=e.path().includes("/rules"),E(),null===s.getContext().context&&d.changeTitle({title:x}),T.context===s.CONTEXT.DEVICE&&n.getStaticLinkTemplate("devicemanagementDeviceDetails").then(function(e){p=e})}e.$inject=["$scope","$routeParams","$location","$q","$interpolate","c8yBase","c8yInventory","c8yApplication","c8yPermissions","c8yModal","c8yAlert","c8yUiUtil","c8yTitle","c8ySmartRulesAvailability","smartRuleTemplatesSvc","smartRulesSvc","gettext","gettextCatalog"],angular.module("c8y.smartRules").controller("SmartRulesListCtrl",e)})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{function e(e,r,
|
|
1
|
+
(()=>{function e(e,r,o,t,n,i,c,a,u,l,s,d,f,m){var h=this,v={},g={},p={done:!1,inProgress:!1},A={true:{text:f("Active`rule`"),icon:"check-circle",cls:"text-success"},false:{text:f("Inactive`rule`"),icon:"ban",cls:"text-warning"}};function R(){return o.when().then(S).then(E).then(T).then(O).then(x).catch(C)}function S(){p.inProgress=!0}function x(){p.inProgress=!1,p.done=!0,p.error=!1}function C(e){e.data&&e.data.message&&a.danger(e.data.message),p.inProgress=!1,p.done=!0,p.error=!0}function E(){return s.list().then(y)}function y(e){_.forEach(e,function(e){v[e.name]=e})}function T(){var e=h.mo?d.listByContext(h.mo):o.resolve([]),t=l.hasPermissions().then(function(e){return e?d.list():o.when([])});return o.all({listByContext:e,list:t}).then(function(e){h.rules=(e=>(h.mo&&(e=_.reject(e,(e=>{var n=new RegExp("".concat(e,"/dashboard"));return function(e){var t=_.get(e,"config.url","");return I(e)&&!n.test(t)}})(h.mo))),e=h.filter?_.filter(e,h.filter):e))(_.concat(e.listByContext,e.list)),"function"==typeof h.onRules&&h.onRules()(h.rules)})}function I(e){return"sendDashboardsViaEmail"===e.ruleTemplateName}function b(e){d.cloneWithUI(e,h.mo).then(R)}function N(e){return d.hasSource(e,h.mo)}function O(){var e,t;return Array.isArray(h.rules)&&0<h.rules.length&&(e=u.getContext(),t=(e=>(e=e.id,h.mo?_.get(h,"mo.id")||h.mo:e))(e),null!==e.context)?n.childAssets(t,{skipDetail:!0,params:{pageSize:2e3,withChildren:!1}}).then(function(e){h.children=e}).then(function(){h.ruleChildren={},_.forEach(h.rules,function(e){h.ruleChildren[e.id]=D(e)})}):o.resolve()}function D(t){return _.filter(h.children,function(e){return t.enabled&&d.hasSource(t,e)})}function P(){var e,t=g.canAddRules;return _.isUndefined(t)&&(e=h.context?c.isAllowed({adminMOs:[h.context.id]}):o.all({isAllowedInventory:c.isAllowed({anyRole:["ROLE_INVENTORY_ADMIN","ROLE_MANAGED_OBJECT_ADMIN"]}),isAllowedSmartRules:c.isAllowed({anyRole:["ROLE_SMARTRULE_ADMIN","ROLE_CEP_MANAGEMENT_ADMIN"]})}).then(function(e){return e.isAllowedInventory&&e.isAllowedSmartRules}),g.canAddRules=e.then(function(e){return g.canAddRules=e,g.canAddRules}),t=!1),t}function w(t){g.rules=g.rules||{};var n=g.rules,e=n[t.id];return _.isUndefined(e)&&(n[t.id]=c.isAllowed({adminMOs:[t.id]}).then(function(e){return n[t.id]=e,n[t.id]}),e=!1),e}function L(e){var e=e&&"c8y_SmartRule"===e.type,t=h.context.context===u.CONTEXT.DEVICE||h.context.context===u.CONTEXT.GROUP||h.context.context===u.CONTEXT.APPLICATION||"ecosystem/microservice/microservices"===h.context.context;return!e||!t}_.assign(h,{ruleTemplates:v,loadingStatus:p,isOpen:{},listClass:"interact-list",$onInit:function(){h.context=u.getContext(),e.$on("smartRulesListReload",R),R()},add:function(){d.addNewWithUI().then(R)},edit:function(e){d.editWithUI(e,h.mo).then(R)},clone:b,remove:function(e){t({title:f("Delete smart rule"),body:m.getString('You are about to delete smart rule "{{name}}". Do you want to proceed?',e),status:"danger",labels:{ok:f("Delete")}}).then(d.remove.bind(d,e)).then(function(){return _.pull(h.rules,e)}).then(function(){return a.success(f("Smart rule deleted."))})},hasSource:N,getChildrenEnabledForSmartRule:D,toggleRuleActivationForContextMO:function(e){if(e.enabled&&N(e))return d.deactivate(e,h.mo,!1).then(function(){a.success(m.getString('Smart rule "{{name}}" deactivated.',e))});return d.activate(e,h.mo,!1).then(function(){a.success(m.getString('Smart rule "{{name}}" activated.',e))})},toggleRuleActivationForChildrenMOs:function(t,n){var r=[];return _.forEach(n,function(e){_.find(h.ruleChildren[t.id],{id:e.id})||r.push(d.activate(t,e,!1))}),_.forEach(h.ruleChildren[t.id],function(e){_.find(n,{id:e.id})||r.push(d.deactivate(t,e,!1))}),o.all(r).then(T).then(O).then(function(){a.success(m.getString('Smart rule "{{name}}" activated/deactivated for children.',t))})},tooltip:function(e){var t,n={activate:{"for group":f("Activate for this group."),"for device":f("Activate for this device."),"for object":f("Activate for this object.")},deactivate:{"for group":f("Deactivate for this group."),"for device":f("Deactivate for this device."),"for object":f("Deactivate for this object.")}},e=e.enabled&&N(e)?"deactivate":"activate";t=r.deviceId?u.CONTEXT.DEVICE:r.groupId?u.CONTEXT.GROUP:"object";return n[e]["for ".concat(t)]},type:function(e){var t,e=v[e.ruleTemplateName];e&&(t=e.label.full?m.getString(e.label.full):"".concat(m.getString(e.label.input)," ").concat(m.getString(e.label.output)));return t},status:function(e){e=e.enabled&&N(e);return A[e].text},statusIcon:function(e){e=e.enabled&&N(e);return A[e].icon},statusClass:function(e){e=e.enabled&&N(e);return A[e].cls},context:u.getContext(),inputIcon:function(e){var t,e=v[e.ruleTemplateName];e&&(t=e.paramGroups.input.icon);return t},outputIcon:function(e){var t,e=v[e.ruleTemplateName];e&&(t=e.paramGroups.output.icon);return t},canDuplicate:function(e){return P()&&L(e)},canDuplicateAsLocal:function(e){return P()&&(e=>{var e=e&&"c8y_SmartRule"===e.type,t=h.context.context===u.CONTEXT.DEVICE||h.context.context===u.CONTEXT.GROUP||h.context.context===u.CONTEXT.APPLICATION||"ecosystem/microservice/microservices"===h.context.context;return e&&t})(e)},canEdit:function(e){return w(e)&&L(e)},canRemove:w,cloneAsLocal:function(e){b(e)},canAddRules:P,canModify:w,canApplyOnChildren:function(e){return!I(e)},canSeeSection:function(){var e=g.canSeeSection;_.isUndefined(e)&&(g.canSeeSection=l.shouldShowLocalSmartRules().then(function(e){return g.canSeeSection=e,g.canSeeSection}),e=!1);return e},getRuleIcon:function(e){return d.getRuleIcon(e)}}),_.assign(e,{refresh:R,paging:{refresh:R}})}e.$inject=["$scope","$routeParams","$q","c8yModal","c8yInventory","c8yApplication","c8yPermissions","c8yAlert","c8yUiUtil","c8ySmartRulesAvailability","smartRuleTemplatesSvc","smartRulesSvc","gettext","gettextCatalog"],angular.module("c8y.smartRules").component("smartRulesList",{bindings:{mo:"<?",filter:"<?",disableEditAndCreate:"<?",onRules:"&?"},templateUrl:":::PLUGIN_PATH:::/list/smartRulesList.html",controller:e,controllerAs:"vm"})})();
|
|
@@ -138,6 +138,16 @@
|
|
|
138
138
|
{{ 'Duplicate' | translate }}
|
|
139
139
|
</button>
|
|
140
140
|
</li>
|
|
141
|
+
<li ng-if="vm.canDuplicateAsLocal(rule) && !vm.disableEditAndCreate">
|
|
142
|
+
<button
|
|
143
|
+
title="{{ 'Duplicate as local smart rule' | translate }}"
|
|
144
|
+
type="button"
|
|
145
|
+
ng-click="vm.cloneAsLocal(rule)"
|
|
146
|
+
>
|
|
147
|
+
<i c8y-icon="copy"></i>
|
|
148
|
+
{{ 'Duplicate as local' | translate }}
|
|
149
|
+
</button>
|
|
150
|
+
</li>
|
|
141
151
|
<li ng-if="vm.canRemove(rule)">
|
|
142
152
|
<button
|
|
143
153
|
title="{{ 'Delete smart rule' | translate }}"
|
|
@@ -197,6 +197,16 @@
|
|
|
197
197
|
{{ 'Duplicate' | translate }}
|
|
198
198
|
</button>
|
|
199
199
|
</li>
|
|
200
|
+
<li ng-if="canDuplicateAsLocal(rule)">
|
|
201
|
+
<button
|
|
202
|
+
title="{{ 'Duplicate as local smart rule' | translate }}"
|
|
203
|
+
type="button"
|
|
204
|
+
ng-click="cloneAsLocal(rule)"
|
|
205
|
+
>
|
|
206
|
+
<i c8y-icon="copy"></i>
|
|
207
|
+
{{ 'Duplicate as local' | translate }}
|
|
208
|
+
</button>
|
|
209
|
+
</li>
|
|
200
210
|
<li ng-if="canRemove(rule)">
|
|
201
211
|
<button
|
|
202
212
|
title="{{ 'Delete smart rule' | translate }}"
|