@flexem/fc-gui 3.0.0-alpha.180 → 3.0.0-alpha.182

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 (52) hide show
  1. package/bundles/@flexem/fc-gui.umd.js +727 -293
  2. package/bundles/@flexem/fc-gui.umd.js.map +1 -1
  3. package/bundles/@flexem/fc-gui.umd.min.js +4 -4
  4. package/bundles/@flexem/fc-gui.umd.min.js.map +1 -1
  5. package/config/variable/variable-store.d.ts +4 -0
  6. package/elements/alarm/alarm-element.d.ts +20 -0
  7. package/elements/alarm/alarm-element.js +312 -70
  8. package/elements/alarm/alarm-element.metadata.json +1 -1
  9. package/elements/base/state-control-element.d.ts +10 -0
  10. package/elements/base/state-control-element.js +21 -3
  11. package/elements/base/state-control-element.metadata.json +1 -1
  12. package/elements/character-display/character-display-element.d.ts +12 -2
  13. package/elements/character-display/character-display-element.js +30 -3
  14. package/elements/character-display/character-display-element.metadata.json +1 -1
  15. package/elements/historical-curve/historical-curve.element.d.ts +1 -0
  16. package/elements/historical-curve/historical-curve.element.js +35 -22
  17. package/elements/historical-curve/historical-curve.element.metadata.json +1 -1
  18. package/elements/main-element.js +3 -2
  19. package/elements/numerical-display/numerical-display-element.d.ts +9 -0
  20. package/elements/numerical-display/numerical-display-element.js +19 -1
  21. package/elements/numerical-display/numerical-display-element.metadata.json +1 -1
  22. package/elements/switch-indicator-light/switch-indicator-light-element.d.ts +9 -0
  23. package/elements/switch-indicator-light/switch-indicator-light-element.js +20 -1
  24. package/elements/switch-indicator-light/switch-indicator-light-element.metadata.json +1 -1
  25. package/elements/view-operation/view-operation.element.js +7 -2
  26. package/gui/gui-view.d.ts +15 -1
  27. package/gui/gui-view.js +78 -4
  28. package/gui/gui-view.metadata.json +1 -1
  29. package/modal/verify-password/verify-password-modal.component.d.ts +6 -2
  30. package/modal/verify-password/verify-password-modal.component.html +2 -2
  31. package/modal/verify-password/verify-password-modal.component.js +11 -5
  32. package/modal/verify-password/verify-password-modal.component.less +9 -0
  33. package/modal/verify-password/verify-password-modal.component.metadata.json +1 -1
  34. package/modal/write-character/write-character-modal-args.d.ts +3 -1
  35. package/modal/write-character/write-character-modal-args.js +2 -1
  36. package/modal/write-character/write-character-modal-args.metadata.json +1 -1
  37. package/modal/write-character/write-character-modal.component.d.ts +1 -0
  38. package/modal/write-character/write-character-modal.component.js +5 -1
  39. package/modal/write-character/write-character-modal.component.metadata.json +1 -1
  40. package/modal/write-value/write-value-modal.component.d.ts +1 -0
  41. package/modal/write-value/write-value-modal.component.js +5 -1
  42. package/modal/write-value/write-value-modal.component.metadata.json +1 -1
  43. package/model/alarm/alarm.model.d.ts +1 -0
  44. package/model/character-display/character-display.d.ts +1 -0
  45. package/model/historical-curve/historical-curve.display-settings.d.ts +1 -0
  46. package/model/numerical-display/numerical-display.d.ts +1 -0
  47. package/model/settings/popup/view-popup-location-type.d.ts +2 -1
  48. package/model/settings/popup/view-popup-location-type.js +1 -0
  49. package/model/settings/popup/view-popup-location-type.metadata.json +1 -1
  50. package/model/switch-indicator-light/switch-indicator-light.d.ts +1 -0
  51. package/package.json +1 -1
  52. package/view/popup-view.service.d.ts +1 -1
package/gui/gui-view.js CHANGED
@@ -141,7 +141,7 @@ export class GuiView {
141
141
  }
142
142
  });
143
143
  }
