@c8y/ng1-modules 1018.500.12 → 1018.501.0

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.
@@ -2091,8 +2091,17 @@ msgstr "Durchsuchen"
2091
2091
  msgid "Browse path"
2092
2092
  msgstr "Suchpfad"
2093
2093
 
2094
- msgid "Browse the manual"
2095
- msgstr "Durchsuchen Sie das Handbuch"
2094
+ msgid "Browse the documentation"
2095
+ msgstr "Durchsuchen Sie die Dokumentation"
2096
+
2097
+ msgid ""
2098
+ "Browse the documentation\n"
2099
+ " <a c8y-guide-href=\"users-guide/cockpit/\">here</a>\n"
2100
+ " ."
2101
+ msgstr ""
2102
+ "Durchsuchen Sie die Dokumentation\n"
2103
+ " <a c8y-guide-href=\"users-guide/cockpit/\">hier</a>\n"
2104
+ " ."
2096
2105
 
2097
2106
  msgid "Built-in"
2098
2107
  msgstr "Vordefiniert"
@@ -3039,9 +3048,6 @@ msgstr "Konfiguration gelöscht."
3039
3048
  msgid "Configuration file"
3040
3049
  msgstr "Konfigurationsdatei"
3041
3050
 
3042
- msgid "Configuration reloaded."
3043
- msgstr "Konfiguration erneut geladen."
3044
-
3045
3051
  msgid "Configuration repository"
3046
3052
  msgstr "Konfigurations-Repository"
3047
3053
 
@@ -3522,6 +3528,9 @@ msgstr "Das Modul \"{{moduleName}}\" konnte nicht eingerichtet werden. Die Kompi
3522
3528
  msgid "Could not deploy module \"{{moduleName}}\". Compilation failed in expression \"{{expression}}\": incorrect syntax near \"{{incorrectExpression}}\" at line {{line}} column {{column}}."
3523
3529
  msgstr "Das Modul \"{{moduleName}}\" konnte nicht eingerichtet werden. Die Kompilierung ist beim Ausdruck \"{{expression}}\" fehlgeschlagen: Falsche Syntax in der Nähe von \"{{incorrectExpression}}\" in Zeile {{line}} Spalte {{column}}."
3524
3530
 
3531
+ msgid "Could not deploy the application, as an application with the same name`KEEP_ORIGINAL`, context-path`KEEP_ORIGINAL` or key`KEEP_ORIGINAL` exists already."
3532
+ msgstr "Die Anwendung konnte nicht bereitgestellt werden, da bereits eine Anwendung mit demselben name, context-path oder key existiert."
3533
+
3525
3534
  msgid "Could not download the file: object with ID \"{{ id }}\" is not a valid binary."
3526
3535
  msgstr "Die Datei konnte nicht heruntergeladen werden, weil das Objekt mit der ID \"{{ id }}\" keine gültige Binärdatei ist."
3527
3536
 
@@ -4149,12 +4158,6 @@ msgstr "Daten stimmen mit einem Schema aus \"nicht\" überein."
4149
4158
  msgid "Data point"
4150
4159
  msgstr "Datenpunkt"
4151
4160
 
4152
- msgid "Data point for gauge"
4153
- msgstr "Datenpunkt für Anzeige"
4154
-
4155
- msgid "Data point for labels"
4156
- msgstr "Datenpunkt für Beschriftung"
4157
-
4158
4161
  msgid "Data point library"
4159
4162
  msgstr "Datenpunktbibliothek"
4160
4163
 
@@ -4341,6 +4344,9 @@ msgstr "Standardanwendung"
4341
4344
  msgid "Default applications"
4342
4345
  msgstr "Standardanwendungen"
4343
4346
 
4347
+ msgid "Default device value"
4348
+ msgstr "Standardgerätewert"
4349
+
4344
4350
  msgid "Default global roles"
4345
4351
  msgstr "Globale Standardrollen"
4346
4352
 
@@ -5090,12 +5096,6 @@ msgstr "Smart Rules-Tab für Gruppen und Geräte anzeigen."
5090
5096
  msgid "Display top level groups under the Groups navigator menu."
5091
5097
  msgstr "Oberste Gruppen im Gruppennavigatormenü anzeigen."
5092
5098
 
5093
- msgid "Displaying an approximated location on map as latitude is missing."
5094
- msgstr "Aufgrund eines fehlenden Breitengrades wird nur eine ungefähre Position auf der Karte angezeigt."
5095
-
5096
- msgid "Displaying an approximated location on map as longitude is missing."
5097
- msgstr "Aufgrund eines fehlenden Längengrades wird nur eine ungefähre Position auf der Karte angezeigt."
5098
-
5099
5099
  msgid "Displays a list of alarms filtered by object, severity and status"
5100
5100
  msgstr "Zeigt eine Liste von Alarmen, gefiltert nach Gerät, Schweregrad und Status"
5101
5101
 
@@ -5543,15 +5543,15 @@ msgstr "Produktinterne Informationen und Kommunikation aktivieren"
5543
5543
  msgid "Enable owner"
5544
5544
  msgstr "Besitzer aktivieren"
5545
5545
 
5546
+ msgid "Enable personalized product experience tracking"
5547
+ msgstr "Tracking für personalisierte Produkterlebnisse aktivieren"
5548
+
5546
5549
  msgid "Enable realtime"
5547
5550
  msgstr "Echtzeit aktivieren"
