@flexem/fc-gui 3.0.0-alpha.11 → 3.0.0-alpha.110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/CHANGELOG.md +445 -0
  2. package/assets/img/black_first_page.png +0 -0
  3. package/assets/img/black_last_page.png +0 -0
  4. package/assets/img/black_next_page.png +0 -0
  5. package/assets/img/black_previous_page.png +0 -0
  6. package/bundles/@flexem/fc-gui.umd.js +19414 -17248
  7. package/bundles/@flexem/fc-gui.umd.js.map +1 -1
  8. package/bundles/@flexem/fc-gui.umd.min.js +5 -5
  9. package/bundles/@flexem/fc-gui.umd.min.js.map +1 -1
  10. package/communication/variable/variable-communicator.d.ts +1 -0
  11. package/config/alarm/alarm.store.d.ts +6 -0
  12. package/config/alarm/alarm.store.js +0 -0
  13. package/config/alarm/alarm.store.metadata.json +1 -0
  14. package/config/alarm/get-alarms-args.d.ts +9 -0
  15. package/config/alarm/get-alarms-args.js +9 -0
  16. package/config/alarm/get-alarms-args.metadata.json +1 -0
  17. package/config/alarm/index.d.ts +2 -0
  18. package/config/alarm/index.js +1 -0
  19. package/config/alarm/index.metadata.json +1 -0
  20. package/config/config-store.d.ts +2 -0
  21. package/config/index.d.ts +1 -0
  22. package/config/index.js +1 -0
  23. package/config/index.metadata.json +1 -1
  24. package/elements/air-quality/air-quality-element.d.ts +31 -0
  25. package/elements/air-quality/air-quality-element.js +194 -0
  26. package/elements/air-quality/air-quality-element.metadata.json +1 -0
  27. package/elements/alarm/alarm-element.d.ts +44 -0
  28. package/elements/alarm/alarm-element.js +386 -0
  29. package/elements/alarm/alarm-element.metadata.json +1 -0
  30. package/elements/bar-graph-element.d.ts +10 -2
  31. package/elements/bar-graph-element.js +135 -5
  32. package/elements/bar-graph-element.metadata.json +1 -1
  33. package/elements/base/readable-element.d.ts +6 -1
  34. package/elements/base/readable-element.js +31 -2
  35. package/elements/base/readable-element.metadata.json +1 -1
  36. package/elements/datetime-display/datetime-display-element.d.ts +1 -0
  37. package/elements/datetime-display/datetime-display-element.js +10 -2
  38. package/elements/datetime-display/datetime-display-element.metadata.json +1 -1
  39. package/elements/datetime-display/time-zone-select-json.d.ts +8 -0
  40. package/elements/datetime-display/time-zone-select-json.js +558 -0
  41. package/elements/historical-curve/historical-curve.element.d.ts +8 -0
  42. package/elements/historical-curve/historical-curve.element.js +224 -19
  43. package/elements/historical-curve/historical-curve.element.metadata.json +1 -1
  44. package/elements/main-element.js +25 -4
  45. package/elements/main-element.metadata.json +1 -1
  46. package/elements/meter-element.d.ts +7 -1
  47. package/elements/meter-element.js +76 -7
  48. package/elements/meter-element.metadata.json +1 -1
  49. package/elements/numerical-display/numerical-display-element.d.ts +8 -2
  50. package/elements/numerical-display/numerical-display-element.js +55 -11
  51. package/elements/numerical-display/numerical-display-element.metadata.json +1 -1
  52. package/elements/per-view-variable-communicator.d.ts +2 -0
  53. package/elements/per-view-variable-communicator.js +8 -0
  54. package/elements/per-view-variable-communicator.metadata.json +1 -1
  55. package/elements/ring-graph/ring-graph-element.d.ts +13 -1
  56. package/elements/ring-graph/ring-graph-element.js +164 -3
  57. package/elements/ring-graph/ring-graph-element.metadata.json +1 -1
  58. package/elements/shared/graph/graph-state-element.js +0 -3
  59. package/elements/shared/text/text-element.js +13 -2
  60. package/elements/shared/text/text-state-element.js +1 -1
  61. package/elements/switch-indicator-light/bit-switch-operator.d.ts +1 -0
  62. package/elements/switch-indicator-light/bit-switch-operator.js +19 -0
  63. package/elements/switch-indicator-light/bit-switch-operator.metadata.json +1 -1
  64. package/elements/switch-indicator-light/switch-indicator-light-element.d.ts +8 -0
  65. package/elements/switch-indicator-light/switch-indicator-light-element.js +93 -23
  66. package/elements/switch-indicator-light/switch-indicator-light-element.metadata.json +1 -1
  67. package/elements/switch-indicator-light/switch-operator.d.ts +1 -0
  68. package/elements/switch-indicator-light/word-switch-operator.d.ts +1 -0
  69. package/elements/switch-indicator-light/word-switch-operator.js +6 -0
  70. package/elements/switch-indicator-light/word-switch-operator.metadata.json +1 -1
  71. package/elements/video/video-element.d.ts +4 -0
  72. package/elements/video/video-element.js +74 -20
  73. package/elements/video/video-element.metadata.json +1 -1
  74. package/elements/view-operation/view-operation.element.js +8 -0
  75. package/elements/weather/weater-element.js +0 -1
  76. package/gui/gui-context.d.ts +2 -1
  77. package/gui/gui-host.d.ts +1 -1
  78. package/gui/gui.component.d.ts +3 -0
  79. package/gui/gui.component.js +15 -2
  80. package/gui/gui.component.metadata.json +1 -1
  81. package/localization/localization.service.d.ts +7 -0
  82. package/localization/localization.service.js +10 -3
  83. package/localization/localization.service.metadata.json +1 -1
  84. package/localization/localization.service.zh_CN.js +8 -1
  85. package/localization/localization.service.zh_CN.metadata.json +1 -1
  86. package/modal/write-value/write-value-modal-args.d.ts +3 -1
  87. package/modal/write-value/write-value-modal-args.js +2 -1
  88. package/modal/write-value/write-value-modal-args.metadata.json +1 -1
  89. package/modal/write-value/write-value-modal.component.d.ts +8 -7
  90. package/modal/write-value/write-value-modal.component.html +9 -4
  91. package/modal/write-value/write-value-modal.component.js +42 -15
  92. package/modal/write-value/write-value-modal.component.metadata.json +1 -1
  93. package/model/air-quality/air-quality-info.d.ts +23 -0
  94. package/model/air-quality/air-quality-info.js +4 -0
  95. package/model/air-quality/air-quality-info.metadata.json +1 -0
  96. package/model/air-quality/air-quality.model.d.ts +7 -0
  97. package/model/air-quality/air-quality.model.js +0 -0
  98. package/model/air-quality/air-quality.model.metadata.json +1 -0
  99. package/model/alarm/alarm.model.d.ts +13 -0
  100. package/model/alarm/alarm.model.js +0 -0
  101. package/model/alarm/alarm.model.metadata.json +1 -0
  102. package/model/bar-graph/bar-graph.d.ts +4 -0
  103. package/model/base/readable-model.d.ts +4 -0
  104. package/model/datetime-display/datetime-display.d.ts +1 -0
  105. package/model/historical-curve/historical-curve-axis-settings.d.ts +11 -0
  106. package/model/historical-curve/historical-curve-axis-settings.js +5 -0
  107. package/model/historical-curve/historical-curve-axis-settings.metadata.json +1 -1
  108. package/model/historical-curve/historical-curve-chanel.model.d.ts +8 -0
  109. package/model/meter/meter.d.ts +4 -0
  110. package/model/ring-graph/ring-graph.model.d.ts +8 -0
  111. package/model/switch-indicator-light/bit-switch-operation.d.ts +2 -1
  112. package/model/switch-indicator-light/bit-switch-operation.js +1 -0
  113. package/model/switch-indicator-light/bit-switch-operation.metadata.json +1 -1
  114. package/package.json +1 -1
  115. package/remote/communication/variable/remote-variable-communicator.d.ts +4 -0
  116. package/remote/communication/variable/remote-variable-communicator.js +23 -1
  117. package/remote/communication/variable/remote-variable-communicator.metadata.json +1 -1
  118. package/remote/communication/variable/remote-variable-protocol.d.ts +3 -0
  119. package/service/index.d.ts +1 -0
  120. package/service/index.metadata.json +1 -1
  121. package/service/released-variable/index.d.ts +1 -0
  122. package/service/released-variable/index.js +0 -0
  123. package/service/released-variable/index.metadata.json +1 -0
  124. package/service/released-variable/released-variable.service.d.ts +4 -0
  125. package/service/released-variable/released-variable.service.js +0 -0
  126. package/service/released-variable/released-variable.service.metadata.json +1 -0
  127. package/service/weather.service.d.ts +1 -0
  128. package/shared/gui-consts.d.ts +2 -0
  129. package/shared/gui-consts.js +2 -0
  130. package/shared/gui-consts.metadata.json +1 -1
  131. package/utils/data-type/fbox-data-type.service.js +40 -0
