@flexem/fc-gui 3.0.0-alpha.96 → 3.0.0-alpha.98

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.
@@ -32,6 +32,8 @@ export declare class HistoricalCurveElement extends ConditionalDisplayElement {
32
32
  private elementStatus;
33
33
  private chartElement;
34
34
  private isMobileMode;
35
+ private data;
36
+ private timer;
35
37
  constructor(element: HTMLElement, injector: Injector, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, historyDataStore: HistoryDataStore, signalRAppId: string);
36
38
  dispose(): void;
37
39
  private getValidTimePeriods;
@@ -40,6 +42,7 @@ export declare class HistoricalCurveElement extends ConditionalDisplayElement {
40
42
  private reRenderElement;
41
43
  private renderElement;
42
44
  private renderChart;
45
+ initPoint(): void;
43
46
  private getLineChart;
44
47
  private getMultiBarWithFocusChart;
45
48
  private renderCommonProperty;
@@ -29,6 +29,7 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
29
29
  operationButtonMargin: 4
30
30
  };
31
31
  this.elementStatus = HistoricalCurveElementStatus.Loading;
32
+ this.data = [];
32
33
  this.logger = injector.get(LOGGER_SERVICE_TOKEN);
33
34
  this.localization = injector.get(LOCALIZATION);
34
35
  this.timePeriods = this.getValidTimePeriods();
@@ -140,6 +141,7 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
140
141
  each(result, v => values.push({ x: moment(v.time).local().toDate().valueOf(), y: v.values[key] }));
141
142
  data.push({ key: channel.name, area: channel.projectEnabled, values: values });
142
143
  });
144
+ this.data = data;
143
145
  nv.addGraph(() => {
144
146
  if (this.model.displaySetting.curveType === CurveType.BarGroup || this.model.displaySetting.curveType === CurveType.BarStack) {
145
147
  return this.getMultiBarWithFocusChart(chartWidth, chartHeight, data);
@@ -149,6 +151,50 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
149
151
  }
150
152
  });
151
153
  }