5548
5551
 
5549
5552
  msgid "Enable showing current value in UI (for example, on the Fieldbus widget)."
5550
5553
  msgstr "Anzeigen des aktuellen Werts in der Benutzeroberfläche zulassen (z. B. über das Fieldbus-Widget)."
5551
5554
 
5552
- msgid "Enable tracking to enhance the product experience"
5553
- msgstr "Nachverfolgung aktivieren zur Verbesserung des Produkterlebnisses"
5554
-
5555
5555
  msgid "Enable two-factor authentication"
5556
5556
  msgstr "Zwei-Faktor-Authentifizierung zulassen"
5557
5557
 
@@ -6631,6 +6631,15 @@ msgstr "Häufigkeit"
6631
6631
  msgid "Frequency (in seconds)"
6632
6632
  msgstr "Häufigkeit (in Sekunden)"
6633
6633
 
6634
+ msgid "From midnight last month to now. For details refer to the user documentation."
6635
+ msgstr "Von Mitternacht im letzten Monat bis jetzt. Weitere Informationen finden Sie in der Benutzerdokumentation."
6636
+
6637
+ msgid "From midnight last week to now. For details refer to the user documentation."
6638
+ msgstr "Von Mitternacht letzte Woche bis jetzt. Weitere Informationen finden Sie in der Benutzerdokumentation."
6639
+
6640
+ msgid "From midnight last year to now. For details refer to the user documentation."
6641
+ msgstr "Von Mitternacht letzten Jahres bis jetzt. Weitere Informationen finden Sie in der Benutzerdokumentation."
6642
+
6634
6643
  msgid "From/To date filter"
6635
6644
  msgstr "Von/Bis Datumsfilter"
6636
6645
 
@@ -6685,6 +6694,9 @@ msgstr "GSM-Wege sichtbar"
6685
6694
  msgid "Gather required data"
6686
6695
  msgstr "Die erforderlichen Daten werden ermittelt"
6687
6696
 
6697
+ msgid "Gauge`display`"
6698
+ msgstr "Anzeige"
6699
+
6688
6700
  msgid "General"
6689
6701
  msgstr "Generell"
6690
6702
 
@@ -8000,15 +8012,24 @@ msgstr "Beschriftung für Inaktiv"
8000
8012
  msgid "Language"
8001
8013
  msgstr "Sprache"
8002
8014
 
8015
+ msgid "Last 24 hours"
8016
+ msgstr "Letzten 24 Stunden"
8017
+
8003
8018
  msgid "Last 24 hours availability"
8004
8019
  msgstr "Verfügbarkeit in den letzten 24 Stunden"
8005
8020
 
8021
+ msgid "Last 30 days"
8022
+ msgstr "Letzten 30 Tage"
8023
+
8006
8024
  msgid "Last 30 days availability"
8007
8025
  msgstr "Verfügbarkeit in den letzten 30 Tagen"
8008
8026
 
8009
8027
  msgid "Last 30 days operability"
8010
8028
  msgstr "Betriebsfähigkeit in den letzten 30 Tagen"
8011
8029
 
8030
+ msgid "Last 7 days"
8031
+ msgstr "Letzten 7 Tage"
8032
+
8012
8033
  msgid "Last 7 days availability"
8013
8034
  msgstr "Verfügbarkeit in den letzten 7 Tagen"
8014
8035
 
@@ -8078,6 +8099,9 @@ msgstr "Letztes Jahr"
8078
8099
  msgid "Last`page`"
8079
8100
  msgstr "Zum Ende"
8080
8101
 
8102
+ msgid "Latest version"
8103
+ msgstr "Neueste Version"
8104
+
8081
8105
  msgid "Latitude"
8082
8106
  msgstr "Breitengrad"
8083
8107
 
@@ -8875,6 +8899,9 @@ msgstr "Multimedia"
8875
8899
  msgid "Multiple"
8876
8900
  msgstr "Mehrfach"
8877
8901
 
8902
+ msgid "Multiple label and value pairs"
8903
+ msgstr "Mehrere Paare von Bezeichnungen und Werten"
8904
+
8878
8905
  msgid "Multiplier"
8879
8906
  msgstr "Multiplikator"
8880
8907
 
@@ -8917,6 +8944,9 @@ msgstr "Muss eine gültige E-Mail-Adresse sein."
8917
8944
  msgid "Must be a valid hexadecimal number."
8918
8945
  msgstr "Muss eine gültige hexadezimale Zahl sein."
8919
8946
 
8947
+ msgid "Must be a valid number."
8948
+ msgstr "Muss eine gültige Nummer sein."
8949
+
8920
8950
  msgid ""
8921
8951
  "Must be a valid phone number (only digits, spaces, slashes (\"/\"), dashes (\"-\"), and plus (\"+\")\n"
8922
8952
  " allowed, for example: +49 9 876 543 210)."
@@ -8937,6 +8967,9 @@ msgstr "Eingabe muss ein gültiger JSONPath-Ausdruck sein."
8937
8967
  msgid "Must have at least {{length}} characters"
8938
8968
  msgstr "Eingabe muss mindestens {{length}} Zeichen enthalten."
8939
8969
 
8970
+ msgid "Must not contain whitespaces nor the special characters .,*[]()@$"
8971
+ msgstr "Darf weder Leerzeichen noch die Sonderzeichen .,*[]()@$ enthalten"
8972
+
8940
8973
  msgid "My device`DEVICE_NAME`"
