@c8y/ng1-modules 1018.487.7 → 1018.497.2

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.
Files changed (82) hide show
  1. package/NOTICES +1 -1
  2. package/administration-alarmMapping/views/index.html +2 -2
  3. package/administration-auditLogs/views/list.html +8 -7
  4. package/administration-deviceUsers/views/list.html +55 -18
  5. package/binaryArtefactsManagement/views/list.html +63 -23
  6. package/core/core/services/measurements.js +1 -1
  7. package/core/locales/de.po +3 -3
  8. package/core/locales/en.po +5 -5
  9. package/core/locales/es.po +21 -103
  10. package/core/locales/fr.po +20 -102
  11. package/core/locales/ja_JP.po +20 -102
  12. package/core/locales/ko.po +20 -102
  13. package/core/locales/nl.po +20 -102
  14. package/core/locales/pl.po +21 -103
  15. package/core/locales/pt_BR.po +38 -120
  16. package/core/locales/ru.po +21 -103
  17. package/core/locales/zh_CN.po +21 -103
  18. package/core/locales/zh_TW.po +21 -103
  19. package/core/ui/services/measurementsReport.js +1 -1
  20. package/core/ui/user/rolesUiStrings.constant.js +1 -1
  21. package/core/ui/views/modal.html +1 -1
  22. package/dataBroker/connectors/connectors.html +87 -32
  23. package/dataPointExplorer/index.js +1 -1
  24. package/dataPointExplorer/views/explorer.html +6 -2
  25. package/dataPointExplorer/views/widgetConfig.html +1 -0
  26. package/dataPointTable/index.js +1 -1
  27. package/dataPointTable/views/widgetConfig.html +1 -3
  28. package/device-protocols/deviceProtocolList.html +4 -4
  29. package/device-protocols/deviceProtocolView.html +34 -14
  30. package/deviceDatabase4/cumulocity.json +2 -2
  31. package/deviceDatabase4/detail/device-type-detail.component.js +1 -1
  32. package/deviceDatabase4/detail/device-type-detail.html +1 -0
  33. package/deviceDatabase4/modals/configure-register.component.js +1 -1
  34. package/deviceDatabase4/modals/configure-register.html +2 -2
  35. package/deviceDatabase4/validate-measurement-fragment.directive.js +1 -0
  36. package/deviceList/views/index.html +4 -1
  37. package/devicemanagement-alarmList/views/index.html +57 -19
  38. package/devicemanagement-availability/controllers/availability.js +1 -1
  39. package/devicemanagement-availability/views/detail.html +19 -8
  40. package/devicemanagement-eventList/views/index.html +6 -2
  41. package/enterpriseEdition/enterpriseEdition.module.js +1 -1
  42. package/eventList/index.js +1 -1
  43. package/export/directives/timespan.js +1 -1
  44. package/export/services/filters.js +1 -1
  45. package/export/views/detail.html +1 -1
  46. package/export/views/list.html +21 -0
  47. package/export/views/properties.html +3 -3
  48. package/export/views/timespan.html +38 -9
  49. package/measurements/fragmentChart/fragmentChart.component.js +1 -1
  50. package/measurements/measurements2/series.service.js +1 -1
  51. package/package.json +1 -1
  52. package/platformConfiguration/cumulocity.json +1 -1
  53. package/platformConfiguration/platformConfiguration.component.js +1 -0
  54. package/platformConfiguration/platformConfiguration.html +22 -0
  55. package/platformConfiguration/platformConfigurationUi.provider.js +1 -1
  56. package/scada/config.controller.js +1 -1
  57. package/scada/views/componentConfig.html +28 -14
  58. package/scada/widget.controller.js +1 -1
  59. package/tenantPolicies/tenantPolicyList/tenantPolicyList.html +90 -25
  60. package/tenantStatistics/tenant-statistics.html +23 -14
  61. package/tenants/views/detail.html +1 -1
  62. package/userRoles/inventoryRolesTab/inventoryRolesTab.component.js +1 -1
  63. package/userRoles/inventoryRolesTab/inventoryRolesTab.html +16 -10
  64. package/users/userListView/userListView.html +47 -17
  65. package/users/usersUi.provider.js +1 -1
  66. package/deviceControlMessage/controllers/deviceControlMessageWidget.js +0 -1
  67. package/deviceControlMessage/cumulocity.json +0 -15
  68. package/deviceControlMessage/img/message-widget-pr.png +0 -0
  69. package/deviceControlMessage/index.js +0 -1
  70. package/deviceControlMessage/views/deviceControlMessageWidget.html +0 -26
  71. package/deviceDatabase4/detail/device-type-detail.service.js +0 -1
  72. package/infoGauge/cumulocity.json +0 -20
  73. package/infoGauge/img/info-gauge-widget-pr.png +0 -0
  74. package/infoGauge/index.js +0 -1
  75. package/infoGauge/infoGauge.controller.js +0 -1
  76. package/infoGauge/infoGauge.service.js +0 -1
  77. package/infoGauge/infoGaugeConfig.controller.js +0 -1
  78. package/infoGauge/infoGaugeWidget.config.html +0 -58
  79. package/infoGauge/infoGaugeWidget.html +0 -32
  80. package/infoGauge/style.less +0 -0
  81. package/platformConfiguration/platformConfigurationForm.component.js +0 -1
  82. package/platformConfiguration/platformConfigurationForm.html +0 -50
@@ -1107,13 +1107,6 @@ msgstr ""
1107
1107
  "而是使用您的旧域名。\n"
1108
1108
  "如果您在访问租户时遇到任何问题,请与支持部门联系。"
1109
1109
 
1110
- msgid ""
1111
- "After the activation is completed you will no longer be able to access your tenant\n"
1112
- " with <code>{{ vm.domainName }}</code>, instead use your new custom domain name <code>{{ vm.newDomainName }}</code>."
1113
- msgstr ""
1114
- "完成激活后,您将不再能够使用 <code>{{ vm.domainName }}</code> 访问租户\n"
1115
- ",请改用新的自定义域名 <code>{{ vm.newDomainName }}</code>。"
1116
-
1117
1110
  msgid "Agent"
1118
1111
  msgstr "代理"
1119
1112
 
