@c8y/ng1-modules 1018.467.0 → 1018.474.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.
@@ -1,43 +1,57 @@
1
1
  <div ng-controller="c8yRetentionRulesListCtrl as vm">
2
2
  <c8y-breadcrumbs-set>
3
3
  <c8y-breadcrumbs-item
4
- label="{{ 'Retention rules' | translate }}"
5
4
  icon="c8y-management"
5
+ label="{{ 'Retention rules' | translate }}"
6
6
  ></c8y-breadcrumbs-item>
7
7
  <c8y-breadcrumbs-item
8
- label="{{ 'Management' | translate }}"
9
8
  icon="c8y-management"
9
+ label="{{ 'Management' | translate }}"
10
10
  ></c8y-breadcrumbs-item>
11
11
  </c8y-breadcrumbs-set>
12
12
 
13
13
  <c8y-ui-action-bar-set>
14
- <li class="navbar-form" action-bar-position="left">
14
+ <li
15
+ class="navbar-form"
16
+ action-bar-position="left"
17
+ >
15
18
  <div class="input-group input-group-search">
16
19
  <input
17
- id="Filter"
18
- type="search"
19
20
  class="form-control"
21
+ id="Filter"
20
22
  placeholder="{{ 'Filter' | translate }}…"
23
+ type="search"
21
24
  ng-model="vm.searchString"
22
25
  />
23
26
  <span class="input-group-addon">
24
- <i c8y-icon="search" ng-if="vm.searchString.length === 0 || !vm.searchString"></i>
25
27
  <i
26
- c8y-icon="times"
28
+ c8y-icon="search"
29
+ ng-if="vm.searchString.length === 0 || !vm.searchString"
30
+ ></i>
31
+ <i
27
32
  class="text-muted"
33
+ c8y-icon="times"
28
34
  ng-if="vm.searchString.length > 0"
29
35
  ng-click="vm.searchString = ''"
30
36
  ></i>
31
37
  </span>
32
- <span class="sr-only" translate>Filter</span>
38
+ <span
39
+ class="sr-only"
40
+ translate
41
+ >
42
+ Filter
43
+ </span>
33
44
  </div>
34
45
  </li>
35
46
 
36
- <li c8y-if-allowed any-role="['ROLE_RETENTION_RULE_ADMIN']">
47
+ <li
48
+ c8y-if-allowed
49
+ any-role="['ROLE_RETENTION_RULE_ADMIN']"
50
+ >
37
51
  <button
38
52
  class="btn btn-link"
39
- type="button"
40
53
  title="{{ 'Add rule' | translate }}"
54
+ type="button"
41
55
  ng-click="createModal()"
42
56
  >
43
57
  <i c8y-icon="plus-circle"></i>
@@ -47,12 +61,15 @@
47
61
 
48
62
  <button
49
63
  class="btn btn-link"
50
- type="button"
51
64
  title="{{ 'Reload' | translate }}"
65
+ type="button"
52
66
  ng-disabled="!paging.refresh"
53
67
  ng-click="list()"
54
68
  >
55
- <i c8y-icon="refresh" ng-class="{ 'icon-spin': refreshLoading }"></i>
69
+ <i
70
+ ng-class="{ 'icon-spin': refreshLoading }"
71
+ c8y-icon="refresh"
72
+ ></i>
56
73
  {{ 'Reload' | translate }}
57
74
  </button>
58
75
  </c8y-ui-action-bar-set>
@@ -61,15 +78,15 @@
61
78
 
62
79
  <!-- empty state -->
63
80
  <c8y-ui-empty-state
64
- ng-if="retentions.length === 0"
65
81
  [icon]="'box-settings'"
66
82
  [title]="'No retention rules to display.' | translate"
67
83
  [subtitle]="'Click below to add your first retention rule.' | translate"
84
+ ng-if="retentions.length === 0"
68
85
  >
69
86
  <button
70
87
  class="btn btn-primary"
71
- type="button"
72
88
  title="{{ 'Add retention rule' | translate }}"
89
+ type="button"
73
90
  ng-click="createModal()"
74
91
  >
75
92
  {{ 'Add retention rule' | translate }}
@@ -85,9 +102,12 @@
85
102
 
86
103
  <div
87
104
  class="c8y-list__group m-b-24"