8941
8974
  msgstr "Mein Gerät"
8942
8975
 
@@ -10271,14 +10304,17 @@ msgstr ""
10271
10304
  "Öffnen Sie das \n"
10272
10305
  " <span>User Guide</span>"
10273
10306
 
10307
+ msgid "Open the application details"
10308
+ msgstr "Öffnen Sie die Details zur Anwendung"
10309
+
10274
10310
  msgid "OpenCellId"
10275
10311
  msgstr "OpenCellId"
10276
10312
 
10277
10313
  msgid "Opening relay {{number}}."
10278
10314
  msgstr "Relais {{number}} wird geöffnet."
10279
10315
 
10280
- msgid "Operability chart displays how many devices had their average availability on particular level in the last month."
10281
- msgstr "Serviceverfügbarkeit zeigt an, wie viele Geräte im letzten Monat im Durchschnitt in einem bestimmten Verfügbarkeitsbereich lagen."
10316
+ msgid "Operability chart displays how many devices had their average availability on particular level in the last 30 days."
10317
+ msgstr "Das Diagramm zur Betriebsbereitschaft zeigt an, wie viele Geräte in den letzten 30 Tagen durchschnittlich auf einer bestimmten Ebene verfügbar waren."
10282
10318
 
10283
10319
  msgid "Operate as MDB Communications Gateway"
10284
10320
  msgstr "Als MDB-Kommunikationsgateway arbeiten"
@@ -11397,21 +11433,12 @@ msgstr "Roter Bereich (min)"
11397
11433
  msgid "Red range: {{min}} … {{max}}"
11398
11434
  msgstr "Roter Bereich: {{min}} … {{max}}"
11399
11435
 
11400
- msgid "Redirect"
11401
- msgstr "Weiterleiten"
11402
-
11403
11436
  msgid "Redirect URL"
11404
11437
  msgstr "Redirect-URL"
11405
11438
 
11406
11439
  msgid "Redirect after logout"
11407
11440
  msgstr "Nach Abmeldung weiterleiten"
11408
11441
 
11409
- msgid "Redirect required"
11410
- msgstr "Weiterleitung erforderlich"
11411
-
11412
- msgid "Redirect to correct domain is required to log in as support user."
11413
- msgstr "Eine Weiterleitung zur richtigen Domäne ist erforderlich, um sich als Support-Benutzer anzumelden."
11414
-
11415
11442
  msgid "Redirect to…"
11416
11443
  msgstr "Weiterleiten zu…"
11417
11444
 
@@ -13710,6 +13737,9 @@ msgstr "Dynamische Gruppe \"{{name}}\" wurde erstellt."
13710
13737
  msgid "Smart group filter"
13711
13738
  msgstr "Filter für dynamische Gruppen"
13712
13739
 
13740
+ msgid "Smart group filters"
13741
+ msgstr "Filter für dynamische Gruppen"
13742
+
13713
13743
  msgid "Smart group {{ name }} added."
13714
13744
  msgstr "Dynamische Gruppe {{ name }} hinzugefügt."
13715
13745
 
@@ -14749,6 +14779,9 @@ msgstr "Der gewählte Name ist zu lang. Geben Sie einen kürzeren Namen ein."
14749
14779
  msgid "The selected replacement device does not have external IDs assigned. Go back to &quot;Replacement device&quot; and select a different device."
14750
14780
  msgstr "Dem ausgewählten Ersatzgerät wurden keine externen IDs zugewiesen. Kehren Sie zum Schritt &quot;Ersatzgerät&quot; zurück und wählen Sie ein anderes Ersatzgerät."
14751
14781
 
14782
+ msgid "The selected version was not found on the server."
14783
+ msgstr "Die ausgewählte Version wurde auf dem Server nicht gefunden."
14784
+
14752
14785
  msgid "The setting is enabled on the platform level because it is enforced for particular roles."
14753
14786
  msgstr "Die Einstellung ist auf der Plattformebene aktiviert, da sie für bestimmte Rollen erzwungen wird."
14754
14787
 
@@ -15060,6 +15093,12 @@ msgstr ""
15060
15093
  msgid "This widget cannot be rendered because the current application does not support the following component:"
15061
15094
  msgstr "Dieses Widget kann nicht angezeigt werden, da die aktuelle Anwendung die folgende Komponente nicht unterstützt:"
15062
15095
 
15096
+ msgid "This widget is in sync with the dashboard realtime context."
15097
+ msgstr "Dieses Widget ist mit dem Dashboard-Echtzeitkontext synchronisiert."
15098
+
15099
+ msgid "This widget is in sync with the dashboard time range."
15100
+ msgstr "Dieses Widget ist mit dem Zeitbereich des Dashboards synchronisiert."
15101
+
15063
15102
  msgid "This will apply to data coming from specified device"
15064
15103
  msgstr "Dies wird auf Daten des angegebenen Geräts angewendet."
15065
15104
 
@@ -15798,8 +15837,8 @@ msgstr "DDCMP Liste No. 2, RS232 No. 1 verwenden"
15798
15837
  msgid "Use FTL File Id 2 (default 1)"
15799
15838
  msgstr "FTL Datei Id 2 (Default 1) verwenden"
15800
15839
 