@@ -2036,9 +2029,6 @@ msgstr "浏览路径"
2036
2029
  msgid "Browse the manual"
2037
2030
  msgstr "浏览手册"
2038
2031
 
2039
- msgid "Browse the manual <a c8y-guide-href=\"users-guide/cockpit/\">here</a>."
2040
- msgstr "在<a c8y-guide-href=\"users-guide/cockpit/\">此处</a>浏览手册。"
2041
-
2042
2032
  msgid "Built-in"
2043
2033
  msgstr "内置"
2044
2034
 
@@ -2815,9 +2805,6 @@ msgstr "操作中心"
2815
2805
  msgid "Cockpit User"
2816
2806
  msgstr "操作中心用户"
2817
2807
 
2818
- msgid "Cockpit configuration"
2819
- msgstr "Cockpit 配置"
2820
-
2821
2808
  msgid "Cockpit configuration saved."
2822
2809
  msgstr "已保存 Cockpit 配置。"
2823
2810
 
@@ -2974,9 +2961,6 @@ msgstr "已删除配置。"
2974
2961
  msgid "Configuration file"
2975
2962
  msgstr "配置文件"
2976
2963
 
2977
- msgid "Configuration reloaded."
2978
- msgstr "已重新加载配置。"
2979
-
2980
2964
  msgid "Configuration repository"
2981
2965
  msgstr "配置存储库"
2982
2966
 
@@ -3634,12 +3618,12 @@ msgstr "创建主要警报"
3634
3618
  msgid "Create MINOR alarm"
3635
3619
  msgstr "创建次要警报"
3636
3620
 
3637
- msgid "Create SmartREST template"
3638
- msgstr "创建 SmartREST 模板"
3639
-
3640
3621
  msgid "Create WARNING alarm"
3641
3622
  msgstr "创建警告警报"
3642
3623
 
3624
+ msgid "Create a custom application by duplicating an existing one."
3625
+ msgstr "通過複製現有應用程式來創建自訂應用程式。"
3626
+
3643
3627
  msgid "Create a measurement whenever the value is changed."
3644
3628
  msgstr "更改值时创建测量。"
3645
3629
 
@@ -3743,9 +3727,6 @@ msgstr "创建智能规则"
3743
3727
  msgid "Create temperature measurement"
3744
3728
  msgstr "创建温度测量"
3745
3729
 
3746
- msgid "Create template"
3747
- msgstr "创建模板"
3748
-
3749
3730
  msgid "Create tenant"
3750
3731
  msgstr "创建租户"
3751
3732
 
@@ -4680,9 +4661,6 @@ msgstr ""
4680
4661
  msgid "Device location"
4681
4662
  msgstr "设备位置"
4682
4663
 
4683
- msgid "Device location may be set by the device itself, or manually in the platform"
4684
- msgstr "设备位置可以由设备本身设置,也可以在平台中手动设置"
4685
-
4686
4664
  msgid "Device management"
4687
4665
  msgstr "设备管理"
4688
4666
 
@@ -4899,6 +4877,9 @@ msgstr "禁用 Cookie 横幅"
4899
4877
  msgid "Disable owner"
4900
4878
  msgstr "禁用所有者"
4901
4879
 
4880
+ msgid "Disable realtime"
4881
+ msgstr "禁用即時"
4882
+
4902
4883
  msgid "Disable timeout"
4903
4884
  msgstr "禁用超时"
4904
4885
 
@@ -5013,12 +4994,15 @@ msgstr "在组和设备上显示智能规则选项卡。"
5013
4994
  msgid "Display top level groups under the Groups navigator menu."
5014
4995
  msgstr "在组导航器菜单下显示顶层组。"
5015
4996
 
4997
+ msgid "Displaying an approximated location on map as latitude is missing."
4998
+ msgstr "正在地圖上顯示近似位置,因為缺少緯度。"
4999
+
5000
+ msgid "Displaying an approximated location on map as longitude is missing."
5001
+ msgstr "正在地圖上顯示近似位置,因為缺少經度。"
5002
+
5016
5003
  msgid "Displays a list of alarms filtered by object, severity and status"
5017
5004
  msgstr "显示按对象、严重性和状态过滤的警报的列表"
5018
5005
 
5019
- msgid "Displays a map with device position marker"
5020
- msgstr "显示带有设备位置标记的地图"
5021
-
5022
5006
  msgid "Displays a welcome message for Cockpit"
5023
5007
  msgstr "显示考核中心的欢迎消息"
5024
5008
 
@@ -5466,6 +5450,9 @@ msgstr "啟用產品中資訊和通信"
5466
5450
  msgid "Enable owner"
5467
5451
  msgstr "启用所有者"
5468
5452
 
5453
+ msgid "Enable realtime"
5454
+ msgstr "啟用即時"
5455
+
5469
5456
  msgid "Enable showing current value in UI (for example, on the Fieldbus widget)."
5470
5457
  msgstr "启用在 UI 中显示当前值(例如,在 Fieldbus 小组件上)。"
5471
5458
 
@@ -6103,21 +6090,9 @@ msgstr "篩選連接器"
6103
6090
  msgid "Filter device groups…"
6104
6091
  msgstr "过滤设备组…"
6105
6092
 
6106
- msgid "Filter device profiles…"
6107
- msgstr "过滤设备配置文件…"
6108
-
6109
- msgid "Filter device users"
6110
- msgstr "篩選設備用戶"
6111
-
6112
6093
  msgid "Filter files"
6113
6094
  msgstr "过滤文件"
6114
6095
 
6115
- msgid "Filter firmware…"
6116
- msgstr "过滤固件…"
6117
-
6118
- msgid "Filter installed software…"
6119
- msgstr "过滤安装的软件…"
6120
-
6121
6096
  msgid "Filter inventory roles"
6122
6097
  msgstr "过滤库存角色"
6123
6098
 
@@ -6148,9 +6123,6 @@ msgstr "按设备类型过滤软件"
6148
6123
  msgid "Filter software by name"
6149
6124
  msgstr "按名称过滤软件"
6150
6125
 
6151
- msgid "Filter software…"
6152
- msgstr "过滤软件…"
6153
-
6154
6126
  msgid "Filter target devices"