@@ -10,6 +10,7 @@ import { HistoricalCurveElementStatus } from './historical-curve-element-status'
10
10
  import { LOGGER_SERVICE_TOKEN } from '../../logger';
11
11
  import { GlobalSettings, DisplayMode } from '../../settings';
12
12
  import { CurveType } from '../../model/historical-curve/curve-type';
13
+ import { AxisRangeType } from '../../model/historical-curve/historical-curve-axis-settings';
13
14
  export class HistoricalCurveElement extends ConditionalDisplayElement {
14
15
  constructor(element, injector, permissionChecker, variableCommunicator, variableStore, historyDataStore, signalRAppId) {
15
16
  super(element, permissionChecker, variableCommunicator, variableStore, signalRAppId);
@@ -21,13 +22,19 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
21
22
  marginRight: 20,
22
23
  mobileMinWidth: 450,
23
24
  operationAreaHeight: 32,
24
- operationAreaMarginTop: 10,
25
+ operationAreaMarginTop: 25,
25
26
  operationSelectFontSize: '16px',
26
27
  operationButtonWidth: 24,
27
28
  operationButtonHeight: 24,
28
29
  operationButtonMargin: 4
29
30
  };
30
31
  this.elementStatus = HistoricalCurveElementStatus.Loading;
32
+ this.data = [];
33
+ this.needResize = true;
34
+ this.setNeedResize = () => {
35
+ this.needResize = false;
36
+ setTimeout(() => this.needResize = true, 500);
37
+ };
31
38
  this.logger = injector.get(LOGGER_SERVICE_TOKEN);
32
39
  this.localization = injector.get(LOCALIZATION);
33
40
  this.timePeriods = this.getValidTimePeriods();
@@ -38,7 +45,7 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
38
45
  }, this.model.displaySetting.refreshInterval * 1000);
39
46
  this.isMobileMode = DisplayMode.Mobile === injector.get(GlobalSettings).displayMode;
40
47
  if (this.isMobileMode) {
41
- this.displayOption.operationAreaMarginTop = 20;
48
+ this.displayOption.operationAreaMarginTop = 35;
42
49
  if (this.model.displaySetting.size.width >= this.displayOption.mobileMinWidth) {
43
50
  this.displayOption.operationAreaHeight = 68;
44
51
  this.displayOption.operationSelectFontSize = '24px';
@@ -48,17 +55,34 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
48
55
  }
49
56
  }
50
57
  this.loadFirstPage();
58
+ this.initKeyboardListener();
51
59
  }
52
60
  dispose() {
53
61
  clearInterval(this.refreshIntervalId);
54
62
  if (this.chartElement) {
55
63
  this.chartElement.tooltip.hidden(true);
56
64
  }
65
+ if (this.resizeEventListener) {
66
+ this.resizeEventListener.clear();
67
+ }
68
+ if (this.isAndroid) {
69
+ window.removeEventListener('native.keyboardshow', this.setNeedResize);
70
+ window.removeEventListener('native.keyboardhide', this.setNeedResize);
71
+ }
57
72
  this.logger.debug(`[GUI]Dispose Histoical Curve Refresh Interval:${d3.time.format('%x %X')(new Date())}`);
58
73
  }