15801
- msgid "Use [Enter] or &lt;br&gt; tag to add a new line"
15802
- msgstr "Verwenden Sie die [Eingabe]-Taste oder das &lt;br&gt;-Tag für einen Zeilenumbruch"
15840
+ msgid "Use [Enter] or <br> tag to add a new line"
15841
+ msgstr "Verwenden Sie die [Enter]-Taste oder <br>, um eine neue Zeile hinzuzufügen"
15803
15842
 
15804
15843
  msgid "Use alarms to create smart rules for microservice availability."
15805
15844
  msgstr "Verwenden Sie Alarme, um Smart Rules für die Verfügbarkeit von Microservices zu erstellen."
@@ -16823,9 +16862,6 @@ msgstr ""
16823
16862
  "Sie können die Sensordaten im Dashboard überprüfen, welches für dieses\n"
16824
16863
  " Smartphone erstellt wurde."
16825
16864
 
16826
- msgid "You can edit the filter here."
16827
- msgstr "Sie können die Filtereinstellungen hier anpassen."
16828
-
16829
16865
  msgid "You can enter a set of LWM2M shell commands. Each command will be sent to every newly registered LWM2M device. Each command must be entered in a new line. Use the following syntax for specifying post-registration actions:"
16830
16866
  msgstr "Sie können eine Reihe von LWM2M-Shell-Kommandos eingeben. Jedes Kommando wird an jedes neu registrierte LWM2M-Gerät gesendet. Jedes Kommando muss in eine neue Zeile eingegeben werden. Verwenden Sie die folgende Syntax, um Aktionen zu spezifizieren, die nach der Registrierung durchgeführt werden sollen:"
16831
16867
 
@@ -214,6 +214,9 @@ msgstr "Concepts guide"
214
214
  msgid "Contain`verb, image fitting option`"
215
215
  msgstr "Contain"
216
216
 
217
+ msgid "Could not deploy the application, as an application with the same name`KEEP_ORIGINAL`, context-path`KEEP_ORIGINAL` or key`KEEP_ORIGINAL` exists already."
218
+ msgstr "Could not deploy the application, as an application with the same name, context-path or key exists already."
219
+
217
220
  msgid "Cover`verb, image fitting option`"
218
221
  msgstr "Cover"
219
222
 
@@ -574,6 +577,9 @@ msgstr "From"
574
577
  msgid "Full width`image fitting option`"
575
578
  msgstr "Full width"
576
579
 
580
+ msgid "Gauge`display`"
581
+ msgstr "Gauge"
582
+
577
583
  msgid "HH`HOURS`"
578
584
  msgstr "HH"
579
585
 
@@ -1 +1 @@
1
- "use strict";!function(){function t(n,t){var e=this;function i(){n.detail(e.id).then(c),n.getCustomActions().then(o)}function c(t){e.object=t,e.title=n.getName(t)}function o(t){e.customActions=t}function u(){return t.getMappings(e.object)}_.assign(e,{$onChanges:function(t){t.id&&i()},updateMapping:function(t){return n.updateMapping(e.object.id,t).then(i)},getMappings:u,getResources:function(){return t.getResources(e.object)},getMainObject:function(){return t.getMainObject(e.object)},getMappingForResource:function(t){return _.get(u(),t)}})}t.$inject=["c8yLwm2m","c8yObjectMappings"],angular.module("c8y.lwm2m").component("c8yLwm2mDetail",{templateUrl:":::PLUGIN_PATH:::/lwm2mDetail.html",controller:t,controllerAs:"vm",bindings:{id:"<"}})}();
1
+ "use strict";!function(){function e(t,e,n,i){var c=this;function u(){t.detail(c.id).then(s),t.getCustomActions().then(r)}function o(){var e=c.getMappings(),t=Object.values(c.getResources());return!((e?Object.values(e):[]).length<t.length)&&e&&Object.values(e).every(function(e){return!0===e.skipIfEmpty})}function s(e){c.object=e,c.title=t.getName(e),c.skipIfEmptyAll=o()}function r(e){c.customActions=e}function a(){return e.getMappings(c.object)}_.assign(c,{$onChanges:function(e){e.id&&u()},updateMapping:function(e){return t.updateMapping(c.object.id,e).then(u)},getMappings:a,getResources:function(){return e.getResources(c.object)},getMainObject:function(){return e.getMainObject(c.object)},getMappingForResource:function(e){return _.get(a(),e)},setAllResources:function(){var e=c.getResources(),t=c.getMappings(),e=e?Object.values(e):[];t=t||{};e.forEach(function(e){void 0!==e.id&&null!==e.id&&(t[e.id]||(t[e.id]={resourceID:e.id}),t[e.id].skipIfEmpty=c.skipIfEmptyAll)}),t&&0<Object.entries(t).length&&c.updateMapping(t).then(function(){return n.success(i("Resource update complete."))})},isIgnoreEmptyValuesMasterToggleOn:o})}e.$inject=["c8yLwm2m","c8yObjectMappings","c8yAlert","gettext"],angular.module("c8y.lwm2m").component("c8yLwm2mDetail",{templateUrl:":::PLUGIN_PATH:::/lwm2mDetail.html",controller:e,controllerAs:"vm",bindings:{id:"<"}})}();
@@ -17,18 +17,30 @@
17
17
  <div class="col-9">
18
18
  <form class="form form-read-only">
19
19
  <div class="form-group">
20
- <label for="name" class="sr-only" translate>Name</label>
20
+ <label
21
+ for="name"
22
+ class="sr-only"
23
+ translate
24
+ >
25
+ Name
26
+ </label>
21
27
  <input
