@flexem/fc-gui 3.0.0-alpha.17 → 3.0.0-alpha.171
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.
- package/CHANGELOG.md +424 -1
- package/assets/img/black_first_page.png +0 -0
- package/assets/img/black_last_page.png +0 -0
- package/assets/img/black_next_page.png +0 -0
- package/assets/img/black_previous_page.png +0 -0
- package/assets/img/exclamation-outline-circle.png +0 -0
- package/bundles/@flexem/fc-gui.umd.js +39304 -34437
- package/bundles/@flexem/fc-gui.umd.js.map +1 -1
- package/bundles/@flexem/fc-gui.umd.min.js +5 -5
- package/bundles/@flexem/fc-gui.umd.min.js.map +1 -1
- package/communication/variable/variable-communicator.d.ts +5 -0
- package/communication/variable/variable-state-enum.d.ts +1 -0
- package/communication/variable/variable-state-enum.js +1 -0
- package/communication/variable/variable-state-enum.metadata.json +1 -1
- package/communication/variable/variable-value.d.ts +4 -1
- package/communication/variable/variable-value.js +4 -1
- package/communication/variable/variable-value.metadata.json +1 -1
- package/config/alarm/alarm.store.d.ts +6 -0
- package/config/alarm/alarm.store.js +0 -0
- package/config/alarm/alarm.store.metadata.json +1 -0
- package/config/alarm/get-alarms-args.d.ts +12 -0
- package/config/alarm/get-alarms-args.js +13 -0
- package/config/alarm/get-alarms-args.metadata.json +1 -0
- package/config/alarm/index.d.ts +2 -0
- package/config/alarm/index.js +1 -0
- package/config/alarm/index.metadata.json +1 -0
- package/config/config-store.d.ts +2 -0
- package/config/gui-feature-config.d.ts +3 -0
- package/config/gui-feature-config.js +3 -0
- package/config/gui-feature-config.metadata.json +1 -0
- package/config/index.d.ts +2 -0
- package/config/index.js +2 -0
- package/config/index.metadata.json +1 -1
- package/config/variable/variable-store.d.ts +1 -0
- package/elements/air-quality/air-quality-element.d.ts +31 -0
- package/elements/air-quality/air-quality-element.js +194 -0
- package/elements/air-quality/air-quality-element.metadata.json +1 -0
- package/elements/alarm/alarm-element.d.ts +69 -0
- package/elements/alarm/alarm-element.js +497 -0
- package/elements/alarm/alarm-element.metadata.json +1 -0
- package/elements/bar-graph-element.d.ts +10 -2
- package/elements/bar-graph-element.js +135 -5
- package/elements/bar-graph-element.metadata.json +1 -1
- package/elements/base/readable-element.d.ts +6 -1
- package/elements/base/readable-element.js +66 -2
- package/elements/base/readable-element.metadata.json +1 -1
- package/elements/base/state-control-element.d.ts +3 -1
- package/elements/base/state-control-element.js +21 -5
- package/elements/character-display/character-display-element.js +3 -2
- package/elements/character-display/character-display-element.metadata.json +1 -1
- package/elements/datetime-display/datetime-display-element.d.ts +1 -0
- package/elements/datetime-display/datetime-display-element.js +10 -2
- package/elements/datetime-display/datetime-display-element.metadata.json +1 -1
- package/elements/datetime-display/time-zone-select-json.d.ts +8 -0
- package/elements/datetime-display/time-zone-select-json.js +558 -0
- package/elements/historical-curve/historical-curve.element.d.ts +41 -3
- package/elements/historical-curve/historical-curve.element.js +662 -32
- package/elements/historical-curve/historical-curve.element.metadata.json +1 -1
- package/elements/main-element.d.ts +1 -0
- package/elements/main-element.js +75 -9
- package/elements/main-element.metadata.json +1 -1
- package/elements/meter-element.d.ts +7 -1
- package/elements/meter-element.js +76 -7
- package/elements/meter-element.metadata.json +1 -1
- package/elements/numerical-display/numerical-display-element.d.ts +22 -3
- package/elements/numerical-display/numerical-display-element.js +145 -12
- package/elements/numerical-display/numerical-display-element.metadata.json +1 -1
- package/elements/per-view-variable-communicator.d.ts +4 -0
- package/elements/per-view-variable-communicator.js +21 -1
- package/elements/per-view-variable-communicator.metadata.json +1 -1
- package/elements/ring-graph/ring-graph-element.d.ts +13 -1
- package/elements/ring-graph/ring-graph-element.js +164 -3
- package/elements/ring-graph/ring-graph-element.metadata.json +1 -1
- package/elements/scroll-alarm/scroll-alarm-element.d.ts +78 -0
- package/elements/scroll-alarm/scroll-alarm-element.js +843 -0
- package/elements/scroll-alarm/scroll-alarm-element.metadata.json +1 -0
- package/elements/shared/graph/graph-state-element.d.ts +1 -0
- package/elements/shared/graph/graph-state-element.js +30 -1
- package/elements/shared/graph/graph-state-element.metadata.json +1 -1
- package/elements/shared/text/text-element.d.ts +14 -0
- package/elements/shared/text/text-element.js +42 -4
- package/elements/shared/text/text-element.metadata.json +1 -1
- package/elements/shared/text/text-state-element.d.ts +39 -2
- package/elements/shared/text/text-state-element.js +242 -67
- package/elements/shared/text/text-state-element.metadata.json +1 -1
- package/elements/static-elements/hyperlink-element.d.ts +28 -2
- package/elements/static-elements/hyperlink-element.js +153 -4
- package/elements/static-elements/hyperlink-element.metadata.json +1 -1
- package/elements/static-elements/text-element.d.ts +28 -2
- package/elements/static-elements/text-element.js +162 -12
- package/elements/static-elements/text-element.metadata.json +1 -1
- package/elements/switch-indicator-light/bit-indicator-light-operator.d.ts +1 -0
- package/elements/switch-indicator-light/bit-indicator-light-operator.js +10 -3
- package/elements/switch-indicator-light/bit-indicator-light-operator.metadata.json +1 -1
- package/elements/switch-indicator-light/switch-indicator-light-element.d.ts +11 -2
- package/elements/switch-indicator-light/switch-indicator-light-element.js +70 -12
- package/elements/switch-indicator-light/switch-indicator-light-element.metadata.json +1 -1
- package/elements/switch-indicator-light/word-indicator-light-operator.d.ts +1 -0
- package/elements/switch-indicator-light/word-indicator-light-operator.js +10 -3
- package/elements/switch-indicator-light/word-indicator-light-operator.metadata.json +1 -1
- package/elements/video/video-element.d.ts +10 -0
- package/elements/video/video-element.js +119 -21
- package/elements/video/video-element.metadata.json +1 -1
- package/elements/view-operation/view-operation.element.d.ts +28 -2
- package/elements/view-operation/view-operation.element.js +163 -4
- package/elements/view-operation/view-operation.element.metadata.json +1 -1
- package/elements/weather/weater-element.js +0 -1
- package/gui/gui-context.d.ts +25 -2
- package/gui/gui-host.d.ts +1 -1
- package/gui/gui-view.d.ts +4 -1
- package/gui/gui-view.js +69 -8
- package/gui/gui-view.metadata.json +1 -1
- package/gui/gui.component.d.ts +3 -0
- package/gui/gui.component.js +15 -2
- package/gui/gui.component.metadata.json +1 -1
- package/localization/localization.service.d.ts +12 -0
- package/localization/localization.service.js +16 -4
- package/localization/localization.service.metadata.json +1 -1
- package/localization/localization.service.zh_CN.js +14 -2
- package/localization/localization.service.zh_CN.metadata.json +1 -1
- package/modal/write-character/write-character-modal.component.html +4 -4
- package/modal/write-character/write-character-modal.component.js +2 -2
- package/modal/write-character/write-character-modal.component.less +15 -0
- package/modal/write-character/write-character-modal.component.metadata.json +1 -1
- package/modal/write-value/write-value-modal-args.d.ts +5 -1
- package/modal/write-value/write-value-modal-args.js +3 -1
- package/modal/write-value/write-value-modal-args.metadata.json +1 -1
- package/modal/write-value/write-value-modal.component.d.ts +13 -7
- package/modal/write-value/write-value-modal.component.html +10 -5
- package/modal/write-value/write-value-modal.component.js +95 -20
- package/modal/write-value/write-value-modal.component.less +16 -1
- package/modal/write-value/write-value-modal.component.metadata.json +1 -1
- package/model/air-quality/air-quality-info.d.ts +23 -0
- package/model/air-quality/air-quality-info.js +4 -0
- package/model/air-quality/air-quality-info.metadata.json +1 -0
- package/model/air-quality/air-quality.model.d.ts +7 -0
- package/model/air-quality/air-quality.model.js +0 -0
- package/model/air-quality/air-quality.model.metadata.json +1 -0
- package/model/alarm/alarm.model.d.ts +13 -0
- package/model/alarm/alarm.model.js +0 -0
- package/model/alarm/alarm.model.metadata.json +1 -0
- package/model/bar-graph/bar-graph.d.ts +4 -0
- package/model/base/font-setting-model.d.ts +22 -1
- package/model/base/font-setting-model.metadata.json +1 -1
- package/model/base/readable-model.d.ts +4 -0
- package/model/datetime-display/datetime-display.d.ts +1 -0
- package/model/historical-curve/historical-curve-axis-settings.d.ts +11 -0
- package/model/historical-curve/historical-curve-axis-settings.js +5 -0
- package/model/historical-curve/historical-curve-axis-settings.metadata.json +1 -1
- package/model/historical-curve/historical-curve-chanel.model.d.ts +8 -0
- package/model/meter/meter.d.ts +4 -0
- package/model/numerical-display/numerical-operation.d.ts +10 -2
- package/model/ring-graph/ring-graph.model.d.ts +8 -0
- package/model/scroll-alarm/scroll-alarm.model.d.ts +21 -0
- package/model/scroll-alarm/scroll-alarm.model.js +0 -0
- package/model/scroll-alarm/scroll-alarm.model.metadata.json +1 -0
- package/model/shared/state/state.d.ts +1 -0
- package/model/shared/state/state.js +1 -0
- package/model/shared/state/state.metadata.json +1 -1
- package/model/shared/text/font.d.ts +1 -1
- package/model/shared/text/text.d.ts +3 -0
- package/model/switch-indicator-light/switch-indicator-light.d.ts +2 -0
- package/model/view-operation/view-operation-element.model.d.ts +7 -1
- package/package.json +1 -1
- package/public_api.js +1 -0
- package/remote/communication/variable/remote-variable-communicator.d.ts +30 -0
- package/remote/communication/variable/remote-variable-communicator.js +193 -3
- package/remote/communication/variable/remote-variable-communicator.metadata.json +1 -1
- package/remote/communication/variable/remote-variable-protocol.d.ts +8 -0
- package/service/index.d.ts +4 -0
- package/service/index.js +1 -0
- package/service/index.metadata.json +1 -1
- package/service/language.service.d.ts +37 -0
- package/service/language.service.js +0 -0
- package/service/language.service.metadata.json +1 -0
- package/service/released-variable/index.d.ts +1 -0
- package/service/released-variable/index.js +0 -0
- package/service/released-variable/index.metadata.json +1 -0
- package/service/released-variable/released-variable.service.d.ts +4 -0
- package/service/released-variable/released-variable.service.js +0 -0
- package/service/released-variable/released-variable.service.metadata.json +1 -0
- package/service/system-text-library.service.d.ts +77 -0
- package/service/system-text-library.service.js +29 -0
- package/service/system-text-library.service.metadata.json +1 -0
- package/service/text-library.service.d.ts +49 -0
- package/service/text-library.service.js +0 -0
- package/service/text-library.service.metadata.json +1 -0
- package/service/weather.service.d.ts +1 -0
- package/shared/gui-consts.d.ts +3 -0
- package/shared/gui-consts.js +3 -0
- package/shared/gui-consts.metadata.json +1 -1
- package/utils/data-type/fbox-data-type.service.js +40 -0
- package/utils/numerical-operation.service.js +28 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"ScrollAlarmElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-dynamic-display-element","name":"ConditionalDynamicDisplayElement","line":16,"character":40},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":54,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":55,"character":18},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":56,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":57,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":58,"character":23},{"__symbolic":"reference","module":"../../config","name":"AlarmsStore","line":59,"character":38},{"__symbolic":"reference","name":"string"}]}],"dispose":[{"__symbolic":"method"}],"getAlarmData":[{"__symbolic":"method"}],"initDisplayContainer":[{"__symbolic":"method"}],"_buildFontAttrs":[{"__symbolic":"method"}],"_createSvgTextNode":[{"__symbolic":"method"}],"_measureTextWithCanvas":[{"__symbolic":"method"}],"_getSvgTextWidth":[{"__symbolic":"method"}],"_updateUnderlineWidth":[{"__symbolic":"method"}],"renderNewPage":[{"__symbolic":"method"}],"_rebaseTextNodes":[{"__symbolic":"method"}],"removeOldestPage":[{"__symbolic":"method"}],"scrollContent":[{"__symbolic":"method"}],"initScrolling":[{"__symbolic":"method"}],"resetToFirstPage":[{"__symbolic":"method"}],"updateQueryTimeRange":[{"__symbolic":"method"}],"setStatusAsNormal":[{"__symbolic":"method"}],"setStatusAsLoading":[{"__symbolic":"method"}],"renderStatus":[{"__symbolic":"method"}],"clearStatus":[{"__symbolic":"method"}],"renderStaticDisplay":[{"__symbolic":"method"}],"initStaticScrolling":[{"__symbolic":"method"}],"scrollStaticContent":[{"__symbolic":"method"}],"replaceCurrentScrollingContent":[{"__symbolic":"method"}]}}}}]
|
|
@@ -42,12 +42,19 @@ export class GraphStateElement {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
changeGraph(stateId, graphResult) {
|
|
45
|
+
// 检查元素是否已被销毁
|
|
46
|
+
if (!this._element) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
45
49
|
if (!graphResult.failed) {
|
|
46
50
|
const graph = graphResult.graph;
|
|
47
51
|
switch (graph.graphType) {
|
|
48
52
|
case GraphType.Image:
|
|
49
53
|
case GraphType.SVG:
|
|
50
54
|
const imageElement = this.getImageElement();
|
|
55
|
+
if (!imageElement) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
51
58
|
imageElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', graph.source);
|
|
52
59
|
this.doFaultFlicker(imageElement, stateId);
|
|
53
60
|
break;
|
|
@@ -63,6 +70,10 @@ export class GraphStateElement {
|
|
|
63
70
|
}
|
|
64
71
|
getImageElement() {
|
|
65
72
|
if (!this.imageElement) {
|
|
73
|
+
// 检查 _element 是否已被销毁
|
|
74
|
+
if (!this._element) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
66
77
|
this.imageElement = document.createElementNS('http://www.w3.org/2000/svg', 'image');
|
|
67
78
|
this.imageElement.setAttribute('width', this.width + '');
|
|
68
79
|
this.imageElement.setAttribute('height', this.height + '');
|
|
@@ -74,7 +85,7 @@ export class GraphStateElement {
|
|
|
74
85
|
return this.imageElement;
|
|
75
86
|
}
|
|
76
87
|
removeImageElement() {
|
|
77
|
-
if (this.imageElement) {
|
|
88
|
+
if (this.imageElement && this._element) {
|
|
78
89
|
this._element.removeChild(this.imageElement);
|
|
79
90
|
delete this.imageElement;
|
|
80
91
|
}
|
|
@@ -107,4 +118,22 @@ export class GraphStateElement {
|
|
|
107
118
|
}
|
|
108
119
|
}
|
|
109
120
|
}
|
|
121
|
+
dispose() {
|
|
122
|
+
// 清理定时器
|
|
123
|
+
if (this.faultFlickerInterval) {
|
|
124
|
+
clearInterval(this.faultFlickerInterval);
|
|
125
|
+
this.faultFlickerInterval = undefined;
|
|
126
|
+
}
|
|
127
|
+
// 移除图片元素
|
|
128
|
+
this.removeImageElement();
|
|
129
|
+
// 清理图形缓存
|
|
130
|
+
if (this.graphs) {
|
|
131
|
+
this.graphs.clear();
|
|
132
|
+
}
|
|
133
|
+
// 清理 SVG 元素
|
|
134
|
+
if (this._element && this._element.parentNode) {
|
|
135
|
+
this._element.parentNode.removeChild(this._element);
|
|
136
|
+
}
|
|
137
|
+
this._element = null;
|
|
138
|
+
}
|
|
110
139
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"GraphStateElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../../../model","name":"GraphSetting","line":21,"character":47},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","module":"../../../config","name":"GraphStore","line":24,"character":37},{"__symbolic":"reference","module":"../../../logger","name":"LoggerService","line":25,"character":33},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"../../../model/switch-indicator-light/indicator-light-fault-flicker","name":"IndicatorLightFaultFlicker","line":27,"character":41}]}]}],"switchToState":[{"__symbolic":"method"}],"changeGraph":[{"__symbolic":"method"}],"getImageElement":[{"__symbolic":"method"}],"removeImageElement":[{"__symbolic":"method"}],"doFaultFlicker":[{"__symbolic":"method"}],"clearFlickerInterval":[{"__symbolic":"method"}]}}}}]
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"GraphStateElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../../../model","name":"GraphSetting","line":21,"character":47},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","module":"../../../config","name":"GraphStore","line":24,"character":37},{"__symbolic":"reference","module":"../../../logger","name":"LoggerService","line":25,"character":33},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"../../../model/switch-indicator-light/indicator-light-fault-flicker","name":"IndicatorLightFaultFlicker","line":27,"character":41}]}]}],"switchToState":[{"__symbolic":"method"}],"changeGraph":[{"__symbolic":"method"}],"getImageElement":[{"__symbolic":"method"}],"removeImageElement":[{"__symbolic":"method"}],"doFaultFlicker":[{"__symbolic":"method"}],"clearFlickerInterval":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}]}}}}]
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { Font } from '../../../model';
|
|
2
2
|
export declare class TextElementModal {
|
|
3
3
|
private _element;
|
|
4
|
+
private font;
|
|
5
|
+
private width;
|
|
6
|
+
private height;
|
|
7
|
+
private isVariableText?;
|
|
4
8
|
get Element(): SVGElement;
|
|
5
9
|
constructor(content: string, font: Font, width: number, height: number, isVariableText?: boolean);
|
|
10
|
+
/**
|
|
11
|
+
* 更新字体样式
|
|
12
|
+
* @param font 新的字体样式
|
|
13
|
+
*/
|
|
14
|
+
updateFont(font: Font): void;
|
|
15
|
+
/**
|
|
16
|
+
* 更新文本内容
|
|
17
|
+
* @param content 新的文本内容
|
|
18
|
+
*/
|
|
19
|
+
updateText(content: string): void;
|
|
6
20
|
private getforeignObjectElement;
|
|
7
21
|
private createNewForeignObjectText;
|
|
8
22
|
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { isNil } from 'lodash';
|
|
2
2
|
export class TextElementModal {
|
|
3
3
|
constructor(content, font, width, height, isVariableText) {
|
|
4
|
+
// 保存参数以便后续更新文本
|
|
5
|
+
this.font = font;
|
|
6
|
+
this.width = width;
|
|
7
|
+
this.height = height;
|
|
8
|
+
this.isVariableText = isVariableText;
|
|
4
9
|
if (/iPhone|iPod/i.test(navigator.userAgent)) {
|
|
5
10
|
width += 10;
|
|
6
11
|
}
|
|
@@ -12,6 +17,28 @@ export class TextElementModal {
|
|
|
12
17
|
get Element() {
|
|
13
18
|
return this._element;
|
|
14
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* 更新字体样式
|
|
22
|
+
* @param font 新的字体样式
|
|
23
|
+
*/
|
|
24
|
+
updateFont(font) {
|
|
25
|
+
this.font = font;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 更新文本内容
|
|
29
|
+
* @param content 新的文本内容
|
|
30
|
+
*/
|
|
31
|
+
updateText(content) {
|
|
32
|
+
// 清空现有内容
|
|
33
|
+
this._element.innerHTML = '';
|
|
34
|
+
// 创建新的文本元素
|
|
35
|
+
let width = this.width;
|
|
36
|
+
if (/iPhone|iPod/i.test(navigator.userAgent)) {
|
|
37
|
+
width += 10;
|
|
38
|
+
}
|
|
39
|
+
const text = this.createNewForeignObjectText(content, this.font, width, this.height, this.isVariableText);
|
|
40
|
+
this._element.appendChild(text);
|
|
41
|
+
}
|
|
15
42
|
getforeignObjectElement(width, height) {
|
|
16
43
|
const textElement = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
|
|
17
44
|
textElement.setAttribute('width', width.toString());
|
|
@@ -19,7 +46,7 @@ export class TextElementModal {
|
|
|
19
46
|
return textElement;
|
|
20
47
|
}
|
|
21
48
|
createNewForeignObjectText(content, font, width, height, isVariableText) {
|
|
22
|
-
if (font) {
|
|
49
|
+
if (font && !font.fontFamily.includes(',msyh')) {
|
|
23
50
|
font.fontFamily += ',msyh';
|
|
24
51
|
}
|
|
25
52
|
const bodyDiv = document.createElement('div');
|
|
@@ -36,7 +63,7 @@ export class TextElementModal {
|
|
|
36
63
|
for (let index = 0; index < textArray.length; index++) {
|
|
37
64
|
const textDiv = document.createElement('div');
|
|
38
65
|
textDiv.className = 'text-list';
|
|
39
|
-
|
|
66
|
+
const innerHTML = textArray[index] ? textArray[index] : ' ';
|
|
40
67
|
let fontString = '';
|
|
41
68
|
if (font.isItalic) {
|
|
42
69
|
fontString += 'italic ';
|
|
@@ -45,12 +72,23 @@ export class TextElementModal {
|
|
|
45
72
|
fontString += 'bold ';
|
|
46
73
|
}
|
|
47
74
|
let lineHeight = 0;
|
|
75
|
+
// chrome支持可显示最小字体大小为12px, 更小字体通过缩放实现
|
|
76
|
+
const minFontSize = 12;
|
|
48
77
|
lineHeight = parseInt(font.fontSize, 10) + 5;
|
|
49
78
|
fontString += font.fontSize + '/' + lineHeight.toString() + 'px ' + font.fontFamily;
|
|
50
|
-
textDiv.style.cssText = `color: ${font.color};word-break: break-all;font: ${fontString};`;
|
|
51
|
-
if (font.isUnderline) {
|
|
79
|
+
textDiv.style.cssText = `color: ${font.color};word-break: break-all;font: ${fontString};text-align: ${textAlign};`;
|
|
80
|
+
if (font.isUnderline && content.length > 0) {
|
|
52
81
|
textDiv.style.textDecoration = 'underline';
|
|
53
82
|
}
|
|
83
|
+
const spanText = document.createElement('span');
|
|
84
|
+
spanText.style.cssText = `
|
|
85
|
+
display: contents;
|
|
86
|
+
transform: scale(${parseInt(font.fontSize, 10) > minFontSize ? 1 : parseInt(font.fontSize, 10) / minFontSize});
|
|
87
|
+
width: 100%;
|
|
88
|
+
height: 100%;
|
|
89
|
+
`;
|
|
90
|
+
spanText.innerHTML = innerHTML;
|
|
91
|
+
textDiv.appendChild(spanText);
|
|
54
92
|
fragment.appendChild(textDiv);
|
|
55
93
|
}
|
|
56
94
|
bodyDiv.appendChild(fragment);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"TextElementModal":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../../model","name":"Font","line":
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"TextElementModal":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../../model","name":"Font","line":15,"character":39},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"boolean"}]}],"updateFont":[{"__symbolic":"method"}],"updateText":[{"__symbolic":"method"}],"getforeignObjectElement":[{"__symbolic":"method"}],"createNewForeignObjectText":[{"__symbolic":"method"}]}}}}]
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { LoggerService } from '../../../logger';
|
|
2
|
+
import { TextLibrarySetting } from '../../../model/base/font-setting-model';
|
|
2
3
|
import { IndicatorLightFaultFlicker } from '../../../model/switch-indicator-light/indicator-light-fault-flicker';
|
|
4
|
+
import { TextLibraryService, LanguageService } from '../../../service';
|
|
3
5
|
import { TextState } from './text-state.model';
|
|
6
|
+
import { GuiContext } from '../../../gui/gui-context';
|
|
4
7
|
export declare class TextStateElement {
|
|
5
8
|
private readonly textStates;
|
|
6
9
|
private width;
|
|
@@ -8,16 +11,50 @@ export declare class TextStateElement {
|
|
|
8
11
|
private readonly logger;
|
|
9
12
|
private readonly version?;
|
|
10
13
|
private readonly faultFlickers?;
|
|
14
|
+
private readonly textLibrarySetting?;
|
|
15
|
+
private readonly textLibraryService?;
|
|
16
|
+
private readonly languageService?;
|
|
17
|
+
private readonly guiContext?;
|
|
18
|
+
private readonly allowEmpty;
|
|
19
|
+
private readonly fontStyleCultures?;
|
|
11
20
|
private textElement;
|
|
12
21
|
private _element;
|
|
13
22
|
get Element(): SVGElement;
|
|
14
23
|
private faultFlickerStatus;
|
|
15
24
|
private faultFlickerInterval;
|
|
16
|
-
|
|
25
|
+
private currentStateId;
|
|
26
|
+
private languageChangeSubscription?;
|
|
27
|
+
constructor(textStates: TextState[], width: number, height: number, logger: LoggerService, version?: number, faultFlickers?: IndicatorLightFaultFlicker[], textLibrarySetting?: TextLibrarySetting, textLibraryService?: TextLibraryService, languageService?: LanguageService, guiContext?: GuiContext, allowEmpty?: boolean, fontStyleCultures?: {
|
|
28
|
+
[stateId: string]: {
|
|
29
|
+
[languageCode: string]: any;
|
|
30
|
+
};
|
|
31
|
+
});
|
|
17
32
|
switchToState(stateId: number): void;
|
|
33
|
+
/**
|
|
34
|
+
* 订阅语种变化事件
|
|
35
|
+
* 当设备的语种ID改变时,重新渲染当前状态的文本
|
|
36
|
+
*/
|
|
37
|
+
private subscribeLanguageChange;
|
|
38
|
+
/**
|
|
39
|
+
* 释放资源
|
|
40
|
+
*/
|
|
41
|
+
dispose(): void;
|
|
18
42
|
private getforeignObjectElement;
|
|
19
|
-
private createNewForeignObjectText;
|
|
20
43
|
private removeForeignObjectlement;
|
|
21
44
|
private doFaultFlicker;
|
|
22
45
|
private clearFlickerInterval;
|
|
46
|
+
/**
|
|
47
|
+
* 获取指定状态在当前语种下的字体样式
|
|
48
|
+
* fontStyleCultures 中保存的对象含 fontStyle 字符串但无 isBold/isItalic/fontFamily,
|
|
49
|
+
* 此处从 fontStyle 解析这三个字段后返回
|
|
50
|
+
*/
|
|
51
|
+
private getFontForState;
|
|
52
|
+
/**
|
|
53
|
+
* 获取显示文本
|
|
54
|
+
* 支持三种格式:
|
|
55
|
+
* 1. 新格式:textData.cultures 在顶层(与 content 并列)
|
|
56
|
+
* 2. 中间格式:textData.content 为 { cultures: {...} }(已废弃,向下兼容)
|
|
57
|
+
* 3. 旧格式:textData.content 为字符串
|
|
58
|
+
*/
|
|
59
|
+
private getDisplayText;
|
|
23
60
|
}
|
|
@@ -1,112 +1,151 @@
|
|
|
1
1
|
import { Flicker } from '../../../model';
|
|
2
|
-
import { isNil } from 'lodash';
|
|
3
2
|
export class TextStateElement {
|
|
4
|
-
constructor(textStates, width, height, logger, version, faultFlickers) {
|
|
3
|
+
constructor(textStates, width, height, logger, version, faultFlickers, textLibrarySetting, textLibraryService, languageService, guiContext, allowEmpty = false, fontStyleCultures) {
|
|
5
4
|
this.textStates = textStates;
|
|
6
5
|
this.width = width;
|
|
7
6
|
this.height = height;
|
|
8
7
|
this.logger = logger;
|
|
9
8
|
this.version = version;
|
|
10
9
|
this.faultFlickers = faultFlickers;
|
|
10
|
+
this.textLibrarySetting = textLibrarySetting;
|
|
11
|
+
this.textLibraryService = textLibraryService;
|
|
12
|
+
this.languageService = languageService;
|
|
13
|
+
this.guiContext = guiContext;
|
|
14
|
+
this.allowEmpty = allowEmpty;
|
|
15
|
+
this.fontStyleCultures = fontStyleCultures;
|
|
11
16
|
this.faultFlickerStatus = false;
|
|
12
17
|
this.faultFlickerInterval = undefined;
|
|
13
18
|
this._element = document.createElementNS('http://www.w3.org/2000/svg', 'g');
|
|
19
|
+
// 订阅语种变化事件
|
|
20
|
+
this.subscribeLanguageChange();
|
|
14
21
|
}
|
|
15
22
|
get Element() {
|
|
16
23
|
return this._element;
|
|
17
24
|
}
|
|
18
25
|
switchToState(stateId) {
|
|
26
|
+
// 保存当前状态ID,用于语种切换时重新渲染
|
|
27
|
+
this.currentStateId = stateId;
|
|
19
28
|
const textState = this.textStates.find(t => t.id === stateId);
|
|
20
29
|
if (textState === undefined) {
|
|
21
30
|
this.removeForeignObjectlement();
|
|
22
31
|
this.logger.debug(`Can not find text state:${stateId}.`);
|
|
23
32
|
return;
|
|
24
33
|
}
|
|
25
|
-
|
|
26
|
-
|
|
34
|
+
// 获取显示文本(支持文本库)
|
|
35
|
+
const content = this.getDisplayText(stateId, textState.text);
|
|
36
|
+
if (content === '' || content == null) {
|
|
27
37
|
this.removeForeignObjectlement();
|
|
28
38
|
return;
|
|
29
39
|
}
|
|
30
|
-
const font = textState.text.font;
|
|
40
|
+
const font = this.getFontForState(stateId, textState.text.font);
|
|
31
41
|
if (!font) {
|
|
32
42
|
this.removeForeignObjectlement();
|
|
33
43
|
this.logger.debug('The font is undefined.');
|
|
34
44
|
return;
|
|
35
45
|
}
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
46
|
+
const textElement = this.getforeignObjectElement();
|
|
47
|
+
textElement.setAttribute('pointer-events', 'auto');
|
|
48
|
+
// 根据 textAlign 计算 SVG text-anchor 和 x 坐标
|
|
49
|
+
const textAlign = font.textAlign || 'center';
|
|
50
|
+
let textAnchor;
|
|
51
|
+
let anchorX;
|
|
52
|
+
if (textAlign === 'left') {
|
|
53
|
+
textAnchor = 'start';
|
|
54
|
+
anchorX = 0;
|
|
55
|
+
}
|
|
56
|
+
else if (textAlign === 'right') {
|
|
57
|
+
textAnchor = 'end';
|
|
58
|
+
anchorX = this.width;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
textAnchor = 'middle';
|
|
62
|
+
anchorX = this.width / 2;
|
|
63
|
+
}
|
|
64
|
+
// 拆分换行
|
|
65
|
+
const lines = content.split('\n');
|
|
66
|
+
const fontSize = parseInt(font.fontSize, 10);
|
|
67
|
+
const lineHeight = fontSize + 4;
|
|
68
|
+
// 总高度 = 行数 * 行高
|
|
69
|
+
const totalHeight = lines.length * lineHeight;
|
|
70
|
+
// 调整文本整体垂直居中(通过 dy)
|
|
71
|
+
const startY = (this.height / 2) - (totalHeight / 2) + (lineHeight / 2);
|
|
72
|
+
// 复用已有 tspan,不足则新建,多余则隐藏——避免删除 touch 目标节点导致 touchend 丢失
|
|
73
|
+
const existingTspans = Array.from(textElement.children);
|
|
74
|
+
for (let i = 0; i < lines.length; i++) {
|
|
75
|
+
let tspan = existingTspans[i];
|
|
76
|
+
if (!tspan) {
|
|
77
|
+
tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');
|
|
78
|
+
textElement.appendChild(tspan);
|
|
79
|
+
}
|
|
80
|
+
tspan.setAttribute('display', 'inline');
|
|
81
|
+
tspan.setAttribute('x', anchorX.toString());
|
|
82
|
+
tspan.setAttribute('y', startY + i * lineHeight + 'px');
|
|
83
|
+
tspan.textContent = lines[i].replace(/ /g, ' ');
|
|
84
|
+
tspan.setAttribute('font-size', font.fontSize);
|
|
85
|
+
tspan.setAttribute('fill', font.color);
|
|
86
|
+
tspan.setAttribute('font-family', font.fontFamily);
|
|
87
|
+
tspan.setAttribute('font-weight', font.isBold ? 'bold' : 'normal');
|
|
88
|
+
tspan.setAttribute('font-style', font.isItalic ? 'italic' : 'normal');
|
|
89
|
+
tspan.setAttribute('text-decoration', font.isUnderline ? 'underline' : 'none');
|
|
90
|
+
tspan.setAttribute('text-anchor', textAnchor);
|
|
91
|
+
tspan.setAttribute('dominant-baseline', 'middle');
|
|
92
|
+
}
|
|
93
|
+
// 隐藏多余的 tspan(不删除)
|
|
94
|
+
for (let i = lines.length; i < existingTspans.length; i++) {
|
|
95
|
+
existingTspans[i].setAttribute('display', 'none');
|
|
96
|
+
}
|
|
97
|
+
this.doFaultFlicker(textElement, stateId);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 订阅语种变化事件
|
|
101
|
+
* 当设备的语种ID改变时,重新渲染当前状态的文本
|
|
102
|
+
*/
|
|
103
|
+
subscribeLanguageChange() {
|
|
104
|
+
if (this.guiContext && this.guiContext.languageChanged$) {
|
|
105
|
+
this.languageChangeSubscription = this.guiContext.languageChanged$.subscribe(() => {
|
|
106
|
+
// 如果当前有状态,重新渲染
|
|
107
|
+
if (this.currentStateId !== undefined) {
|
|
108
|
+
this.switchToState(this.currentStateId);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 释放资源
|
|
115
|
+
*/
|
|
116
|
+
dispose() {
|
|
117
|
+
// 取消语种变化订阅
|
|
118
|
+
if (this.languageChangeSubscription) {
|
|
119
|
+
this.languageChangeSubscription.unsubscribe();
|
|
120
|
+
this.languageChangeSubscription = undefined;
|
|
121
|
+
}
|
|
122
|
+
// 清除闪烁定时器
|
|
123
|
+
if (this.faultFlickerInterval) {
|
|
124
|
+
clearInterval(this.faultFlickerInterval);
|
|
125
|
+
this.faultFlickerInterval = undefined;
|
|
126
|
+
}
|
|
41
127
|
}
|
|
42
128
|
getforeignObjectElement() {
|
|
43
129
|
if (!this.textElement) {
|
|
44
|
-
this.textElement = document.createElementNS('http://www.w3.org/2000/svg', '
|
|
45
|
-
this.textElement.setAttribute('
|
|
46
|
-
this.textElement.setAttribute('
|
|
130
|
+
this.textElement = document.createElementNS('http://www.w3.org/2000/svg', 'text');
|
|
131
|
+
this.textElement.setAttribute('x', (this.width / 2).toString());
|
|
132
|
+
this.textElement.setAttribute('y', (this.height / 2).toString());
|
|
133
|
+
this.textElement.setAttribute('text-anchor', 'middle');
|
|
134
|
+
this.textElement.setAttribute('dominant-baseline', 'middle');
|
|
135
|
+
this.textElement.setAttribute('pointer-events', 'auto'); // 确保能接收事件
|
|
47
136
|
this._element.appendChild(this.textElement);
|
|
48
137
|
}
|
|
138
|
+
this.textElement.setAttribute('display', 'block');
|
|
49
139
|
return this.textElement;
|
|
50
140
|
}
|
|
51
|
-
createNewForeignObjectText(content, font) {
|
|
52
|
-
if (font) {
|
|
53
|
-
font.fontFamily += ',msyh';
|
|
54
|
-
}
|
|
55
|
-
const bodyDiv = document.createElement('div');
|
|
56
|
-
bodyDiv.style.textAlign = font.textAlign ? font.textAlign : 'center';
|
|
57
|
-
bodyDiv.style.userSelect = 'none';
|
|
58
|
-
bodyDiv.style.display = 'table-cell';
|
|
59
|
-
bodyDiv.style.verticalAlign = 'middle';
|
|
60
|
-
if (isNil(content)) {
|
|
61
|
-
content = '';
|
|
62
|
-
}
|
|
63
|
-
let textArray = content.toString().split('\n');
|
|
64
|
-
textArray = textArray.map(item => {
|
|
65
|
-
return item.toString().replace(/\s/g, ' ');
|
|
66
|
-
});
|
|
67
|
-
const fragment = document.createDocumentFragment();
|
|
68
|
-
for (let index = 0; index < textArray.length; index++) {
|
|
69
|
-
const textDiv = document.createElement('div');
|
|
70
|
-
textDiv.innerHTML = textArray[index] ? textArray[index] : ' ';
|
|
71
|
-
let fontString = '';
|
|
72
|
-
if (font.isItalic) {
|
|
73
|
-
fontString += 'italic ';
|
|
74
|
-
}
|
|
75
|
-
if (font.isBold) {
|
|
76
|
-
fontString += 'bold ';
|
|
77
|
-
}
|
|
78
|
-
textDiv.style.wordBreak = 'break-word';
|
|
79
|
-
textDiv.style.color = font.color;
|
|
80
|
-
let lineHeight = 0;
|
|
81
|
-
lineHeight = parseInt(font.fontSize, 10) + 5;
|
|
82
|
-
fontString += font.fontSize + 'px/' + lineHeight + 'px ' + font.fontFamily;
|
|
83
|
-
textDiv.style.font = fontString;
|
|
84
|
-
if (font.isUnderline) {
|
|
85
|
-
textDiv.style.textDecoration = 'underline';
|
|
86
|
-
}
|
|
87
|
-
fragment.appendChild(textDiv);
|
|
88
|
-
}
|
|
89
|
-
bodyDiv.appendChild(fragment);
|
|
90
|
-
const contentDiv = document.createElement('div');
|
|
91
|
-
contentDiv.style.display = 'table';
|
|
92
|
-
contentDiv.style.width = '100%';
|
|
93
|
-
contentDiv.style.height = '100%';
|
|
94
|
-
contentDiv.appendChild(bodyDiv);
|
|
95
|
-
const containerDiv = document.createElement('div');
|
|
96
|
-
containerDiv.style.overflow = 'hidden';
|
|
97
|
-
containerDiv.style.width = this.width.toString() + 'px';
|
|
98
|
-
containerDiv.style.height = this.height.toString() + 'px';
|
|
99
|
-
containerDiv.appendChild(contentDiv);
|
|
100
|
-
return containerDiv;
|
|
101
|
-
}
|
|
102
141
|
removeForeignObjectlement() {
|
|
103
142
|
if (this.textElement) {
|
|
104
|
-
this.
|
|
105
|
-
|
|
143
|
+
this.textElement.setAttribute('display', 'none');
|
|
144
|
+
this.textElement.textContent = '';
|
|
106
145
|
}
|
|
107
146
|
}
|
|
108
147
|
doFaultFlicker(textElement, stateId) {
|
|
109
|
-
if (this.version > 3 && this.faultFlickers) {
|
|
148
|
+
if (this.version != null && this.version > 3 && this.faultFlickers) {
|
|
110
149
|
this.clearFlickerInterval(textElement);
|
|
111
150
|
const faultFlicker = this.faultFlickers.find(t => t.id === stateId);
|
|
112
151
|
if (faultFlicker && faultFlicker.faultFlicker) {
|
|
@@ -133,4 +172,140 @@ export class TextStateElement {
|
|
|
133
172
|
}
|
|
134
173
|
}
|
|
135
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* 获取指定状态在当前语种下的字体样式
|
|
177
|
+
* fontStyleCultures 中保存的对象含 fontStyle 字符串但无 isBold/isItalic/fontFamily,
|
|
178
|
+
* 此处从 fontStyle 解析这三个字段后返回
|
|
179
|
+
*/
|
|
180
|
+
getFontForState(stateId, defaultFont) {
|
|
181
|
+
if (!this.fontStyleCultures) {
|
|
182
|
+
return defaultFont;
|
|
183
|
+
}
|
|
184
|
+
const stateKey = stateId.toString();
|
|
185
|
+
if (!this.fontStyleCultures[stateKey]) {
|
|
186
|
+
return defaultFont;
|
|
187
|
+
}
|
|
188
|
+
const getTargetLanguage = () => {
|
|
189
|
+
var _a, _b, _c, _d, _e, _f;
|
|
190
|
+
const currentLanguageId = (_c = (_b = (_a = this.guiContext) === null || _a === void 0 ? void 0 : _a.getCurrentLanguageId) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : null;
|
|
191
|
+
const defaultLanguage = ((_d = this.languageService) === null || _d === void 0 ? void 0 : _d.getDefaultLanguage()) || 'zh-CN';
|
|
192
|
+
if (currentLanguageId === null || currentLanguageId === undefined) {
|
|
193
|
+
return defaultLanguage;
|
|
194
|
+
}
|
|
195
|
+
return ((_f = (_e = this.guiContext) === null || _e === void 0 ? void 0 : _e.getLanguageCultureById) === null || _f === void 0 ? void 0 : _f.call(_e, currentLanguageId)) || defaultLanguage;
|
|
196
|
+
};
|
|
197
|
+
const targetLanguage = getTargetLanguage();
|
|
198
|
+
if (this.fontStyleCultures[stateKey][targetLanguage]) {
|
|
199
|
+
const culturedFont = this.fontStyleCultures[stateKey][targetLanguage];
|
|
200
|
+
if (culturedFont.fontStyle) {
|
|
201
|
+
const fs = culturedFont.fontStyle;
|
|
202
|
+
const isBold = fs.indexOf('bold') !== -1;
|
|
203
|
+
const isItalic = fs.indexOf('Italic') !== -1;
|
|
204
|
+
const parts = fs.split(' ');
|
|
205
|
+
const familyIndex = (isBold ? 1 : 0) + (isItalic ? 1 : 0) + 1;
|
|
206
|
+
const fontFamily = parts.length > familyIndex ? parts[familyIndex] : null;
|
|
207
|
+
return Object.assign(Object.assign({}, culturedFont), { isBold, isItalic, fontFamily });
|
|
208
|
+
}
|
|
209
|
+
return culturedFont;
|
|
210
|
+
}
|
|
211
|
+
return defaultFont;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* 获取显示文本
|
|
215
|
+
* 支持三种格式:
|
|
216
|
+
* 1. 新格式:textData.cultures 在顶层(与 content 并列)
|
|
217
|
+
* 2. 中间格式:textData.content 为 { cultures: {...} }(已废弃,向下兼容)
|
|
218
|
+
* 3. 旧格式:textData.content 为字符串
|
|
219
|
+
*/
|
|
220
|
+
getDisplayText(stateId, textData) {
|
|
221
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
222
|
+
const getTargetLanguage = () => {
|
|
223
|
+
var _a, _b, _c, _d, _e, _f;
|
|
224
|
+
const currentLanguageId = (_c = (_b = (_a = this.guiContext) === null || _a === void 0 ? void 0 : _a.getCurrentLanguageId) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : null;
|
|
225
|
+
const defaultLanguage = ((_d = this.languageService) === null || _d === void 0 ? void 0 : _d.getDefaultLanguage()) || 'zh-CN';
|
|
226
|
+
if (currentLanguageId === null || currentLanguageId === undefined) {
|
|
227
|
+
return defaultLanguage;
|
|
228
|
+
}
|
|
229
|
+
return ((_f = (_e = this.guiContext) === null || _e === void 0 ? void 0 : _e.getLanguageCultureById) === null || _f === void 0 ? void 0 : _f.call(_e, currentLanguageId)) || defaultLanguage;
|
|
230
|
+
};
|
|
231
|
+
const defaultContent = textData === null || textData === void 0 ? void 0 : textData.content;
|
|
232
|
+
// 新格式:cultures 在 text 顶层
|
|
233
|
+
if (textData && textData.cultures && typeof textData.cultures === 'object') {
|
|
234
|
+
const targetLanguage = getTargetLanguage();
|
|
235
|
+
if (textData.cultures[targetLanguage]) {
|
|
236
|
+
return textData.cultures[targetLanguage];
|
|
237
|
+
}
|
|
238
|
+
else if (this.allowEmpty) {
|
|
239
|
+
return '';
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
const language = ((_c = (_b = (_a = window.abp) === null || _a === void 0 ? void 0 : _a.localization) === null || _b === void 0 ? void 0 : _b.currentLanguage) === null || _c === void 0 ? void 0 : _c.name) || 'zh-Hans';
|
|
243
|
+
const isChinese = language === 'zh-Hans' || language === 'zh';
|
|
244
|
+
return isChinese ? '文本' : 'Text';
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// 中间格式(兼容):content 为 { cultures: {...} }
|
|
248
|
+
if (defaultContent && typeof defaultContent === 'object' && defaultContent.cultures) {
|
|
249
|
+
const targetLanguage = getTargetLanguage();
|
|
250
|
+
if (defaultContent.cultures[targetLanguage]) {
|
|
251
|
+
return defaultContent.cultures[targetLanguage];
|
|
252
|
+
}
|
|
253
|
+
else if (this.allowEmpty) {
|
|
254
|
+
return '';
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
const language = ((_f = (_e = (_d = window.abp) === null || _d === void 0 ? void 0 : _d.localization) === null || _e === void 0 ? void 0 : _e.currentLanguage) === null || _f === void 0 ? void 0 : _f.name) || 'zh-Hans';
|
|
258
|
+
const isChinese = language === 'zh-Hans' || language === 'zh';
|
|
259
|
+
return isChinese ? '文本' : 'Text';
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// 检查是否使用文本库
|
|
263
|
+
if (this.textLibrarySetting && this.textLibrarySetting.labelType === 'textLibrary') {
|
|
264
|
+
const textLibraryId = this.textLibrarySetting.selectedTextLibraryItem;
|
|
265
|
+
if (textLibraryId && this.textLibraryService) {
|
|
266
|
+
// 获取文本库数据
|
|
267
|
+
const textLibraryData = this.textLibraryService.getTextLibraryById(typeof textLibraryId === 'string' ? parseInt(textLibraryId, 10) : textLibraryId);
|
|
268
|
+
if (textLibraryData && textLibraryData.data) {
|
|
269
|
+
// 使用状态ID作为value查找对应的文本条目
|
|
270
|
+
const textEntry = textLibraryData.data.find(entry => entry.value === stateId.toString());
|
|
271
|
+
if (textEntry) {
|
|
272
|
+
// 获取当前语种ID
|
|
273
|
+
const currentLanguageId = (_j = (_h = (_g = this.guiContext) === null || _g === void 0 ? void 0 : _g.getCurrentLanguageId) === null || _h === void 0 ? void 0 : _h.call(_g)) !== null && _j !== void 0 ? _j : null;
|
|
274
|
+
// 确定要使用的语种代码(culture)
|
|
275
|
+
let targetLanguage;
|
|
276
|
+
const defaultLanguage = ((_k = this.languageService) === null || _k === void 0 ? void 0 : _k.getDefaultLanguage()) || 'zh-CN';
|
|
277
|
+
if (currentLanguageId === null || currentLanguageId === undefined) {
|
|
278
|
+
// 设备未设置当前语种,使用默认语种
|
|
279
|
+
targetLanguage = defaultLanguage;
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
// 设备已设置当前语种,获取对应的语种代码
|
|
283
|
+
const currentLanguage = (_m = (_l = this.guiContext) === null || _l === void 0 ? void 0 : _l.getLanguageCultureById) === null || _m === void 0 ? void 0 : _m.call(_l, currentLanguageId);
|
|
284
|
+
if (currentLanguage) {
|
|
285
|
+
// 直接使用设备设置的语种,不再fallback
|
|
286
|
+
targetLanguage = currentLanguage;
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
targetLanguage = defaultLanguage;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
// 返回对应语种的文本,如果没有则返回空字符串
|
|
293
|
+
if (textEntry.cultures && textEntry.cultures[targetLanguage]) {
|
|
294
|
+
const text = textEntry.cultures[targetLanguage];
|
|
295
|
+
return text;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
// 对应语种没有文本,返回空字符串
|
|
299
|
+
return '';
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// 处理字符串格式的 defaultContent
|
|
306
|
+
if (typeof defaultContent === 'string') {
|
|
307
|
+
return defaultContent;
|
|
308
|
+
}
|
|
309
|
+
return '';
|
|
310
|
+
}
|
|
136
311
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"TextStateElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"./text-state.model","name":"TextState","line":
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"TextStateElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"./text-state.model","name":"TextState","line":23,"character":45}]},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","module":"../../../logger","name":"LoggerService","line":26,"character":33},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"../../../model/switch-indicator-light/indicator-light-fault-flicker","name":"IndicatorLightFaultFlicker","line":28,"character":41}]},{"__symbolic":"reference","module":"../../../model/base/font-setting-model","name":"TextLibrarySetting","line":29,"character":46},{"__symbolic":"reference","module":"../../../service","name":"TextLibraryService","line":30,"character":46},{"__symbolic":"reference","module":"../../../service","name":"LanguageService","line":31,"character":43},{"__symbolic":"reference","module":"../../../gui/gui-context","name":"GuiContext","line":32,"character":38},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"error","message":"Expression form not supported","line":34,"character":45}]}],"switchToState":[{"__symbolic":"method"}],"subscribeLanguageChange":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"getforeignObjectElement":[{"__symbolic":"method"}],"removeForeignObjectlement":[{"__symbolic":"method"}],"doFaultFlicker":[{"__symbolic":"method"}],"clearFlickerInterval":[{"__symbolic":"method"}],"getFontForState":[{"__symbolic":"method"}],"getDisplayText":[{"__symbolic":"method"}]}}}}]
|