6155
6127
  msgstr "过滤目标设备"
6156
6128
 
@@ -6166,9 +6138,6 @@ msgstr "过滤租户"
6166
6138
  msgid "Filter text"
6167
6139
  msgstr "过滤文本"
6168
6140
 
6169
- msgid "Filter this column…"
6170
- msgstr "过滤此列…"
6171
-
6172
6141
  msgid "Filter users"
6173
6142
  msgstr "过滤用户"
6174
6143
 
@@ -6233,15 +6202,11 @@ msgstr ""
6233
6202
 
6234
6203
  msgid ""
6235
6204
  "Find out more in the\n"
6236
- " <a c8y-guide-href=\"users-guide/cockpit/#dashboards\">\n"
6237
- " User guide`KEEP_ORIGINAL`\n"
6238
- " </a>\n"
6205
+ " <a c8y-guide-href=\"users-guide/cockpit/#dashboards\">User guide`KEEP_ORIGINAL`</a>\n"
6239
6206
  " ."
6240
6207
  msgstr ""
6241
- "在\n"
6242
- " <a c8y-guide-href=\"users-guide/cockpit/#dashboards\">\n"
6243
- " User guide\n"
6244
- " </a>\n"
6208
+ "在 \n"
6209
+ " <a c8y-guide-href=\"users-guide/cockpit/#dashboards\">User guide</a>\n"
6245
6210
  " 中詳細瞭解。"
6246
6211
 
6247
6212
  msgid ""
@@ -6275,19 +6240,6 @@ msgstr ""
6275
6240
  " </a>\n"
6276
6241
  " 中詳細瞭解。"
6277
6242
 
6278
- msgid ""
6279
- "Find out more in the\n"
6280
- " <a c8y-guide-href=\"users-guide/device-management/#simulator\" target=\"_blank\" rel=\"noopener noreferrer\">\n"
6281
- " User guide`KEEP_ORIGINAL`\n"
6282
- " </a>\n"
6283
- " ."
6284
- msgstr ""
6285
- "在\n"
6286
- " <a c8y-guide-href=\"users-guide/device-management/#simulator\" target=\"_blank\" rel=\"noopener noreferrer\">\n"
6287
- " User guide\n"
6288
- " </a>\n"
6289
- "中詳細瞭解。"
6290
-
6291
6243
  msgid ""
6292
6244
  "Find out more in the\n"
6293
6245
  " <a c8y-guide-href=\"reference/retention-rules/\">Reference guide`KEEP_ORIGINAL`</a>\n"
@@ -6523,13 +6475,6 @@ msgstr ""
6523
6475
  " defaultRedirectUrl\n"
6524
6476
  " }}\",建議使用後者。"
6525
6477
 
6526
- msgid ""
6527
- "For details refer to the\n"
6528
- " <a c8y-guide-href=\"users-guide/administration/\"> User guide`KEEP_ORIGINAL` </a>."
6529
- msgstr ""
6530
- "有关详细信息,请参阅\n"
6531
- " <a c8y-guide-href=\"users-guide/administration/\"> User guide</a>。"
6532
-
6533
6478
  msgid "For example, if message type is indicated by the first byte of payload, then enter 0"
6534
6479
  msgstr "例如,如果第一个有效负载类型表示消息类型,则输入 0"
6535
6480
 
@@ -8265,9 +8210,6 @@ msgstr "定位"
8265
8210
  msgid "Location"
8266
8211
  msgstr "位置"
8267
8212
 
8268
- msgid "Location saved."
8269
- msgstr "已保存位置。"
8270
-
8271
8213
  msgid "Location`icons-category`"
8272
8214
  msgstr "位置"
8273
8215
 
@@ -8747,9 +8689,6 @@ msgstr "分钟"
8747
8689
  msgid "Misc"
8748
8690
  msgstr "其他"
8749
8691
 
8750
- msgid "Miscellaneous settings for the current application."
8751
- msgstr "当前应用程序的其他设置。"
8752
-
8753
8692
  msgid "Missing measurements of type: #{type}"
8754
8693
  msgstr "缺少類型測量:#{type}"
8755
8694
 
@@ -9533,6 +9472,9 @@ msgstr "無匹配的微服務。"
9533
9472
  msgid "No matching smart rules available."
9534
9473
  msgstr "无匹配的智能规则可用。"
9535
9474
 
9475
+ msgid "No matching software available."
9476
+ msgstr "無匹配的軟體可用。"
9477
+
9536
9478
  msgid "No measurement to display."
9537
9479
  msgstr "没有可供显示的测量。"
9538
9480
 
@@ -12364,9 +12306,6 @@ msgstr "选择组"
12364
12306
  msgid "Select icon"
12365
12307
  msgstr "选择图标"
12366
12308
 
12367
- msgid "Select icon to override default behavior"
12368
- msgstr "選取圖示以覆蓋預設行為"
12369
-
12370
12309
  msgid "Select if the value is BCD encoded."
12371
12310
  msgstr "选择值是否 BCD 编码。"
12372
12311
 
@@ -13609,9 +13548,6 @@ msgstr "已创建智能组 \"{{name}}\"。"
13609
13548
  msgid "Smart group filter"
13610
13549
  msgstr "智能组过滤器"
13611
13550
 
13612
- msgid "Smart group {{ name }} created."
13613
- msgstr "智能组 {{ name }} 已创建。"
13614
-
13615
13551
  msgid "Smart groups are groups dynamically constructed based on filtering criteria."
13616
13552
  msgstr "智能组是根据过滤标准动态构造的组。"
13617
13553
 
@@ -14013,9 +13949,6 @@ msgstr "已成功订阅应用程序。"
14013
13949
  msgid "Successfully unsubscribed from application."
14014
13950
  msgstr "已成功取消订阅应用程序。"
14015
13951
 
14016
- msgid "Sum of CPU daily usage in CPU milliseconds"
14017
- msgstr "CPU 日常使用摘要(CPU 毫秒)"
14018
-
14019
13952
  msgid "Sum of memory daily usage"
14020
13953
  msgstr "内存日常使用摘要"
14021
13954
 
@@ -14445,15 +14378,6 @@ msgstr ""
14445
14378
  "当前应用程序不归此租户所有。在运行设置之前,\n"
