Showing
13 changed files
with
132 additions
and
72 deletions
... | ... | @@ -234,7 +234,10 @@ function TimeService($translate, $http, $q, types) { |
234 | 234 | var currentTime = (new Date).getTime(); |
235 | 235 | var timewindow = { |
236 | 236 | displayValue: "", |
237 | - selectedTab: 0, | |
237 | + selectedTab: 0, | |
238 | + hideInterval: false, | |
239 | + hideAggregation: false, | |
240 | + hideAggInterval: false, | |
238 | 241 | realtime: { |
239 | 242 | interval: SECOND, |
240 | 243 | timewindowMs: MINUTE // 1 min by default |
... | ... | @@ -381,4 +384,4 @@ function TimeService($translate, $http, $q, types) { |
381 | 384 | } |
382 | 385 | |
383 | 386 | |
384 | -} | |
\ No newline at end of file | ||
387 | +} | ... | ... |
... | ... | @@ -56,7 +56,8 @@ |
56 | 56 | <span ng-bind-html="vm.widgetTitleTooltip(widget)"></span> |
57 | 57 | </md-tooltip> |
58 | 58 | </span> |
59 | - <tb-timewindow aggregation="{{vm.hasAggregation(widget)}}" ng-if="vm.hasTimewindow(widget)" ng-model="widget.config.timewindow"></tb-timewindow> | |
59 | + <tb-timewindow aggregation="{{vm.hasAggregation(widget)}}" is-edit="vm.isEdit" | |
60 | + ng-if="vm.hasTimewindow(widget)" ng-model="widget.config.timewindow"></tb-timewindow> | |
60 | 61 | </div> |
61 | 62 | <div class="tb-widget-actions" layout="row" layout-align="start center" ng-show="vm.showWidgetActions(widget)" tb-mousedown="$event.stopPropagation()" |
62 | 63 | ng-class="{'tb-widget-actions-absolute': !(vm.showWidgetTitlePanel(widget)&&(vm.hasWidgetTitleTemplate(widget)||vm.showWidgetTitle(widget)||vm.hasAggregation(widget)))}"> | ... | ... |
... | ... | @@ -231,7 +231,9 @@ function Timeinterval($compile, $templateCache, timeService) { |
231 | 231 | required: '=ngRequired', |
232 | 232 | min: '=?', |
233 | 233 | max: '=?', |
234 | - predefinedName: '=?' | |
234 | + predefinedName: '=?', | |
235 | + hideFlag: '=?', | |
236 | + isEdit: '=?' | |
235 | 237 | }, |
236 | 238 | link: linker |
237 | 239 | }; | ... | ... |
... | ... | @@ -16,7 +16,12 @@ |
16 | 16 | |
17 | 17 | --> |
18 | 18 | <section layout="row"> |
19 | - <section layout="column" flex ng-show="advanced"> | |
19 | + <section layout="column" layout-align=" none" ng-show="isEdit"> | |
20 | + <label class="tb-small advanced-label" translate>timewindow.hide</label> | |
21 | + <md-checkbox aria-label="{{ 'timewindow.hide' | translate }}" ng-model="hideFlag"> | |
22 | + </md-checkbox> | |
23 | + </section> | |
24 | + <section layout="column" flex ng-show="advanced && (isEdit || !hideFlag)"> | |
20 | 25 | <label class="tb-small" translate>{{ predefinedName }}</label> |
21 | 26 | <section layout="row" layout-align="start start" flex> |
22 | 27 | <md-input-container> |
... | ... | @@ -25,7 +30,7 @@ |
25 | 30 | </md-input-container> |
26 | 31 | <md-input-container> |
27 | 32 | <label translate>timeinterval.hours</label> |
28 | - <input type="number" ng-model="hours" step="1" aria-label="{{ 'timeinterval.hours' | translate }}"> | |
33 | + <input ng-disabled="hideFlag" type="number" ng-model="hours" step="1" aria-label="{{ 'timeinterval.hours' | translate }}"> | |
29 | 34 | </md-input-container> |
30 | 35 | <md-input-container> |
31 | 36 | <label translate>timeinterval.minutes</label> |
... | ... | @@ -33,23 +38,23 @@ |
33 | 38 | </md-input-container> |
34 | 39 | <md-input-container> |
35 | 40 | <label translate>timeinterval.seconds</label> |
36 | - <input type="number" ng-model="secs" step="1" aria-label="{{ 'timeinterval.seconds' | translate }}"> | |
41 | + <input ng-disabled="hideFlag" type="number" ng-model="secs" step="1" aria-label="{{ 'timeinterval.seconds' | translate }}"> | |
37 | 42 | </md-input-container> |
38 | 43 | </section> |
39 | 44 | </section> |
40 | - <section layout="row" flex ng-show="!advanced"> | |
45 | + <section layout="row" flex ng-show="!advanced && (isEdit || !hideFlag)"> | |
41 | 46 | <md-input-container flex> |
42 | 47 | <label translate>{{ predefinedName }}</label> |
43 | - <md-select ng-model="intervalMs" style="min-width: 150px;" aria-label="predefined-interval"> | |
48 | + <md-select ng-disabled="hideFlag" ng-model="intervalMs" style="min-width: 150px;" aria-label="predefined-interval"> | |
44 | 49 | <md-option ng-repeat="interval in intervals" ng-value="interval.value"> |
45 | 50 | {{interval.name}} |
46 | 51 | </md-option> |
47 | 52 | </md-select> |
48 | 53 | </md-input-container> |
49 | 54 | </section> |
50 | - <section layout="column" layout-align="center center"> | |
55 | + <section layout="column" layout-align="center center" ng-show="(isEdit || !hideFlag)"> | |
51 | 56 | <label class="tb-small advanced-label" translate>timeinterval.advanced</label> |
52 | - <md-switch class="advanced-switch" ng-model="advanced" aria-label="predefined-switcher"> | |
57 | + <md-switch ng-disabled="hideFlag" class="advanced-switch" ng-model="advanced" aria-label="predefined-switcher"> | |
53 | 58 | </md-switch> |
54 | 59 | </section> |
55 | 60 | </section> | ... | ... |
... | ... | @@ -14,7 +14,7 @@ |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | 16 | /*@ngInject*/ |
17 | -export default function TimewindowPanelController(mdPanelRef, $scope, timeService, types, timewindow, historyOnly, aggregation, onTimewindowUpdate) { | |
17 | +export default function TimewindowPanelController(mdPanelRef, $scope, timeService, types, timewindow, historyOnly, aggregation, isEdit, onTimewindowUpdate) { | |
18 | 18 | |
19 | 19 | var vm = this; |
20 | 20 | |
... | ... | @@ -33,6 +33,7 @@ export default function TimewindowPanelController(mdPanelRef, $scope, timeServic |
33 | 33 | vm.maxHistoryAggInterval = maxHistoryAggInterval; |
34 | 34 | vm.minDatapointsLimit = minDatapointsLimit; |
35 | 35 | vm.maxDatapointsLimit = maxDatapointsLimit; |
36 | + vm.isEdit = isEdit; | |
36 | 37 | |
37 | 38 | if (vm.historyOnly) { |
38 | 39 | vm.timewindow.selectedTab = 1; | ... | ... |
... | ... | @@ -22,62 +22,92 @@ |
22 | 22 | <md-tabs ng-class="{'tb-headless': vm.historyOnly}" md-dynamic-height md-selected="vm.timewindow.selectedTab" md-border-bottom> |
23 | 23 | <md-tab label="{{ 'timewindow.realtime' | translate }}"> |
24 | 24 | <md-content class="md-padding" layout="column"> |
25 | - <tb-timeinterval predefined-name="'timewindow.last'" | |
26 | - ng-required="vm.timewindow.selectedTab === 0" | |
25 | + <tb-timeinterval hide-flag="vm.timewindow.hideInterval" predefined-name="'timewindow.last'" | |
26 | + is-edit="vm.isEdit" ng-required="vm.timewindow.selectedTab === 0" | |
27 | 27 | ng-model="vm.timewindow.realtime.timewindowMs" style="padding-top: 8px;"></tb-timeinterval> |
28 | 28 | </md-content> |
29 | 29 | </md-tab> |
30 | 30 | <md-tab label="{{ 'timewindow.history' | translate }}"> |
31 | - <md-content class="md-padding" layout="column" style="padding-top: 8px;"> | |
32 | - <md-radio-group ng-model="vm.timewindow.history.historyType" class="md-primary"> | |
33 | - <md-radio-button ng-value=0 aria-label="{{ 'timewindow.last' | translate }}" class="md-primary md-align-top-left md-radio-interactive"> | |
34 | - <section layout="column"> | |
35 | - <tb-timeinterval predefined-name="'timewindow.last'" | |
36 | - ng-required="vm.timewindow.selectedTab === 1 && vm.timewindow.history.historyType === 0" | |
37 | - ng-show="vm.timewindow.history.historyType === 0" | |
38 | - ng-model="vm.timewindow.history.timewindowMs" style="padding-top: 8px;"></tb-timeinterval> | |
39 | - </section> | |
40 | - </md-radio-button> | |
41 | - <md-radio-button ng-value=1 aria-label="{{ 'timewindow.time-period' | translate }}" class="md-primary md-align-top-left md-radio-interactive"> | |
42 | - <section layout="column"> | |
43 | - <span translate>timewindow.time-period</span> | |
44 | - <tb-datetime-period | |
45 | - ng-required="vm.timewindow.selectedTab === 1 && vm.timewindow.history.historyType === 1" | |
46 | - ng-show="vm.timewindow.history.historyType === 1" | |
47 | - ng-model="vm.timewindow.history.fixedTimewindow" style="padding-top: 8px;"></tb-datetime-period> | |
48 | - </section> | |
49 | - </md-radio-button> | |
50 | - </md-radio-group> | |
51 | - </md-content> | |
31 | + <section layout="row"> | |
32 | + <section layout="column" class="md-padding" style="padding-top: 8px;"> | |
33 | + <label ng-if="vm.isEdit" class="tb-small advanced-label" translate>timewindow.hide</label> | |
34 | + <md-checkbox ng-if="vm.isEdit" aria-label="{{ 'timewindow.hide' | translate }}" | |
35 | + ng-model="vm.timewindow.hideInterval"> | |
36 | + </md-checkbox> | |
37 | + </section> | |
38 | + <section layout="column" flex ng-show="vm.isEdit || !vm.timewindow.hideInterval"> | |
39 | + <md-content class="md-padding" layout="column" style="padding-top: 8px;"> | |
40 | + <md-radio-group ng-disabled="vm.timewindow.hideInterval" ng-model="vm.timewindow.history.historyType" class="md-primary"> | |
41 | + <md-radio-button ng-value=0 aria-label="{{ 'timewindow.last' | translate }}" class="md-primary md-align-top-left md-radio-interactive"> | |
42 | + <section layout="column"> | |
43 | + <tb-timeinterval predefined-name="'timewindow.last'" | |
44 | + ng-required="vm.timewindow.selectedTab === 1 && vm.timewindow.history.historyType === 0" | |
45 | + ng-show="vm.timewindow.history.historyType === 0" | |
46 | + ng-model="vm.timewindow.history.timewindowMs" style="padding-top: 8px;"></tb-timeinterval> | |
47 | + </section> | |
48 | + </md-radio-button> | |
49 | + <md-radio-button ng-value=1 aria-label="{{ 'timewindow.time-period' | translate }}" class="md-primary md-align-top-left md-radio-interactive"> | |
50 | + <section layout="column"> | |
51 | + <span translate>timewindow.time-period</span> | |
52 | + <tb-datetime-period | |
53 | + ng-required="vm.timewindow.selectedTab === 1 && vm.timewindow.history.historyType === 1" | |
54 | + ng-show="vm.timewindow.history.historyType === 1" | |
55 | + ng-model="vm.timewindow.history.fixedTimewindow" style="padding-top: 8px;"></tb-datetime-period> | |
56 | + </section> | |
57 | + </md-radio-button> | |
58 | + </md-radio-group> | |
59 | + </md-content> | |
60 | + </section> | |
61 | + </section> | |
52 | 62 | </md-tab> |
53 | 63 | </md-tabs> |
54 | 64 | <md-content ng-if="vm.aggregation" class="md-padding" layout="column"> |
55 | - <md-input-container> | |
56 | - <label translate>aggregation.function</label> | |
57 | - <md-select ng-model="vm.timewindow.aggregation.type" style="min-width: 150px;"> | |
58 | - <md-option ng-repeat="type in vm.aggregationTypes" ng-value="type.value"> | |
59 | - {{type.name | translate}} | |
60 | - </md-option> | |
61 | - </md-select> | |
62 | - </md-input-container> | |
63 | - <md-slider-container ng-if="vm.showLimit()"> | |
64 | - <span translate>aggregation.limit</span> | |
65 | - <md-slider flex min="{{vm.minDatapointsLimit()}}" max="{{vm.maxDatapointsLimit()}}" step="1" | |
66 | - ng-model="vm.timewindow.aggregation.limit" aria-label="limit" id="limit-slider"> | |
67 | - </md-slider> | |
68 | - <md-input-container style="max-width: 80px;"> | |
69 | - <input flex type="number" step="1" | |
70 | - min="{{vm.minDatapointsLimit()}}" max="{{vm.maxDatapointsLimit()}}" | |
71 | - ng-model="vm.timewindow.aggregation.limit" aria-label="limit" aria-controls="limit-slider"> | |
72 | - </md-input-container> | |
73 | - </md-slider-container> | |
74 | - <tb-timeinterval ng-if="vm.showRealtimeAggInterval()" min="vm.minRealtimeAggInterval()" max="vm.maxRealtimeAggInterval()" | |
75 | - predefined-name="'aggregation.group-interval'" | |
76 | - ng-model="vm.timewindow.realtime.interval"> | |
65 | + <section layout="row"> | |
66 | + <section layout="column" style="padding-top: 5px;" ng-show="vm.isEdit"> | |
67 | + <label class="tb-small advanced-label" translate>timewindow.hide</label> | |
68 | + <md-checkbox aria-label="{{ 'timewindow.hide' | translate }}" | |
69 | + ng-model="vm.timewindow.hideAggregation"> | |
70 | + </md-checkbox> | |
71 | + </section> | |
72 | + <section layout="column" flex ng-show="vm.isEdit || !vm.timewindow.hideAggregation"> | |
73 | + <md-input-container> | |
74 | + <label translate>aggregation.function</label> | |
75 | + <md-select ng-disabled="vm.timewindow.hideAggregation" ng-model="vm.timewindow.aggregation.type" style="min-width: 150px;"> | |
76 | + <md-option ng-repeat="type in vm.aggregationTypes" ng-value="type.value"> | |
77 | + {{type.name | translate}} | |
78 | + </md-option> | |
79 | + </md-select> | |
80 | + </md-input-container> | |
81 | + </section> | |
82 | + </section> | |
83 | + <section layout="row" ng-show="vm.showLimit()"> | |
84 | + <section layout="column" style="padding-top: 5px;" ng-show="vm.showLimit() && vm.isEdit"> | |
85 | + <label class="tb-small advanced-label" translate>timewindow.hide</label> | |
86 | + <md-checkbox aria-label="{{ 'timewindow.hide' | translate }}" | |
87 | + ng-model="vm.timewindow.hideAggInterval" > | |
88 | + </md-checkbox> | |
89 | + </section> | |
90 | + <section layout="column" flex ng-show="vm.isEdit || !vm.timewindow.hideAggInterval"> | |
91 | + <md-slider-container> | |
92 | + <span translate>aggregation.limit</span> | |
93 | + <md-slider flex min="{{vm.minDatapointsLimit()}}" max="{{vm.maxDatapointsLimit()}}" step="1" | |
94 | + ng-disabled="vm.timewindow.hideAggInterval" ng-model="vm.timewindow.aggregation.limit" aria-label="limit" id="limit-slider"> | |
95 | + </md-slider> | |
96 | + <md-input-container style="max-width: 80px;"> | |
97 | + <input flex type="number" step="1" ng-disabled="vm.timewindow.hideAggInterval" | |
98 | + min="{{vm.minDatapointsLimit()}}" max="{{vm.maxDatapointsLimit()}}" | |
99 | + ng-model="vm.timewindow.aggregation.limit" aria-label="limit" aria-controls="limit-slider"> | |
100 | + </md-input-container> | |
101 | + </md-slider-container> | |
102 | + </section> | |
103 | + </section> | |
104 | + <tb-timeinterval ng-if="vm.showRealtimeAggInterval()" min="vm.minRealtimeAggInterval()" | |
105 | + max="vm.maxRealtimeAggInterval()" ng-model="vm.timewindow.realtime.interval" is-edit="vm.isEdit" | |
106 | + hide-flag="vm.timewindow.hideAggInterval" predefined-name="'aggregation.group-interval'"> | |
77 | 107 | </tb-timeinterval> |
78 | - <tb-timeinterval ng-if="vm.showHistoryAggInterval()" min="vm.minHistoryAggInterval()" max="vm.maxHistoryAggInterval()" | |
79 | - predefined-name="'aggregation.group-interval'" | |
80 | - ng-model="vm.timewindow.history.interval"> | |
108 | + <tb-timeinterval ng-if="vm.showHistoryAggInterval()" min="vm.minHistoryAggInterval()" | |
109 | + max="vm.maxHistoryAggInterval()" ng-model="vm.timewindow.history.interval" is-edit="vm.isEdit" | |
110 | + hide-flag="vm.timewindow.hideAggInterval" predefined-name="'aggregation.group-interval'"> | |
81 | 111 | </tb-timeinterval> |
82 | 112 | </md-content> |
83 | 113 | </section> |
... | ... | @@ -93,4 +123,4 @@ |
93 | 123 | </section> |
94 | 124 | </md-content> |
95 | 125 | </fieldset> |
96 | -</form> | |
\ No newline at end of file | ||
126 | +</form> | ... | ... |
... | ... | @@ -42,7 +42,10 @@ function Timewindow($compile, $templateCache, $filter, $mdPanel, $document, $mdM |
42 | 42 | var linker = function (scope, element, attrs, ngModelCtrl) { |
43 | 43 | |
44 | 44 | /* tbTimewindow (ng-model) |
45 | - * { | |
45 | + * { | |
46 | + * hideInterval: false, | |
47 | + * hideAggregation: false, | |
48 | + * hideAggInterval: false, | |
46 | 49 | * realtime: { |
47 | 50 | * interval: 0, |
48 | 51 | * timewindowMs: 0 |
... | ... | @@ -64,6 +67,8 @@ function Timewindow($compile, $templateCache, $filter, $mdPanel, $document, $mdM |
64 | 67 | |
65 | 68 | scope.historyOnly = angular.isDefined(attrs.historyOnly); |
66 | 69 | |
70 | + scope.isEdit = attrs.isEdit === 'true'; | |
71 | + | |
67 | 72 | scope.aggregation = scope.$eval(attrs.aggregation); |
68 | 73 | |
69 | 74 | scope.isToolbar = angular.isDefined(attrs.isToolbar); |
... | ... | @@ -135,7 +140,8 @@ function Timewindow($compile, $templateCache, $filter, $mdPanel, $document, $mdM |
135 | 140 | locals: { |
136 | 141 | 'timewindow': angular.copy(scope.model), |
137 | 142 | 'historyOnly': scope.historyOnly, |
138 | - 'aggregation': scope.aggregation, | |
143 | + 'aggregation': scope.aggregation, | |
144 | + 'isEdit': scope.isEdit, | |
139 | 145 | 'onTimewindowUpdate': function (timewindow) { |
140 | 146 | scope.model = timewindow; |
141 | 147 | scope.updateView(); |
... | ... | @@ -176,7 +182,10 @@ function Timewindow($compile, $templateCache, $filter, $mdPanel, $document, $mdM |
176 | 182 | value.aggregation = { |
177 | 183 | type: model.aggregation.type, |
178 | 184 | limit: model.aggregation.limit |
179 | - }; | |
185 | + }; | |
186 | + value.hideInterval = model.hideInterval; | |
187 | + value.hideAggregation = model.hideAggregation; | |
188 | + value.hideAggInterval = model.hideAggInterval; | |
180 | 189 | ngModelCtrl.$setViewValue(value); |
181 | 190 | scope.updateDisplayValue(); |
182 | 191 | } |
... | ... | @@ -230,6 +239,9 @@ function Timewindow($compile, $templateCache, $filter, $mdPanel, $document, $mdM |
230 | 239 | } |
231 | 240 | model.aggregation.limit = value.aggregation.limit || Math.floor(timeService.getMaxDatapointsLimit() / 2); |
232 | 241 | } |
242 | + model.hideInterval = value.hideInterval; | |
243 | + model.hideAggregation = value.hideAggregation; | |
244 | + model.hideAggInterval = value.hideAggInterval; | |
233 | 245 | } |
234 | 246 | scope.updateDisplayValue(); |
235 | 247 | }; |
... | ... | @@ -242,7 +254,9 @@ function Timewindow($compile, $templateCache, $filter, $mdPanel, $document, $mdM |
242 | 254 | require: "^ngModel", |
243 | 255 | scope: { |
244 | 256 | asButton: '=asButton', |
245 | - disabled:'=ngDisabled' | |
257 | + disabled:'=ngDisabled', | |
258 | + isEdit: '=?' | |
259 | + | |
246 | 260 | }, |
247 | 261 | link: linker |
248 | 262 | }; |
... | ... | @@ -279,4 +293,4 @@ function MillisecondsToTimeString($translate) { |
279 | 293 | return timeString; |
280 | 294 | } |
281 | 295 | } |
282 | -/* eslint-enable angular/angularelement */ | |
\ No newline at end of file | ||
296 | +/* eslint-enable angular/angularelement */ | ... | ... |
... | ... | @@ -34,7 +34,7 @@ |
34 | 34 | <section flex layout="row" layout-align="start center" style="margin-bottom: 16px;"> |
35 | 35 | <span ng-class="{'tb-disabled-label': useDashboardTimewindow}" translate style="padding-right: 8px;">widget-config.timewindow</span> |
36 | 36 | <tb-timewindow ng-disabled="useDashboardTimewindow" as-button="true" aggregation="{{ widgetType === types.widgetType.timeseries.value }}" |
37 | - flex ng-model="timewindow"></tb-timewindow> | |
37 | + is-edit="true" flex ng-model="timewindow"></tb-timewindow> | |
38 | 38 | </section> |
39 | 39 | </div> |
40 | 40 | <div ng-show="widgetType === types.widgetType.alarm.value" layout='column' layout-align="center" | ... | ... |
... | ... | @@ -50,7 +50,7 @@ |
50 | 50 | <md-icon aria-label="{{ 'action.export' | translate }}" class="material-icons">file_download</md-icon> |
51 | 51 | </md-button> |
52 | 52 | <tb-timewindow ng-show="vm.isEdit || vm.displayDashboardTimewindow()" |
53 | - is-toolbar | |
53 | + is-toolbar is-edit="vm.isEdit" | |
54 | 54 | direction="left" |
55 | 55 | tooltip-direction="bottom" aggregation="true" |
56 | 56 | ng-model="vm.dashboardCtx.dashboardTimewindow"> | ... | ... |
... | ... | @@ -1411,7 +1411,8 @@ |
1411 | 1411 | "edit": "Editar ventana de tiempo", |
1412 | 1412 | "date-range": "Rango de fecha", |
1413 | 1413 | "last": "Último(s)", |
1414 | - "time-period": "Período de tiempo" | |
1414 | + "time-period": "Período de tiempo", | |
1415 | + "hide": "Ocultar" | |
1415 | 1416 | }, |
1416 | 1417 | "user": { |
1417 | 1418 | "user": "Usuario", | ... | ... |
... | ... | @@ -1263,7 +1263,8 @@ |
1263 | 1263 | "period": "de {{startTime}} à {{endTime}}", |
1264 | 1264 | "realtime": "Temps réel", |
1265 | 1265 | "seconds": "{seconds, plural, 0 {second} 1 {1 second} other {# seconds}}", |
1266 | - "time-period": "Période" | |
1266 | + "time-period": "Période", | |
1267 | + "hide": "Masquer" | |
1267 | 1268 | }, |
1268 | 1269 | "user": { |
1269 | 1270 | "activation-email-sent-message": "L'e-mail d'activation a été envoyé avec succès!", | ... | ... |
... | ... | @@ -1353,7 +1353,8 @@ |
1353 | 1353 | "edit": "Modifica intervallo temporale", |
1354 | 1354 | "date-range": "Intervallo date", |
1355 | 1355 | "last": "Ultimo", |
1356 | - "time-period": "Intervallo temporale" | |
1356 | + "time-period": "Intervallo temporale", | |
1357 | + "hide": "Nascondi" | |
1357 | 1358 | }, |
1358 | 1359 | "user": { |
1359 | 1360 | "user": "Utente", | ... | ... |