22
- id="name"
23
28
  class="form-control input-lg"
29
+ id="name"
24
30
  ng-model="vm.getMainObject().name"
25
31
  />
26
32
  </div>
27
33
  <div class="form-group">
28
- <label for="description" class="sr-only" translate>Description</label>
34
+ <label
35
+ for="description"
36
+ class="sr-only"
37
+ translate
38
+ >
39
+ Description
40
+ </label>
29
41
  <textarea
30
- id="description"
31
42
  class="form-control"
43
+ id="description"
32
44
  ng-model="vm.getMainObject().description"
33
45
  ></textarea>
34
46
  </div>
@@ -38,15 +50,30 @@
38
50
  <div class="flex-grow">
39
51
  <ul class="list-unstyled small">
40
52
  <li class="p-t-4 p-b-4 d-flex separator-bottom text-nowrap">
41
- <label class="small m-b-0 m-r-8" translate>ID</label>
53
+ <label
54
+ class="small m-b-0 m-r-8"
55
+ translate
56
+ >
57
+ ID
58
+ </label>
42
59
  <span class="m-l-auto">{{ vm.getMainObject().id }}</span>
43
60
  </li>
44
61
  <li class="p-t-4 p-b-4 d-flex separator-bottom text-nowrap">
45
- <label class="small m-b-0 m-r-8" translate>Date created</label>
62
+ <label
63
+ class="small m-b-0 m-r-8"
64
+ translate
65
+ >
66
+ Date created
67
+ </label>
46
68
  <span class="m-l-auto">{{ vm.object.creationTime | absoluteDate }}</span>
47
69
  </li>
48
70
  <li class="p-t-4 p-b-4 d-flex separator-bottom text-nowrap">
49
- <label class="small m-b-0 m-r-8" translate>Last update</label>
71
+ <label
72
+ class="small m-b-0 m-r-8"
73
+ translate
74
+ >
75
+ Last update
76
+ </label>
50
77
  <span class="m-l-auto">{{ vm.object.lastUpdated | absoluteDate }}</span>
51
78
  </li>
52
79
  </ul>
@@ -55,20 +82,73 @@
55
82
  </div>
56
83
  </div>
57
84
  </div>
58
- <div class="inner-scroll">
59
- <div class="card-header separator-top-bottom sticky-top">
60
- <div class="h4" translate>Resources</div>
85
+ <div class="card-header separator-top-bottom sticky-top">
86
+ <div class="card-title">
87
+ {{ 'Resources' | translate }}
61
88
  </div>
62
- <div class="p-l-16 p-r-16">
63
- <div class="c8y-list__group">
64
- <c8y-lwm2m-resource
65
- ng-repeat="(resourceId, resource) in vm.getResources()"
66
- resource="resource"
67
- mapping="vm.getMappingForResource(resourceId)"
68
- on-update="vm.updateMapping(mapping)"
69
- ></c8y-lwm2m-resource>
89
+ </div>
90
+ <div class="inner-scroll">
91
+ <div class="sticky-top hidden-xs">
92
+ <div class="c8y-list__item">
93
+ <div class="c8y-list__item__block">
94
+ <div class="c8y-list__item__icon">
95
+ <i class="p-l-16 p-r-4"></i>
96
+ </div>
97
+ <div class="c8y-list__item__body text-medium">
98
+ <div class="content-flex-60">
99
+ <div class="col-4">
100
+ {{ 'Name' | translate }}
101
+ </div>
102
+ <div class="col-3">
103
+ {{ 'Functionalities' | translate }}
104
+ </div>
105
+ <div class="col-3 d-flex">
106
+ <div class="list-item-switch">
107
+ <label class="c8y-switch c8y-switch--inline">
108
+ <input
109
+ type="checkbox"
110
+ ng-model="vm.skipIfEmptyAll"
111
+ ng-change="vm.setAllResources()"
112
+ />
113
+ <span></span>
114
+ <span class="sr-only">
115
+ {{ 'If selected it ignores empty values on all resources below.' | translate }}
116
+ </span>
117
+ </label>
118
+ </div>
119
+ {{ 'Ignore empty values' | translate }}
120
+
121
+ <div class="list-item-icon">
122
+ <button
123
+ class="btn-help btn-help--sm"
124
+ aria-label="{{ 'Help' | translate }}"
125
+ type="button"
126
+ uib-popover="{{ 'If selected it ignores empty values on all resources below.' | translate }}"
127
+ popover-placement="right"
128
+ popover-trigger="'focus'"
129
+ popover-append-to-body="true"
130
+ ></button>
131
+ </div>
132
+ </div>
133
+ <div class="col-2">
134
+ {{ 'Validation rules' | translate }}
135
+ </div>
136
+ </div>
137
+ </div>
138
+ <div class="c8y-list__item__actions">
139
+ <div class="c8y-list__item--empty-actions"></div>
140
+ </div>
141
+ </div>
70
142
  </div>
71
143
  </div>
144
+ <div class="c8y-list__group">
145
+ <c8y-lwm2m-resource
146
+ ng-repeat="(resourceId, resource) in vm.getResources()"
147
+ resource="resource"
148
+ mapping="vm.getMappingForResource(resourceId)"
149
+ on-update="vm.updateMapping(mapping)"
150
+ ></c8y-lwm2m-resource>
151
+ </div>
72
152
  </div>