14446
14379
  "请先克隆应用程序。"
14447
14380
 
14448
- msgid "The current version of the blueprint that you are trying to install is not compatible with the platform version. Do you want to proceed?"
14449
- msgstr "您嘗試安裝的藍圖的目前版本與平臺版本不相容。是否要繼續?"
14450
-
14451
- msgid "The current version of the package \"{{ name }}\" that you are trying to install is not compatible with the platform version. Do you want to proceed?"
14452
- msgstr "您嘗試安裝的包 \"{{ name }}\" 的目前版本與平臺版本不相容。是否要繼續?"
14453
-
14454
- msgid "The current version of the plugin that you are trying to install is not compatible with the platform version. Do you want to proceed?"
14455
- msgstr "您正嘗試安裝的外掛程式的目前版本與平臺版本不相容。是否要繼續?"
14456
-
14457
14381
  msgid "The dashboard appearance matches the UI appearance."
14458
14382
  msgstr "儀錶板外觀與 UI 外觀匹配。"
14459
14383
 
@@ -14940,9 +14864,6 @@ msgstr ""
14940
14864
  msgid "This widget cannot be rendered because the current application does not support the following component:"
14941
14865
  msgstr "由于当前应用程序不支持以下组件,因此无法呈现此小组件:"
14942
14866
 
14943
- msgid "This widget is in sync with the dashboard time range."
14944
- msgstr "此小組件與儀錶板時間範圍同步。"
14945
-
14946
14867
  msgid "This will apply to data coming from specified device"
14947
14868
  msgstr "这将应用于从指定设备接收的数据"
14948
14869
 
@@ -15660,9 +15581,6 @@ msgstr "在 1 号 RS232 接口上使用 DDCMP 列表 2"
15660
15581
  msgid "Use FTL File Id 2 (default 1)"
15661
15582
  msgstr "使用 FTL 文件 Id 2(默认 1)"
15662
15583
 
15663
- msgid "Use [Enter] or &lt;br&gt; tag to add a new line"
15664
- msgstr "使用 [Enter] 或 &lt;br&gt; 标签添加新行"
15665
-
15666
15584
  msgid "Use alarms to create smart rules for microservice availability."
15667
15585
  msgstr "使用警报为微服务可用性创建智能规则。"
15668
15586
 