74
+ initKeyboardListener() {
75
+ this.isAndroid = !!navigator.userAgent.match(/(Android)/i);
76
+ if (this.isAndroid) {
77
+ window.addEventListener('native.keyboardshow', this.setNeedResize);
78
+ window.addEventListener('native.keyboardhide', this.setNeedResize);
79
+ }
80
+ }
59
81
  getValidTimePeriods() {
60
82
  const timePeriods = new Array();
83
+ timePeriods.push({ key: 6, name: this.localization.lastThirtyMinutes });
61
84
  timePeriods.push({ key: 1, name: this.localization.lastOneHour });
85
+ timePeriods.push({ key: 7, name: this.localization.lastEightHour });
62
86
  timePeriods.push({ key: 2, name: this.localization.lastTwentyFourHours });
63
87
  timePeriods.push({ key: 3, name: this.localization.lastSevenDays });
64
88
  timePeriods.push({ key: 4, name: this.localization.lastThirtyDays });
@@ -84,6 +108,12 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
84
108
  case 5:
85
109
  this.startTime = moment().subtract(1, 'years');
86
110
  break;
111
+ case 6:
112
+ this.startTime = moment().subtract(30, 'minutes');
113
+ break;
114
+ case 7:
115
+ this.startTime = moment().subtract(8, 'hours');
116
+ break;
87
117
  default:
88
118
  this.startTime = moment().subtract(1, 'days');
89
119
  }
@@ -131,6 +161,7 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
131
161
  each(result, v => values.push({ x: moment(v.time).local().toDate().valueOf(), y: v.values[key] }));
132
162
  data.push({ key: channel.name, area: channel.projectEnabled, values: values });
133
163
  });
164
+ this.data = data;
134
165
  nv.addGraph(() => {
135
166
  if (this.model.displaySetting.curveType === CurveType.BarGroup || this.model.displaySetting.curveType === CurveType.BarStack) {
136
167
  return this.getMultiBarWithFocusChart(chartWidth, chartHeight, data);
@@ -140,10 +171,57 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
140
171
  }
141
172
  });
142
173
  }