73
153
  </div>
74
154
  </div>
@@ -1 +1 @@
1
- "use strict";!function(){function n(e){var t=this;function i(){t.isDetailOpen=!t.isDetailOpen}function r(){t.mapping=_.cloneDeep(t.serverMapping)||{}}_.assign(t,{$onChanges:function(n){n.serverMapping&&r()},toggleDetail:i,helpTexts:e.helpTexts,save:function(){var n={},e=t.resource.id;n[e]=_.assign({resourceID:e},t.mapping),t.onUpdate({mapping:n}).then(i)},$onInit:function(){e.getCustomActions().then(function(n){t.customActions=n})},showValidation:function(){return function(){var n=_.get(t.resource,"operations");if(n)return"W"===n||"RW"===n;return!1}()&&function(){var n=_.get(t.resource,"dataType");if(n)return!_.isUndefined(e.Validation.ResourceDataType[n]);return!1}()},validationAvailable:function(){var n=_.get(t.mapping,"validation.arg");if(n)return 0<n.length;return!1},cancel:function(){i(),r()}})}n.$inject=["c8yLwm2m"],angular.module("c8y.lwm2m").component("c8yLwm2mResource",{templateUrl:":::PLUGIN_PATH:::/lwm2mResource.html",controllerAs:"vm",controller:n,bindings:{resource:"<",serverMapping:"<mapping",onUpdate:"&"}})}();
1
+ "use strict";!function(){function n(e){var i=this;function r(){i.isDetailOpen=!i.isDetailOpen}function t(){i.mapping=_.cloneDeep(i.serverMapping)||{}}function n(){var n=!(0<arguments.length&&void 0!==arguments[0])||arguments[0],e={},t=i.resource.id;return e[t]=_.assign({resourceID:t},i.mapping),n?i.onUpdate({mapping:e}).then(r):i.onUpdate({mapping:e})}_.assign(i,{$onChanges:function(n){n.serverMapping&&t()},toggleDetail:r,helpTexts:e.helpTexts,save:n,$onInit:function(){e.getCustomActions().then(function(n){i.customActions=n})},showValidation:function(){return function(){var n=_.get(i.resource,"operations");if(n)return"W"===n||"RW"===n;return!1}()&&function(){var n=_.get(i.resource,"dataType");if(n)return!_.isUndefined(e.Validation.ResourceDataType[n]);return!1}()},validationAvailable:function(){var n=_.get(i.mapping,"validation.arg");if(n)return 0<n.length;return!1},cancel:function(){r(),t()},updateSkipIfEmptyValues:function(){n(!1)}})}n.$inject=["c8yLwm2m"],angular.module("c8y.lwm2m").component("c8yLwm2mResource",{templateUrl:":::PLUGIN_PATH:::/lwm2mResource.html",controllerAs:"vm",controller:n,bindings:{resource:"<",serverMapping:"<mapping",onUpdate:"&"}})}();
@@ -1,46 +1,74 @@
1
- <div class="c8y-list__item collapsible" ng-class="{ expanded: vm.isDetailOpen }">
1
+ <div
2
+ class="c8y-list__item collapsible"
3
+ ng-class="{ expanded: vm.isDetailOpen }"
4
+ >
2
5
  <div class="c8y-list__item__block">
3
6
  <div class="c8y-list__item__icon">
4
7
  <i c8y-icon="c8y-data-points"></i>
5
8
  </div>
6
9
  <div class="c8y-list__item__body">
7
10
  <div class="content-flex-70">
8
- <div class="col-7" ng-click="vm.toggleDetail()">
11
+ <div
12
+ class="col-4"
13
+ ng-click="vm.toggleDetail()"
14
+ >
9
15
  <small class="text-muted">{{ vm.resource.id }}</small>
10
16
  {{ vm.resource.name }}
11
17
  </div>
12
- <div class="col-4">
13
- <div class="list-functionalities">
14
- <label class="small m-r-8 hidden-xs m-b-0" translate>Functionalities</label>
15
- &nbsp;
18
+ <div class="col-3">
19
+ <div class="list-functionalities d-flex a-i-center">
20
+ <span class="text-label-small visible-xs m-r-4">
21
+ {{ 'Functionalities' | translate }}:
22
+ </span>
16
23
  <c8y-object-mapping-status-icons
17
24
  mapping="vm.serverMapping"
18
25
  ></c8y-object-mapping-status-icons>
19
26
  </div>
20
27
  </div>
21
- <div class="col-1">
28
+ <div class="col-3">
29
+ <div class="d-flex a-i-center">
30
+ <div class="list-item-switch m-r-4">
31
+ <label class="c8y-switch c8y-switch--inline">
32
+ <input
33
+ type="checkbox"
34
+ ng-model="vm.mapping.skipIfEmpty"
35
+ ng-change="vm.updateSkipIfEmptyValues()"
36
+ />
37
+ <span></span>
38
+ <span class="visible-xs">{{ 'Ignore empty values' | translate }}</span>
39
+ <span class="sr-only">{{ 'Ignore empty values' | translate }}</span>
40
+ </label>
41
+ </div>
42
+ </div>
43
+ </div>
44
+ <div class="col-2 m-t-xs-4 d-flex a-i-center">
45
+ <span
46
+ class="m-r-xs-4 text-label-small visible-xs"
47
+ ng-show="vm.showValidation()"
48
+ >
49
+ {{ 'Validation rules' | translate }}:
50
+ </span>
22
51
  <div