@@ -1 +1 @@
1
- "use strict";!function(){function e(i,e,l,s,c,u,d,p){var m=this;this.downloadReportForDevice=function(e,t,r,n){t=_.get(t,"id",t),r=_(r).map(_.partial(m.createPairFromSeries,t)).value();return new m.Downloader(e,n,r).start()},this.downloadReportForDatapoints=function(e,t,r){t=_.map(t,m.createPairFromDp);return t.length?new m.Downloader(e,r,t).start():i.reject(new Error(d("At least 1 data point must be selected")))},this.createPairFromSeries=function(e,t){return{source:e,fragmentType:t}},this.createPairFromDp=function(e){return{source:e.__target.id,valueFragmentType:e.fragment}},this.generateFileName=function(e,t){if(_.isEmpty(e.source&&t)||_.isEmpty(e.valueFragmentType||e.fragmentType))throw new Error("Unable to generate a file name for given data");return[e.source,e.valueFragmentType||e.fragmentType,t].join(".")},this.Downloader=function(r,n,e){var a=this,t=_.uniqBy(e,function(e){return JSON.stringify(e)});function o(e){return{text:d("Access denied."),type:"danger",detailedData:e}}this.downloadReports=function(){var e=_(t).map(a.downloadReportForPair).value();return i.all(e).then(a.onDownloads).catch(a.onFail)},this.start=function(){return c({templateUrl:":::PLUGIN_PATH:::/ui/views/measurementsReport.html",title:d("Generating report"),controller:["$scope","$timeout",function(n,o){n.completed=0,n.total=t.length,n.reportFileName="report.zip",n.close=function(){var e,t,r;void 0!==window.navigator.msSaveBlob?(e=n.blob,t=n.reportFileName,window.navigator.msSaveBlob(e,t)):(r=n.url,o(function(){window.URL.revokeObjectURL(r)},5e3)),n.$close()},a.scope=n,a.downloadReports()}]})},this.downloadReportForPair=function(e,t){t=a.getFilter(e,t);return l.list(t,r).then(_.partial(a.onDownload,e)).catch(_.partial(a.onAsyncResult,e))},this.onDownload=function(e,t){return a.scope.completed+=1,t.name=m.generateFileName(e,r.name),t},this.onAsyncResult=function(e,t){return t.async?(a.scope.completed+=1,null):i.reject(t)},this.onFail=function(e){a.scope.$dismiss(),function(r){var n=i.defer();{var e;403===r.status?r.data instanceof Blob?((e=new FileReader).addEventListener("loadend",function(e){try{var t=JSON.parse(_.get(e,"srcElement.result"));n.resolve({type:"danger",text:p.getString(t.message),detailedData:t})}catch(e){n.resolve(o(r))}}),e.readAsText(r.data)):n.resolve(o(r)):n.resolve({type:"danger",text:d("An error occurred. Please try again later."),detailedData:r})}return n.promise}(e).then(u.add)},this.onDownloads=function(e){var t=e.filter(_.identity),e=e.length-t.length;return 0<e&&(e=p.getPlural(e,"You will get a CSV/Excel file for 1 series via email.","You will get CSV/Excel files for {{$count}} series via email.",{}),u.success(e)),0===t.length?i.when():s.zipFiles(t).then(function(e){a.scope.blob=e,a.scope.url=window.URL.createObjectURL(e)})},this.getFilter=function(e,t){t=_.isArray(n)?n[t]:n;return _.merge({},t,e)}}}e.$inject=["$q","$rootScope","c8yMeasurements","c8yZip","c8yModal","c8yAlert","gettext","gettextCatalog"],angular.module("c8y.ui").service("MeasurementsReportSvc",e)}();
1
+ "use strict";!function(){function e(i,e,s,l,u,c,d,p){var m=this;this.downloadReportForDevice=function(e,t,r,n){t=_.get(t,"id",t),r=_(r).map(_.partial(m.createPairFromSeries,t)).value();return new m.Downloader(e,n,r).start()},this.downloadReportForDatapoints=function(e,t,r){t=_(t).filter(function(e){return!0===e.__active}).map(m.getDpRequestParams).value();return t.length?new m.Downloader(e,r,t).start():i.reject(new Error(d("At least 1 data point must be selected")))},this.createPairFromSeries=function(e,t){return{source:e,fragmentType:t}},this.getDpRequestParams=function(e){return{source:e.__target.id,valueFragmentType:e.fragment,valueFragmentSeries:e.series}},this.generateFileName=function(e,t){if(_.isEmpty(e.source&&t)||_.isEmpty(e.valueFragmentType||e.fragmentType))throw new Error("Unable to generate a file name for given data");var r=e.valueFragmentType?[e.valueFragmentType,e.valueFragmentSeries].join("."):e.fragmentType;return[e.source,r,t].join(".")},this.Downloader=function(r,n,e){var o=this,t=_.uniqBy(e,function(e){return JSON.stringify(e)});function a(e){return{text:d("Access denied."),type:"danger",detailedData:e}}this.downloadReports=function(){var e=_(t).map(o.downloadReportForDpRequestParams).value();return i.all(e).then(o.onDownloads).catch(o.onFail)},this.start=function(){return u({templateUrl:":::PLUGIN_PATH:::/ui/views/measurementsReport.html",title:d("Generating report"),controller:["$scope","$timeout",function(n,a){n.completed=0,n.total=t.length,n.reportFileName="report.zip",n.close=function(){var e,t,r;void 0!==window.navigator.msSaveBlob?(e=n.blob,t=n.reportFileName,window.navigator.msSaveBlob(e,t)):(r=n.url,a(function(){window.URL.revokeObjectURL(r)},5e3)),n.$close()},o.scope=n,o.downloadReports()}]})},this.downloadReportForDpRequestParams=function(t,e){e=o.getFilter(t,e);return s.list(e,r).then(function(e){return o.onDownload(t,e)}).catch(function(e){o.onAsyncResult(t,e)})},this.onDownload=function(e,t){return o.scope.completed+=1,t.name=m.generateFileName(e,r.name),t},this.onAsyncResult=function(e,t){return t.async?(o.scope.completed+=1,null):i.reject(t)},this.onFail=function(e){o.scope.$dismiss(),function(r){var n=i.defer();{var e;403===r.status?r.data instanceof Blob?((e=new FileReader).addEventListener("loadend",function(e){try{var t=JSON.parse(_.get(e,"srcElement.result"));n.resolve({type:"danger",text:p.getString(t.message),detailedData:t})}catch(e){n.resolve(a(r))}}),e.readAsText(r.data)):n.resolve(a(r)):n.resolve({type:"danger",text:d("An error occurred. Please try again later."),detailedData:r})}return n.promise}(e).then(c.add)},this.onDownloads=function(e){var t=e.filter(_.identity),e=e.length-t.length;return 0<e&&(e=p.getPlural(e,"You will get a CSV/Excel file for 1 series via email.","You will get CSV/Excel files for {{$count}} series via email.",{}),c.success(e)),0===t.length?i.when():l.zipFiles(t).then(function(e){o.scope.blob=e,o.scope.url=window.URL.createObjectURL(e)})},this.getFilter=function(e,t){t=_.isArray(n)?n[t]:n;return _.merge({},t,e)}}}e.$inject=["$q","$rootScope","c8yMeasurements","c8yZip","c8yModal","c8yAlert","gettext","gettextCatalog"],angular.module("c8y.ui").service("MeasurementsReportSvc",e)}();
@@ -1 +1 @@
1
- "use strict";!function(){var e={},n=(angular.module("c8y.ui").constant("c8yRolesUiStrings",e),_.identity);e.ADMIN=n("Allows for CREATE, UPDATE and DELETE actions"),e.LINKS={};e.LINKS.ROLES_INVENTORY="users-guide/user-and-permissions-management/",e.PERMISSIONS_SCOPES={};var s=e.PERMISSIONS_SCOPES;s.MANAGED_OBJECT=n("Controls access to managed objects in inventory."),s.ALARM=n("Controls access to device alarms."),s.AUDIT=n("Controls access to audit logs."),s.EVENT=n("Controls access to events."),s.MEASUREMENT=n("Controls access to measurements."),s.OPERATION=n("Controls access to device operations."),s.SUPPORT=n("Controls access as a support user."),s["*"]=n("Controls access in all scopes."),e.PERMISSIONS_GLOBAL={},e.PERMISSIONS_GLOBAL.INVENTORY=n("Global inventory permissions override inventory role permissions. If you want to limit inventory access, grant it only via inventory roles."),e.PERMISSIONS_GLOBAL_LABELS={ACCOUNT:n("Account"),TENANT_MANAGEMENT:n("Tenant management"),TENANT_STATISTICS:n("Tenant statistics"),OPTION_MANAGEMENT:n("Option management"),APPLICATION_MANAGEMENT:n("Application management"),APPLICATION_MANAGEMENT_SUBSCRIPTIONS:n("Application subscriptions management"),USER_MANAGEMENT:n("User management"),USER_MANAGEMENT_OWN:n("Own user management"),USER_MANAGEMENT_PASSWORD_RESET:n("User management password reset"),IDENTITY:n("Identity"),INVENTORY:n("Inventory"),MEASUREMENT:n("Measurements"),EVENT:n("Events"),ALARM:n("Alarms"),AUDIT:n("Audits"),DEVICE_CONTROL:n("Device control"),CEP_MANAGEMENT:n("CEP management"),DEVICE:n("Device"),DEVICE_BOOTSTRAP:n("Device bootstrap"),RETENTION_RULE:n("Retention rules"),BULK_OPERATION:n("Bulk operations"),CONNECTIVITY:n("Connectivity"),SCHEDULE_REPORT:n("Schedule export"),SMARTRULE:n("Global smart rules"),DATAHUB_ADMINISTRATION:n("DataHub administration"),DATAHUB_MANAGEMENT:n("DataHub management"),DATAHUB_QUERY:n("DataHub query")}}();
1
+ "use strict";!function(){var e={},n=(angular.module("c8y.ui").constant("c8yRolesUiStrings",e),_.identity);e.ADMIN=n("Allows for CREATE, UPDATE and DELETE actions"),e.LINKS={};e.LINKS.ROLES_INVENTORY="users-guide/administration/#inventory-roles",e.PERMISSIONS_SCOPES={};var t=e.PERMISSIONS_SCOPES;t.MANAGED_OBJECT=n("Controls access to managed objects in inventory."),t.ALARM=n("Controls access to device alarms."),t.AUDIT=n("Controls access to audit logs."),t.EVENT=n("Controls access to events."),t.MEASUREMENT=n("Controls access to measurements."),t.OPERATION=n("Controls access to device operations."),t.SUPPORT=n("Controls access as a support user."),t["*"]=n("Controls access in all scopes."),e.PERMISSIONS_GLOBAL={},e.PERMISSIONS_GLOBAL.INVENTORY=n("Global inventory permissions override inventory role permissions. If you want to limit inventory access, grant it only via inventory roles."),e.PERMISSIONS_GLOBAL_LABELS={ACCOUNT:n("Account"),TENANT_MANAGEMENT:n("Tenant management"),TENANT_STATISTICS:n("Tenant statistics"),OPTION_MANAGEMENT:n("Option management"),APPLICATION_MANAGEMENT:n("Application management"),APPLICATION_MANAGEMENT_SUBSCRIPTIONS:n("Application subscriptions management"),USER_MANAGEMENT:n("User management"),USER_MANAGEMENT_OWN:n("Own user management"),USER_MANAGEMENT_PASSWORD_RESET:n("User management password reset"),IDENTITY:n("Identity"),INVENTORY:n("Inventory"),MEASUREMENT:n("Measurements"),EVENT:n("Events"),ALARM:n("Alarms"),AUDIT:n("Audits"),DEVICE_CONTROL:n("Device control"),CEP_MANAGEMENT:n("CEP management"),DEVICE:n("Device"),DEVICE_BOOTSTRAP:n("Device bootstrap"),RETENTION_RULE:n("Retention rules"),BULK_OPERATION:n("Bulk operations"),CONNECTIVITY:n("Connectivity"),SCHEDULE_REPORT:n("Schedule export"),SMARTRULE:n("Global smart rules"),DATAHUB_ADMINISTRATION:n("DataHub administration"),DATAHUB_MANAGEMENT:n("DataHub management"),DATAHUB_QUERY:n("DataHub query")}}();
@@ -1,4 +1,4 @@
1
- <div class="c8y-prompt alert" ng-class="[colorStatusClass()]">
1
+ <div class="c8y-prompt alert" ng-class="[colorStatusClass()]" data-cy="c8y-prompt--alert">
2
2
  <h3 class="m-b-16">