88
- ng-class="{ 'dd-low': (retentions | filter: vm.filter).length < 10 }"
105
+ ng-class="{ 'dd-low': (retentions | filter : vm.filter).length < 10 }"
89
106
  >
90
- <div class="page-sticky-header c8y-list__item hidden-xs" ng-if="retentions.length > 0">
107
+ <div
108
+ class="page-sticky-header c8y-list__item hidden-xs"
109
+ ng-if="retentions.length > 0"
110
+ >
91
111
  <div class="c8y-list__item__block">
92
112
  <div class="c8y-list__item__icon">
93
113
  <i class="p-l-24"></i>
@@ -118,8 +138,8 @@
118
138
  <div ng-repeat="rule in retentions | filter:vm.searchString as filtered">
119
139
  <div
120
140
  class="c8y-list__item"
121
- ng-click="updateModal(rule)"
122
141
  title="{{ 'Click to edit' | translate }}"
142
+ ng-click="updateModal(rule)"
123
143
  >
124
144
  <div class="c8y-list__item__block">
125
145
  <div class="c8y-list__item__icon">
@@ -132,37 +152,68 @@
132
152
  </div>
133
153
 
134
154
  <div class="col-2">
135
- <span class="text-label-small visible-xs m-t-8" translate>Fragment type</span>
155
+ <span
156
+ class="text-label-small visible-xs m-t-8"
157
+ translate
158
+ >
159
+ Fragment type
160
+ </span>
136
161
  {{ rule.fragmentType }}
137
162
  </div>
138
163
 
139
164
  <div class="col-2">
140
- <span class="text-label-small visible-xs m-t-8" translate>Type</span>
165
+ <span
166
+ class="text-label-small visible-xs m-t-8"
167
+ translate
168
+ >
169
+ Type
170
+ </span>
141
171
  {{ rule.type }}
142
172
  </div>
143
173
 
144
174
  <div class="col-3">
145
- <span class="text-label-small visible-xs m-t-8" translate>Source</span>
175
+ <span
176
+ class="text-label-small visible-xs m-t-8"
177
+ translate
178
+ >
179
+ Source
180
+ </span>
146
181
  {{ rule.source }}
147
182
  </div>
148
183
 
149
184
  <div class="col-2">
150
- <span class="text-label-small visible-xs m-t-8" translate>Maximum age</span>
185
+ <span
186
+ class="text-label-small visible-xs m-t-8"
187
+ translate
188
+ >
189
+ Maximum age
190
+ </span>
151
191
  {{ rule.maximumAge }}
152
192
  {{ 'days' | translate }}
153
193
  </div>
154
- <div class="col-1" ng-if="!isEditable(rule)">
155
- <span class="label label-info" translate>Not editable</span>
194
+ <div
195
+ class="col-1"
196
+ ng-if="!isEditable(rule)"
197
+ >
198
+ <span
199
+ class="label label-info"
200
+ translate
201
+ >
202
+ Not editable
203
+ </span>
156
204
  </div>
157
205
 
158
- <div class="p-r-8 text-right showOnHover col-1" ng-if="isEditable(rule)">
206
+ <div
207
+ class="p-r-8 text-right showOnHover col-1"
208
+ ng-if="isEditable(rule)"
209
+ >
159
210
  <button
160
211
  class="btn btn-dot btn-dot--danger hidden-xs"
161
- type="button"
162
212
  aria-label="{{ 'Delete' | translate }}"
163
213
  uib-tooltip="{{ 'Delete' | translate }}"
164
214
  tooltip-popup-delay="500"
165
215
  tooltip-append-to-body="true"
216
+ type="button"
166
217
  data-ng-click="removeWithConfirmation(rule);$event.stopPropagation()"
167
218
  >
168
219
  <i c8y-icon="minus-circle"></i>
@@ -172,8 +223,8 @@
172
223
  </div>
173
224
  <button
174
225
  class="btn btn-sm btn-danger visible-xs"
175
- type="button"
176
226
  title="{{ 'Delete' | translate }}"
227
+ type="button"
177
228
  data-ng-click="removeWithConfirmation(rule);$event.stopPropagation()"
178
229
  >
179
230
  <i c8y-icon="delete"></i>
@@ -185,10 +236,10 @@
185
236
 
186
237
  <!-- no results when filtering -->
187
238
  <c8y-ui-empty-state
188
- ng-if="filtered.length === 0 && vm.searchString.length > 0"
189
239
  [icon]="'search'"