154
+ initPoint() {
155
+ try {
156
+ const legendList = this.$element
157
+ .find('.nv-legend')
158
+ .find('.nv-series');
159
+ let hiddenCount = 0;
160
+ for (let i = 0; i < this.data.length; i++) {
161
+ const channel = this.model.dataSetting.channels[i];
162
+ if (legendList.eq(i).children().eq(0).css('fill-opacity') === '1') {
163
+ const pointList = this.$element
164
+ .find('.nv-scatterWrap')
165
+ .find('.nv-series-' + (i - hiddenCount))
166
+ .find('.nv-point');
167
+ if (pointList && pointList.length) {
168
+ for (let j = 0; j < pointList.length; j++) {
169
+ const point = pointList.eq(j);
170
+ const previousPoint = pointList.eq(j - 1);
171
+ if (j && point.attr('transform').split(',')[1] !== previousPoint.attr('transform').split(',')[1]) {
172
+ if (channel.enablePoint && channel.pointColor) {
173
+ const pointStyle = {
174
+ 'stroke-opacity': 1,
175
+ 'stroke-width': '2px',
176
+ 'stroke': channel.pointColor,
177
+ 'fill-opacity': 1,
178
+ 'fill': channel.pointColor
179
+ };
180
+ point.addClass('nv-mark-point');
181
+ point.css(pointStyle);
182
+ previousPoint.addClass('nv-mark-point');
183
+ previousPoint.css(pointStyle);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ }
189
+ else {
190
+ hiddenCount++;
191
+ }
192
+ }
193
+ }
194
+ catch (e) {
195
+ console.log(e);
196
+ }
197
+ }
152
198
  getLineChart(chartWidth, chartHeight, data) {
153
199
  const chart = nv.models.lineChart().showLegend(true)
154
200
  .margin({ top: 0, bottom: 0, left: this.displayOption.marginLeft, right: this.displayOption.marginRight })
@@ -164,6 +210,19 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
164
210
  }
165
211
  this.renderCommonProperty(chart, chartWidth, chartHeight, data);
166
212
  this.renderOperationArea(chartWidth, chartHeight);
213
+ this.initPoint();
214
+ chart.legend.dispatch.on('legendClick', () => {
215
+ setTimeout(() => {
216
+ this.$element.find('.nv-mark-point').css({
217
+ 'stroke-opacity': 0,
218
+ 'stroke-width': 0,
219
+ 'stroke': 'unset',
220
+ 'fill-opacity': 0,
221
+ 'fill': 'unset'
222
+ }).removeClass('nv-mark-point');
223
+ this.initPoint();
224
+ }, 1);
225
+ });
167
226
  return chart;
168
227
  }
169
228
  getMultiBarWithFocusChart(chartWidth, chartHeight, data) {
@@ -207,6 +266,18 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
207
266
  chart.tooltip.headerFormatter(d => this.timeFormat(d, '%x %X'));
208
267
  if (this.model.displaySetting.showAxis) {
209
268
  chart.xAxis.showMaxMin(true).tickFormat(d => {
269
+ this.$element.find('.nv-mark-point').css({
270
+ 'stroke-opacity': 0,
271
+ 'stroke-width': 0,
272
+ 'stroke': 'unset',
273
+ 'fill-opacity': 0,
274
+ 'fill': 'unset'
275
+ }).removeClass('nv-mark-point');
276
+ clearTimeout(this.timer);
277
+ this.timer = undefined;
278
+ this.timer = setTimeout(() => {
279
+ this.initPoint();
280
+ }, 100);
210
281
  if (this.currentTimePeriod === 3 || this.currentTimePeriod === 4 || this.currentTimePeriod === 5) {
211
282
  return this.timeFormat(d, '%y-%m-%d');
212
283
  }
@@ -1 +1 @@
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":63,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":64,"character":18},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":65,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":66,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":67,"character":23},{"__symbolic":"reference","module":"../../config","name":"HistoryDataStore","line":68,"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":65,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":66,"character":18},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":67,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":68,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":69,"character":23},{"__symbolic":"reference","module":"../../config","name":"HistoryDataStore","line":70,"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"}],"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"}]}}}}]
@@ -16,15 +16,16 @@ export declare class VideoElement extends ConditionalDisplayElement {
16
16
  private videoId;
17
17
  private isShow;
18
18
  private videoPlayer;
19
- private resetTimer;
20
19
  private refreshTimer;
21
- private isMobileType;
20
+ private isFullscreen;
21
+ private videoUrl;
22
22
  constructor(element: HTMLElement, injector: Injector, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, videoService: VideoService, guiSize: Size, svgRootClass: string, signalRAppId: string);
23
23
  dispose(): void;
24
24
  hide(): void;
25
25
  show(): void;
26
26
  private init;
27
+ private initVideo;
27
28
  private addVideoAddressToolTip;
28
29
  private setAndroidVideo;
29
- private bindFullscreenEvent;
30
+ private setIosVideo;
30
31
  }
@@ -11,6 +11,7 @@ export class VideoElement extends ConditionalDisplayElement {
11
11
  this.guiSize = guiSize;
12
12
  this.svgRootClass = svgRootClass;
13
13
  this.videoId = '';
14
+ this.isFullscreen = false;
14
15
  this.isMobileMode = DisplayMode.Mobile === injector.get(GlobalSettings).displayMode;
15
16
  this.localization = injector.get(LOCALIZATION);
16
17
  this.init();
@@ -46,60 +47,84 @@ export class VideoElement extends ConditionalDisplayElement {
46
47
  return;
47
48
  }
48
49
  this.videoId = Guid.newGuid().toString('n');
50
+ this.rootElement.append('rect').attr('id', 'rect' + this.videoId).attr('fill', 'transparent')
51
+ .attr('width', this.model.size.width)
52
+ .attr('height', this.model.size.height);
49
53
  this.videoService.getVideoUrl(this.model.videoTag).then(result => {
50
- this.isMobileType = result.isMobileType;
51
- const isAndroid = !!navigator.userAgent.match(/(Android)/i);
52
- let videoUrl = result.url;
53
- const patt = /https:.+.m3u8/;
54
- if (videoUrl.indexOf('http:') !== -1) {
55
- videoUrl = videoUrl.replace('http:', 'https:');
56
- }
57
- if (!patt.test(videoUrl)) {
58
- let videoToolTip = this.localization.invalidVideoAddress;
59
- if (isNil(videoUrl) || videoUrl === '') {
60
- videoToolTip = this.localization.unconfiguredVideoAddress;
61
- }
62
- this.addVideoAddressToolTip(videoToolTip);
63
- return;
54
+ this.videoUrl = result.url;
55
+ this.initVideo(result.url, this.videoId);
56
+ }).catch(() => {
57
+ throw new Error('Failure of the videoService');
58
+ });
59
+ }
60
+ initVideo(videoUrl, videoId) {
61
+ const patt = /https:.+.m3u8/;
62
+ if (videoUrl.indexOf('http:') !== -1) {
63
+ videoUrl = videoUrl.replace('http:', 'https:');
64
+ }
65
+ if (!patt.test(videoUrl)) {
66
+ let videoToolTip = this.localization.invalidVideoAddress;
67
+ if (isNil(videoUrl) || videoUrl === '') {
68
+ videoToolTip = this.localization.unconfiguredVideoAddress;
64
69
  }
65
- const video = this.rootElement.append('foreignObject')
66
- .attr('x', 0)
67
- .attr('y', 0)
68
- .attr('width', this.model.size.width)
69
- .attr('height', this.model.size.height)
70
- .append('xhtml:video')
71
- .attr('id', this.videoId)
72
- .attr('class', 'element-video')
73
- .attr('scareX', this.model.location.x / this.guiSize.width)
74
- .attr('scareY', this.model.location.y / this.guiSize.height)
75
- .attr('src', videoUrl)
76
- .style('width', '100%')
77
- .style('height', '100%')
78
- .style('object-fit', 'fill')
79
- .attr('playsInline', true)
80
- .attr('webkit-playsinline', true)
81
- .attr('controls', true)
82
- .attr('muted', true);
83
- if (this.isMobileMode) {
84
- if (isAndroid) {
85
- video.attr('autoplay', true);
86
- }
70
+ this.addVideoAddressToolTip(videoToolTip);
71
+ return;
72
+ }
73
+ const isAndroid = !!navigator.userAgent.match(/(Android)/i);
74
+ const isIos = !!navigator.userAgent.match(/(Mac)/i);
75
+ const currentRect = this.$element.find('rect#rect' + videoId).first();
76
+ if (!currentRect.length) {
77
+ return;
78
+ }
79
+ const clientRect = currentRect[0].getBoundingClientRect();
80
+ const chartWidth = clientRect.width;
81
+ const chartHeight = clientRect.height;
82
+ const left = this.model.location.x / this.guiSize.width * $('.' + this.svgRootClass).find('.svg-content').width();
83
+ const top = this.model.location.y / this.guiSize.height * $('.' + this.svgRootClass).find('.svg-content').height();
84
+ const scareX = this.model.location.x / this.guiSize.width;
85
+ const scareY = this.model.location.y / this.guiSize.height;
86
+ if (isIos) {
87
+ videoUrl = videoUrl + '#t=1';
88
+ }
89
+ const preload = isIos ? ' preload=\'metadata\'' : '';
90
+ let videoHtml = `<video scareX="${scareX}"
91
+ scareY="${scareY}" id="${videoId}" ${preload} src="${videoUrl}" width="${chartWidth}" height="${chartHeight}"
92
+ style="position: absolute;top:${top}px;left:${left}px;object-fit:fill;z-index:0;"
93
+ playsInline webkit-playsinline `;
94
+ if (this.isMobileMode) {
95
+ if (isAndroid) {
96
+ videoHtml += ' autoplay muted></video>';
87
97
  }
88
98
  else {
89
- video.attr('autoplay', true);
90
- }
91
- if (this.isShow === false) {
92
- $('#' + this.videoId).hide();
99
+ videoHtml += ' controls muted></video>';
93
100
  }
94
- this.videoPlayer = new EZUIPlayer(this.videoId);
101
+ }
102
+ else {
103
+ videoHtml += ' controls autoplay muted></video>';
104
+ }
105
+ $('.' + this.svgRootClass).find('.svg-content').append(videoHtml);
106
+ if (this.isShow === false) {
107
+ $('#' + this.videoId).hide();
108
+ }
109
+ setTimeout(() => {
95
110
  if (isAndroid) {
96
- setTimeout(() => {
97
- this.setAndroidVideo();
98
- }, 500);
111
+ this.setAndroidVideo(videoId);
99
112
  }
100
- }).catch(() => {
101
- throw new Error('Failure of the videoService');
102
- });
113
+ else if (isIos) {
114
+ this.setIosVideo(this.videoUrl, videoId);
115
+ }
116
+ try {
117
+ this.videoPlayer = new EZUIPlayer(videoId);
118
+ }
119
+ catch (err) {
120
+ console.log(err);
121
+ }
122
+ }, 1000);
123
+ const style = document.createElement('style');
124
+ style.innerHTML = `#${videoId}::-webkit-media-controls-enclosure {
125
+ display: none;
126
+ }`;
127
+ document.head.append();
103
128
  }
104
129
  addVideoAddressToolTip(videoToolTip) {
105
130
  const size = this.model.size;
@@ -121,51 +146,69 @@ export class VideoElement extends ConditionalDisplayElement {
121
146
  const textElement = new TextElementModal(videoToolTip, font, size.width, size.height);
122
147
  this.$element.append(textElement.Element);
123
148
  }
124
- setAndroidVideo() {
125
- const { StatusBar } = window;
126
- this.bindFullscreenEvent();
127
- window.addEventListener('orientationchange', () => {
128
- StatusBar.show();
129
- this.hide();
130
- clearTimeout(this.refreshTimer);
131
- this.refreshTimer = null;
132
- this.refreshTimer = setTimeout(() => {
133
- this.init();
134
- this.show();
135
- }, 1000);
136
- });
137
- }
138
- bindFullscreenEvent() {
139
- const that = this;
149
+ setAndroidVideo(videoId) {
150
+ const videoElement = $('#' + videoId);
151
+ let preHeight = videoElement.height();
152
+ let preWidth = videoElement.width();
153
+ let preTop = videoElement.css('top');
154
+ let preLeft = videoElement.css('left');
140
155
  const { StatusBar } = window;
141
- $('#' + this.videoId).bind('webkitfullscreenchange', () => {
142
- if (document.webkitIsFullScreen) {
143
- $('#' + that.videoId).css({
144
- 'object-fit': 'contain',
145
- 'z-index': 99
146
- });
147
- StatusBar.hide();
156
+ videoElement.on('click', () => {
157
+ if (!this.isFullscreen) {
158
+ if (StatusBar) {
159
+ StatusBar.hide();
160
+ }
161
+ preHeight = videoElement.height();
162
+ preWidth = videoElement.width();
163
+ preTop = videoElement.css('top');
164
+ preLeft = videoElement.css('left');
165
+ const width = document.documentElement.clientWidth;
166
+ const height = document.documentElement.clientHeight;
167
+ videoElement.css('object-fit', 'contain');
168
+ videoElement.css('background', '#000000');
169
+ videoElement.css('width', width + 'px');
170
+ videoElement.css('height', height + 'px');
171
+ videoElement.css('left', '0px');
172
+ videoElement.css('top', '0px');
173
+ videoElement.css('z-index', '99');
174
+ videoElement.css('position', 'fixed');
175
+ this.isFullscreen = true;
176
+ try {
177
+ screen.orientation.lock(screen.orientation.type);
178
+ }
179
+ catch (error) {
180
+ console.error(error);
181
+ }
148
182
  }
149
183
  else {
150
- StatusBar.show();
151
- if (that.isMobileType) {
152
- $('#' + this.videoId).css('object-fit', document.webkitIsFullScreen ? 'contain' : 'fill');
184
+ videoElement.css('object-fit', 'fill');
185
+ videoElement.css('width', preWidth + 'px');
186
+ videoElement.css('height', preHeight + 'px');
187
+ videoElement.css('left', preLeft);
188
+ videoElement.css('top', preTop);
189
+ videoElement.css('z-index', '0');
190
+ videoElement.css('position', 'absolute');
191
+ this.isFullscreen = false;
192
+ try {
193
+ if (screen.orientation.type.includes('portrait')) {
194
+ StatusBar.show();
195
+ }
153
196
  }
154
- else {
155
- clearTimeout(this.resetTimer);
156
- this.resetTimer = null;
157
- $('#' + this.videoId).css('display', 'none');
158
- this.resetTimer = setTimeout(() => {
159
- $('#' + this.videoId).css({
160
- 'width': '100%',
161
- 'height': '100%',
162
- 'display': 'block',
163
- 'z-index': 0,
164
- 'object-fit': document.webkitIsFullScreen ? 'contain' : 'fill'
165
- });
166
- }, 1000);
197
+ catch (error) {
198
+ console.error(error);
167
199
  }
168
200
  }
169
201
  });
170
202
  }
203
+ setIosVideo(videoUrl, videoId) {
204
+ const video = $('#' + this.videoId);
205
+ video.on('webkitendfullscreen', () => {
206
+ video.remove();
207
+ clearTimeout(this.refreshTimer);
208
+ this.refreshTimer = null;
209
+ this.refreshTimer = setTimeout(() => {
210
+ this.initVideo(videoUrl, videoId);
211
+ }, 500);
212
+ });
213
+ }
171
214
  }
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"VideoElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-display-element","name":"ConditionalDisplayElement","line":15,"character":34},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":27,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":28,"character":18},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":29,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":30,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":31,"character":23},{"__symbolic":"reference","module":"../../service","name":"VideoService","line":32,"character":39},{"__symbolic":"reference","module":"../../model","name":"Size","line":33,"character":34},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"string"}]}],"dispose":[{"__symbolic":"method"}],"hide":[{"__symbolic":"method"}],"show":[{"__symbolic":"method"}],"init":[{"__symbolic":"method"}],"addVideoAddressToolTip":[{"__symbolic":"method"}],"setAndroidVideo":[{"__symbolic":"method"}],"bindFullscreenEvent":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"VideoElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-display-element","name":"ConditionalDisplayElement","line":15,"character":34},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":27,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":28,"character":18},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":29,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":30,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":31,"character":23},{"__symbolic":"reference","module":"../../service","name":"VideoService","line":32,"character":39},{"__symbolic":"reference","module":"../../model","name":"Size","line":33,"character":34},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"string"}]}],"dispose":[{"__symbolic":"method"}],"hide":[{"__symbolic":"method"}],"show":[{"__symbolic":"method"}],"init":[{"__symbolic":"method"}],"initVideo":[{"__symbolic":"method"}],"addVideoAddressToolTip":[{"__symbolic":"method"}],"setAndroidVideo":[{"__symbolic":"method"}],"setIosVideo":[{"__symbolic":"method"}]}}}}]
@@ -170,6 +170,9 @@ export class ViewOperationElement extends ConditionalEnableElement {
170
170
  const viewIndex = this.model.viewIndex;
171
171
  if (null != viewIndex) {
172
172
  this.popupViewService.popView(viewIndex, this.hostContainerId, this.el).subscribe(() => this.recordViewOperation(), error => this.logger.error(`ToggleView(${viewIndex}) failed. ${error}`));
173
+ $(`#${this.hostContainerId} video`)
174
+ .addClass('video-hidden')
175
+ .css('visibility', 'hidden');
173
176
  }
174
177
  else {
175
178
  this.logger.error('[GUI]Toggle View:invalid view index');
@@ -177,6 +180,11 @@ export class ViewOperationElement extends ConditionalEnableElement {
177
180
  }
178
181
  closeView() {
179
182
  this.popupViewService.closeView();
183
+ if ($(`#${this.hostContainerId} > svg > svg`).length === 0) {
184
+ $(`#${this.hostContainerId} .video-hidden`)
185
+ .removeClass('video-hidden')
186
+ .css('visibility', 'visible');
187
+ }
180
188
  this.recordViewOperation();
181
189
  }
182
190
  moveView(movementX, movementY) {
@@ -110,13 +110,24 @@ let WriteValueModalComponent = class WriteValueModalComponent {
110
110
  value = this.formatWriteValue();
111
111
  }
112
112
  }
113
+ if (!this.args.releasedVariableService) {
114
+ this.onClosed({
115
+ value: value,
116
+ showValue: showValue,
117
+ enableNumericalOperation: false,
118
+ isNumericalOperation: this.isNumericalOperation,
119
+ variableRwType: 6
120
+ });
121
+ return;
122
+ }
113
123
  this.args.releasedVariableService.getVariableWithValueTransform(this.variableName).subscribe(result => {
114
124
  const valueTransform = JSON.parse(result.valueTransform);
115
125
  if ((valueTransform === null || valueTransform === void 0 ? void 0 : valueTransform.Type) !== 0) {
116
126
  this.isNumericalOperation = true;
117
127
  }
118
128
  this.onClosed({
119
- value, showValue,
129
+ value: value,
130
+ showValue: showValue,
120
131
  enableNumericalOperation: this.enableNumericalOperation,
121
132
  isNumericalOperation: this.isNumericalOperation,
122
133
  variableRwType: result.variableRwType
@@ -7,6 +7,14 @@ export interface HistroicalCurveChannelModel {
7
7
  * 连接线颜色
8
8
  */
9
9
  readonly connectorColor: string;
10
+ /**
11
+ * 启用标记点
12
+ */
13
+ readonly enablePoint: boolean;
14
+ /**
15
+ * 标记点颜色
16
+ */
17
+ readonly pointColor: string;
10
18
  /**
11
19
  * 是否投影颜色
12
20
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "main": "bundles/fc-gui.umd.js",
3
- "version": "3.0.0-alpha.96",
3
+ "version": "3.0.0-alpha.98",
4
4
  "module": "public_api.js",
5
5
  "typings": "public_api.d.ts",
6
6
  "license": "UNLICENSED",