3
3
  <i c8y-icon="{{ statusIcon() }}"></i>
4
4
  <span ng-show="title">{{ title | translate }}</span>
@@ -2,43 +2,58 @@
2
2
 
3
3
  <c8y-breadcrumbs-set>
4
4
  <c8y-breadcrumbs-item
5
- label="{{ 'Data connectors' | translate }}"
6
5
  icon="c8y-data-broker"
6
+ label="{{ 'Data connectors' | translate }}"
7
7
  ></c8y-breadcrumbs-item>
8
8
  <c8y-breadcrumbs-item
9
- label="{{ 'Data broker' | translate }}"
10
9
  icon="c8y-data-broker"
10
+ label="{{ 'Data broker' | translate }}"
11
11
  ></c8y-breadcrumbs-item>
12
12
  </c8y-breadcrumbs-set>
13
13
 
14
14
  <c8y-ui-action-bar-set>
15
- <li class="navbar-form hidden-xs" action-bar-position="left">
15
+ <li
16
+ class="navbar-form hidden-xs"
17
+ action-bar-position="left"
18
+ >
16
19
  <c8y-list-display-control
17
20
  list-length="vm.connectors.length"
18
21
  on-list-class-change="vm.listClass = listClass"
19
22
  ></c8y-list-display-control>
20
23
  </li>
21
24
 
22
- <li class="navbar-form" action-bar-position="left">
25
+ <li
26
+ class="navbar-form"
27
+ action-bar-position="left"
28
+ >
23
29
  <div class="input-group input-group-search">
24
30
  <input
25
- id="filter"
26
31
  class="form-control"
27
32
  title="{{ 'Filter connectors' | translate }}"
28
- type="search"
33
+ id="filter"
29
34
  placeholder="{{ 'Filter' | translate }}…"
35
+ type="search"
30
36
  ng-model="vm.searchString"
31
37
  />
32
38
  <span class="input-group-addon">
33
- <i c8y-icon="search" ng-if="vm.searchString.length === 0 || !vm.searchString"></i>
34
39
  <i
35
- c8y-icon="times"
40
+ c8y-icon="search"
41
+ ng-if="vm.searchString.length === 0 || !vm.searchString"
42
+ ></i>
43
+ <i
36
44
  class="text-muted"
45
+ c8y-icon="times"
37
46
  ng-if="vm.searchString.length > 0"
38
47
  ng-click="vm.searchString = ''"
39
48
  ></i>
40
49
  </span>
41
- <span for="filter" class="sr-only" translate>Filter connectors</span>
50
+ <span
51
+ class="sr-only"
52
+ for="filter"
53
+ translate
54
+ >
55
+ Filter connectors
56
+ </span>
42
57
  </div>
43
58
  </li>
44
59
 
@@ -53,8 +68,8 @@
53
68
  </a>
54
69
  <button
55
70
  class="btn btn-link"
56
- type="button"
57
71
  title="{{ 'Reload' | translate }}"
72
+ type="button"
58
73
  ng-click="vm.reload()"
59
74
  >
60
75
  <i c8y-icon="refresh"></i>
@@ -66,10 +81,10 @@
66
81
 
67
82
  <!-- Empty state -->
68
83
  <c8y-ui-empty-state
69
- ng-if="vm.connectors.length === 0"
70
84
  [icon]="'c8y-connector-out'"
71
85
  [title]="'No data connectors to display.' | translate"
72
86
  [subtitle]="'Click below to add your first data connector.' | translate"