190
240
  [title]="'No results to display.' | translate"
191
241
  [subtitle]="'Refine your search terms or check your spelling.' | translate"
242
+ ng-if="filtered.length === 0 && vm.searchString.length > 0"
192
243
  ></c8y-ui-empty-state>
193
244
  <c8y-load-more></c8y-load-more>
194
245
  </div>
@@ -1,7 +1,15 @@
1
1
  <div class="card-header separator bg-inherit sticky-top">
2
- <span class="card-title h4" translate>Alarms/events</span>
2
+ <span
3
+ class="card-title h4"
4
+ translate
5
+ >
6
+ Alarms/events
7
+ </span>
3
8
  </div>
4
- <div ng-if="vm.configs.length === 0" class="p-t-8">
9
+ <div
10
+ class="p-t-8"
11
+ ng-if="vm.configs.length === 0"
12
+ >
5
13
  <c8y-ui-empty-state
6
14
  [icon]="'c8y-events'"
7
15
  [title]="'No alarms/events found.' | translate"
@@ -32,9 +40,18 @@
32
40
  <div class="c8y-list__item__block">
33
41
  <div class="c8y-list__item__check p-r-0 a-s-center">
34
42
  <label class="c8y-switch c8y-switch--inline">
35
- <input name="active" type="checkbox" ng-model="cfg.__active" />
43
+ <input
44
+ name="active"
45
+ type="checkbox"
46
+ ng-model="cfg.__active"
47
+ />
36
48
  <span></span>
37
- <span class="sr-only" translate>Activity switch</span>
49
+ <span
50
+ class="sr-only"
51
+ translate
52
+ >
53
+ Activity switch
54
+ </span>
38
55
  </label>
39
56
  </div>
40
57
 
@@ -43,10 +60,17 @@
43
60
  title="{{ 'Change color' | translate }}"
44
61
  >
45
62
  <div class="c8y-colorpicker">
46
- <label for="colorpicker-{{ $index }}" class="sr-only">
63
+ <label
64
+ class="sr-only"
65
+ for="colorpicker-{{ $index }}"
66
+ >
47
67
  {{ 'Color picker' | translate }}
48
68
  </label>
49
- <input type="color" id="colorpicker-{{ $index }}" ng-model="cfg.color" />
69
+ <input
70
+ id="colorpicker-{{ $index }}"
71
+ type="color"
72
+ ng-model="cfg.color"
73
+ />
50
74
  <span style="background-color:{{ cfg.color }}"></span>
51
75
  </div>
52
76
  </div>
@@ -54,42 +78,69 @@
54
78
  <div class="c8y-list__item__body text-truncate">
55
79
  <button
56
80
  class="btn-clean data-point-label text-truncate"
57
- ng-click="isCollapsed = !isCollapsed"
58
81
  aria-expanded="{{ isCollapsed || false }}"
82
+ ng-click="isCollapsed = !isCollapsed"
59
83
  >
60
- <span name="label" title="{{ cfg.label }}" class="text-truncate">{{ cfg.label }}</span>
61
- <small class="text-truncate text-muted icon-flex" *ngIf="cfg.__target.name">
84
+ <span
85
+ class="text-truncate"
86
+ title="{{ cfg.label }}"
87
+ name="label"
88
+ >
89
+ {{ cfg.label }}
90
+ </span>
91
+ <small
92
+ class="text-truncate text-muted icon-flex"
93
+ *ngIf="cfg.__target.name"
94
+ >
62
95
  <i c8y-icon="exchange"></i>
63
- <span class="text-truncate" title="{{ cfg.__target.name }}">
96
+ <span
97
+ class="text-truncate"
98
+ title="{{ cfg.__target.name }}"
99
+ >
64
100
  {{ cfg.__target.name }}
65
101
  </span>
66
102
  </small>
67
103
  </button>
68
104
  </div>
69
- <div class="c8y-list__item__actions" ng-class="{ expanded: isCollapsed }">
105
+ <div
106
+ class="c8y-list__item__actions"
107
+ ng-class="{ expanded: isCollapsed }"
108
+ >
70
109
  <button
71
- type="button"
72
- title="{{ 'Expand' | translate }}"
73
110
  class="collapse-btn"