144
- popView(viewIndex, hostContainerId, el) {
144
+ popView(viewIndex, hostContainerId, el, triggerRect) {
145
145
  return this.context.configStore.viewStore.getViewConfig(viewIndex).pipe(map(view => {
146
146
  if (!view.config || !view.config.length) {
147
147
  throw new ConfigIsEmptyError();
@@ -162,6 +162,10 @@ export class GuiView {
162
162
  x = settings.popup.location.x;
163
163
  y = settings.popup.location.y;
164
164
  }
165
+ else if (settings.popup.locationType === ViewPopupLocationType.NearButton && triggerRect) {
166
+ const hasShadow = settings.popup.backdropType === ViewPopupBackdropType.Shadow && !this.isMobileMode;
167
+ ({ x, y } = this.getNearButtonPosition(popView, triggerRect, hasShadow));
168
+ }
165
169
  else {
166
170
  x = (this.rawWidth - popView.rawWidth) / 2;
167
171
  y = (this.rawHeight - popView.rawHeight) / 2;
@@ -181,6 +185,73 @@ export class GuiView {
181
185
  this.element.appendChild(popView.element);
182
186
  }));
183
187
  }
188
+ /**
189
+ * 把屏幕像素矩形(如按钮的 getBoundingClientRect)换算为当前画面 SVG 坐标系下的矩形。
190
+ * 用 getScreenCTM 而不是简单的宽高比换算,因为画面容器宽高比与 rawWidth/rawHeight 不一致时
191
+ * SVG 会按 preserveAspectRatio 留白(letterbox),线性比例换算会有偏差。
192
+ */
193
+ toLocalRect(rect) {
194
+ const svgRoot = this.element;
195
+ const ctm = svgRoot.getScreenCTM && svgRoot.getScreenCTM();
196
+ if (ctm) {
197
+ const inverse = ctm.inverse();
198
+ const toLocal = (clientX, clientY) => {
199
+ const pt = svgRoot.createSVGPoint();
200
+ pt.x = clientX;
201
+ pt.y = clientY;
202
+ return pt.matrixTransform(inverse);
203
+ };
204
+ const topLeft = toLocal(rect.left, rect.top);
205
+ const bottomRight = toLocal(rect.right, rect.bottom);
206
+ return {
207
+ x: topLeft.x,
208
+ y: topLeft.y,
209
+ width: bottomRight.x - topLeft.x,
210
+ height: bottomRight.y - topLeft.y
211
+ };
212
+ }
213
+ const viewRect = this.element.getBoundingClientRect();
214
+ const scaleX = viewRect.width ? this.rawWidth / viewRect.width : 1;
215
+ const scaleY = viewRect.height ? this.rawHeight / viewRect.height : 1;
216
+ return {
217
+ x: (rect.left - viewRect.left) * scaleX,
218
+ y: (rect.top - viewRect.top) * scaleY,
219
+ width: rect.width * scaleX,
220
+ height: rect.height * scaleY
221
+ };
222
+ }
223
+ /**
224
+ * 按钮附近:按钮与弹出画面之间留缝隙,两侧都放得下时默认放右侧,放不下时放在放得下的一侧;
225
+ * 竖直方向默认与按钮顶部对齐,下方放不下时改为与按钮底部对齐;
226
+ * 左右两侧都放不下(弹窗比画面还宽)时直接退化为画面居中,不再跟随按钮
227
+ */
228
+ getNearButtonPosition(popView, triggerRect, hasShadow) {
229
+ const gap = 20;
230
+ const { x: buttonX, y: buttonY, width: buttonWidth, height: buttonHeight } = this.toLocalRect(triggerRect);
231
+ const rightX = buttonX + buttonWidth + gap;
232
+ const leftX = buttonX - gap - popView.rawWidth;
233
+ const fitsRight = rightX + popView.rawWidth <= this.rawWidth;
234
+ const fitsLeft = leftX >= 0;
235
+ let x;
236
+ let y;
237
+ if (!fitsRight && !fitsLeft) {
238
+ x = (this.rawWidth - popView.rawWidth) / 2;
239
+ y = (this.rawHeight - popView.rawHeight) / 2;
240
+ }
241
+ else {
242
+ x = fitsRight ? rightX : leftX;
243
+ const fitsBelow = buttonY + popView.rawHeight <= this.rawHeight;
244
+ y = fitsBelow ? buttonY : buttonY + buttonHeight - popView.rawHeight;
245
+ if (hasShadow) {
246
+ // 阴影会把可见内容整体右下偏移 SHADOW_INSET,这里反向补偏移让可见内容而不是容器本身对齐按钮
247
+ x -= GuiView.SHADOW_INSET;
248
+ y -= GuiView.SHADOW_INSET;
249
+ }
250
+ }
251
+ x = Math.max(0, Math.min(x, this.rawWidth - popView.rawWidth));
252
+ y = Math.max(0, Math.min(y, this.rawHeight - popView.rawHeight));
253
+ return { x, y };
254
+ }
184
255
  closeView() {
185
256
  if (!this.parentView) {
186
257
  return;
@@ -218,10 +289,11 @@ export class GuiView {
218
289
  if (!container) {
219
290
  return;
220
291
  }
292
+ const inset = GuiView.SHADOW_INSET;
221
293
  container.setAttribute('filter', `url(#${filterId})`);
222
- container.setAttribute('x', '6');
223
- container.setAttribute('y', '6');
224
- $(this.element).children('g').attr('transform', 'matrix(1, 0, 0, 1, 6, 6)');
294
+ container.setAttribute('x', String(inset));
295
+ container.setAttribute('y', String(inset));
296
+ $(this.element).children('g').attr('transform', `matrix(1, 0, 0, 1, ${inset}, ${inset})`);
225
297
  }
226
298
  hideMusk() {
227
299
  if (this.muskElement) {
@@ -263,3 +335,5 @@ export class GuiView {
263
335
  }
264
336
  }
265
337
  }
338
+ /** showShadow() 给阴影留白,内容整体右下偏移的量,"按钮附近"定位需要据此修正才能让可见内容与按钮对齐 */
339
+ GuiView.SHADOW_INSET = 5;
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"GuiView":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":51,"character":43},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":52,"character":41},{"__symbolic":"reference","module":"./gui-context","name":"GuiContext","line":53,"character":34},{"__symbolic":"reference","name":"GuiView"}]}],"resize":[{"__symbolic":"method"}],"load":[{"__symbolic":"method"}],"loadElementState":[{"__symbolic":"method"}],"popView":[{"__symbolic":"method"}],"closeView":[{"__symbolic":"method"}],"moveView":[{"__symbolic":"method"}],"showMusk":[{"__symbolic":"method"}],"showShadow":[{"__symbolic":"method"}],"hideMusk":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"normalOpenedVariableNames":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"GuiView":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":54,"character":43},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":55,"character":41},{"__symbolic":"reference","module":"./gui-context","name":"GuiContext","line":56,"character":34},{"__symbolic":"reference","name":"GuiView"}]}],"resize":[{"__symbolic":"method"}],"load":[{"__symbolic":"method"}],"loadElementState":[{"__symbolic":"method"}],"popView":[{"__symbolic":"method"}],"toLocalRect":[{"__symbolic":"method"}],"getNearButtonPosition":[{"__symbolic":"method"}],"closeView":[{"__symbolic":"method"}],"moveView":[{"__symbolic":"method"}],"showMusk":[{"__symbolic":"method"}],"showShadow":[{"__symbolic":"method"}],"hideMusk":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"normalOpenedVariableNames":[{"__symbolic":"method"}]},"statics":{"SHADOW_INSET":5}}}}]
@@ -1,7 +1,8 @@
1
- import { OnInit } from '@angular/core';
1
+ import { Injector, OnInit } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
3
  import { Localization } from '../../localization';