87
+ ng-if="vm.connectors.length === 0"
73
88
  >
74
89
  <a
75
90
  class="btn btn-primary"
@@ -81,8 +96,14 @@
81
96
  </c8y-ui-empty-state>
82
97
 
83
98
  <!-- list -->
84
- <div class="card-group" ng-class="vm.listClass">
85
- <div class="page-sticky-header hidden-xs" ng-if="vm.connectors.length > 0">
99
+ <div
100
+ class="card-group"
101
+ ng-class="vm.listClass"
102
+ >
103
+ <div
104
+ class="page-sticky-header hidden-xs"
105
+ ng-if="vm.connectors.length > 0"
106
+ >
86
107
  <div class="d-flex">
87
108
  <div class="card-header">
88
109
  <div class="card-icon"></div>
@@ -117,25 +138,34 @@
117
138
  ng-repeat="connector in vm.connectors | orderBy:'name' | filter:vm.searchString as filtered"
118
139
  >
119
140
  <div class="card card--d-col">
120
- <div class="card-actions" ng-click="$event.stopPropagation();">
121
- <div class="dropdown settings" uib-dropdown>
141
+ <div
142
+ class="card-actions"
143
+ ng-click="$event.stopPropagation();"
144
+ >
145
+ <div
146
+ class="dropdown settings"
147
+ uib-dropdown
148
+ >
122
149
  <button
123
150
  class="dropdown-toggle c8y-dropdown"
124
- type="button"
125
151
  title="{{ 'Actions' | translate }}"
152
+ aria-haspopup="true"
153
+ type="button"
126
154
  uib-dropdown-toggle
127
155
  ng-click="::$event.stopPropagation()"
128
- aria-haspopup="true"
129
156
  >
130
157
  <span>
131
158
  <i c8y-icon="ellipsis-v"></i>
132
159
  </span>
133
160
  </button>
134
- <ul class="dropdown-menu dropdown-menu-right" uib-dropdown-menu>
161
+ <ul
162
+ class="dropdown-menu dropdown-menu-right"
163
+ uib-dropdown-menu
164
+ >
135
165
  <li>
136
166
  <button
137
- type="button"
138
167
  title="{{ 'Edit' | translate }}"
168
+ type="button"
139
169
  ng-click="::$event.stopPropagation();vm.editConnector(connector.id)"
140
170
  >
141
171
  <i c8y-icon="edit"></i>
@@ -144,8 +174,8 @@
144
174
  </li>
145
175
  <li>
146
176
  <button
147
- type="button"
148
177
  title="{{ 'Duplicate' | translate }}"
178
+ type="button"
149
179
  ng-click="::$event.stopPropagation();vm.duplicateConnector(connector)"
150
180
  >
151
181
  <i c8y-icon="clone"></i>
@@ -154,8 +184,8 @@
154
184
  </li>
155
185
  <li>
156
186
  <button
157
- type="button"
158
187
  title="{{ 'Delete' | translate }}"
188
+ type="button"
159
189
  ng-click="::$event.stopPropagation();vm.deleteConnector(connector)"
160
190
  >
161
191
  <i c8y-icon="delete"></i>
@@ -174,14 +204,21 @@
174
204
  <div class="card-icon">
175
205
  <i c8y-icon="c8y-connector-out c8y-icon-duocolor"></i>
176
206
  </div>
177
- <div class="text-truncate card-title" title="{{ connector.name }}">
207
+ <div
208
+ class="text-truncate card-title"
209
+ title="{{ connector.name }}"
210
+ >
178
211
  {{ connector.name }}
179
212
  </div>
180
213
  </div>
181
214
 
182
215
  <div class="card-block card-column-70 m-r-0">
183
216
  <div class="card-column-40 text-truncate">
184
- <span class="text-label-small" title="{{ connector.instanceUrl }}" translate>
217
+ <span
218
+ class="text-label-small"
219
+ title="{{ connector.instanceUrl }}"
220
+ translate
221
+ >
185
222
  Target URL
186
223
  </span>
187
224
  <span>
@@ -191,12 +228,19 @@
191
228
  </span>
192
229
  </div>
193
230
  <div class="card-column-60 text-truncate-wrap">
194
- <span class="text-label-small" title="{{ connector.description }}" translate>
231
+ <span
232
+ class="text-label-small"
233
+ title="{{ connector.description }}"
234
+ translate
235
+ >
195
236
  Description
196
237
  </span>
197
238
  <span ng-if="!connector.description">
198
239
  <small>
199
- <em class="text-muted" title="{{ 'None' | translate }}">
240
+ <em
241
+ class="text-muted"
242
+ title="{{ 'None' | translate }}"
243
+ >
200
244
  {{ 'None' | translate }}
201
245
  </em>
202
246
  </small>
@@ -212,14 +256,17 @@
212
256
  <div class="d-flex flex-grow a-i-center">
213
257
  <div class="card-column-80 flex-grow">
214
258
  <div ng-if="connector.visibleStatus.value === waitingStatus.value">
215
- <i class="icon-spin text-warning" c8y-icon="circle-o-notch"></i>
259
+ <i
260
+ class="icon-spin text-warning"
261
+ c8y-icon="circle-o-notch"
262
+ ></i>
216
263
  <span>
217
264
  {{ waitingStatus.label | translate }}
218
265
  </span>
219
266
  <button
220
267
  class="btn-help btn-help--sm"
221
- type="button"
222
268
  aria-label="{{ 'Help' | translate }}"
269
+ type="button"
223
270
  uib-popover="{{ 'The target URL did not accept the connection yet.' | translate }}"
224
271
  popover-placement="right"
225
272
  popover-trigger="'focus'"
@@ -227,14 +274,17 @@
227
274
  ></button>
228
275
  </div>
229
276
  <div ng-if="connector.visibleStatus.value === activatingStatus.value">
230
- <i c8y-icon="circle-o-notch" class="icon-spin text-warning"></i>
277
+ <i
278
+ class="icon-spin text-warning"
279
+ c8y-icon="circle-o-notch"
280
+ ></i>
231
281
  <span class="text-warning">
232
282
  {{ activatingStatus.label | translate }}
233
283
  </span>