74
- ng-click="isCollapsed = !isCollapsed"
111
+ title="{{ 'Expand' | translate }}"
75
112
  aria-expanded="{{ isCollapsed || false }}"
113
+ type="button"
114
+ ng-click="isCollapsed = !isCollapsed"
76
115
  >
77
116
  <i c8y-icon="chevron-down"></i>
78
117
  </button>
79
118
 
80
- <div class="dropdown settings" is-open="isopen" uib-dropdown dropdown-append-to-body="true">
119
+ <div
120
+ class="dropdown settings"
121
+ is-open="isopen"
122
+ uib-dropdown
123
+ dropdown-append-to-body="true"
124
+ >
81
125
  <button
126
+ class="dropdown-toggle c8y-dropdown"
82
127
  title="{{ 'Actions' | translate }}"
128
+ aria-haspopup="true"
83
129
  type="button"
84
- class="dropdown-toggle c8y-dropdown"
85
130
  uib-dropdown-toggle
86
- aria-haspopup="true"
87
131
  >
88
132
  <i c8y-icon="ellipsis-v"></i>
89
133
  </button>
90
- <ul class="dropdown-menu dropdown-menu-right text-right" uib-dropdown-menu>
134
+ <ul
135
+ class="dropdown-menu dropdown-menu-right text-right"
136
+ uib-dropdown-menu
137
+ >
91
138
  <li>
92
- <button title="{{ 'Remove' | translate }}" type="button" ng-click="vm.remove(cfg)">
139
+ <button
140
+ title="{{ 'Remove' | translate }}"
141
+ type="button"
142
+ ng-click="vm.remove(cfg)"
143
+ >
93
144
  <i c8y-icon="minus-circle"></i>
94
145
  {{ 'Remove' | translate }}
95
146
  </button>
@@ -101,22 +152,32 @@
101
152
  <div uib-collapse="!isCollapsed">
102
153
  <div class="data-point-details c8y-list__item__collapse--container">
103
154
  <div class="form-group form-group-sm">
104
- <label for="label-{{ $index }}" translate>Label</label>
155
+ <label
156
+ for="label-{{ $index }}"
157
+ translate
158
+ >
159
+ Label
160
+ </label>
105
161
  <input
106
- name="label"
162
+ class="form-control"
107
163
  id="label-{{ $index }}"
164
+ name="label"
108
165
  ng-model="cfg.label"
109
166
  ng-model-options="{debounce: 300}"
110
- class="form-control"
111
167
  />
112
168
  </div>
113
169
  <div class="tight-grid">
114
170
  <div class="form-group form-group-sm col-xs-6 col-sm-4">
115
- <label for="dataType-{{ $index }}" translate>Data type</label>
171
+ <label
172
+ for="dataType-{{ $index }}"
173
+ translate
174
+ >
175
+ Data type
176
+ </label>
116
177
  <div class="c8y-select-wrapper">
117
178
  <select
118
- id="dataType-{{ $index }}"
119
179
  class="form-control"
180
+ id="dataType-{{ $index }}"
120
181
  ng-options="tt.value as (tt.label | translate) for tt in vm.timelineTypes"
121
182
  ng-model="cfg.timelineType"
122
183
  ng-init="cfg.timelineType = cfg.timelineType || vm.timelineTypes[0].val"
@@ -130,11 +191,11 @@
130
191
  {{ 'Alarm/event type' | translate }}
131
192
  </label>
132
193
  <input
133
- name="alarmEventType"
194
+ class="form-control"
134
195
  id="alarmEventType-{{ $index }}"
196
+ name="alarmEventType"
135
197
  ng-model="cfg.filters.type"
136
198
  ng-model-options="{debounce: 300}"
137
- class="form-control"
138
199
  />
139
200
  </div>
140
201
  </div>
@@ -145,9 +206,9 @@
145
206
 
146
207
  <div class="card-footer bg-inherit">
147
208
  <button
209
+ class="btn btn-default btn-sm"
148
210
  title="{{ 'Add alarm/event' | translate }}"
149
211
  type="button"
150
- class="btn btn-default btn-sm"
151
212
  ng-click="vm.add()"
152
213
  >
153
214
  <i c8y-icon="plus-circle"></i>
@@ -9,11 +9,11 @@
9
9
  >
10
10
  <button
11
11
  class="dropdown-toggle c8y-dropdown"
12
- type="button"
13
12
  title="{{ 'Add configuration snapshot' | translate }}"