4
4
  import { SecurityChecker } from '../../security';
5
+ import { ReleasedVariableService } from '../../service';
5
6
  export declare class VerifyPasswordModalComponent implements OnInit {
6
7
  localization: Localization;
7
8
  private _onClosed;
@@ -9,8 +10,11 @@ export declare class VerifyPasswordModalComponent implements OnInit {
9
10
  passwordError: boolean;
10
11
  password: string;
11
12
  securityChecker: SecurityChecker;
13
+ releasedVariableService?: ReleasedVariableService;
12
14
  validationErrorText: string;
13
- constructor(localization: Localization);
15
+ isMobileMode: boolean;
16
+ private readonly isDisplayModeMobile;
17
+ constructor(localization: Localization, injector: Injector);
14
18
  ngOnInit(): void;
15
19
  validate(): void;
16
20
  checkSecurity(): void;
@@ -10,11 +10,11 @@
10
10
  <div class="modal-body">
11
11
  <span class="password-span">{{localization.password}}:
12
12
  </span>
13
- <input type="password" name="password" autoFocus class="form-control element-password" [(ngModel)]="password" (keyup)="validate()"
13
+ <input type="password" name="password" autoFocus [class.verify-password-input]="!isMobileMode" class="form-control element-password" [(ngModel)]="password" (keyup)="validate()"
14
14
  autocomplete="off">
15
15
  <span class="help-block text-danger" [hidden]="!passwordError">{{validationErrorText}}</span>
16
16
  </div>
17
- <div class="modal-footer">
17
+ <div class="modal-footer" [class.verify-password-footer]="!isMobileMode">
18
18
  <button type="button" class="btn md-skip btn-cancel" (click)="close()">{{localization.cancel}}
19
19
  </button>
20
20
  <button type="submit" class="btn md-skip btn-primary" [disabled]="passwordError">{{localization.submit}}</button>
@@ -10,20 +10,26 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  var __param = (this && this.__param) || function (paramIndex, decorator) {
11
11
  return function (target, key) { decorator(target, key, paramIndex); }
12
12
  };
13
- import { Component, Inject } from '@angular/core';
13
+ import { Component, Inject, Injector } from '@angular/core';
14
14
  import { Subject } from 'rxjs';
15
15
  import { isNil } from 'lodash';
16
16
  import { LOCALIZATION } from '../../localization';
17
+ import { DisplayMode, GlobalSettings } from '../../settings';
17
18
  let VerifyPasswordModalComponent = class VerifyPasswordModalComponent {
18
- constructor(localization) {
19
+ constructor(localization, injector) {
19
20
  this.localization = localization;
20
21
  this._onClosed = new Subject();
21
22
  this.passwordError = false;
23
+ this.isMobileMode = false;
24
+ this.isDisplayModeMobile = DisplayMode.Mobile === injector.get(GlobalSettings).displayMode;
22
25
  }
23
26
  get onClosed() {
24
27
  return this._onClosed;
25
28
  }
26
29
  ngOnInit() {
30
+ // 画面模拟(SimulateRemoteGuiContext)下 releasedVariableService 恒为空,
31
+ // 借此和真实移动端区分开,避免在 PC 浏览器模拟移动端时套用移动端专属样式
32
+ this.isMobileMode = this.isDisplayModeMobile && !!this.releasedVariableService;
27
33
  this.validate();
28
34
  }
29
35
  validate() {
@@ -57,10 +63,10 @@ let VerifyPasswordModalComponent = class VerifyPasswordModalComponent {
57
63
  VerifyPasswordModalComponent = __decorate([
58
64
  Component({
59
65
  selector: 'verify-password',
60
- template: "<form #verifyPasswordForm=\"ngForm\" novalidate (ngSubmit)=\"checkSecurity()\" bs-modal-drag> <div class=\"modal-header\"> <h4 class=\"modal-title\"> <span>{{localization.passwordVerify}}</span> </h4> <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"close()\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <span class=\"password-span\">{{localization.password}}: </span> <input type=\"password\" name=\"password\" autoFocus class=\"form-control element-password\" [(ngModel)]=\"password\" (keyup)=\"validate()\" autocomplete=\"off\"> <span class=\"help-block text-danger\" [hidden]=\"!passwordError\">{{validationErrorText}}</span> </div> <div class=\"modal-footer\"> <button type=\"button\" class=\"btn md-skip btn-cancel\" (click)=\"close()\">{{localization.cancel}} </button> <button type=\"submit\" class=\"btn md-skip btn-primary\" [disabled]=\"passwordError\">{{localization.submit}}</button> </div> </form> ",
61
- styles: [".modal-header { padding: 10px; border-color: transparent; } .modal-body { position: relative; padding: 0px 5px !important; padding-top: 10px !important; } .modal-title { display: unset; margin-left: -6px; font-size: 16px !important; } .form-control { margin: 0 5%; float: none; width: 90%; } .modal-footer { padding: 10px 4px 20px 5px !important; text-align: right; border-color: transparent; color: #fff; } .text-danger { display: block; color: #ed6b75; font-size: 14px; margin: 5px 0px 0px 15px; } .btn-primary { color: #fff; height: 32px; margin-right: 10px; line-height: 0px } .password-span { color: #7f939e; font-size: 14px; margin-left: 15px; } .btn-cancel { color: #fff; height: 32px; min-width: 71px; margin-right: 6px; background-color: #dddddd; line-height: 0px } .element-password { padding-left: 8px; height: 32px; min-width: 71px; margin-left: 16px; } "]
66
+ template: "<form #verifyPasswordForm=\"ngForm\" novalidate (ngSubmit)=\"checkSecurity()\" bs-modal-drag> <div class=\"modal-header\"> <h4 class=\"modal-title\"> <span>{{localization.passwordVerify}}</span> </h4> <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"close()\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <span class=\"password-span\">{{localization.password}}: </span> <input type=\"password\" name=\"password\" autoFocus [class.verify-password-input]=\"!isMobileMode\" class=\"form-control element-password\" [(ngModel)]=\"password\" (keyup)=\"validate()\" autocomplete=\"off\"> <span class=\"help-block text-danger\" [hidden]=\"!passwordError\">{{validationErrorText}}</span> </div> <div class=\"modal-footer\" [class.verify-password-footer]=\"!isMobileMode\"> <button type=\"button\" class=\"btn md-skip btn-cancel\" (click)=\"close()\">{{localization.cancel}} </button> <button type=\"submit\" class=\"btn md-skip btn-primary\" [disabled]=\"passwordError\">{{localization.submit}}</button> </div> </form> ",
67
+ styles: [".modal-header { padding: 10px; border-color: transparent; } .modal-body { position: relative; padding: 0px 5px !important; padding-top: 10px !important; } .modal-title { display: unset; margin-left: -6px; font-size: 16px !important; } .form-control { margin: 0 5%; float: none; width: 90%; } .modal-footer { padding: 10px 4px 20px 5px !important; text-align: right; border-color: transparent; color: #fff; } .text-danger { display: block; color: #ed6b75; font-size: 14px; margin: 5px 0px 0px 15px; } .btn-primary { color: #fff; height: 32px; min-width: 71px; margin-right: 10px; line-height: 0px } .password-span { color: #7f939e; font-size: 14px; margin-left: 15px; } .btn-cancel { color: #fff; height: 32px; min-width: 71px; margin-right: 6px; background-color: #dddddd; line-height: 0px } .element-password { padding-left: 8px; height: 32px; min-width: 71px; margin-left: 16px; } .verify-password-input { width: 600px; } .verify-password-footer { padding-right: 18px !important; }"]
62
68
  }),
63
69
  __param(0, Inject(LOCALIZATION)),
64
- __metadata("design:paramtypes", [Object])
70
+ __metadata("design:paramtypes", [Object, Injector])
65
71
  ], VerifyPasswordModalComponent);
66
72
  export { VerifyPasswordModalComponent };
@@ -38,6 +38,7 @@
38
38
  .btn-primary {
39
39
  color: #fff;
40
40
  height: 32px;
41
+ min-width: 71px;
41
42
  margin-right: 10px;
42
43
  line-height: 0px
43
44
  }
@@ -63,3 +64,11 @@
63
64
  min-width: 71px;
64
65
  margin-left: 16px;
65
66
  }
67
+
68
+ .verify-password-input {
69
+ width: 600px;
70
+ }
71
+
72
+ .verify-password-footer {
73
+ padding-right: 18px !important;
74
+ }
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"VerifyPasswordModalComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":7,"character":1},"arguments":[{"selector":"verify-password","template":"<form #verifyPasswordForm=\"ngForm\" novalidate (ngSubmit)=\"checkSecurity()\" bs-modal-drag> <div class=\"modal-header\"> <h4 class=\"modal-title\"> <span>{{localization.passwordVerify}}</span> </h4> <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"close()\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <span class=\"password-span\">{{localization.password}}: </span> <input type=\"password\" name=\"password\" autoFocus class=\"form-control element-password\" [(ngModel)]=\"password\" (keyup)=\"validate()\" autocomplete=\"off\"> <span class=\"help-block text-danger\" [hidden]=\"!passwordError\">{{validationErrorText}}</span> </div> <div class=\"modal-footer\"> <button type=\"button\" class=\"btn md-skip btn-cancel\" (click)=\"close()\">{{localization.cancel}} </button> <button type=\"submit\" class=\"btn md-skip btn-primary\" [disabled]=\"passwordError\">{{localization.submit}}</button> </div> </form> ","styles":[".modal-header { padding: 10px; border-color: transparent; } .modal-body { position: relative; padding: 0px 5px !important; padding-top: 10px !important; } .modal-title { display: unset; margin-left: -6px; font-size: 16px !important; } .form-control { margin: 0 5%; float: none; width: 90%; } .modal-footer { padding: 10px 4px 20px 5px !important; text-align: right; border-color: transparent; color: #fff; } .text-danger { display: block; color: #ed6b75; font-size: 14px; margin: 5px 0px 0px 15px; } .btn-primary { color: #fff; height: 32px; margin-right: 10px; line-height: 0px } .password-span { color: #7f939e; font-size: 14px; margin-left: 15px; } .btn-cancel { color: #fff; height: 32px; min-width: 71px; margin-right: 6px; background-color: #dddddd; line-height: 0px } .element-password { padding-left: 8px; height: 32px; min-width: 71px; margin-left: 16px; } "]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":24,"character":17},"arguments":[{"__symbolic":"reference","module":"../../localization","name":"LOCALIZATION","line":24,"character":24}]}]],"parameters":[{"__symbolic":"reference","module":"../../localization","name":"Localization","line":24,"character":59}]}],"ngOnInit":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"checkSecurity":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"VerifyPasswordModalComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":9,"character":1},"arguments":[{"selector":"verify-password","template":"<form #verifyPasswordForm=\"ngForm\" novalidate (ngSubmit)=\"checkSecurity()\" bs-modal-drag> <div class=\"modal-header\"> <h4 class=\"modal-title\"> <span>{{localization.passwordVerify}}</span> </h4> <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"close()\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <span class=\"password-span\">{{localization.password}}: </span> <input type=\"password\" name=\"password\" autoFocus [class.verify-password-input]=\"!isMobileMode\" class=\"form-control element-password\" [(ngModel)]=\"password\" (keyup)=\"validate()\" autocomplete=\"off\"> <span class=\"help-block text-danger\" [hidden]=\"!passwordError\">{{validationErrorText}}</span> </div> <div class=\"modal-footer\" [class.verify-password-footer]=\"!isMobileMode\"> <button type=\"button\" class=\"btn md-skip btn-cancel\" (click)=\"close()\">{{localization.cancel}} </button> <button type=\"submit\" class=\"btn md-skip btn-primary\" [disabled]=\"passwordError\">{{localization.submit}}</button> </div> </form> ","styles":[".modal-header { padding: 10px; border-color: transparent; } .modal-body { position: relative; padding: 0px 5px !important; padding-top: 10px !important; } .modal-title { display: unset; margin-left: -6px; font-size: 16px !important; } .form-control { margin: 0 5%; float: none; width: 90%; } .modal-footer { padding: 10px 4px 20px 5px !important; text-align: right; border-color: transparent; color: #fff; } .text-danger { display: block; color: #ed6b75; font-size: 14px; margin: 5px 0px 0px 15px; } .btn-primary { color: #fff; height: 32px; min-width: 71px; margin-right: 10px; line-height: 0px } .password-span { color: #7f939e; font-size: 14px; margin-left: 15px; } .btn-cancel { color: #fff; height: 32px; min-width: 71px; margin-right: 6px; background-color: #dddddd; line-height: 0px } .element-password { padding-left: 8px; height: 32px; min-width: 71px; margin-left: 16px; } .verify-password-input { width: 600px; } .verify-password-footer { padding-right: 18px !important; }"]}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":29,"character":17},"arguments":[{"__symbolic":"reference","module":"../../localization","name":"LOCALIZATION","line":29,"character":24}]}],null],"parameters":[{"__symbolic":"reference","module":"../../localization","name":"Localization","line":29,"character":59},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":29,"character":83}]}],"ngOnInit":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"checkSecurity":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}]}}}}]
@@ -1,7 +1,9 @@
1
+ import { ReleasedVariableService } from '../../service';
1
2
  export declare class WriteCharacterModalArgs {
2
3
  variableName: string;
3
4
  isPassword: boolean;
4
5
  charCount: number;
5
6
  originValue: any;
6
- constructor(variableName: string, isPassword: boolean, charCount: number, originValue: any);
7
+ releasedVariableService?: ReleasedVariableService;
8
+ constructor(variableName: string, isPassword: boolean, charCount: number, originValue: any, releasedVariableService?: ReleasedVariableService);
7
9
  }
@@ -1,8 +1,9 @@
1
1
  export class WriteCharacterModalArgs {
2
- constructor(variableName, isPassword, charCount, originValue) {
2
+ constructor(variableName, isPassword, charCount, originValue, releasedVariableService) {
3
3
  this.variableName = variableName;
4
4
  this.isPassword = isPassword;
5
5
  this.charCount = charCount;
6
6
  this.originValue = originValue;
7
+ this.releasedVariableService = releasedVariableService;
7
8
  }
8
9
  }
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"WriteCharacterModalArgs":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"any"}]}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"WriteCharacterModalArgs":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"../../service","name":"ReleasedVariableService","line":8,"character":41}]}]}}}}]
@@ -9,6 +9,7 @@ export declare class WriteCharacterModalComponent implements OnInit {
9
9
  get onClosed(): Observable<WriteValueModelResult>;
10
10
  args: WriteCharacterModalArgs;
11
11
  isMobileMode: boolean;
12
+ private readonly isDisplayModeMobile;
12
13
  value: string;
13
14
  variableName: string;
14
15
  isPassword: boolean;
@@ -18,7 +18,8 @@ let WriteCharacterModalComponent = class WriteCharacterModalComponent {
18
18
  constructor(localization, injector) {
19
19
  this.localization = localization;
20
20
  this._onClosed = new Subject();
21
- this.isMobileMode = DisplayMode.Mobile === injector.get(GlobalSettings).displayMode;
21
+ this.isMobileMode = false;
22
+ this.isDisplayModeMobile = DisplayMode.Mobile === injector.get(GlobalSettings).displayMode;
22
23
  }
23
24
  get onClosed() {
24
25
  return this._onClosed;
@@ -27,6 +28,9 @@ let WriteCharacterModalComponent = class WriteCharacterModalComponent {
27
28
  return this.localization.loadFailed;
28
29
  }
29
30
  ngOnInit() {
31
+ // 画面模拟(SimulateRemoteGuiContext)下 releasedVariableService 恒为空,
32
+ // 借此和真实移动端区分开,避免在 PC 浏览器模拟移动端时套用移动端专属样式
33
+ this.isMobileMode = this.isDisplayModeMobile && !!this.args.releasedVariableService;
30
34
  this.variableName = this.args.variableName;
31
35
  this.isPassword = this.args.isPassword ? this.args.isPassword : false;
32
36
  this.charCount = this.args.charCount;
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"WriteCharacterModalComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":7,"character":1},"arguments":[{"selector":"writeCharacterModal","template":"<form #writeValueForm=\"ngForm\" novalidate (ngSubmit)=\"save()\" bs-modal-drag> <div class=\"modal-header\"> <h4 class=\"modal-title\"> <span>{{localization.setting}}</span> <span>{{variableName}}</span> </h4> <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"close()\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <input type=\"text\" name=\"characterInput\" autoFocus [class.form-control-write]=\"!isMobileMode\" class=\"form-control write-character-value\" [(ngModel)]=\"value\" (keyup)=\"validate()\" *ngIf=\"!isPassword\" autocomplete=\"off\"> <input type=\"password\" name=\"passwordInput\" autoFocus [class.form-control-write]=\"!isMobileMode\" class=\"form-control write-character-value\" [(ngModel)]=\"value\" (keyup)=\"validate()\" *ngIf=\"isPassword\" autocomplete=\"off\"> <span class=\"help-block text-danger\" [hidden]=\"!validationError\">{{validationErrorText}}</span> </div> <div class=\"modal-footer\" [class.modal-footer-write]=\"!isMobileMode\"> <button type=\"submit\" [class.btn-primary-write]=\"!isMobileMode\" class=\"btn md-skip btn-primary btn-block\" [disabled]=\"validationError\">{{localization.submit}}</button> </div> </form> ","styles":[".modal-header { padding: 10px; border-color: transparent; } .modal-body { position: relative; padding: 0px 5px !important; } .modal-title { display: unset; margin-left: -6px; font-size: 16px !important; } .form-control { margin: 0 5%; float: none; width: 90%; } .modal-footer { padding: 10px 4px 20px 5px !important; text-align: right; border-color: transparent; } .text-danger { display: block; color: #ed6b75; font-size: 14px; margin: 10px 0px 0px 15px; } .btn-primary { background-color: #3B97FC; border-color: #3B97FC; padding: 5px 30px; width: 90%; margin: 0 5%; height: 32px; } .write-character-value { padding-left: 8px; height: 32px; margin-left: 16px; } .modal-footer-write { margin-right: 4px; padding: 10px 5px 20px 5px !important; } .btn-primary-write { width: 585px; margin: 0 15px 0 0; } .form-control-write { margin: 0 16px; width: 585px; } "]}]}],"members":{"invalidErrorText":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":30,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":36,"character":9},"arguments":[{"__symbolic":"reference","module":"../../localization","name":"LOCALIZATION","line":36,"character":16}]}],null],"parameters":[{"__symbolic":"reference","module":"../../localization","name":"Localization","line":36,"character":51},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":37,"character":18}]}],"ngOnInit":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"showValidationErrorInfo":[{"__symbolic":"method"}],"hideValidationErrorInfo":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"WriteCharacterModalComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":7,"character":1},"arguments":[{"selector":"writeCharacterModal","template":"<form #writeValueForm=\"ngForm\" novalidate (ngSubmit)=\"save()\" bs-modal-drag> <div class=\"modal-header\"> <h4 class=\"modal-title\"> <span>{{localization.setting}}</span> <span>{{variableName}}</span> </h4> <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"close()\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <input type=\"text\" name=\"characterInput\" autoFocus [class.form-control-write]=\"!isMobileMode\" class=\"form-control write-character-value\" [(ngModel)]=\"value\" (keyup)=\"validate()\" *ngIf=\"!isPassword\" autocomplete=\"off\"> <input type=\"password\" name=\"passwordInput\" autoFocus [class.form-control-write]=\"!isMobileMode\" class=\"form-control write-character-value\" [(ngModel)]=\"value\" (keyup)=\"validate()\" *ngIf=\"isPassword\" autocomplete=\"off\"> <span class=\"help-block text-danger\" [hidden]=\"!validationError\">{{validationErrorText}}</span> </div> <div class=\"modal-footer\" [class.modal-footer-write]=\"!isMobileMode\"> <button type=\"submit\" [class.btn-primary-write]=\"!isMobileMode\" class=\"btn md-skip btn-primary btn-block\" [disabled]=\"validationError\">{{localization.submit}}</button> </div> </form> ","styles":[".modal-header { padding: 10px; border-color: transparent; } .modal-body { position: relative; padding: 0px 5px !important; } .modal-title { display: unset; margin-left: -6px; font-size: 16px !important; } .form-control { margin: 0 5%; float: none; width: 90%; } .modal-footer { padding: 10px 4px 20px 5px !important; text-align: right; border-color: transparent; } .text-danger { display: block; color: #ed6b75; font-size: 14px; margin: 10px 0px 0px 15px; } .btn-primary { background-color: #3B97FC; border-color: #3B97FC; padding: 5px 30px; width: 90%; margin: 0 5%; height: 32px; } .write-character-value { padding-left: 8px; height: 32px; margin-left: 16px; } .modal-footer-write { margin-right: 4px; padding: 10px 5px 20px 5px !important; } .btn-primary-write { width: 585px; margin: 0 15px 0 0; } .form-control-write { margin: 0 16px; width: 585px; } "]}]}],"members":{"invalidErrorText":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":31,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":37,"character":9},"arguments":[{"__symbolic":"reference","module":"../../localization","name":"LOCALIZATION","line":37,"character":16}]}],null],"parameters":[{"__symbolic":"reference","module":"../../localization","name":"Localization","line":37,"character":51},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":38,"character":18}]}],"ngOnInit":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"showValidationErrorInfo":[{"__symbolic":"method"}],"hideValidationErrorInfo":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}]}}}}]
@@ -15,6 +15,7 @@ export declare class WriteValueModalComponent implements OnInit {
15
15
  onClosed: any;
16
16
  args: WriteValueModalArgs;
17
17
  isMobileMode: boolean;
18
+ private readonly isDisplayModeMobile;
18
19
  private dataType;
19
20
  private fBoxDataType;
20
21
  private pattern;
@@ -25,15 +25,19 @@ let WriteValueModalComponent = class WriteValueModalComponent {
25
25
  this.fractionDigitService = fractionDigitService;
26
26
  this.numericalOperationService = numericalOperationService;
27
27
  this.bsModalRef = bsModalRef;
28
+ this.isMobileMode = false;
28
29
  this.displayVariableName = '';
29
30
  this.writeValueRangeText = '';
30
31
  this.isSubmitting = false;
31
- this.isMobileMode = DisplayMode.Mobile === injector.get(GlobalSettings).displayMode;
32
+ this.isDisplayModeMobile = DisplayMode.Mobile === injector.get(GlobalSettings).displayMode;
32
33
  }
33
34
  get invalidErrorText() {
34
35
  return this.localization.loadFailed;
35
36
  }
36
37
  ngOnInit() {
38
+ // 画面模拟(SimulateRemoteGuiContext)下 releasedVariableService 恒为空,
39
+ // 借此和真实移动端区分开,避免在 PC 浏览器模拟移动端时套用移动端专属样式
40
+ this.isMobileMode = this.isDisplayModeMobile && !!this.args.releasedVariableService;
37
41
  this.initData(this.args);
38
42
  this.validate();
39
43
  }
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"WriteValueModalComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":12,"character":1},"arguments":[{"selector":"writeValueModal","template":"<form #writeValueForm=\"ngForm\" novalidate (ngSubmit)=\"save()\" bs-modal-drag> <div class=\"modal-header\"> <h4 class=\"modal-title\"> <span>{{localization.setting}}</span> <span>{{displayVariableName}}</span> </h4> <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"close()\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <span class=\"write-value-range\">{{localization.writeValueRange}}:</span> <span> {{writeValueRangeText}} <span *ngIf=\"valueType\">({{valueType}})</span> </span> <input type=\"text\" name=\"valueInput\" autoFocus [class.form-control-write]=\"!isMobileMode\" class=\"form-control write-value\" [(ngModel)]=\"value\" (keyup)=\"validate($event)\" autocomplete=\"off\"> <span class=\"help-block text-danger\" [hidden]=\"!validationError\">{{validationErrorText}}</span> </div> <div class=\"modal-footer\" [class.modal-footer-write]=\"!isMobileMode\"> <button type=\"submit\" [class.btn-primary-write]=\"!isMobileMode\" class=\"btn md-skip btn-primary btn-block\" [disabled]=\"validationError || isSubmitting\"> <ng-container *ngIf=\"!isSubmitting\">{{localization.submit}}</ng-container> <ng-container *ngIf=\"isSubmitting\">{{localization.submitting}}</ng-container> </button> </div> </form> ","styles":[".modal-header { padding: 10px; border-color: transparent; } .modal-body { position: relative; padding: 0px 5px !important; padding-top: 10px !important; } .modal-title { display: unset; margin-left: -6px; font-size: 16px !important; } .form-control { margin: 0 5%; float: none; width: 90%; } .form-control-write { margin: 0 20px; width: 585px; } .modal-footer { padding: 10px 5px 20px 5px !important; text-align: right; border-color: transparent; } .modal-footer-write { margin-right: 4px; padding: 10px 5px 20px 5px !important; } .text-danger { display: block; color: #ed6b75; font-size: 14px; margin: 5px 0px 0px 15px; } .btn-primary { background-color: #3B97FC; border-color: #3B97FC; padding: 5px 30px; width: 90%; margin: 0 5%; height: 32px; } .btn-primary-write { width: 585px; margin: 0 15px 0 0; } .write-value-range { color: #7f939e; font-size: 14px; margin-left: 15px; } .write-value { padding-left: 8px; margin-left: 16px; height: 32px; } "]}]}],"members":{"invalidErrorText":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":48,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":54,"character":9},"arguments":[{"__symbolic":"reference","module":"../../localization","name":"LOCALIZATION","line":54,"character":16}]}],null,null,null,null,null],"parameters":[{"__symbolic":"reference","module":"../../localization","name":"Localization","line":54,"character":51},{"__symbolic":"reference","module":"../../utils/data-type/data-type.service","name":"DataTypeService","line":55,"character":42},{"__symbolic":"reference","module":"../../utils/fraction-digit.service","name":"FractionDigitService","line":56,"character":47},{"__symbolic":"reference","module":"../../utils/numerical-operation.service","name":"NumericalOperationService","line":57,"character":52},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalRef","line":58,"character":37},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":59,"character":18}]}],"ngOnInit":[{"__symbolic":"method"}],"initData":[{"__symbolic":"method"}],"setValueRangeAccordToDataParsed":[{"__symbolic":"method"}],"getWriteValueRangeText":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}],"handleCurrentLanguageIdSave":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"showValidationErrorInfo":[{"__symbolic":"method"}],"hideValidationErrorInfo":[{"__symbolic":"method"}],"getFractionDigits":[{"__symbolic":"method"}],"formatWriteValue":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"WriteValueModalComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":12,"character":1},"arguments":[{"selector":"writeValueModal","template":"<form #writeValueForm=\"ngForm\" novalidate (ngSubmit)=\"save()\" bs-modal-drag> <div class=\"modal-header\"> <h4 class=\"modal-title\"> <span>{{localization.setting}}</span> <span>{{displayVariableName}}</span> </h4> <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"close()\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <span class=\"write-value-range\">{{localization.writeValueRange}}:</span> <span> {{writeValueRangeText}} <span *ngIf=\"valueType\">({{valueType}})</span> </span> <input type=\"text\" name=\"valueInput\" autoFocus [class.form-control-write]=\"!isMobileMode\" class=\"form-control write-value\" [(ngModel)]=\"value\" (keyup)=\"validate($event)\" autocomplete=\"off\"> <span class=\"help-block text-danger\" [hidden]=\"!validationError\">{{validationErrorText}}</span> </div> <div class=\"modal-footer\" [class.modal-footer-write]=\"!isMobileMode\"> <button type=\"submit\" [class.btn-primary-write]=\"!isMobileMode\" class=\"btn md-skip btn-primary btn-block\" [disabled]=\"validationError || isSubmitting\"> <ng-container *ngIf=\"!isSubmitting\">{{localization.submit}}</ng-container> <ng-container *ngIf=\"isSubmitting\">{{localization.submitting}}</ng-container> </button> </div> </form> ","styles":[".modal-header { padding: 10px; border-color: transparent; } .modal-body { position: relative; padding: 0px 5px !important; padding-top: 10px !important; } .modal-title { display: unset; margin-left: -6px; font-size: 16px !important; } .form-control { margin: 0 5%; float: none; width: 90%; } .form-control-write { margin: 0 20px; width: 585px; } .modal-footer { padding: 10px 5px 20px 5px !important; text-align: right; border-color: transparent; } .modal-footer-write { margin-right: 4px; padding: 10px 5px 20px 5px !important; } .text-danger { display: block; color: #ed6b75; font-size: 14px; margin: 5px 0px 0px 15px; } .btn-primary { background-color: #3B97FC; border-color: #3B97FC; padding: 5px 30px; width: 90%; margin: 0 5%; height: 32px; } .btn-primary-write { width: 585px; margin: 0 15px 0 0; } .write-value-range { color: #7f939e; font-size: 14px; margin-left: 15px; } .write-value { padding-left: 8px; margin-left: 16px; height: 32px; } "]}]}],"members":{"invalidErrorText":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":49,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":55,"character":9},"arguments":[{"__symbolic":"reference","module":"../../localization","name":"LOCALIZATION","line":55,"character":16}]}],null,null,null,null,null],"parameters":[{"__symbolic":"reference","module":"../../localization","name":"Localization","line":55,"character":51},{"__symbolic":"reference","module":"../../utils/data-type/data-type.service","name":"DataTypeService","line":56,"character":42},{"__symbolic":"reference","module":"../../utils/fraction-digit.service","name":"FractionDigitService","line":57,"character":47},{"__symbolic":"reference","module":"../../utils/numerical-operation.service","name":"NumericalOperationService","line":58,"character":52},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalRef","line":59,"character":37},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":60,"character":18}]}],"ngOnInit":[{"__symbolic":"method"}],"initData":[{"__symbolic":"method"}],"setValueRangeAccordToDataParsed":[{"__symbolic":"method"}],"getWriteValueRangeText":[{"__symbolic":"method"}],"save":[{"__symbolic":"method"}],"handleCurrentLanguageIdSave":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"validate":[{"__symbolic":"method"}],"showValidationErrorInfo":[{"__symbolic":"method"}],"hideValidationErrorInfo":[{"__symbolic":"method"}],"getFractionDigits":[{"__symbolic":"method"}],"formatWriteValue":[{"__symbolic":"method"}]}}}}]
@@ -3,6 +3,7 @@ import { Point, Size } from '../shared';
3
3
  export interface AlarmModel extends ConditionalDisplayModel {
4
4
  readonly version: number;
5
5
  readonly size: Size;
6
+ readonly initSize?: Size;
6
7
  readonly location: Point;
7
8
  readonly generalSetting?: any;
8
9
  readonly filterSetting?: any;
@@ -12,6 +12,7 @@ export interface CharacterDisplay extends ReadableModel, SecurityModel {
12
12
  readonly graphSetting: GraphSetting;
13
13
  readonly charCount: number;
14
14
  readonly size: Size;
15
+ readonly initSize?: Size;
15
16
  readonly useGraph: boolean;
16
17
  readonly accessPermission: any;
17
18
  readonly showVariableText?: boolean;
@@ -4,6 +4,7 @@ import { HistoricalCurveAxisSettings } from './historical-curve-axis-settings';
4
4
  import { CurveType } from './curve-type';
5
5
  export interface HistoricalCurveDisplaySettings {
6
6
  readonly size: Size;
7
+ readonly initSize?: Size;
7
8
  readonly location: Point;
8
9
  /**
9
10
  * 刷新周期(秒)
@@ -4,6 +4,7 @@ import { NumericalOperationSettings } from './numerical-operation-settings';
4
4
  import { DisplayDataType } from '../shared/data-type/display-data-type';
5
5
  export interface NumericalDisplay extends ReadableModel, SecurityModel {
6
6
  readonly size: Size;
7
+ readonly initSize?: Size;
7
8
  readonly useGraph: boolean;
8
9
  readonly stroke: string;
9
10
  readonly font: string;
@@ -1,4 +1,5 @@
1
1
  export declare enum ViewPopupLocationType {
2
2
  Center = 0,
3
- Custom = 1
3
+ Custom = 1,
4
+ NearButton = 2
4
5
  }
@@ -2,4 +2,5 @@ export var ViewPopupLocationType;
2
2
  (function (ViewPopupLocationType) {
3
3
  ViewPopupLocationType[ViewPopupLocationType["Center"] = 0] = "Center";
4
4
  ViewPopupLocationType[ViewPopupLocationType["Custom"] = 1] = "Custom";
5
+ ViewPopupLocationType[ViewPopupLocationType["NearButton"] = 2] = "NearButton";
5
6
  })(ViewPopupLocationType || (ViewPopupLocationType = {}));
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"ViewPopupLocationType":{"Center":0,"Custom":1}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"ViewPopupLocationType":{"Center":0,"Custom":1,"NearButton":2}}}]
@@ -25,6 +25,7 @@ export interface SwitchIndicatorLight extends ConditionalEnableModel, SecurityMo
25
25
  readonly graphSetting?: GraphSetting;
26
26
  readonly location: Point;
27
27
  readonly size: Size;
28
+ readonly initSize?: Size;
28
29
  readonly isAwaysDisplay?: boolean;
29
30
  readonly conditionItems?: ConditionItemModel[];
30
31
  readonly dynamicSetting?: DynamicDisplayModel;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "main": "bundles/fc-gui.umd.js",
3
- "version": "3.0.0-alpha.180",
3
+ "version": "3.0.0-alpha.182",
4
4
  "module": "public_api.js",
5
5
  "typings": "public_api.d.ts",
6
6
  "license": "UNLICENSED",
@@ -1,7 +1,7 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { ElementRef } from '@angular/core';
3
3
  export interface PopupViewService {
4
- popView(viewIndex: number, hostContainerId: string, el: ElementRef): Observable<void>;
4
+ popView(viewIndex: number, hostContainerId: string, el: ElementRef, triggerRect?: DOMRect): Observable<void>;
5
5
  closeView(): any;
6
6
  moveView(movementX: number, movementY: number): any;
7
7
  }