@c8y/ng1-modules 1018.214.0 → 1018.216.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.
- package/app-logs/app-instance-logs/app-instance-logs.html +1 -0
- package/core/ui/containers/header.html +78 -25
- package/package.json +1 -1
- package/smartRestEditor/responseEditor/responseEditor.html +62 -31
- package/smartRestEditor/views/responses.html +46 -23
- package/smartRules/views/childAssetsSelector.html +27 -8
- package/userRoles/inventoryRoleSelector/inventoryRoleSelector.html +30 -19
- package/userRoles/inventoryRolesTab/inventoryRolesTab.html +32 -16
- package/userRoles/rolesAssetTree/rolesAssetTree.html +6 -6
|
@@ -10,20 +10,27 @@
|
|
|
10
10
|
<div class="header-bar">
|
|
11
11
|
<button
|
|
12
12
|
class="navigator-toggle main-header-button"
|
|
13
|
-
|
|
13
|
+
ng-class="{ 'nav-hidden-on-startup': vm.navHiddenOnStartup }"
|
|
14
14
|
title="{{ 'Toggle navigator' | translate }}"
|
|
15
|
+
type="button"
|
|
15
16
|
ng-click="vm.toggleNav()"
|
|
16
|
-
ng-class="{ 'nav-hidden-on-startup': vm.navHiddenOnStartup }"
|
|
17
17
|
ng-if="vm.rootNodes().length"
|
|
18
18
|
>
|
|
19
19
|
<i c8y-icon="dedent-right"></i>
|
|
20
20
|
</button>
|
|
21
21
|
<div class="app-view">
|
|
22
|
-
<c8y-app-icon
|
|
22
|
+
<c8y-app-icon
|
|
23
|
+
class="c8y-app-icon"
|
|
24
|
+
app="vm.currentApp"
|
|
25
|
+
white="false"
|
|
26
|
+
></c8y-app-icon>
|
|
23
27
|
<div ng-show="vm.isLoading()">
|
|
24
28
|
<c8y-loading></c8y-loading>
|
|
25
29
|
</div>
|
|
26
|
-
<span
|
|
30
|
+
<span
|
|
31
|
+
class="page-header"
|
|
32
|
+
ng-show="!vm.isLoading()"
|
|
33
|
+
>
|
|
27
34
|
<c8y-ui-title></c8y-ui-title>
|
|
28
35
|
<c8y-ui-breadcrumbs class="app-breadcrumbs"></c8y-ui-breadcrumbs>
|
|
29
36
|
</span>
|
|
@@ -40,46 +47,64 @@
|
|
|
40
47
|
>
|
|
41
48
|
<button
|
|
42
49
|
class="main-header-button dropdown-toggle c8y-dropdown"
|
|
43
|
-
type="button"
|
|
44
50
|
aria-label="'Application switcher' | translate"
|
|
45
|
-
uib-dropdown-toggle
|
|
46
51
|
aria-haspopup="true"
|
|
52
|
+
type="button"
|
|
53
|
+
uib-dropdown-toggle
|
|
47
54
|
>
|
|
48
|
-
<i
|
|
55
|
+
<i
|
|
56
|
+
class="icon-2x"
|
|
57
|
+
c8y-icon="th"
|
|
58
|
+
></i>
|
|
49
59
|
</button>
|
|
50
|
-
<div
|
|
60
|
+
<div
|
|
61
|
+
class="dropdown-menu app-switcher-dropdown-menu"
|
|
62
|
+
uib-dropdown-menu
|
|
63
|
+
>
|
|
51
64
|
<div
|
|
52
65
|
class="app-switcher-sagcloud"
|
|
53
66
|
ng-if="vm.oneCloudApplications && vm.oneCloudApplications.length > 0"
|
|
54
67
|
>
|
|
55
68
|
<a
|
|
56
|
-
ng-repeat="app in vm.oneCloudApplications"
|
|
57
69
|
class="appLink"
|
|
58
|
-
ng-href="{{ vm.getHref(app) }}"
|
|
59
70
|
ng-class="{ active: app.currentApp }"
|
|
60
71
|
title="{{ app | humanizeAppName }}"
|
|
72
|
+
ng-repeat="app in vm.oneCloudApplications"
|
|
73
|
+
ng-href="{{ vm.getHref(app) }}"
|
|
61
74
|
>
|
|
62
|
-
<c8y-app-icon
|
|
75
|
+
<c8y-app-icon
|
|
76
|
+
class="c8y-app-icon"
|
|
77
|
+
app="app"
|
|
78
|
+
white="false"
|
|
79
|
+
></c8y-app-icon>
|
|
63
80
|
<span class="text-truncate-wrap">{{ app | humanizeAppName }}</span>
|
|
64
81
|
</a>
|
|
65
82
|
</div>
|
|
66
83
|
|
|
67
84
|
<div class="app-switcher">
|
|
68
85
|
<a
|
|
69
|
-
ng-repeat="app in vm.applications"
|
|
70
86
|
class="appLink"
|
|
71
|
-
ng-href="{{ vm.getHref(app) }}"
|
|
72
87
|
ng-class="{ active: app.currentApp }"
|
|
73
88
|
title="{{ app | humanizeAppName }}"
|
|
89
|
+
ng-repeat="app in vm.applications"
|
|
90
|
+
ng-href="{{ vm.getHref(app) }}"
|
|
74
91
|
>
|
|
75
|
-
<c8y-app-icon
|
|
92
|
+
<c8y-app-icon
|
|
93
|
+
class="c8y-app-icon"
|
|
94
|
+
app="app"
|
|
95
|
+
white="false"
|
|
96
|
+
></c8y-app-icon>
|
|
76
97
|
<span class="text-truncate-wrap">{{ app | humanizeAppName }}</span>
|
|
77
98
|
</a>
|
|
78
99
|
</div>
|
|
79
100
|
</div>
|
|
80
101
|
</div>
|
|
81
102
|
|
|
82
|
-
<div
|
|
103
|
+
<div
|
|
104
|
+
class="main-header-item dropdown"
|
|
105
|
+
is-open="vm.menuStatus.userOpen"
|
|
106
|
+
uib-dropdown
|
|
107
|
+
>
|
|
83
108
|
<button
|
|
84
109
|
class="main-header-button dropdown-toggle c8y-dropdown"
|
|
85
110
|
type="button"
|
|
@@ -92,12 +117,22 @@
|
|
|
92
117
|
>
|
|
93
118
|
{{ vm.getUserName() }}
|
|
94
119
|
</span>
|
|
95
|
-
<i
|
|
120
|
+
<i
|
|
121
|
+
class="icon-2x"
|
|
122
|
+
c8y-icon="c8y-user"
|
|
123
|
+
></i>
|
|
96
124
|
</button>
|
|
97
125
|
|
|
98
|
-
<ul
|
|
126
|
+
<ul
|
|
127
|
+
class="dropdown-menu dropdown-menu-right"
|
|
128
|
+
uib-dropdown-menu
|
|
129
|
+
>
|
|
99
130
|
<li>
|
|
100
|
-
<a
|
|
131
|
+
<a
|
|
132
|
+
title="{{ 'User settings' | translate }}"
|
|
133
|
+
href=""
|
|
134
|
+
ng-click="vm.editUser()"
|
|
135
|
+
>
|
|
101
136
|
<i c8y-icon="profile"></i>
|
|
102
137
|
{{ 'User settings' | translate }}
|
|
103
138
|
</a>
|
|
@@ -115,7 +150,11 @@
|
|
|
115
150
|
</li>
|
|
116
151
|
|
|
117
152
|
<li>
|
|
118
|
-
<a
|
|
153
|
+
<a
|
|
154
|
+
title="{{ 'Logout' | translate }}"
|
|
155
|
+
href=""
|
|
156
|
+
ng-click="vm.logout()"
|
|
157
|
+
>
|
|
119
158
|
<i c8y-icon="sign-out"></i>
|
|
120
159
|
{{ 'Logout' | translate }}
|
|
121
160
|
</a>
|
|
@@ -154,15 +193,25 @@
|
|
|
154
193
|
</a>
|
|
155
194
|
</li>
|
|
156
195
|
|
|
157
|
-
<li ng-if="!vm.hideVersions" role="separator" class="divider"></li>
|
|
158
|
-
|
|
159
196
|
<li
|
|
197
|
+
class="divider"
|
|
198
|
+
role="separator"
|
|
160
199
|
ng-if="!vm.hideVersions"
|
|
200
|
+
></li>
|
|
201
|
+
|
|
202
|
+
<li
|
|
161
203
|
class="dropdown-header text-pre-normal"
|
|
162
204
|
style="margin-top: -1px"
|
|
205
|
+
ng-if="!vm.hideVersions"
|
|
163
206
|
>
|
|
164
|
-
<i
|
|
165
|
-
|
|
207
|
+
<i
|
|
208
|
+
class="text-muted"
|
|
209
|
+
c8y-icon="info-circle"
|
|
210
|
+
></i>
|
|
211
|
+
<span
|
|
212
|
+
class="text-muted"
|
|
213
|
+
translate
|
|
214
|
+
>
|
|
166
215
|
Version: {{ vm.backendVersion }} (backend), {{ vm.uiVersion }} (UI)
|
|
167
216
|
</span>
|
|
168
217
|
</li>
|
|
@@ -173,8 +222,8 @@
|
|
|
173
222
|
<!-- right drawer button -->
|
|
174
223
|
<button
|
|
175
224
|
class="drawer-toggle main-header-button"
|
|
176
|
-
type="button"
|
|
177
225
|
title="{{ 'Toggle side drawer' | translate }}"
|
|
226
|
+
type="button"
|
|
178
227
|
ng-if="vm.showRightDrawer"
|
|
179
228
|
ng-click="vm.openDrawer = !vm.openDrawer"
|
|
180
229
|
>
|
|
@@ -182,7 +231,11 @@
|
|
|
182
231
|
</button>
|
|
183
232
|
</div>
|
|
184
233
|
<div class="head-toggler">
|
|
185
|
-
<button
|
|
234
|
+
<button
|
|
235
|
+
title="{{ 'Toggle' | translate }}"
|
|
236
|
+
type="button"
|
|
237
|
+
ng-click="vm.toggle()"
|
|
238
|
+
>
|
|
186
239
|
<i c8y-icon="dedent-right"></i>
|
|
187
240
|
</button>
|
|
188
241
|
</div>
|
package/package.json
CHANGED
|
@@ -1,39 +1,56 @@
|
|
|
1
|
-
<form
|
|
1
|
+
<form
|
|
2
|
+
class="d-contents"
|
|
3
|
+
name="responseTemplateForm"
|
|
4
|
+
novalidate
|
|
5
|
+
>
|
|
2
6
|
<div class="d-flex d-col flex-grow">
|
|
3
7
|
<div class="card-block">
|
|
4
8
|
<div class="tight-grid">
|
|
5
9
|
<div class="form-group col-md-4">
|
|
6
|
-
<label
|
|
10
|
+
<label
|
|
11
|
+
for="msgId"
|
|
12
|
+
translate
|
|
13
|
+
>
|
|
14
|
+
Response ID
|
|
15
|
+
</label>
|
|
7
16
|
<input
|
|
17
|
+
class="form-control"
|
|
8
18
|
id="msgId"
|
|
19
|
+
placeholder="{{ 'e.g.' | translate }} 11"
|
|
9
20
|
name="msgId"
|
|
10
21
|
type="text"
|
|
11
|
-
|
|
22
|
+
required
|
|
12
23
|
ng-model="$ctrl.responseTemplate.msgId"
|
|
13
24
|
c8y-smart-rest-validate-unique-msg-id-in-template="$ctrl.template"
|
|
14
25
|
original-msg-id="$ctrl.originalMsgId"
|
|
15
|
-
placeholder="{{ 'e.g.' | translate }} 11"
|
|
16
26
|
data-cy="responseEditor--response-id"
|
|
17
|
-
required
|
|
18
27
|
/>
|
|
19
28
|
<c8y-error-feedback field="responseTemplateForm.msgId">
|
|
20
|
-
<span
|
|
29
|
+
<span
|
|
30
|
+
ng-message="uniqueMsgIdInTemplate"
|
|
31
|
+
translate
|
|
32
|
+
>
|
|
21
33
|
Message ID must be unique among all message and response templates.
|
|
22
34
|
</span>
|
|
23
35
|
</c8y-error-feedback>
|
|
24
36
|
</div>
|
|
25
37
|
|
|
26
38
|
<div class="form-group col-md-8">
|
|
27
|
-
<label
|
|
39
|
+
<label
|
|
40
|
+
for="name"
|
|
41
|
+
translate
|
|
42
|
+
>
|
|
43
|
+
Name
|
|
44
|
+
</label>
|
|
28
45
|
<input
|
|
46
|
+
class="form-control"
|
|
29
47
|
id="name"
|
|
48
|
+
placeholder="{{ 'e.g. My response template' | translate }}"
|
|
30
49
|
name="name"
|
|
31
50
|
type="text"
|
|
32
|
-
|
|
51
|
+
required
|
|
33
52
|
ng-model="$ctrl.responseTemplate.name"
|
|
34
|
-
placeholder="{{ 'e.g. My response template' | translate }}"
|
|
35
53
|
data-cy="responseEditor--response-name"
|
|
36
|
-
required
|
|
37
54
|
/>
|
|
38
55
|
<c8y-error-feedback field="responseTemplateForm.name"></c8y-error-feedback>
|
|
39
56
|
</div>
|
|
@@ -41,12 +58,17 @@
|
|
|
41
58
|
|
|
42
59
|
<div class="tight-grid">
|
|
43
60
|
<div class="form-group col-md-6">
|
|
44
|
-
<label
|
|
61
|
+
<label
|
|
62
|
+
for="base"
|
|
63
|
+
translate
|
|
64
|
+
>
|
|
65
|
+
Base pattern
|
|
66
|
+
</label>
|
|
45
67
|
<input
|
|
68
|
+
class="form-control"
|
|
46
69
|
id="base"
|
|
47
70
|
name="base"
|
|
48
71
|
type="text"
|
|
49
|
-
class="form-control"
|
|
50
72
|
ng-model="$ctrl.responseTemplate.base"
|
|
51
73
|
data-cy="responseEditor--response-base-pattern"
|
|
52
74
|
ng-pattern="$ctrl.validation.jsonPath.pattern"
|
|
@@ -60,12 +82,17 @@
|
|
|
60
82
|
</div>
|
|
61
83
|
|
|
62
84
|
<div class="form-group col-md-6">
|
|
63
|
-
<label
|
|
85
|
+
<label
|
|
86
|
+
for="condition"
|
|
87
|
+
translate
|
|
88
|
+
>
|
|
89
|
+
Condition
|
|
90
|
+
</label>
|
|
64
91
|
<input
|
|
92
|
+
class="form-control"
|
|
65
93
|
id="condition"
|
|
66
94
|
name="condition"
|
|
67
95
|
type="text"
|
|
68
|
-
class="form-control"
|
|
69
96
|
ng-model="$ctrl.responseTemplate.condition"
|
|
70
97
|
data-cy="responseEditor--response-condition"
|
|
71
98
|
ng-pattern="$ctrl.validation.jsonPath.pattern"
|
|
@@ -78,43 +105,47 @@
|
|
|
78
105
|
</c8y-error-feedback>
|
|
79
106
|
</div>
|
|
80
107
|
</div>
|
|
81
|
-
|
|
82
108
|
<fieldset>
|
|
83
|
-
<div
|
|
84
|
-
|
|
109
|
+
<div
|
|
110
|
+
class="legend form-block"
|
|
111
|
+
translate
|
|
112
|
+
>
|
|
113
|
+
Patterns
|
|
114
|
+
</div>
|
|
85
115
|
<c8y-ui-empty-state
|
|
86
|
-
ng-if="$ctrl.responseTemplate.patterns.length === 0"
|
|
87
116
|
[icon]="'c8y-data-points'"
|
|
88
117
|
[title]="'No patterns to display.' | translate"
|
|
89
118
|
[subtitle]="
|
|
90
119
|
'At least one pattern is required. Click below to add the first one.' | translate
|
|
91
120
|
"
|
|
121
|
+
ng-if="$ctrl.responseTemplate.patterns.length === 0"
|
|
92
122
|
></c8y-ui-empty-state>
|
|
93
123
|
<div ng-repeat="pattern in $ctrl.responseTemplate.patterns">
|
|
94
124
|
<ng-form name="patternForm">
|
|
95
125
|
<div class="form-group">
|
|
96
126
|
<div class="input-group">
|
|
97
127
|
<input
|
|
128
|
+
class="form-control"
|
|
129
|
+
placeholder="{{ 'e.g.' | translate }} c8y_SoftwareList[*].name"
|
|
98
130
|
name="path"
|
|
99
131
|
type="text"
|
|
100
|
-
|
|
132
|
+
required
|
|
101
133
|
ng-model="pattern.path"
|
|
102
134
|
data-cy="responseEditor--response-pattern-path"
|
|
103
135
|
ng-pattern="$ctrl.validation.jsonPath.pattern"
|
|
104
|
-
placeholder="{{ 'e.g.' | translate }} c8y_SoftwareList[*].name"
|
|
105
|
-
required
|
|
106
136
|
/>
|
|
107
137
|
<span class="input-group-btn">
|
|
108
138
|
<button
|
|
109
139
|
class="btn-dot btn-dot--danger"
|
|
110
|
-
type="button"
|
|
111
140
|
aria-label="{{ 'Remove' | translate }}"
|
|
112
|
-
data-cy="responseEditor--remove-pattern"
|
|
113
141
|
uib-tooltip="{{ 'Remove' | translate }}"
|
|
114
142
|
tooltip-popup-delay="500"
|
|
115
143
|
tooltip-append-to-body="true"
|
|
116
144
|
tooltip-trigger="'mouseenter'"
|
|
117
|
-
|
|
145
|
+
type="button"
|
|
146
|
+
data-cy="responseEditor--remove-pattern"
|
|
147
|
+
ng-click="$ctrl.removePattern($ctrl.responseTemplate, pattern);
|
|
148
|
+
responseTemplateForm.$setDirty()"
|
|
118
149
|
>
|
|
119
150
|
<i c8y-icon="minus-circle"></i>
|
|
120
151
|
</button>
|
|
@@ -129,13 +160,13 @@
|
|
|
129
160
|
</div>
|
|
130
161
|
</ng-form>
|
|
131
162
|
</div>
|
|
132
|
-
|
|
133
163
|
<button
|
|
134
164
|
class="btn btn-default"
|
|
135
|
-
type="button"
|
|
136
165
|
title="{{ 'Add pattern' | translate }}"
|
|
166
|
+
type="button"
|
|
137
167
|
data-cy="responseEditor--add-pattern-btn"
|
|
138
|
-
ng-click="$ctrl.addPattern($ctrl.responseTemplate);
|
|
168
|
+
ng-click="$ctrl.addPattern($ctrl.responseTemplate);
|
|
169
|
+
responseTemplateForm.$setDirty()"
|
|
139
170
|
>
|
|
140
171
|
<i c8y-icon="plus-circle"></i>
|
|
141
172
|
{{ 'Add pattern' | translate }}
|
|
@@ -146,16 +177,16 @@
|
|
|
146
177
|
<div class="card-footer separator sticky-bottom">
|
|
147
178
|
<button
|
|
148
179
|
class="btn btn-default"
|
|
149
|
-
type="button"
|
|
150
180
|
title="{{ 'Cancel' | translate }}"
|
|
181
|
+
type="button"
|
|
151
182
|
ng-click="$ctrl.cancel()"
|
|
152
183
|
>
|
|
153
184
|
{{ 'Cancel' | translate }}
|
|
154
185
|
</button>
|
|
155
186
|
<button
|
|
156
187
|
class="btn btn-danger"
|
|
157
|
-
type="button"
|
|
158
188
|
title="{{ 'Remove' | translate }}"
|
|
189
|
+
type="button"
|
|
159
190
|
data-cy="responseEditor--remove-btn"
|
|
160
191
|
ng-if="$ctrl.originalMsgId"
|
|
161
192
|
ng-click="$ctrl.remove()"
|
|
@@ -164,11 +195,11 @@
|
|
|
164
195
|
</button>
|
|
165
196
|
<button
|
|
166
197
|
class="btn btn-primary"
|
|
167
|
-
type="button"
|
|
168
198
|
title="{{ 'Save' | translate }}"
|
|
169
|
-
|
|
199
|
+
type="button"
|
|
170
200
|
data-cy="responseEditor--save-btn"
|
|
171
201
|
ng-disabled="responseTemplateForm.$invalid || responseTemplateForm.$pristine || $ctrl.responseTemplate.patterns.length === 0"
|
|
202
|
+
ng-click="$ctrl.save()"
|
|
172
203
|
>
|
|
173
204
|
{{ 'Save' | translate }}
|
|
174
205
|
</button>
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
<c8y-breadcrumbs-set>
|
|
2
2
|
<c8y-breadcrumbs-item
|
|
3
|
-
label="{{ 'Responses' | translate }}"
|
|
4
3
|
icon="c8y-smart-rest"
|
|
4
|
+
label="{{ 'Responses' | translate }}"
|
|
5
5
|
></c8y-breadcrumbs-item>
|
|
6
6
|
<c8y-breadcrumbs-item
|
|
7
|
-
label="{{ $ctrl.template.name }}"
|
|
8
7
|
icon="c8y-smart-rest"
|
|
8
|
+
label="{{ $ctrl.template.name }}"
|
|
9
9
|
></c8y-breadcrumbs-item>
|
|
10
10
|
<c8y-breadcrumbs-item
|
|
11
|
-
label="{{ 'SmartREST templates' | translate }}"
|
|
12
11
|
icon="c8y-smart-rest"
|
|
12
|
+
label="{{ 'SmartREST templates' | translate }}"
|
|
13
13
|
path="#smart-rest-templates"
|
|
14
14
|
></c8y-breadcrumbs-item>
|
|
15
15
|
<c8y-breadcrumbs-item
|
|
16
|
-
label="{{ 'Device types' | translate }}"
|
|
17
16
|
icon="c8y-device-protocols"
|
|
17
|
+
label="{{ 'Device types' | translate }}"
|
|
18
18
|
></c8y-breadcrumbs-item>
|
|
19
19
|
</c8y-breadcrumbs-set>
|
|
20
20
|
|
|
@@ -25,32 +25,44 @@
|
|
|
25
25
|
>
|
|
26
26
|
<div class="content-flex-70">
|
|
27
27
|
<div class="text-center">
|
|
28
|
-
<i
|
|
28
|
+
<i
|
|
29
|
+
class="c8y-icon-duocolor icon-48"
|
|
30
|
+
c8y-icon="c8y-smart-rest"
|
|
31
|
+
></i>
|
|
29
32
|
</div>
|
|
30
33
|
<div class="flex-grow col-10">
|
|
31
|
-
<form
|
|
34
|
+
<form
|
|
35
|
+
class="content-flex-80"
|
|
36
|
+
name="templateInputForm"
|
|
37
|
+
novalidate
|
|
38
|
+
>
|
|
32
39
|
<div class="col-7 p-t-sm-8">
|
|
33
40
|
<div class="form-group form-group-lg m-b-0">
|
|
34
|
-
<label
|
|
41
|
+
<label
|
|
42
|
+
class="sr-only"
|
|
43
|
+
for="templateName"
|
|
44
|
+
>
|
|
45
|
+
{{ 'Template name' | translate }}
|
|
46
|
+
</label>
|
|
35
47
|
<div class="input-group input-group-lg input-group-editable">
|
|
36
48
|
<input
|
|
37
49
|
class="form-control"
|
|
38
|
-
for="templateName"
|
|
39
|
-
maxlength="500"
|
|
40
|
-
required
|
|
41
|
-
type="text"
|
|
42
|
-
name="name"
|
|
43
|
-
ng-model="$ctrl.template.name"
|
|
44
50
|
ng-style="{ width: $ctrl.template.name.length + 2 + 'ch' }"
|
|
45
51
|
title="{{ $ctrl.template.name }}"
|
|
46
52
|
placeholder="{{ 'e.g. My template' | translate }}"
|
|
53
|
+
name="name"
|
|
54
|
+
for="templateName"
|
|
55
|
+
type="text"
|
|
56
|
+
required
|
|
57
|
+
maxlength="500"
|
|
58
|
+
ng-model="$ctrl.template.name"
|
|
47
59
|
/>
|
|
48
60
|
<span></span>
|
|
49
61
|
<div class="input-group-btn">
|
|
50
62
|
<button
|
|
51
63
|
class="btn btn-primary"
|
|
52
|
-
type="submit"
|
|
53
64
|
title="{{ 'Save' | translate }}"
|
|
65
|
+
type="submit"
|
|
54
66
|
ng-disabled="templateInputForm.$invalid"
|
|
55
67
|
ng-click="$ctrl.changeTemplateName($ctrl.template.name)"
|
|
56
68
|
>
|
|
@@ -84,21 +96,30 @@
|
|
|
84
96
|
<div class="nav c8y-nav-stacked">
|
|
85
97
|
<button
|
|
86
98
|
class="c8y-stacked-item"
|
|
99
|
+
ng-class="{ active: $ctrl.selectedResponseTemplate === responseTemplate }"
|
|
87
100
|
type="button"
|
|
88
101
|
ng-repeat="responseTemplate in $ctrl.responseTemplates"
|
|
89
|
-
ng-class="{ active: $ctrl.selectedResponseTemplate === responseTemplate }"
|
|
90
102
|
ng-click="$ctrl.selectResponseTemplate(responseTemplate)"
|
|
91
103
|
>
|
|
92
104
|
<span
|
|
93
105
|
class="text-truncate"
|
|
94
106
|
title="{{ responseTemplate.msgId }} | {{ responseTemplate.name }}"
|
|
95
107
|
>
|
|
96
|
-
<i
|
|
97
|
-
|
|
108
|
+
<i
|
|
109
|
+
class="text-complementary"
|
|
110
|
+
c8y-icon="external"
|
|
111
|
+
></i>
|
|
112
|
+
<span
|
|
113
|
+
class="msgid text-muted"
|
|
114
|
+
ng-bind="responseTemplate.msgId"
|
|
115
|
+
></span>
|
|
98
116
|
<span ng-bind="responseTemplate.name"></span>
|
|
99
117
|
</span>
|
|
100
118
|
</button>
|
|
101
|
-
<div
|
|
119
|
+
<div
|
|
120
|
+
class="p-24"
|
|
121
|
+
ng-show="$ctrl.countResponseTemplates($ctrl.template) === 0"
|
|
122
|
+
>
|
|
102
123
|
<c8y-ui-empty-state
|
|
103
124
|
[icon]="'c8y-smart-rest'"
|
|
104
125
|
[title]="'No responses.' | translate"
|
|
@@ -109,10 +130,9 @@
|
|
|
109
130
|
</div>
|
|
110
131
|
<div class="card-footer large-padding separator sticky-bottom">
|
|
111
132
|
<button
|
|
112
|
-
title="{{ 'Add response' | translate }}"
|
|
113
133
|
class="btn btn-default"
|
|
134
|
+
title="{{ 'Add response' | translate }}"
|
|
114
135
|
ng-click="$ctrl.newResponseTemplate()"
|
|
115
|
-
data-cy="responses--add-response-btn"
|
|
116
136
|
>
|
|
117
137
|
<i c8y-icon="plus-circle"></i>
|
|
118
138
|
<translate>Add response</translate>
|
|
@@ -125,15 +145,18 @@
|
|
|
125
145
|
>
|
|
126
146
|
<div class="card-header separator visible-sm visible-xs">
|
|
127
147
|
<button
|
|
128
|
-
title="{{ 'Back' | translate }}"
|
|
129
148
|
class="btn btn-clean"
|
|
149
|
+
title="{{ 'Back' | translate }}"
|
|
130
150
|
ng-click="$ctrl.deselectResponseTemplate()"
|
|
131
151
|
>
|
|
132
152
|
<i c8y-icon="chevron-left"></i>
|
|
133
153
|
<span translate>Back</span>
|
|
134
154
|
</button>
|
|
135
155
|
</div>
|
|
136
|
-
<div
|
|
156
|
+
<div
|
|
157
|
+
class="card-block"
|
|
158
|
+
ng-if="!$ctrl.selectedResponseTemplate"
|
|
159
|
+
>
|
|
137
160
|
<c8y-ui-empty-state
|
|
138
161
|
[icon]="'c8y-smart-rest'"
|
|
139
162
|
[title]="'No response to display.' | translate"
|
|
@@ -141,12 +164,12 @@
|
|
|
141
164
|
></c8y-ui-empty-state>
|
|
142
165
|
</div>
|
|
143
166
|
<c8y-smart-rest-response-editor
|
|
167
|
+
class="d-contents"
|
|
144
168
|
template="$ctrl.template"
|
|
145
169
|
response-template="$ctrl.selectedResponseTemplate"
|
|
146
170
|
on-save="$ctrl.addResponseTemplate(responseTemplate)"
|
|
147
171
|
on-cancel="$ctrl.deselectResponseTemplate()"
|
|
148
172
|
on-remove="$ctrl.removeResponseTemplate(responseTemplate)"
|
|
149
|
-
class="d-contents"
|
|
150
173
|
ng-if="$ctrl.selectedResponseTemplate"
|
|
151
174
|
></c8y-smart-rest-response-editor>
|
|
152
175
|
</div>
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
<div
|
|
1
|
+
<div
|
|
2
|
+
class="c8y-child-assets-selector"
|
|
3
|
+
is-open="ctrl.dropdownStatus.open"
|
|
4
|
+
uib-dropdown
|
|
5
|
+
>
|
|
2
6
|
<button
|
|
3
7
|
type="button"
|
|
4
8
|
class="btn dropdown-toggle c8y-dropdown"
|
|
@@ -7,7 +11,10 @@
|
|
|
7
11
|
aria-haspopup="true"
|
|
8
12
|
>
|
|
9
13
|
<span class="text-truncate">
|
|
10
|
-
<i
|
|
14
|
+
<i
|
|
15
|
+
c8y-icon="check"
|
|
16
|
+
ng-class="{ 'text-success': ctrl.areAllOriginallySelected() }"
|
|
17
|
+
></i>
|
|
11
18
|
<span ng-bind="ctrl.getSelectedStatusText()"></span>
|
|
12
19
|
</span>
|
|
13
20
|
</button>
|
|
@@ -16,7 +23,7 @@
|
|
|
16
23
|
ng-click="$event.stopPropagation();"
|
|
17
24
|
uib-dropdown-menu
|
|
18
25
|
>
|
|
19
|
-
<li class="multiselect-item">
|
|
26
|
+
<li class="multiselect-item sticky-top">
|
|
20
27
|
<div class="input-group input-group-search">
|
|
21
28
|
<input
|
|
22
29
|
class="form-control"
|
|
@@ -41,7 +48,8 @@
|
|
|
41
48
|
ng-checked="false"
|
|
42
49
|
ng-click="ctrl.selectAllVisible(); $event.stopPropagation();"
|
|
43
50
|
class="m-t-0"
|
|
44
|
-
|
|
51
|
+
/>
|
|
52
|
+
<span></span>
|
|
45
53
|
<span>{{ 'Activate all visible`children`' | translate }}</span>
|
|
46
54
|
</label>
|
|
47
55
|
<label
|
|
@@ -55,7 +63,8 @@
|
|
|
55
63
|
ng-checked="true"
|
|
56
64
|
ng-click="ctrl.deselectAllVisible(); $event.stopPropagation();"
|
|
57
65
|
class="m-t-0"
|
|
58
|
-
|
|
66
|
+
/>
|
|
67
|
+
<span></span>
|
|
59
68
|
<span>{{ 'Deactivate all visible`children`' | translate }}</span>
|
|
60
69
|
</label>
|
|
61
70
|
</li>
|
|
@@ -65,10 +74,16 @@
|
|
|
65
74
|
ng-if="!(ctrl.dropdownStatus.open && ctrl.dropdownOpeningFinished)"
|
|
66
75
|
class="text-center p-8"
|
|
67
76
|
>
|
|
68
|
-
<i
|
|
77
|
+
<i
|
|
78
|
+
c8y-icon="circle-o-notch"
|
|
79
|
+
class="icon-spin"
|
|
80
|
+
></i>
|
|
69
81
|
<span>{{ 'Loading' | translate }}…</span>
|
|
70
82
|
</div>
|
|
71
|
-
<ul
|
|
83
|
+
<ul
|
|
84
|
+
class="list-unstyled"
|
|
85
|
+
ng-if="ctrl.dropdownStatus.open && ctrl.dropdownOpeningFinished"
|
|
86
|
+
>
|
|
72
87
|
<li
|
|
73
88
|
ng-repeat="childAsset in ctrl.childAssets | filter:ctrl.filterCfg.text"
|
|
74
89
|
class="multiselect-item"
|
|
@@ -84,7 +99,11 @@
|
|
|
84
99
|
class="m-t-0"
|
|
85
100
|
/>
|
|
86
101
|
<span></span>
|
|
87
|
-
<span
|
|
102
|
+
<span
|
|
103
|
+
class="label-text"
|
|
104
|
+
title="{{ childAsset.name }}"
|
|
105
|
+
ng-bind="childAsset.name"
|
|
106
|
+
></span>
|
|
88
107
|
</label>
|
|
89
108
|
</li>
|
|
90
109
|
</ul>
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
<div
|
|
2
2
|
class="c8y-child-assets-selector"
|
|
3
|
-
is-open="vm.isDropDownOpen"
|
|
4
3
|
ng-class="{ open: vm.isDropDownOpen }"
|
|
4
|
+
is-open="vm.isDropDownOpen"
|
|
5
5
|
on-toggle="vm.onToggleDropdown(open)"
|
|
6
6
|
uib-dropdown
|
|
7
7
|
dropdown-append-to-body="true"
|
|
8
8
|
>
|
|
9
9
|
<button
|
|
10
10
|
class="btn dropdown-toggle c8y-dropdown"
|
|
11
|
-
type="button"
|
|
12
11
|
title="{{ vm.displayTextAssigned() || 'Select inventory roles' | translate }}"
|
|
13
|
-
uib-dropdown-toggle
|
|
14
12
|
aria-haspopup="true"
|
|
13
|
+
type="button"
|
|
14
|
+
uib-dropdown-toggle
|
|
15
15
|
>
|
|
16
16
|
<span class="text-truncate">
|
|
17
|
-
<span class="text-muted"
|
|
17
|
+
<span class="text-muted">
|
|
18
|
+
{{ vm.displayTextInherited() }}
|
|
19
|
+
</span>
|
|
18
20
|
<span ng-show="vm.displayTextInherited() && vm.displayTextAssigned()">/</span>
|
|
19
21
|
<span>{{ vm.displayTextAssigned() }}</span>
|
|
20
22
|
<em
|
|
@@ -32,21 +34,21 @@
|
|
|
32
34
|
ng-click="$event.stopPropagation();"
|
|
33
35
|
uib-dropdown-menu
|
|
34
36
|
>
|
|
35
|
-
<li class="multiselect-item">
|
|
37
|
+
<li class="multiselect-item sticky-top">
|
|
36
38
|
<div
|
|
37
|
-
title="{{ 'Filter inventory roles' | translate }}"
|
|
38
39
|
class="input-group input-group-search input-group-sm"
|
|
40
|
+
title="{{ 'Filter inventory roles' | translate }}"
|
|
39
41
|
>
|
|
40
42
|
<input
|
|
41
43
|
class="form-control"
|
|
42
|
-
type="search"
|
|
43
44
|
placeholder="{{ 'Filter inventory roles' | translate }}…"
|
|
45
|
+
type="search"
|
|
44
46
|
ng-model="vm.roleTextFilter"
|
|
45
47
|
/>
|
|
46
48
|
<span class="input-group-addon">
|
|
47
49
|
<i
|
|
48
|
-
c8y-icon="search"
|
|
49
50
|
ng-class="{ 'icon-spin': loading }"
|
|
51
|
+
c8y-icon="search"
|
|
50
52
|
ng-show="vm.roleTextFilter.length === 0 || !vm.roleTextFilter"
|
|
51
53
|
></i>
|
|
52
54
|
<button
|
|
@@ -55,16 +57,22 @@
|
|
|
55
57
|
ng-show="vm.roleTextFilter.length > 0"
|
|
56
58
|
ng-click="vm.roleTextFilter = ''"
|
|
57
59
|
>
|
|
58
|
-
<i
|
|
60
|
+
<i
|
|
61
|
+
class="text-muted"
|
|
62
|
+
c8y-icon="times"
|
|
63
|
+
></i>
|
|
59
64
|
</button>
|
|
60
65
|
</span>
|
|
61
66
|
</div>
|
|
62
67
|
</li>
|
|
63
68
|
|
|
64
|
-
<li
|
|
69
|
+
<li
|
|
70
|
+
class="multiselect-item"
|
|
71
|
+
ng-if="vm.isDropDownOpen"
|
|
72
|
+
>
|
|
65
73
|
<label
|
|
66
|
-
title="{{ 'All' | translate }}"
|
|
67
74
|
class="c8y-checkbox input-sm text-truncate"
|
|
75
|
+
title="{{ 'All' | translate }}"
|
|
68
76
|
ng-click="vm.toggleSelectAll(); $event.preventDefault()"
|
|
69
77
|
>
|
|
70
78
|
<input
|
|
@@ -78,22 +86,25 @@
|
|
|
78
86
|
</li>
|
|
79
87
|
|
|
80
88
|
<li class="multiselect-item-container">
|
|
81
|
-
<ul
|
|
89
|
+
<ul
|
|
90
|
+
class="list-unstyled"
|
|
91
|
+
ng-if="vm.isDropDownOpen"
|
|
92
|
+
>
|
|
82
93
|
<li
|
|
83
|
-
ng-repeat="role in vm.inventoryRoles | filter:vm.isAllowedByOwner | filter:vm.roleTextFilter | orderBy:vm.translateName"
|
|
84
94
|
class="multiselect-item"
|
|
95
|
+
ng-repeat="role in vm.inventoryRoles | filter:vm.isAllowedByOwner | filter:vm.roleTextFilter | orderBy:vm.translateName"
|
|
85
96
|
>
|
|
86
97
|
<label
|
|
87
|
-
title="{{ ::role.name | translate }}"
|
|
88
98
|
class="c8y-checkbox input-sm text-truncate flex-grow"
|
|
99
|
+
title="{{ ::role.name | translate }}"
|
|
89
100
|
ng-click="::vm.toggle(role); $event.preventDefault()"
|
|
90
101
|
>
|
|
91
102
|
<input
|
|
103
|
+
class="m-t-0"
|
|
92
104
|
type="checkbox"
|
|
93
105
|
ng-disabled="vm.isInherited(role)"
|
|
94
106
|
ng-checked="vm.isSelected(role)"
|
|
95
107
|
ng-click="::vm.toggle(role); $event.stopPropagation()"
|
|
96
|
-
class="m-t-0"
|
|
97
108
|
/>
|
|
98
109
|
<span></span>
|
|
99
110
|
<span class="label-text text-truncate">
|
|
@@ -102,19 +113,19 @@
|
|
|
102
113
|
</label>
|
|
103
114
|
<button
|
|
104
115
|
class="btn-help btn-help--sm"
|
|
105
|
-
|
|
116
|
+
popover-class="high-popover"
|
|
106
117
|
aria-label="{{ 'Help' | translate }}"
|
|
118
|
+
type="button"
|
|
107
119
|
uib-popover-html="vm.getFormattedInventoryRoleDescription(role.description)"
|
|
108
120
|
popover-trigger="'focus'"
|
|
109
|
-
popover-class="high-popover"
|
|
110
121
|
popover-placement="right"
|
|
111
122
|
popover-append-to-body="true"
|
|
112
123
|
ng-show="::role.description"
|
|
113
124
|
></button>
|
|
114
125
|
<button
|
|
115
126
|
class="text-warning btn-clean"
|
|
116
|
-
type="button"
|
|
117
127
|
aria-label="{{::'This role is already assigned to a parent asset.' | translate}}"
|
|
128
|
+
type="button"
|
|
118
129
|
uib-popover="{{::'This role is already assigned to a parent asset.' | translate}}"
|
|
119
130
|
popover-trigger="'focus'"
|
|
120
131
|
popover-placement="right"
|
|
@@ -130,8 +141,8 @@
|
|
|
130
141
|
<li class="bg-level-0">
|
|
131
142
|
<button
|
|
132
143
|
class="btn btn-primary btn-block"
|
|
133
|
-
type="button"
|
|
134
144
|
title="{{ 'Apply' | translate }}"
|
|
145
|
+
type="button"
|
|
135
146
|
ng-click="::vm.apply()"
|
|
136
147
|
ng-disabled="vm.isUnchanged"
|
|
137
148
|
>
|
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
<c8y-breadcrumbs-set>
|
|
2
2
|
<c8y-breadcrumbs-item
|
|
3
|
+
icon="c8y-accounts"
|
|
3
4
|
path="#users"
|
|
4
5
|
label="{{ 'Users' | translate }}"
|
|
5
|
-
icon="c8y-accounts"
|
|
6
6
|
></c8y-breadcrumbs-item>
|
|
7
7
|
<c8y-breadcrumbs-item
|
|
8
|
-
label="{{ 'Accounts' | translate }}"
|
|
9
8
|
icon="c8y-accounts"
|
|
9
|
+
label="{{ 'Accounts' | translate }}"
|
|
10
10
|
></c8y-breadcrumbs-item>
|
|
11
11
|
</c8y-breadcrumbs-set>
|
|
12
12
|
|
|
13
13
|
<div ng-show="vm.failedToFetchOwnerInventoryRoles === true">
|
|
14
|
-
<div
|
|
14
|
+
<div
|
|
15
|
+
class="alert alert-info"
|
|
16
|
+
translate
|
|
17
|
+
>
|
|
15
18
|
You don't have the permission required to manage inventory roles for {{ vm.userId }}.
|
|
16
19
|
</div>
|
|
17
20
|
</div>
|
|
18
21
|
|
|
19
|
-
<div
|
|
22
|
+
<div
|
|
23
|
+
class="col-md-10"
|
|
24
|
+
ng-if="vm.failedToFetchOwnerInventoryRoles === false"
|
|
25
|
+
>
|
|
20
26
|
<div class="card card--fullpage">
|
|
21
27
|
<div class="card-header separator">
|
|
22
28
|
<div class="card-title">
|
|
@@ -24,16 +30,23 @@
|
|
|
24
30
|
</div>
|
|
25
31
|
<button
|
|
26
32
|
class="btn-help btn-help--sm"
|
|
27
|
-
type="button"
|
|
28
33
|
aria-label="{{ 'Help' | translate }}"
|
|
34
|
+
type="button"
|
|
29
35
|
uib-popover-template="'helpContent.html'"
|
|
30
36
|
popover-trigger="'focus'"
|
|
31
37
|
popover-placement="bottom"
|
|
32
38
|
></button>
|
|
33
39
|
</div>
|
|
34
|
-
<div
|
|
40
|
+
<div
|
|
41
|
+
class="inner-scroll"
|
|
42
|
+
id="inventory-roles-container"
|
|
43
|
+
>
|
|
35
44
|
<div class="card-block sticky-top overflow-visible p-b-0">
|
|
36
|
-
<div
|
|
45
|
+
<div
|
|
46
|
+
class="alert alert-info"
|
|
47
|
+
ng-show="vm.displayNoOwnerRolesAlert"
|
|
48
|
+
translate
|
|
49
|
+
>
|
|
37
50
|
No device groups available due to the device owner permissions. The device owner must be
|
|
38
51
|
granted access to some device groups first.
|
|
39
52
|
</div>
|
|
@@ -53,13 +66,13 @@
|
|
|
53
66
|
/>
|
|
54
67
|
<span class="input-group-addon">
|
|
55
68
|
<i
|
|
56
|
-
c8y-icon="search"
|
|
57
69
|
ng-class="{ 'icon-spin': loading }"
|
|
70
|
+
c8y-icon="search"
|
|
58
71
|
ng-show="searchTearm === 0 || !searchTearm"
|
|
59
72
|
></i>
|
|
60
73
|
<i
|
|
61
|
-
c8y-icon="times"
|
|
62
74
|
class="text-muted"
|
|
75
|
+
c8y-icon="times"
|
|
63
76
|
ng-show="searchTearm.length > 0"
|
|
64
77
|
ng-click="searchTearm = ''"
|
|
65
78
|
></i>
|
|
@@ -69,8 +82,8 @@
|
|
|
69
82
|
<div class="col-md-4 col-md-offset-4 d-flex">
|
|
70
83
|
<button
|
|
71
84
|
class="m-l-auto btn btn-clean"
|
|
72
|
-
type="button"
|
|
73
85
|
title="{{ 'Copy inventory roles from another user' | translate }}"
|
|
86
|
+
type="button"
|
|
74
87
|
ng-click="vm.copyRoles()"
|
|
75
88
|
>
|
|
76
89
|
<i c8y-icon="clipboard"></i>
|
|
@@ -84,11 +97,11 @@
|
|
|
84
97
|
<div class="c8y-list__item__icon p-l-0 p-r-4">
|
|
85
98
|
<button
|
|
86
99
|
class="btn-dot"
|
|
87
|
-
type="button"
|
|
88
100
|
aria-label="{{ 'Expand all groups' | translate }}"
|
|
89
101
|
uib-tooltip="{{ 'Expand all groups' | translate }}"
|
|
90
102
|
tooltip-popup-delay="500"
|
|
91
103
|
tooltip-placement="right"
|
|
104
|
+
type="button"
|
|
92
105
|
ng-click="vm.expandGroups = !vm.expandGroups"
|
|
93
106
|
ng-disabled="vm.expandGroups"
|
|
94
107
|
>
|
|
@@ -105,8 +118,8 @@
|
|
|
105
118
|
{{ 'Inventory roles' | translate }}
|
|
106
119
|
<button
|
|
107
120
|
class="btn-help btn-help--sm"
|
|
108
|
-
type="button"
|
|
109
121
|
aria-label="{{ 'Help' | translate }}"
|
|
122
|
+
type="button"
|
|
110
123
|
uib-popover="{{
|
|
111
124
|
'Use dropdown to select which roles should be applied to each group and its children.'
|
|
112
125
|
| translate
|
|
@@ -138,18 +151,18 @@
|
|
|
138
151
|
</div>
|
|
139
152
|
<div class="d-flex card-footer separator sticky-bottom">
|
|
140
153
|
<button
|
|
154
|
+
class="btn btn-default"
|
|
141
155
|
title="{{ 'Clear changes' | translate }}"
|
|
142
|
-
ng-click="vm.loadAssignedRoles()"
|
|
143
156
|
type="button"
|
|
157
|
+
ng-click="vm.loadAssignedRoles()"
|
|
144
158
|
ng-disabled="vm.isUnchanged()"
|
|
145
|
-
class="btn btn-default"
|
|
146
159
|
>
|
|
147
160
|
{{ 'Clear changes' | translate }}
|
|
148
161
|
</button>
|
|
149
162
|
<button
|
|
150
163
|
class="btn btn-primary"
|
|
151
|
-
type="submit"
|
|
152
164
|
title="{{ 'Save' | translate }}"
|
|
165
|
+
type="submit"
|
|
153
166
|
ng-disabled="vm.isUnchanged()"
|
|
154
167
|
ng-click="vm.onSaveInventoryRoles()"
|
|
155
168
|
>
|
|
@@ -170,7 +183,10 @@
|
|
|
170
183
|
</div>
|
|
171
184
|
</div>
|
|
172
185
|
|
|
173
|
-
<script
|
|
186
|
+
<script
|
|
187
|
+
id="helpContent.html"
|
|
188
|
+
type="text/ng-template"
|
|
189
|
+
>
|
|
174
190
|
<div>
|
|
175
191
|
<p class="m-b-4" translate>
|
|
176
192
|
Grant user access to the listed device groups as allowed by the assigned
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
</div>
|
|
11
11
|
<div class="c8y-list__group m-b-0 no-border-last">
|
|
12
12
|
<div
|
|
13
|
-
ng-repeat="asset in vm.flatAssetTree | filter:vm.filterAsset | filter:{name:vm.searchFilter} | limitTo : vm.pageSize : vm.paginationOffset"
|
|
14
13
|
class="c8y-list__item"
|
|
14
|
+
ng-repeat="asset in vm.flatAssetTree | filter:vm.filterAsset | filter:{name:vm.searchFilter} | limitTo : vm.pageSize : vm.paginationOffset"
|
|
15
15
|
>
|
|
16
16
|
<div
|
|
17
17
|
class="c8y-list__item__block"
|
|
@@ -21,18 +21,18 @@
|
|
|
21
21
|
<div class="c8y-list__item__icon m-t-4 p-l-0">
|
|
22
22
|
<button
|
|
23
23
|
class="btn-clean"
|
|
24
|
-
ng-click="vm.loadChildren(asset)"
|
|
25
|
-
type="button"
|
|
26
24
|
aria-label="{{ 'Open' | translate }}"
|
|
25
|
+
type="button"
|
|
26
|
+
ng-click="vm.loadChildren(asset)"
|
|
27
27
|
>
|
|
28
28
|
<i
|
|
29
|
-
c8y-icon="c8y-group"
|
|
30
29
|
class="c8y-icon-duocolor"
|
|
30
|
+
c8y-icon="c8y-group"
|
|
31
31
|
ng-if="!asset.isOpened"
|
|
32
32
|
></i>
|
|
33
33
|
<i
|
|
34
|
-
c8y-icon="c8y-group-open"
|
|
35
34
|
class="c8y-icon-duocolor"
|
|
35
|
+
c8y-icon="c8y-group-open"
|
|
36
36
|
ng-if="asset.isOpened"
|
|
37
37
|
></i>
|
|
38
38
|
</button>
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
>
|
|
48
48
|
<span
|
|
49
49
|
class="text-truncate"
|
|
50
|
-
title="{{::asset.name}}"
|
|
51
50
|
ng-style="{ cursor: asset._subGroups === undefined ? 'pointer' : 'default' }"
|
|
51
|
+
title="{{::asset.name}}"
|
|
52
52
|
>
|
|
53
53
|
{{::asset.name}}
|
|
54
54
|
</span>
|