@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.
@@ -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 e(a,c,n,r,u){var e=_.debounce(function(){var e=u.get(c.path())||{},e=e.data?n.invoke(e.data):{};a.breadcrumbs=[],o(0,(e=>((e=r.when(e).then(t))._path=c.path(),e))(e))},10);function t(e){return _.union(e,u.getLiveBreadcrumbs())}function o(e,t){t.then(function(e){var n,r;c.path()===t._path&&((n=u.getPreferredBreadcrumb())&&e.length&&(r=e[0][e[0].length-2],_.find([r],n)||(e=_.sortBy(e,function(e){return!_.find([e[e.length-2]],n)}))),a.breadcrumbs=e)})}a.$on("$routeChangeSuccess",e),u.$on("breadcrumbs",o),u.$on("preferredBreadcrumbChanged",e),u.$on("update",e)}e.$inject=["$scope","$location","$injector","$q","c8yBreadcrumbs"],angular.module("c8y.ui").component("c8yUiBreadcrumbs",{templateUrl:":::PLUGIN_PATH:::/ui/navigation/breadcrumbs.html",controller:e})})();
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,l,a,c){var d=this,p=t.find("head title"),u=p.text();function r(){var t=a.get(n.path())||{},t=t.data?i.invoke(t.data):{};t.title||t.subtitle||t.templateUrl||t.then?((t=l.when(t))._path=n.path(),s(0,t)):h()}function s(t,e){e.then(function(t){!_.isUndefined(e._path)&&e._path!==n.path()||(d.title=(_.isUndefined(t.title)?d:t).title,d.subtitle=t.subtitle,d.templateUrl=t.templateUrl,"component"!==d.displayMode&&(d.displayMode=d.templateUrl?"template":void 0),h(d.title))})}function m(){return o.find(".transclude-main-container")}function f(){d.displayMode=void 0,d.title="",d.subtitle=""}function h(t){var e=u;t&&(e="".concat(c.getString(t)," / ").concat(e)),p.text(e)}_.assign(d,{$onInit:function(){a.setMainComponent(d),e.$on("$routeChangeStart",f),e.$on("$routeChangeSuccess",_.debounce(r,10)),a.$on("title",s),r()},$onDestroy:function(){a.clearMainComponent()},setTitleElement:function(t){var e=m();e.empty(),e.append(t.show()),d.displayMode="component"},clearTitleElement:function(){m().empty(),d.displayMode=void 0},isTitleVisible:function(){return d.title||d.subtitle||"template"===d.displayMode&&d.templateUrl}})}t.$inject=["$document","$scope","$location","$injector","$element","$q","c8yTitle","gettextCatalog"],angular.module("c8y.ui").controller("TitleCtrl",t)})();
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,o,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(u.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){o.addListener(t.$id,f(e),o.realtimeActions().UPDATE,h),o.start(t.$id,f(e))}function p(){t.devices&&Object.keys(t.devices).forEach(function(e){o.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,{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)})();
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c8y/ng1-modules",
3
- "version": "1023.92.0",
3
+ "version": "1023.97.3",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Cumulocity",
6
6
  "description": "AngularJS modules for Cumulocity IoT applications.",
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,a,P,c,u,l,s,d,f,h,g,m,v){var p,S=r.deviceId||r.groupId,C={},R={},A={done:!1,inProgress:!1},y={true:{text:m("Enabled`rule`"),icon:"check-circle",cls:"text-success"},false:{text:m("Disabled`rule`"),icon:"ban",cls:"text-danger"}},x=s.getContext(),E=m("Global smart rules");function b(){return o.when().then(I).then(k).then(D).then(w).then(T).catch(j)}function I(){A.inProgress=!0}function T(){A.inProgress=!1,A.done=!0,A.error=!1}function j(e){e.data&&e.data.message&&l.danger(e.data.message),A.inProgress=!1,A.done=!0,A.error=!0}function k(){return h.list().then($)}function $(e){_.forEach(e||[],function(e){C[e.name]=e})}function D(){var e=S?g.listByContext(S):o.resolve([]),t=f.hasPermissions().then(function(e){return e?g.list():o.when([])});return o.all({listByContext:e,list:t}).then(function(e){i.rules=(e=>{var t=e;return t=S?_.reject(e,(e=>{var n=new RegExp("".concat(e,"/dashboard"));return function(e){var t=_.get(e,"config.url","");return N(e)&&!n.test(t)}})(S)):t})(_.concat(e.listByContext,e.list))})}function N(e){return"sendDashboardsViaEmail"===e.ruleTemplateName}function O(e){return g.hasSource(e,S)}function w(){var e,t;return!(Array.isArray(i.rules)&&0<i.rules.length)||null===(t=s.getContext()).context?o.resolve():(e=a.childAssets(t.id,{skipDetail:!0,params:{pageSize:2e3,withChildren:!1}}),t=a.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 g.hasSource(t,e)})}function U(e){var t=_.get(C,"".concat(_.get(e,"ruleTemplateName"),"._active")),n=R.canAddRules;return e&&!t&&(n=!1),_.isUndefined(n)&&(e=i.context?c.isAllowed({adminMOs:[i.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}),R.canAddRules=e.then(function(e){return R.canAddRules=e,R.canAddRules}),n=!1),n}function G(t){R.rules=R.rules||{};var n=R.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 t=!0;return t=x.context!==s.CONTEXT.DEVICE&&x.context!==s.CONTEXT.GROUP?t:t&&e&&"c8y_SmartRule"!==e.type}_.assign(i,{isOpen:{},moId:S,loadingStatus:A,refresh:b,paging:{refresh:b},ruleTemplates:C,getLinkToDM:function(){var e={deviceId:S};return t(p||"")(e)},add:function(){g.addNewWithUI().then(b)},edit:function(e){g.editWithUI(e).then(b)},clone:function(e){var t=e&&e.c8y_Context&&e.c8y_Context.id;(t?g.cloneWithUI(e,t,!0):g.cloneWithUI(e)).then(b)},remove:function(e){u({title:m("Delete smart rule"),body:v.getString('You are about to delete smart rule "{{name}}". Do you want to proceed?',e),labels:{ok:m("Delete")},status:"danger"}).then(angular.bind(g,g.remove,e)).then(function(){return _.pull(i.rules,e)}).then(function(){return l.success(m("Smart rule deleted."))})},hasSource:O,getChildrenEnabledForSmartRule:M,toggleRuleActivationForContextMO:function(e){if(O(e))return g.deactivate(e,S,!1).then(function(){l.success(v.getString('Smart rule "{{name}}" deactivated.',e))});return g.activate(e,S,!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 g.updateSources(e,t,r,!1).then(D).then(w).then(function(){l.success(v.getString('Smart rule "{{name}}" activated/deactivated for children.',e))})},tooltip:function(e){var t={activate:{"for group":m("Activate for this group"),"for device":m("Activate for this device"),"for object":m("Activate for this object")},deactivate:{"for group":m("Deactivate for this group"),"for device":m("Deactivate for this device"),"for object":m("Deactivate for this object")}},e=e.enabled&&O(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=C[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:E,context:x,inputIcon:function(e){var t,e=C[e.ruleTemplateName];e&&(t=e.paramGroups.input.icon);return t},outputIcon:function(e){var t,e=C[e.ruleTemplateName];e&&(t=e.paramGroups.output.icon);return t},canAddRules:U,canDuplicate:function(e){return U(e)&&L(e)},canEdit:function(e){return G(e)&&L(e)},canRemove:G,canModify:G,canApplyOnChildren:function(e){return!N(e)},canSeeSection:function(){var e=R.canSeeSection;_.isUndefined(e)&&(R.canSeeSection=(n.checkIfModulesExist(["c8y.cockpit.config"])?f.shouldShowLocalSmartRules():o.when(!1)).then(function(e){return R.canSeeSection=e,R.canSeeSection}),e=!1);return e},isConfigurationGlobalSmartRulesContext:void 0,getRuleCardTitle:function(e){return"c8y_SmartRule"===e.type?m("Global smart rule"):m("Local smart rule")},getRuleIcon:function(e){return g.getRuleIcon(e)}}),i.isConfigurationGlobalSmartRulesContext=e.path().includes("/rules"),b(),null===s.getContext().context&&d.changeTitle({title:E}),x.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
+ (()=>{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,i,t,n,o,c,a,u,l,s,d,f,h){var m=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 i.when().then(S).then(x).then(b).then(N).then(C).catch(E)}function S(){p.inProgress=!0}function C(){p.inProgress=!1,p.done=!0,p.error=!1}function E(e){e.data&&e.data.message&&a.danger(e.data.message),p.inProgress=!1,p.done=!0,p.error=!0}function x(){return s.list().then(y)}function y(e){_.forEach(e,function(e){v[e.name]=e})}function b(){var e=m.mo?d.listByContext(m.mo):i.resolve([]),t=l.hasPermissions().then(function(e){return e?d.list():i.when([])});return i.all({listByContext:e,list:t}).then(function(e){m.rules=(e=>(m.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)}})(m.mo))),e=m.filter?_.filter(e,m.filter):e))(_.concat(e.listByContext,e.list)),"function"==typeof m.onRules&&m.onRules()(m.rules)})}function I(e){return"sendDashboardsViaEmail"===e.ruleTemplateName}function T(e){return d.hasSource(e,m.mo)}function N(){var e,t;return Array.isArray(m.rules)&&0<m.rules.length&&(e=u.getContext(),t=(e=>(e=e.id,m.mo?_.get(m,"mo.id")||m.mo:e))(e),null!==e.context)?n.childAssets(t,{skipDetail:!0,params:{pageSize:2e3,withChildren:!1}}).then(function(e){m.children=e}).then(function(){m.ruleChildren={},_.forEach(m.rules,function(e){m.ruleChildren[e.id]=O(e)})}):i.resolve()}function O(t){return _.filter(m.children,function(e){return t.enabled&&d.hasSource(t,e)})}function w(){var e,t=g.canAddRules;return _.isUndefined(t)&&(e=m.context?c.isAllowed({adminMOs:[m.context.id]}):i.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 D(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 M(e){var t=!0;return t=m.context.context!==u.CONTEXT.DEVICE&&m.context.context!==u.CONTEXT.GROUP&&m.context.context!==u.CONTEXT.APPLICATION&&"ecosystem/microservice/microservices"!==m.context.context?t:t&&e&&"c8y_SmartRule"!==e.type}_.assign(m,{ruleTemplates:v,loadingStatus:p,isOpen:{},listClass:"interact-list",$onInit:function(){m.context=u.getContext(),e.$on("smartRulesListReload",R),R()},add:function(){d.addNewWithUI().then(R)},edit:function(e){d.editWithUI(e,m.mo).then(R)},clone:function(e){d.cloneWithUI(e,m.mo).then(R)},remove:function(e){t({title:f("Delete smart rule"),body:h.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(m.rules,e)}).then(function(){return a.success(f("Smart rule deleted."))})},hasSource:T,getChildrenEnabledForSmartRule:O,toggleRuleActivationForContextMO:function(e){if(e.enabled&&T(e))return d.deactivate(e,m.mo,!1).then(function(){a.success(h.getString('Smart rule "{{name}}" deactivated.',e))});return d.activate(e,m.mo,!1).then(function(){a.success(h.getString('Smart rule "{{name}}" activated.',e))})},toggleRuleActivationForChildrenMOs:function(t,n){var r=[];return _.forEach(n,function(e){_.find(m.ruleChildren[t.id],{id:e.id})||r.push(d.activate(t,e,!1))}),_.forEach(m.ruleChildren[t.id],function(e){_.find(n,{id:e.id})||r.push(d.deactivate(t,e,!1))}),i.all(r).then(b).then(N).then(function(){a.success(h.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&&T(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?h.getString(e.label.full):"".concat(h.getString(e.label.input)," ").concat(h.getString(e.label.output)));return t},status:function(e){e=e.enabled&&T(e);return A[e].text},statusIcon:function(e){e=e.enabled&&T(e);return A[e].icon},statusClass:function(e){e=e.enabled&&T(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 w()&&M(e)},canEdit:function(e){return D(e)&&M(e)},canRemove:D,canAddRules:w,canModify:D,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"})})();
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 }}"