174
+ initPoint() {
175
+ try {
176
+ const legendList = this.$element
177
+ .find('.nv-legend')
178
+ .find('.nv-series');
179
+ let hiddenCount = 0;
180
+ for (let i = 0; i < this.data.length; i++) {
181
+ const channel = this.model.dataSetting.channels[i];
182
+ if (legendList.eq(i).children().eq(0).css('fill-opacity') === '1') {
183
+ const pointList = this.$element
184
+ .find('.nv-scatterWrap')
185
+ .find('.nv-series-' + (i - hiddenCount))
186
+ .find('.nv-point');
187
+ if (pointList && pointList.length) {
188
+ for (let j = 0; j < pointList.length; j++) {
189
+ const point = pointList.eq(j);
190
+ const previousPoint = pointList.eq(j - 1);
191
+ if (j && point.attr('transform').split(',')[1] !== previousPoint.attr('transform').split(',')[1]) {
192
+ if (channel.enablePoint && channel.pointColor) {
193
+ const pointStyle = {
194
+ 'stroke-opacity': 1,
195
+ 'stroke-width': '2px',
196
+ 'stroke': channel.pointColor,
197
+ 'fill-opacity': 1,
198
+ 'fill': channel.pointColor
199
+ };
200
+ point.addClass('nv-mark-point');
201
+ point.css(pointStyle);
202
+ previousPoint.addClass('nv-mark-point');
203
+ previousPoint.css(pointStyle);
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
209
+ else {
210
+ hiddenCount++;
211
+ }
212
+ }
213
+ }
214
+ catch (e) {
215
+ console.log(e);
216
+ }
217
+ }
143
218
  getLineChart(chartWidth, chartHeight, data) {
144
219
  const chart = nv.models.lineChart().showLegend(true)
145
220
  .margin({ top: 0, bottom: 0, left: this.displayOption.marginLeft, right: this.displayOption.marginRight })
146
221
  .noData(this.localization.chartNoData);
222
+ if (this.model.displaySetting.axisSetting.yAxisRangeType === AxisRangeType.Custom) {
223
+ chart.yDomain([this.model.displaySetting.axisSetting.yAxisMin, this.model.displaySetting.axisSetting.yAxisMax]);
224
+ }
147
225
  if (!this.isMobileMode) {
148
226
  chart.focusEnable(true);
149
227
  chart.focus.margin({ top: 10, right: 0, bottom: 0, left: 0 });
@@ -151,11 +229,20 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
151
229
  chart.focus.showXAxis(false);
152
230
  }
153
231
  this.renderCommonProperty(chart, chartWidth, chartHeight, data);
154
- // if in Mobile mode and width is less than the min width, then hide operation area
155
- if (this.isMobileMode && this.model.displaySetting.size.width < this.displayOption.mobileMinWidth) {
156
- return chart;
157
- }
158
232
  this.renderOperationArea(chartWidth, chartHeight);
233
+ this.initPoint();
234
+ chart.legend.dispatch.on('legendClick', () => {
235
+ setTimeout(() => {
236
+ this.$element.find('.nv-mark-point').css({
237
+ 'stroke-opacity': 0,
238
+ 'stroke-width': 0,
239
+ 'stroke': 'unset',
240
+ 'fill-opacity': 0,
241
+ 'fill': 'unset'
242
+ }).removeClass('nv-mark-point');
243
+ this.initPoint();
244
+ }, 1);
245
+ });
159
246
  return chart;
160
247
  }
161
248
  getMultiBarWithFocusChart(chartWidth, chartHeight, data) {
@@ -172,16 +259,15 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
172
259
  chart.multibar.stacked(true);
173
260
  chart.multibar2.stacked(true);
174
261
  }
262
+ if (this.model.displaySetting.axisSetting.yAxisRangeType === AxisRangeType.Custom) {
263
+ chart.yDomain([this.model.displaySetting.axisSetting.yAxisMin, this.model.displaySetting.axisSetting.yAxisMax]);
264
+ }
175
265
  if (!this.isMobileMode) {
176
266
  chart.focusEnable(true);
177
267
  chart.focusShowAxisX(false);
178
268
  }
179
269
  chart.xAxis.tickFormat(d => this.timeFormat(d, '%x %X'));
180
270
  this.renderCommonProperty(chart, chartWidth, chartHeight, data);
181
- // if in Mobile mode and width is less than the min width, then hide operation area
182
- if (this.isMobileMode && this.model.displaySetting.size.width < this.displayOption.mobileMinWidth) {
183
- return chart;
184
- }
185
271
  this.renderOperationArea(chartWidth, chartHeight);
186
272
  const focusContext = this.rootElement.select('.nv-context');
187
273
  focusContext.select('.nv-barsWrap.nvd3-svg').attr('transform', 'translate(0,30)');
@@ -196,9 +282,27 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
196
282
  return chart;
197
283
  }
198
284
  renderCommonProperty(chart, chartWidth, chartHeight, data) {
285
+ var _a, _b;
199
286
  chart.tooltip.headerFormatter(d => this.timeFormat(d, '%x %X'));
200
287
  if (this.model.displaySetting.showAxis) {
201
- chart.xAxis.showMaxMin(true).tickFormat(d => this.timeFormat(d, '%X'));
288
+ chart.xAxis.showMaxMin(true).tickFormat(d => {
289
+ this.$element.find('.nv-mark-point').css({
290
+ 'stroke-opacity': 0,
291
+ 'stroke-width': 0,
292
+ 'stroke': 'unset',
293
+ 'fill-opacity': 0,
294
+ 'fill': 'unset'
295
+ }).removeClass('nv-mark-point');
296
+ clearTimeout(this.timer);
297
+ this.timer = undefined;
298
+ this.timer = setTimeout(() => {
299
+ this.initPoint();
300
+ }, 100);
301
+ if (this.currentTimePeriod === 3 || this.currentTimePeriod === 4 || this.currentTimePeriod === 5) {
302
+ return this.timeFormat(d, '%y-%m-%d');
303
+ }
304
+ return this.timeFormat(Number(d), '%X');
305
+ });
202
306
  if (this.model.displaySetting.axisSetting) {
203
307
  if (this.model.displaySetting.axisSetting.showAxisLabel && this.model.displaySetting.axisSetting.axisLabelFont) {
204
308
  chart.xAxis.fontSize(this.model.displaySetting.axisSetting.axisLabelFont.fontSize);
@@ -219,47 +323,148 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
219
323
  chart.color(this.model.dataSetting.channels.map(c => c.connectorColor));
220
324
  this.rootElement.append('g').datum(data).call(chart);
221
325
  this.rootElement.selectAll('.nv-noData').attr('x', chartWidth / 2).attr('y', chartHeight / 2 + this.displayOption.operationAreaHeight);
222
- nv.utils.windowResize(() => {
326
+ this.resizeEventListener = nv.utils.windowResize(() => {
327
+ if (!this.needResize)
328
+ return;
223
329
  chart.update();
224
330
  this.rootElement.selectAll('.nv-noData').attr('x', chartWidth / 2).attr('y', chartHeight / 2 + this.displayOption.operationAreaHeight);
225
331
  });
332
+ const fontSize = (_b = (_a = this.model.displaySetting.axisSetting) === null || _a === void 0 ? void 0 : _a.axisLabelFont) === null || _b === void 0 ? void 0 : _b.fontSize;
226
333
  this.rootElement.selectAll('.domain').style('stroke-opacity', 1);
227
334
  if (this.model.displaySetting.showAxis && this.model.displaySetting.axisSetting) {
228
335
  const axisColor = this.model.displaySetting.axisSetting.axisColor;
229
336
  this.rootElement.selectAll('.domain').style('stroke', axisColor);
230
- if (this.model.displaySetting.axisSetting.showAxisLabel) {
231
- const fontSize = this.model.displaySetting.axisSetting.axisLabelFont.fontSize;
337
+ if (fontSize && this.model.displaySetting.axisSetting.showAxisLabel) {
232
338
  this.rootElement.selectAll('.nv-axisMaxMin').select('text').style('font-size', fontSize);
233
339
  }
234
340
  }
341
+ let strokeWidth = 0;
342
+ if (this.model.displaySetting.axisSetting.showTick !== false) {
343
+ strokeWidth = 1;
344
+ }
345
+ this.rootElement
346
+ .selectAll('.nv-x')
347
+ .selectAll('.tick')
348
+ .selectAll('line')
349
+ .attr('style', `stroke:${this.model.displaySetting.axisSetting.xAxisTickColor || 'rgb(127, 147, 159)'};stroke-width:${strokeWidth};`);
350
+ this.rootElement
351
+ .selectAll('.nv-y')
352
+ .selectAll('.tick')
353
+ .selectAll('line')
354
+ .attr('style', `stroke:${this.model.displaySetting.axisSetting.yAxisTickColor || 'rgb(127, 147, 159)'};stroke-width:${strokeWidth};`);
355
+ if (fontSize && this.currentTimePeriod === 3 || this.currentTimePeriod === 4 || this.currentTimePeriod === 5) {
356
+ const self = this;
357
+ this.rootElement
358
+ .selectAll('.nv-x')
359
+ .selectAll('.tick')
360
+ .selectAll('text')
361
+ .data(function (d) {
362
+ return [self.timeFormat(Number(d), '%y-%m-%d'), self.timeFormat(Number(d), '%H:%M:%S')];
363
+ })
364
+ .enter()
365
+ .append('text')
366
+ .attr('class', 'full-date')
367
+ .attr('x', 0)
368
+ .attr('y', 0)
369
+ .attr('dy', '2.3em')
370
+ .style('text-anchor', 'middle')
371
+ .style('font-size', fontSize)
372
+ .text((d) => d);
373
+ this.rootElement
374
+ .selectAll('.nv-axisMaxMin-x')
375
+ .selectAll('text')
376
+ .data(function (d) {
377
+ return [self.timeFormat(Number(d), '%y-%m-%d'), self.timeFormat(Number(d), '%H:%M:%S')];
378
+ })
379
+ .enter()
380
+ .append('text')
381
+ .attr('class', 'full-date')
382
+ .attr('x', 0)
383
+ .attr('y', 0)
384
+ .attr('dy', '2.3em')
385
+ .style('text-anchor', 'middle')
386
+ .style('font-size', fontSize)
387
+ .text((d) => d);
388
+ const focusWrap = this.rootElement.selectAll('.nv-focusWrap');
389
+ if (focusWrap.size()) {
390
+ let h = focusWrap.attr('transform');
391
+ if (h && h.length && h.indexOf(',') !== -1) {
392
+ h = h.slice(0, -1).split(',')[1];
393
+ this.rootElement
394
+ .selectAll('.nv-focusWrap')
395
+ .attr('transform', `translate(0,${Number(h) + 15})`);
396
+ }
397
+ }
398
+ const resizeObserver = new window.MutationObserver(() => {
399
+ this.rootElement
400
+ .selectAll('.nv-x')
401
+ .selectAll('.tick')
402
+ .selectAll('.full-date')
403
+ .remove();
404
+ this.rootElement
405
+ .selectAll('.nv-x')
406
+ .selectAll('.tick')
407
+ .selectAll('text')
408
+ .data(function (d) {
409
+ return [self.timeFormat(Number(d), '%y-%m-%d'), self.timeFormat(Number(d), '%H:%M:%S')];
410
+ })
411
+ .enter()
412
+ .append('text')
413
+ .attr('class', 'full-date')
414
+ .attr('x', 0)
415
+ .attr('y', 0)
416
+ .attr('dy', '2.3em')
417
+ .style('text-anchor', 'middle')
418
+ .style('font-size', fontSize)
419
+ .text((d) => d);
420
+ });
421
+ const extent = document.getElementsByClassName('extent');
422
+ if (extent.length) {
423
+ resizeObserver.observe(extent[0], { attributes: true });
424
+ }
425
+ }
426
+ else {
427
+ this.rootElement
428
+ .selectAll('.full-date')
429
+ .remove();
430
+ }
235
431
  }
236
432
  renderOperationArea(chartWidth, chartHeight) {
433
+ const backgroundColor = this.model.displaySetting.axisSetting.filterBackgroudColor || 'inherit';
237
434
  const operationArea = this.rootElement.append('g').attr('transform', `translate(0,${chartHeight + this.displayOption.operationAreaMarginTop})`)
238
435
  .append('foreignObject').attr('width', chartWidth).attr('height', this.displayOption.operationAreaHeight).attr('fill', 'none')
239
436
  .append('xhtml:div').style('height', (this.displayOption.operationAreaHeight - 4) + 'px').style('overflow', 'hidden').style('margin-top', '4px');
240
437
  const selectElement = operationArea.append('select').style('margin-left', this.displayOption.marginLeft + 'px')
438
+ .style('background-color', backgroundColor)
241
439
  .style('font-size', this.displayOption.operationSelectFontSize).on('change', () => {
242
440
  const displayTimePeriod = this.rootElement.select('select').property('value');
243
441
  this.updateTimeRange(displayTimePeriod);
244
442
  this.reRenderElement(this.startTime, this.endTime, this.displayOption.dataLimit, HistoricalCurveTimeRange.BeginOpenEndOpen);
245
443
  });
444
+ const rect = this.$element.parent().parent().find('rect');
445
+ const fillColor = rect.attr('fill');
246
446
  const options = selectElement.selectAll('option').data(this.timePeriods).enter().append('option');
247
- options.text(d => d.name).attr('value', d => d.key).property('selected', d => d.key === Number(this.currentTimePeriod));
447
+ options.text(d => d.name).attr('value', d => d.key).property('selected', d => d.key === Number(this.currentTimePeriod))
448
+ .style('background-color', this.model.displaySetting.axisSetting.filterBackgroudColor || fillColor);
248
449
  const buttonWidth = this.displayOption.operationButtonWidth + 'px', buttonHeight = this.displayOption.operationButtonHeight + 'px';
249
450
  operationArea.append('button').style('width', buttonWidth).style('height', buttonHeight).style('border', 'none')
250
- .style('float', 'right').style('background', 'white').style('background-image', 'url(assets/img/last_page.svg)')
451
+ .style('float', 'right').style('background-image', 'url(assets/img/black_last_page.png)')
452
+ .style('background-color', backgroundColor).style('background-size', 'cover')
251
453
  .on('click', () => { this.loadLastPage(); });
252
454
  operationArea.append('button').style('width', buttonWidth).style('height', buttonHeight).style('border', 'none')
253
- .style('float', 'right').style('background', 'white').style('background-image', 'url(assets/img/next_page.svg)')
455
+ .style('float', 'right').style('background-image', 'url(assets/img/black_next_page.png)')
254
456
  .style('margin', `0 ${this.displayOption.operationButtonMargin}px 0 0`)
457
+ .style('background-color', backgroundColor).style('background-size', 'cover')
255
458
  .on('click', () => { this.loadNextPage(); });
256
459
  operationArea.append('button').style('width', buttonWidth).style('height', buttonHeight).style('border', 'none')
257
- .style('float', 'right').style('background', 'white').style('background-image', 'url(assets/img/previous_page.svg)')
460
+ .style('float', 'right').style('background-image', 'url(assets/img/black_previous_page.png)')
258
461
  .style('margin', `0 ${this.displayOption.operationButtonMargin}px 0 0`)
462
+ .style('background-color', backgroundColor).style('background-size', 'cover')
259
463
  .on('click', () => { this.loadPreviousPage(); });
260
464
  operationArea.append('button').style('width', buttonWidth).style('height', buttonHeight).style('border', 'none')
261
- .style('float', 'right').style('background', 'white').style('background-image', 'url(assets/img/first_page.svg)')
465
+ .style('float', 'right').style('background-image', 'url(assets/img/black_first_page.png)')
262
466
  .style('margin', `0 ${this.displayOption.operationButtonMargin}px 0 0`)
467
+ .style('background-color', backgroundColor).style('background-size', 'cover')
263
468
  .on('click', () => { this.loadFirstPage(); });
264
469
  }
265
470
  timeFormat(datetime, specifier) {
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"HistoricalCurveElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-display-element","name":"ConditionalDisplayElement","line":20,"character":44},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":62,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":63,"character":18},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":64,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":65,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":66,"character":23},{"__symbolic":"reference","module":"../../config","name":"HistoryDataStore","line":67,"character":43},{"__symbolic":"reference","name":"string"}]}],"dispose":[{"__symbolic":"method"}],"getValidTimePeriods":[{"__symbolic":"method"}],"updateTimeRange":[{"__symbolic":"method"}],"updateQueryTimeRange":[{"__symbolic":"method"}],"reRenderElement":[{"__symbolic":"method"}],"renderElement":[{"__symbolic":"method"}],"renderChart":[{"__symbolic":"method"}],"getLineChart":[{"__symbolic":"method"}],"getMultiBarWithFocusChart":[{"__symbolic":"method"}],"renderCommonProperty":[{"__symbolic":"method"}],"renderOperationArea":[{"__symbolic":"method"}],"timeFormat":[{"__symbolic":"method"}],"loadFirstPage":[{"__symbolic":"method"}],"loadNextPage":[{"__symbolic":"method"}],"loadPreviousPage":[{"__symbolic":"method"}],"loadLastPage":[{"__symbolic":"method"}],"initElementStatus":[{"__symbolic":"method"}],"updateElementStatus":[{"__symbolic":"method"}],"setStatusAsUnbound":[{"__symbolic":"method"}],"setStatusAsLoading":[{"__symbolic":"method"}],"setStatusAsLoadFailed":[{"__symbolic":"method"}],"renderStatus":[{"__symbolic":"method"}],"clearStatus":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"HistoricalCurveElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-display-element","name":"ConditionalDisplayElement","line":21,"character":44},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":68,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":69,"character":18},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":70,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":71,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":72,"character":23},{"__symbolic":"reference","module":"../../config","name":"HistoryDataStore","line":73,"character":43},{"__symbolic":"reference","name":"string"}]}],"dispose":[{"__symbolic":"method"}],"initKeyboardListener":[{"__symbolic":"method"}],"getValidTimePeriods":[{"__symbolic":"method"}],"updateTimeRange":[{"__symbolic":"method"}],"updateQueryTimeRange":[{"__symbolic":"method"}],"reRenderElement":[{"__symbolic":"method"}],"renderElement":[{"__symbolic":"method"}],"renderChart":[{"__symbolic":"method"}],"initPoint":[{"__symbolic":"method"}],"getLineChart":[{"__symbolic":"method"}],"getMultiBarWithFocusChart":[{"__symbolic":"method"}],"renderCommonProperty":[{"__symbolic":"method"}],"renderOperationArea":[{"__symbolic":"method"}],"timeFormat":[{"__symbolic":"method"}],"loadFirstPage":[{"__symbolic":"method"}],"loadNextPage":[{"__symbolic":"method"}],"loadPreviousPage":[{"__symbolic":"method"}],"loadLastPage":[{"__symbolic":"method"}],"initElementStatus":[{"__symbolic":"method"}],"updateElementStatus":[{"__symbolic":"method"}],"setStatusAsUnbound":[{"__symbolic":"method"}],"setStatusAsLoading":[{"__symbolic":"method"}],"setStatusAsLoadFailed":[{"__symbolic":"method"}],"renderStatus":[{"__symbolic":"method"}],"clearStatus":[{"__symbolic":"method"}]}}}}]
@@ -27,6 +27,8 @@ import { PolygonElement } from './vector-graphics/polygon-element';
27
27
  import { HyperlinkElement } from './static-elements/hyperlink-element';