234
284
  <button
235
285
  class="btn-help btn-help--sm"
236
- type="button"
237
286
  aria-label="{{ 'Help' | translate }}"
287
+ type="button"
238
288
  uib-popover="{{ vm.getStatusTooltip(connector) | translate }}"
239
289
  popover-placement="right"
240
290
  popover-trigger="'focus'"
@@ -261,8 +311,8 @@
261
311
  </label>
262
312
  <button
263
313
  class="btn-help btn-help--sm"
264
- type="button"
265
314
  aria-label="{{ 'Help' | translate }}"
315
+ type="button"
266
316
  uib-popover="{{ vm.getStatusTooltip(connector) | translate }}"
267
317
  popover-placement="right"
268
318
  popover-trigger="'focus'"
@@ -273,7 +323,12 @@
273
323
  </div>
274
324
 
275
325
  <div class="card-column-20">
276
- <span class="text-label-small" translate>Filters</span>
326
+ <span
327
+ class="text-label-small"
328
+ translate
329
+ >
330
+ Filters
331
+ </span>
277
332
  <span
278
333
  class="badge badge-info"
279
334
  ng-bind="::(connector.filters && connector.filters.length || 0)"
@@ -286,8 +341,8 @@
286
341
  </div>
287
342
  <!-- no results empty state -->
288
343
  <c8y-ui-empty-state
289
- ng-if="filtered.length === 0 && vm.searchString.length > 0"
290
344
  [icon]="'search'"
291
345
  [title]="'No results to display.' | translate"
292
346
  [subtitle]="'Refine your search terms or check your spelling.' | translate"
347
+ ng-if="filtered.length === 0 && vm.searchString.length > 0"
293
348
  ></c8y-ui-empty-state>
@@ -1 +1 @@
1
- "use strict";angular.module("c8y.cockpit.dataPointExplorer",["c8y.deviceSelector"]).constant("dataPointExplorerTemplateBasePath",":::PLUGIN_PATH:::/views/").config(["c8yComponentsProvider","gettext",function(t,e){t.add({name:"Data points graph",nameDisplay:e("Data points graph"),description:e("A graph display of a collection of data points"),templateUrl:":::PLUGIN_PATH:::/views/widget.html",configTemplateUrl:":::PLUGIN_PATH:::/views/widgetConfig.html",previewImage:":::PLUGIN_PATH:::/img/data-points-graph-widget-pr.png",options:{noDeviceTarget:!0,minCol:4,datapointAttributes:["datapoints"]},displaySettings:{globalTimeContext:!0}})}]);
1
+ "use strict";angular.module("c8y.cockpit.dataPointExplorer",["c8y.deviceSelector"]).constant("dataPointExplorerTemplateBasePath",":::PLUGIN_PATH:::/views/").config(["c8yComponentsProvider","gettext",function(t,e){t.add({name:"Data points graph",nameDisplay:e("Data points graph"),description:e("A graph display of a collection of data points"),templateUrl:":::PLUGIN_PATH:::/views/widget.html",configTemplateUrl:":::PLUGIN_PATH:::/views/widgetConfig.html",previewImage:":::PLUGIN_PATH:::/img/data-points-graph-widget-pr.png",options:{noDeviceTarget:!0,minCol:4,datapointAttributes:["datapoints"]},displaySettings:{globalTimeContext:!0,globalRealtimeContext:!0,globalAggregationContext:!0}})}]);
@@ -1,4 +1,4 @@
1
- <div class="data-point-explorer" >
1
+ <div class="data-point-explorer">
2
2
  <c8y-ui-action-bar-set>
3
3
  <li class="navbar-form">
4
4
  <label title="{{ 'Aggregation' | translate }}">{{ 'Aggregation' | translate }}</label>
@@ -76,7 +76,11 @@
76
76
 
77
77
  <div class="content-fullpage bg-level-1">
78
78
  <div class="inner-scroll bg-inherit">
79
- <c8y-data-point-list datapoints="data.datapoints" smartrules class="bg-inherit"></c8y-data-point-list>
79
+ <c8y-data-point-list
80
+ class="bg-inherit"
81
+ datapoints="data.datapoints"
82
+ smartrules
83
+ ></c8y-data-point-list>
80
84
  <c8y-alarms-events-timelines-config
81
85
  class="card--grid__separator-top--white d-block bg-inherit"
82
86
  configs="data.alarmsEventsConfigs"
@@ -95,6 +95,7 @@
95
95
  on-data="onEvent($data)"
96
96
  ></c8y-realtime-button>
97
97
  <c8y-aggregation
98
+ ng-show="!data.widgetInstanceGlobalTimeContext"
98
99
  class="top-right-control"
99
100
  date-from="data.dateFrom"
100
101
  date-to="data.dateTo"
@@ -1 +1 @@
1
- "use strict";!function(){function t(t,e){t.add({name:"Data points table",nameDisplay:e("Data points table"),description:e("A table display of a collection of data points"),templateUrl:":::PLUGIN_PATH:::/views/widget.html",configTemplateUrl:":::PLUGIN_PATH:::/views/widgetConfig.html",previewImage:":::PLUGIN_PATH:::/img/data-point-table-widget-pr.png",options:{noDeviceTarget:!0,minCol:6,datapointAttributes:["datapoints"]},displaySettings:{globalTimeContext:!0}})}t.$inject=["c8yComponentsProvider","gettext"],angular.module("c8y.cockpit.dataPointTable",[]).config(t)}();
1
+ "use strict";!function(){function t(t,e){t.add({name:"Data points table",nameDisplay:e("Data points table"),description:e("A table display of a collection of data points"),templateUrl:":::PLUGIN_PATH:::/views/widget.html",configTemplateUrl:":::PLUGIN_PATH:::/views/widgetConfig.html",previewImage:":::PLUGIN_PATH:::/img/data-point-table-widget-pr.png",options:{noDeviceTarget:!0,minCol:6,datapointAttributes:["datapoints"]},displaySettings:{globalTimeContext:!0,globalRealtimeContext:!0,globalAggregationContext:!0}})}t.$inject=["c8yComponentsProvider","gettext"],angular.module("c8y.cockpit.dataPointTable",[]).config(t)}();