23
52
  class="dot small"
24
- ng-show="vm.showValidation()"
25
53
  ng-class="{
26
- 'bg-level-4': !vm.validationAvailable(),
54
+ 'dot-default': !vm.validationAvailable(),
27
55
  'dot-success': vm.validationAvailable()
28
56
  }"
57
+ ng-show="vm.showValidation()"
29
58
  >
30
59
  <i
31
- c8y-icon="check"
32
- ng-show="vm.validationAvailable()"
33
- uib-tooltip="{{ 'Validation rules set' | translate }}"
60
+ c8y-icon="list-ul"
61
+ uib-tooltip="{{ 'Validation rules set' | translate }}."
34
62
  tooltip-popup-delay="500"
35
63
  tooltip-append-to-body="true"
64
+ ng-show="vm.validationAvailable()"
36
65
  ></i>
37
66
  <i
38
67
  c8y-icon="list-ul"
39
- ng-show="!vm.validationAvailable()"
40
- class="text-12"
41
- uib-tooltip="{{ 'No validation rules defined' | translate }}"
68
+ uib-tooltip="{{ 'No validation rules defined' | translate }}."
42
69
  tooltip-popup-delay="500"
43
70
  tooltip-append-to-body="true"
71
+ ng-show="!vm.validationAvailable()"
44
72
  ></i>
45
73
  </div>
46
74
  </div>
@@ -49,64 +77,116 @@
49
77
  <div class="c8y-list__item__actions">
50
78
  <button
51
79
  class="collapse-btn"
52
- type="button"
53
- title="{{ 'Expand' | translate }}"
54
80
  ng-class="{ active: vm.isDetailOpen }"
81
+ title="{{ 'Expand' | translate }}"
82
+ type="button"
55
83
  ng-click="vm.toggleDetail()"
56
84
  >
57
85
  <i c8y-icon="chevron-down"></i>
58
86
  </button>
59
87
  </div>
60
88
  </div>
61
- <div class="collapse" uib-collapse="!vm.isDetailOpen">
89
+ <div
90
+ class="collapse"
91
+ uib-collapse="!vm.isDetailOpen"
92
+ >
62
93
  <div class="c8y-list__item__collapse--container">
63
94
  <div class="row">
64
95
  <div class="col-md-3">
65
96
  <div ng-show="vm.resource.description">
66
97
  <p class="m-b-24">{{ vm.resource.description }}</p>
67
98
  </div>
68
- <div class="text-muted" ng-hide="vm.resource.description">
99
+ <div
100
+ class="text-muted"
101
+ ng-hide="vm.resource.description"
102
+ >
69
103
  <p class="m-b-24"><em translate>No description available.</em></p>
70
104
  </div>
71
105
  <ul class="list-unstyled small">
72
106
  <li class="p-t-4 p-b-4 d-flex separator-bottom text-nowrap">
73
- <label class="small m-b-0 m-r-8" translate>Range</label>
107
+ <label
108
+ class="small m-b-0 m-r-8"
109
+ translate
110
+ >
111
+ Range
112
+ </label>
74
113
  <span class="m-l-auto">{{ vm.resource.rangeEnumeration || '--' }}</span>
75
114
  </li>
76
115
  <li class="p-t-4 p-b-4 d-flex separator-bottom text-nowrap">
77
- <label class="small m-b-0 m-r-8" translate>Mandatory</label>
78
- <span class="m-l-auto" ng-show="vm.resource.mandatory">
116
+ <label
117
+ class="small m-b-0 m-r-8"
118
+ translate
119
+ >
120
+ Mandatory
121
+ </label>
122
+ <span
123
+ class="m-l-auto"
124
+ ng-show="vm.resource.mandatory"
125
+ >
79
126
  <span translate>Yes</span>
80
127
  </span>
81
- <span class="m-l-auto" ng-hide="vm.resource.mandatory">
128
+ <span
129
+ class="m-l-auto"
130
+ ng-hide="vm.resource.mandatory"
131
+ >
82
132
  <span translate>No</span>
83
133
  </span>
84
134
  </li>
85
135
  <li class="p-t-4 p-b-4 d-flex separator-bottom text-nowrap">
86
- <label class="small m-b-0 m-r-8" translate>Operations</label>
136
+ <label
137
+ class="small m-b-0 m-r-8"
138
+ translate
139
+ >
140
+ Operations
141
+ </label>
87
142
  <span class="m-l-auto">{{ vm.resource.operations }}</span>
88
143
  </li>
89
144
  <li class="p-t-4 p-b-4 d-flex separator-bottom text-nowrap">
90
- <label class="small m-b-0 m-r-8" translate>Type</label>
145
+ <label
146
+ class="small m-b-0 m-r-8"
147
+ translate
148
+ >
149
+ Type
150
+ </label>
91
151
  <span class="m-l-auto">{{ vm.resource.dataType }}</span>
92
152
  </li>
93
153
  <li class="p-t-4 p-b-4 d-flex separator-bottom text-nowrap">
94
- <label class="small m-b-0 m-r-8" translate>Units</label>
154
+ <label
155
+ class="small m-b-0 m-r-8"
156
+ translate
157
+ >
158
+ Units
159
+ </label>
95
160
  <span class="m-l-auto">{{ vm.resource.units || '--' }}</span>
96
161
  </li>