28
28
  import { VideoElement } from './video/video-element';
29
29
  import { WeatherElement } from './weather/weater-element';
30
+ import { AirQualityElement } from './air-quality/air-quality-element';
31
+ import { AlarmElement } from './alarm/alarm-element';
30
32
  export class MainElement {
31
33
  constructor(injector, bsModalService, context, variableCommunicator, popupViewService, signalRAppId) {
32
34
  this.injector = injector;
@@ -58,7 +60,7 @@ export class MainElement {
58
60
  const category = $(element).data('model').category;
59
61
  switch (category) {
60
62
  case GuiConsts.components.numericalDisplayKey:
61
- const numericalDisplayElement = new NumericalDisplayElement(element, this.injector, this.bsModalService, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.graphStore, this.context.operationRecordService, this.context.securityChecker, this.context.configStore.variableStore, this.injector.get(LOCALIZATION), this.signalRAppId);
63
+ const numericalDisplayElement = new NumericalDisplayElement(element, this.injector, this.bsModalService, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.graphStore, this.context.operationRecordService, this.context.releasedVariableService, this.context.securityChecker, this.context.configStore.variableStore, this.injector.get(LOCALIZATION), this.signalRAppId);
62
64
  this.elements.push(numericalDisplayElement);
63
65
  break;
64
66
  case GuiConsts.components.imageKey:
@@ -125,6 +127,12 @@ export class MainElement {
125
127
  case GuiConsts.components.weatherKey:
126
128
  this.elements.push(new WeatherElement(element, this.injector, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.variableStore, this.context.weatherService, this.signalRAppId));
127
129
  break;
130
+ case GuiConsts.components.airQualityKey:
131
+ this.elements.push(new AirQualityElement(element, this.injector, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.variableStore, this.context.weatherService, this.signalRAppId));
132
+ break;
133
+ case GuiConsts.components.alarmKey:
134
+ this.elements.push(new AlarmElement(element, this.injector, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.variableStore, this.context.configStore.alarmsStore, this.signalRAppId));
135
+ break;
128
136
  }
129
137
  });
130
138
  this.initBackground();
@@ -204,7 +212,7 @@ export class MainElement {
204
212
  initElementState() {
205
213
  forEach(this.elements, element => {
206
214
  if (element instanceof ReadableElement) {
207
- element.init(element.readVariableName);
215
+ element.init(element.readVariableName || element.maxVariableName || element.minVariableName);
208
216
  }
209
217
  else if (element instanceof HistoricalCurveElement) {
210
218
  element.initElementStatus();
@@ -215,8 +223,20 @@ export class MainElement {
215
223
  getVariableNames() {
216
224
  const variableNames = new Array();
217
225
  forEach(this.elements, element => {
226
+ var _a, _b;
218
227
  if (element instanceof ReadableElement) {
228
+ const maxVariableName = (_a = element) === null || _a === void 0 ? void 0 : _a.maxVariableName;
229
+ const maxValueType = element.maxValueType;
230
+ const minVariableName = (_b = element) === null || _b === void 0 ? void 0 : _b.minVariableName;
231
+ const minValueType = element.minValueType;
219
232
  const variableName = element.readVariableName;
233
+ // 最大最小值选择变量类型时,其中一个未绑定变量不进行开点操作 - FLEXCLOUD-1817
234
+ if (maxValueType && maxVariableName && !variableNames.find(v => isEqual(maxVariableName, v))) {
235
+ variableNames.push(maxVariableName);
236
+ }
237
+ if (minValueType && minVariableName && !variableNames.find(v => isEqual(minVariableName, v))) {
238
+ variableNames.push(minVariableName);
239
+ }
220
240
  if (variableName && !variableNames.find(v => isEqual(variableName, v))) {
221
241
  variableNames.push(element.readVariableName);
222
242
  }
@@ -242,7 +262,7 @@ export class MainElement {
242
262
  each(values, value => {
243
263
  each(this.elements, e => {
244
264
  if (e instanceof ReadableElement) {
245
- if (e.readVariableName === value.variableName) {
265
+ if (e.readVariableName === value.variableName || e.minVariableName === value.variableName || e.maxVariableName === value.variableName) {
246
266
  e.reportValueChanged(value);
247
267
  }
248
268
  }
@@ -252,7 +272,8 @@ export class MainElement {
252
272
  dispose() {
253
273
  each(this.elements, e => {
254
274
  if (e instanceof HistoricalCurveElement || e instanceof VideoElement
255
- || e instanceof WeatherElement || e instanceof NumericalDisplayElement || e instanceof TextElement) {
275
+ || e instanceof WeatherElement || e instanceof NumericalDisplayElement || e instanceof TextElement
276
+ || e instanceof AirQualityElement) {
256
277
  e.dispose();
257
278
  }
258
279
  });
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"MainElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":53,"character":43},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":54,"character":41},{"__symbolic":"reference","module":"../gui/gui-context","name":"GuiContext","line":55,"character":34},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":56,"character":47},{"__symbolic":"reference","module":"../view/popup-view.service","name":"PopupViewService","line":57,"character":43},null]}],"load":[{"__symbolic":"method"}],"uniformStretch":[{"__symbolic":"method"}],"changeVideoStyle":[{"__symbolic":"method"}],"horizontalStretch":[{"__symbolic":"method"}],"initElementState":[{"__symbolic":"method"}],"getVariableNames":[{"__symbolic":"method"}],"reportVariableStates":[{"__symbolic":"method"}],"reportVariableValues":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"checkIsLoaded":[{"__symbolic":"method"}],"initBackground":[{"__symbolic":"method"}],"getImageEl":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"MainElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":55,"character":43},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":56,"character":41},{"__symbolic":"reference","module":"../gui/gui-context","name":"GuiContext","line":57,"character":34},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":58,"character":47},{"__symbolic":"reference","module":"../view/popup-view.service","name":"PopupViewService","line":59,"character":43},null]}],"load":[{"__symbolic":"method"}],"uniformStretch":[{"__symbolic":"method"}],"changeVideoStyle":[{"__symbolic":"method"}],"horizontalStretch":[{"__symbolic":"method"}],"initElementState":[{"__symbolic":"method"}],"getVariableNames":[{"__symbolic":"method"}],"reportVariableStates":[{"__symbolic":"method"}],"reportVariableValues":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"checkIsLoaded":[{"__symbolic":"method"}],"initBackground":[{"__symbolic":"method"}],"getImageEl":[{"__symbolic":"method"}]}}}}]
@@ -5,16 +5,22 @@ import { ReadableElement } from './base';
5
5
  import { VariableStore } from '../config';
6
6
  import { PermissionChecker } from '../service';
7
7
  export declare class MeterElement extends ReadableElement {
8
+ private static DEFAULT_MIN_VALUE;
9
+ private static DEFAULT_MAX_VALUE;
8
10
  private readonly $handEl;
9
11
  private readonly arcPath$;
10
12
  private cx;
11
13
  private cy;
12
14
  private offsetY;
13
15
  private mainElementTransform;
16
+ private valueObj;
17
+ private isNeedUpdateScale;
14
18
  readonly model: Meter;
15
19
  constructor(element: HTMLElement, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, localization: Localization, signalRAppId: string);
16
- updateVariableValue(value: number): void;
20
+ private updateValueObj;
21
+ updateVariableValue(value: number, variableName: any): void;
17
22
  private initFrameNode;
23
+ private updateScale;
18
24
  private getAngle;
19
25
  private directionPoint;
20
26
  }
@@ -1,10 +1,20 @@
1
1
  import { ReadableElement } from './base';
2
+ import { isNumber } from 'lodash';
3
+ import { VariableValueType } from '../model/shared/condition/variable-value-type';
2
4
  export class MeterElement extends ReadableElement {
3
5
  constructor(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId) {
4
6
  super(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId);
5
7
  this.cx = 0;
6
8
  this.cy = 0;
7
9
  this.offsetY = 0;
10
+ this.valueObj = {};
11
+ this.isNeedUpdateScale = false;
12
+ if ((this.model.minValueType === VariableValueType.Constant && this.model.maxValueType === VariableValueType.Variable)
13
+ || this.model.maxValueType === VariableValueType.Constant && this.model.minValueType === VariableValueType.Variable) {
14
+ this.isNeedUpdateScale = true;
15
+ this.updateScale();
16
+ this.isNeedUpdateScale = false;
17
+ }
8
18
  let mainEl$;
9
19
  if (this.model.version && this.model.version > 3) {
10
20
  mainEl$ = this.$element.find('[data-id="main"]');
@@ -31,18 +41,75 @@ export class MeterElement extends ReadableElement {
31
41
  this.changeStates();
32
42
  });
33
43
  }
34
- updateVariableValue(value) {
35
- const angle = this.getAngle(value);
36
- this.$handEl.attr('transform', this.mainElementTransform + ` translate(0,${this.offsetY}) rotate(${angle}, ${this.cx}, ${this.cy})`);
44
+ updateValueObj(value, variableName) {
45
+ var _a, _b, _c;
46
+ if (((_a = this.model.readVariable) === null || _a === void 0 ? void 0 : _a.name) === variableName) {
47
+ this.isNeedUpdateScale = false;
48
+ this.valueObj.value = value;
49
+ }
50
+ if (((_b = this.model.minVariable) === null || _b === void 0 ? void 0 : _b.name) === variableName) {
51
+ this.isNeedUpdateScale = true;
52
+ this.valueObj.min = value;
53
+ }
54
+ if (((_c = this.model.maxVariable) === null || _c === void 0 ? void 0 : _c.name) === variableName) {
55
+ this.isNeedUpdateScale = true;
56
+ this.valueObj.max = value;
57
+ }
58
+ }
59
+ updateVariableValue(value, variableName) {
60
+ this.updateValueObj(value, variableName);
61
+ this.updateScale();
62
+ const angle = this.getAngle();
63
+ if (isNumber(angle)) {
64
+ this.$handEl.attr('transform', this.mainElementTransform + ` translate(0,${this.offsetY}) rotate(${angle}, ${this.cx}, ${this.cy})`);
65
+ }
37
66
  }
38
67
  initFrameNode() {
39
68
  const b = Snap(this.$element[0]).getBBox();
40
69
  this.rootElement.append('rect').attr('id', 'StateFrame').attr('width', b.width).attr('height', b.height).attr('fill', 'transparent');
41
70
  }
42
- getAngle(value) {
43
- const min = this.model.min;
44
- const max = this.model.max;
45
- value = Math.min(Math.max(value, min), max);
71
+ updateScale() {
72
+ if (!this.isNeedUpdateScale) {
73
+ return;
74
+ }
75
+ let min = this.model.minValueType ? this.valueObj.min : this.model.min;
76
+ let max = this.model.maxValueType ? this.valueObj.max : this.model.max;
77
+ min = Number(min);
78
+ max = Number(max);
79
+ if (isNaN(min) || isNaN(max)) {
80
+ min = MeterElement.DEFAULT_MIN_VALUE;
81
+ max = MeterElement.DEFAULT_MAX_VALUE;
82
+ }
83
+ const avgSacle = ((max - min) / this.model.masterDivisionNumber).toFixed(5);
84
+ const textElements = this.$element.find('g:first > text');
85
+ for (let i = 0; i < textElements.length; i++) {
86
+ const text = textElements[i];
87
+ if (!text.innerHTML) {
88
+ continue;
89
+ }
90
+ let sacleValue = ((Number(avgSacle) * i) + min).toFixed(0);
91
+ // 整数位和小数位格式化;
92
+ if (this.model.fractionDigits > 0) {
93
+ sacleValue = (sacleValue / Math.pow(10, this.model.fractionDigits)).toFixed(this.model.fractionDigits);
94
+ }
95
+ if (!isNaN(sacleValue)) {
96
+ text.innerHTML = sacleValue;
97
+ }
98
+ }
99
+ }
100
+ getAngle() {
101
+ let min = this.model.minValueType ? this.valueObj.min : this.model.min;
102
+ let max = this.model.maxValueType ? this.valueObj.max : this.model.max;
103
+ min = Number(min);
104
+ max = Number(max);
105
+ if (isNaN(min) || isNaN(max)) {
106
+ min = MeterElement.DEFAULT_MIN_VALUE;
107
+ max = MeterElement.DEFAULT_MAX_VALUE;
108
+ }
109
+ if (!this.valueObj.value && isNaN(Number(this.valueObj.value))) {
110
+ return undefined;
111
+ }
112
+ const value = Math.min(Math.max(this.valueObj.value || 0, min), max);
46
113
  const len = (value - min) / (max - min);
47
114
  const arcPath = Snap(this.arcPath$[0]);
48
115
  const b = arcPath.getBBox(true);
@@ -68,3 +135,5 @@ export class MeterElement extends ReadableElement {
68
135
  return c;
69
136
  }
70
137
  }
138
+ MeterElement.DEFAULT_MIN_VALUE = 0;
139
+ MeterElement.DEFAULT_MAX_VALUE = 100;
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"MeterElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./base","name":"ReadableElement","line":7,"character":34},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":18,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../service","name":"PermissionChecker","line":18,"character":57},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":19,"character":30},{"__symbolic":"reference","module":"../config","name":"VariableStore","line":19,"character":67},{"__symbolic":"reference","module":"../localization","name":"Localization","line":19,"character":96},{"__symbolic":"reference","name":"string"}]}],"updateVariableValue":[{"__symbolic":"method"}],"initFrameNode":[{"__symbolic":"method"}],"getAngle":[{"__symbolic":"method"}],"directionPoint":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"MeterElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./base","name":"ReadableElement","line":9,"character":34},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":25,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../service","name":"PermissionChecker","line":25,"character":57},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":26,"character":30},{"__symbolic":"reference","module":"../config","name":"VariableStore","line":26,"character":67},{"__symbolic":"reference","module":"../localization","name":"Localization","line":26,"character":96},{"__symbolic":"reference","name":"string"}]}],"updateValueObj":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}],"initFrameNode":[{"__symbolic":"method"}],"updateScale":[{"__symbolic":"method"}],"getAngle":[{"__symbolic":"method"}],"directionPoint":[{"__symbolic":"method"}]},"statics":{"DEFAULT_MIN_VALUE":0,"DEFAULT_MAX_VALUE":100}}}}]