14
13
  id="add-configuration-snapshot-btn"
15
- uib-dropdown-toggle
16
14
  aria-haspopup="true"
15
+ type="button"
16
+ uib-dropdown-toggle
17
17
  ng-click="add()"
18
18
  >
19
19
  <span>
@@ -21,28 +21,35 @@
21
21
  {{ 'Add configuration snapshot' | translate }}
22
22
  </span>
23
23
  </button>
24
- <ul class="dropdown-menu dropdown-menu-right" uib-dropdown-menu>
24
+ <ul
25
+ class="dropdown-menu dropdown-menu-right"
26
+ uib-dropdown-menu
27
+ >
25
28
  <li class="dropdown-form">
26
- <form name="vm.newCfgForm" class="panel-body" novalidate>
29
+ <form
30
+ class="panel-body"
31
+ name="vm.newCfgForm"
32
+ novalidate
33
+ >
27
34
  <div class="form-group">
28
35
  <label translate>Name</label>
29
36
  <input
30
- type="text"
31
37
  class="form-control"
32
- ng-model="vm.newCfg.name"
33
- ng-maxlength="60"
34
- name="name"
35
38
  placeholder="{{ 'e.g. My configuration snapshot' | translate }}"
39
+ name="name"
40
+ type="text"
36
41
  required
42
+ ng-model="vm.newCfg.name"
43
+ ng-maxlength="60"
37
44
  />
38
45
  <c8y-error-feedback field="vm.newCfgForm.name"></c8y-error-feedback>
39
46
  </div>
40
47
  <div class="form-group">
41
48
  <label translate>Description</label>
42
49
  <input
43
- type="text"
44
50
  class="form-control"
45
51
  name="description"
52
+ type="text"
46
53
  ng-model="vm.newCfg.description"
47
54
  ng-maxlength="200"
48
55
  />
@@ -53,8 +60,8 @@
53
60
  <span translate>Device type</span>
54
61
  <button
55
62
  class="btn-help btn-help--sm"
56
- type="button"
57
63
  aria-label="{{ 'Help' | translate }}"
64
+ type="button"
58
65
  uib-popover="{{
59
66
  'The device type can be found in the device information tab of the target device.'
60
67
  | translate
@@ -65,10 +72,10 @@
65
72
  ></button>
66
73
  </label>
67
74
  <input
68
- ng-model="vm.newCfg.deviceType"
69
- type="text"
70
75
  class="form-control"
71
76
  placeholder="{{ 'e.g.:' | translate }} c8y_OBU-GT"
77
+ type="text"
78
+ ng-model="vm.newCfg.deviceType"
72
79
  />
73
80
  </div>
74
81
  <div class="form-group">
@@ -82,8 +89,8 @@
82
89
  </div>
83
90
  <button
84
91
  class="btn btn-primary"
85
- type="button"
86
92
  title="{{ 'Add configuration snapshot' | translate }}"
93
+ type="button"
87
94
  ng-click="save(vm.newCfg)"
88
95
  ng-disabled="vm.newCfgForm.$invalid"
89
96
  translate
@@ -99,12 +106,12 @@
99
106
  </c8y-ui-action-bar-set>
100
107
 
101
108
  <c8y-ui-empty-state
102
- ng-show="configurations.length == 0"
103
109
  [icon]="'gears'"
104
110
  [title]="'There are no configuration snapshots defined.' | translate"
105
111
  [subtitle]="
106
112
  'Add your first configuration snapshot using the button on the action bar.' | translate
107
113
  "
114
+ ng-show="configurations.length == 0"
108
115
  >
109
116
  <p c8y-guide-docs>
110
117
  <small translate>
@@ -119,32 +126,38 @@
119
126
 
120
127
  <div class="list-group">
121
128
  <div
122
- ng-repeat="cfg in configurations | orderBy:'name'"
123
129
  class="list-group-item d-flex collapsible"
124
130
  ng-class="{ expanded: isDetailExpanded }"
131
+ ng-repeat="cfg in configurations | orderBy:'name'"
125
132
  >
126
133
  <div class="list-item-actions">
127
134
  <button
128
135
  class="collapse-btn"
129
- type="button"
130
136
  title="{{ 'Expand' | translate }}"
137
+ type="button"
131
138
  ng-click="isDetailExpanded = !isDetailExpanded"