97
162
  <li class="p-t-4 p-b-4 d-flex separator-bottom text-nowrap">
98
- <label class="small m-b-0 m-r-8" translate>Instance type</label>
99
- <span class="m-l-auto" ng-hide="vm.resource.multiple">
163
+ <label
164
+ class="small m-b-0 m-r-8"
165
+ translate
166
+ >
167
+ Instance type
168
+ </label>
169
+ <span
170
+ class="m-l-auto"
171
+ ng-hide="vm.resource.multiple"
172
+ >
100
173
  <span translate>Single</span>
101
174
  </span>
102
- <span class="m-l-auto" ng-show="vm.resource.multiple">
175
+ <span
176
+ class="m-l-auto"
177
+ ng-show="vm.resource.multiple"
178
+ >
103
179
  <span translate>Multiple</span>
104
180
  </span>
105
181
  </li>
106
182
  </ul>
107
183
  </div>
108
184
  <div class="col-md-9">
109
- <form class="form" name="mappingForm" novalidate>
185
+ <form
186
+ class="form"
187
+ name="mappingForm"
188
+ novalidate
189
+ >
110
190
  <c8y-object-mapping
111
191
  mapping="vm.mapping"
112
192
  auto-observe-params="true"
@@ -121,16 +201,16 @@
121
201
  <hr />
122
202
  <button
123
203
  class="btn btn-default"
124
- type="button"
125
204
  title="{{ 'Cancel' | translate }}"
205
+ type="button"
126
206
  ng-click="vm.cancel(); mappingForm.$pristine = true"
127
207
  >
128
208
  {{ 'Cancel' | translate }}
129
209
  </button>
130
210
  <button
131
211
  class="btn btn-primary"
132
- type="submit"
133
212
  title="{{ 'Save' | translate }}"
213
+ type="submit"
134
214
  ng-click="vm.save()"
135
215
  ng-disabled="mappingForm.$invalid || mappingForm.$pristine"
136
216
  >
@@ -1,14 +1,14 @@
1
1
  <div class="row export-timespan">
2
2
  <div class="form-group">
3
3
  <div class="col-sm-4 col-xs-12">
4
- <div class="c8y-select-wrapper" >
4
+ <div class="c8y-select-wrapper">
5
5
  <select
6
6
  aria-label="{{ 'Time range' | translate }}"
7
7
  class="form-control input-sm"
8
8
  ng-model="timespan.dateType"
9
9
  ng-options="key as (label | translate) for (key, label) in types"
10
10
  ></select>
11
- <span ></span>
11
+ <span></span>
12
12
  </div>
13
13
  </div>
14
14
  <button
@@ -16,7 +16,9 @@
16
16
  class="btn-help btn-help--sm"
17
17
  type="button"
18
18
  aria-label="{{ 'Help' | translate }}"
19
- uib-popover="{{ 'From midnight last month to now. More in documentation.' | translate }}"
19
+ uib-popover="{{
20
+ 'From midnight last month to now. For details refer to the user documentation.' | translate
21
+ }}"
20
22
  popover-placement="right"
21
23
  popover-trigger="'focus'"
22
24
  ></button>
@@ -25,7 +27,9 @@
25
27
  class="btn-help btn-help--sm"
26
28
  type="button"
27
29
  aria-label="{{ 'Help' | translate }}"
28
- uib-popover="{{ 'From midnight last week to now. More in documentation.' | translate }}"
30
+ uib-popover="{{
31
+ 'From midnight last week to now. For details refer to the user documentation.' | translate
32
+ }}"
29
33
  popover-placement="right"
30
34
  popover-trigger="'focus'"
31
35
  ></button>
@@ -34,16 +38,26 @@
34
38
  class="btn-help btn-help--sm"
35
39
  type="button"
36
40
  aria-label="{{ 'Help' | translate }}"
37
- uib-popover="{{ 'From midnight last year to now. More in documentation.' | translate }}"
41
+ uib-popover="{{
42
+ 'From midnight last year to now. For details refer to the user documentation.' | translate
43
+ }}"
38
44
  popover-placement="right"
39
45
  popover-trigger="'focus'"
40
46
  ></button>
41
47
  </div>
42
- <div class="col-xs-12" ng-if="timespan.dateType === 'CUSTOM'">
48
+ <div
49
+ class="col-xs-12"
50
+ ng-if="timespan.dateType === 'CUSTOM'"
51
+ >
43
52
  <div class="row">
44
53
  <div class="col-sm-6 col-xs-12">
45
54
  <div class="timespan-label">
46
- <label class="small" translate>From`date`</label>
55
+ <label
56
+ class="small"
57
+ translate
58
+ >
59
+ From`date`
60
+ </label>
47
61
  </div>
48
62
  <div class="d-inline-block">
49
63
  <c8y-date-time-picker
@@ -56,7 +70,12 @@
56
70
  </div>
57
71
  <div class="col-sm-6 col-xs-12">
58
72
  <div class="timespan-label">
59
- <label class="small" translate>To`date`</label>
73
+ <label
74
+ class="small"
75
+ translate
76
+ >
77
+ To`date`
78
+ </label>
60
79
  </div>
61
80
  <div class="d-inline-block">
62
81
  <c8y-date-time-picker
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c8y/ng1-modules",
3
- "version": "1018.500.12",
3
+ "version": "1018.501.0",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Cumulocity",
6
6
  "description": "AngularJS modules for Cumulocity IoT applications.",