132
139
  >
133
140
  <i c8y-icon="chevron-down"></i>
134
141
  </button>
135
142
  </div>
136
143
 
137
- <div class="list-item-body" ng-click="isDetailExpanded = !isDetailExpanded">
144
+ <div
145
+ class="list-item-body"
146
+ ng-click="isDetailExpanded = !isDetailExpanded"
147
+ >
138
148
  <div class="row">
139
149
  <div class="col-sm-10 col-xs-12">
140
150
  <span ng-click="isDetailExpanded = !isDetailExpanded">{{ cfg.name }}</span>
141
- <small class="text-muted" ng-bind="cfg.description"></small>
151
+ <small
152
+ class="text-muted"
153
+ ng-bind="cfg.description"
154
+ ></small>
142
155
  </div>
143
156
  <div class="col-sm-2 text-right showOnHover hidden-xs">
144
157
  <button
145
158
  class="btn btn-danger btn-xs"
146
- type="button"
147
159
  title="{{ 'Delete' | translate }}"
160
+ type="button"
148
161
  ng-click="onClickDelete(cfg)"
149
162
  >
150
163
  <i c8y-icon="delete"></i>
@@ -158,18 +171,22 @@
158
171
  uib-collapse="!isDetailExpanded"
159
172
  data-ng-init="cfgToEdit = getConfigurationsCopy(cfg)"
160
173
  >
161
- <form name="cfgForm" class="m-t-8 m-b-8" novalidate>
174
+ <form
175
+ class="m-t-8 m-b-8"
176
+ name="cfgForm"
177
+ novalidate
178
+ >
162
179
  <div class="row">
163
180
  <div class="col-lg-3">
164
181
  <div class="form-group">
165
182
  <label>{{ 'Name' | translate }}</label>
166
183
  <input
167
- type="text"
168
184
  class="form-control"
169
- name="name"
170
- ng-model="cfgToEdit.name"
171
185
  placeholder="{{ 'e.g. My configuration snapshot' | translate }}"
186
+ name="name"
187
+ type="text"
172
188
  required
189
+ ng-model="cfgToEdit.name"
173
190
  ng-maxlength="60"
174
191
  />
175
192
  <c8y-error-feedback field="cfgForm.name"></c8y-error-feedback>
@@ -179,9 +196,9 @@
179
196
  <div class="form-group">
180
197
  <label>{{ 'Description' | translate }}</label>
181
198
  <input
182
- type="text"
183
199
  class="form-control"
184
200
  name="description"
201
+ type="text"
185
202
  ng-model="cfgToEdit.description"
186
203
  ng-maxlength="200"
187
204
  />
@@ -194,8 +211,8 @@
194
211
  {{ 'Device type' | translate }}
195
212
  <button
196
213
  class="btn-help btn-help--sm"
197
- type="button"
198
214
  aria-label="{{ 'Help' | translate }}"
215
+ type="button"
199
216
  uib-popover="{{
200
217
  'The device type can be found in the device information tab of the target device.'
201
218
  | translate
@@ -206,11 +223,11 @@
206
223
  ></button>
207
224
  </label>
208
225
  <input
209
- name="deviceType"
210
- ng-model="cfgToEdit.deviceType"
211
- type="text"
212
226
  class="form-control"
213
227
  placeholder="{{ 'e.g.:' | translate }} c8y_OBU-GT"
228
+ name="deviceType"
229
+ type="text"
230
+ ng-model="cfgToEdit.deviceType"
214
231
  />
215
232
  </div>
216
233
  </div>
@@ -229,8 +246,8 @@
229
246
  </div>
230
247
  <button
231
248
  class="btn btn-danger visible-xs-inline-block"
232
- type="button"
233
249
  title="{{ 'Delete' | translate }}"
250
+ type="button"
234
251
  ng-click="onClickDelete(cfgToEdit)"
235
252
  >
236
253
  <i c8y-icon="delete"></i>
@@ -238,8 +255,8 @@
238
255
  </button>
239
256
  <button
240
257
  class="btn btn-primary m-l-0"
241
- type="submit"
242
258
  title="{{ 'Save' | translate }}"
259
+ type="submit"
243
260
  ng-click="save(cfgToEdit); isDetailExpanded = false;"
244
261
  ng-disabled="cfgForm.$invalid || cfgForm.$pristine"
245
262
  >