@shijiu/jsview 1.9.730 → 1.9.747
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/dom/jsv-browser-debug-dom.js +1 -1
- package/dom/jsv-dom.js +1 -1
- package/dom/jsv-engine-js-browser.js +1 -1
- package/dom/jsv-forge-define.js +1 -1
- package/package.json +14 -17
- package/patches/node_modules/vite/dist/node/chunks/dep-0fc8e132.js +8 -1
- package/patches/node_modules/vite/dist/node/jsview.vite.config.js +12 -6
- package/dom/jsview-dom/README.md +0 -5
- package/dom/jsview-dom/package-lock.json-perfect +0 -3898
- package/dom/jsview-dom/package.json +0 -23
- package/dom/jsview-dom/rollup/browser-debug-dom.rollup.config.js +0 -15
- package/dom/jsview-dom/rollup/dom.rollup.config.js +0 -14
- package/dom/jsview-dom/rollup/engine-js-browser.rollup.config.js +0 -14
- package/dom/jsview-dom/rollup/forge-define.rollup.config.js +0 -14
- package/dom/jsview-dom/scripts/release_dist.sh +0 -36
- package/dom/jsview-dom/src/dom-browser-hook/HookDocument.js +0 -118
- package/dom/jsview-dom/src/dom-browser-hook/OriginDocument.js +0 -19
- package/dom/jsview-dom/src/dom-browser-hook/StyleFormatCheck.js +0 -559
- package/dom/jsview-dom/src/dom-browser-hook/index.js +0 -6
- package/dom/jsview-dom/src/dom-wrapper/ForgeExtension.js +0 -226
- package/dom/jsview-dom/src/dom-wrapper/JsViewForgeApp.js +0 -85
- package/dom/jsview-dom/src/dom-wrapper/JsViewProxy.js +0 -51
- package/dom/jsview-dom/src/dom-wrapper/event/AnimationEvent.js +0 -7
- package/dom/jsview-dom/src/dom-wrapper/event/Event.js +0 -12
- package/dom/jsview-dom/src/dom-wrapper/event/FocusEvent.js +0 -9
- package/dom/jsview-dom/src/dom-wrapper/event/KeyboardEvent.js +0 -43
- package/dom/jsview-dom/src/dom-wrapper/event/LoadEvent.js +0 -8
- package/dom/jsview-dom/src/dom-wrapper/index.js +0 -16
- package/dom/jsview-dom/src/dom-wrapper/node/AnchorElement.js +0 -24
- package/dom/jsview-dom/src/dom-wrapper/node/AudioElement.js +0 -60
- package/dom/jsview-dom/src/dom-wrapper/node/Comment.js +0 -10
- package/dom/jsview-dom/src/dom-wrapper/node/DivElement.js +0 -498
- package/dom/jsview-dom/src/dom-wrapper/node/Document.js +0 -274
- package/dom/jsview-dom/src/dom-wrapper/node/Element.js +0 -852
- package/dom/jsview-dom/src/dom-wrapper/node/FDivElement.js +0 -48
- package/dom/jsview-dom/src/dom-wrapper/node/HeadElement.js +0 -47
- package/dom/jsview-dom/src/dom-wrapper/node/ImageElement.js +0 -203
- package/dom/jsview-dom/src/dom-wrapper/node/JsvAudioTrackElement.js +0 -22
- package/dom/jsview-dom/src/dom-wrapper/node/JsvElement.js +0 -40
- package/dom/jsview-dom/src/dom-wrapper/node/LinkElement.js +0 -48
- package/dom/jsview-dom/src/dom-wrapper/node/MediaElement.js +0 -230
- package/dom/jsview-dom/src/dom-wrapper/node/Node.js +0 -178
- package/dom/jsview-dom/src/dom-wrapper/node/SVGElement.js +0 -9
- package/dom/jsview-dom/src/dom-wrapper/node/ScriptElement.js +0 -45
- package/dom/jsview-dom/src/dom-wrapper/node/StyleElement.js +0 -33
- package/dom/jsview-dom/src/dom-wrapper/node/StyleElementCache.js +0 -41
- package/dom/jsview-dom/src/dom-wrapper/node/Text.js +0 -22
- package/dom/jsview-dom/src/dom-wrapper/node/UnknownElement.js +0 -4
- package/dom/jsview-dom/src/dom-wrapper/node/VideoElement.js +0 -237
- package/dom/jsview-dom/src/dom-wrapper/style/BorderImage.js +0 -25
- package/dom/jsview-dom/src/dom-wrapper/style/Inset.js +0 -26
- package/dom/jsview-dom/src/dom-wrapper/style/JsvStyleVariable.js +0 -65
- package/dom/jsview-dom/src/dom-wrapper/style/KeyframeRule.js +0 -11
- package/dom/jsview-dom/src/dom-wrapper/style/StyleDeclaration.js +0 -609
- package/dom/jsview-dom/src/dom-wrapper/style/StyleSheet.js +0 -51
- package/dom/jsview-dom/src/dom-wrapper/style/StyleValue.js +0 -385
- package/dom/jsview-dom/src/dom-wrapper/style/TextStylePackMap.js +0 -43
- package/dom/jsview-dom/src/dom-wrapper/style/URL.js +0 -144
- package/dom/jsview-dom/src/dom-wrapper/utils/EventHandler.js +0 -42
- package/dom/jsview-dom/src/dom-wrapper/utils/FDivRoot.js +0 -86
- package/dom/jsview-dom/src/dom-wrapper/utils/JsvLazySyncCache.js +0 -64
- package/dom/jsview-dom/src/dom-wrapper/utils/Log.js +0 -42
- package/dom/jsview-dom/src/dom-wrapper/utils/MutationObserver.js +0 -32
- package/dom/jsview-dom/src/dom-wrapper/utils/focusableNode.js +0 -715
- package/dom/jsview-dom/src/engine-js/ForgeDefine.js +0 -8
- package/dom/jsview-dom/src/engine-js/ForgeExtensionDefine.js +0 -14
- package/dom/jsview-dom/src/engine-js/browser/PlatformUtils.js +0 -100
- package/dom/jsview-dom/src/engine-js/browser/animation_base.js +0 -313
- package/dom/jsview-dom/src/engine-js/browser/animation_keyframe.js +0 -64
- package/dom/jsview-dom/src/engine-js/browser/animation_progress.js +0 -287
- package/dom/jsview-dom/src/engine-js/browser/animation_proxy.js +0 -906
- package/dom/jsview-dom/src/engine-js/browser/apic_decoder/demux.js +0 -143
- package/dom/jsview-dom/src/engine-js/browser/apic_decoder/gifDecoder.js +0 -12
- package/dom/jsview-dom/src/engine-js/browser/apic_decoder/libwebp-0.6.0.min.js +0 -160
- package/dom/jsview-dom/src/engine-js/browser/console_log.js +0 -25
- package/dom/jsview-dom/src/engine-js/browser/dynamic_key_frames.js +0 -95
- package/dom/jsview-dom/src/engine-js/browser/easing.js +0 -114
- package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/element_transform.js +0 -122
- package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/gjk.js +0 -450
- package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/mat.js +0 -102
- package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/range_model.js +0 -296
- package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/test_collide.js +0 -10
- package/dom/jsview-dom/src/engine-js/browser/index.js +0 -38
- package/dom/jsview-dom/src/engine-js/browser/latex_parse.js +0 -336
- package/dom/jsview-dom/src/engine-js/browser/layout_params.js +0 -113
- package/dom/jsview-dom/src/engine-js/browser/layout_view.js +0 -3545
- package/dom/jsview-dom/src/engine-js/browser/layout_view_debug.js +0 -15
- package/dom/jsview-dom/src/engine-js/browser/media.js +0 -379
- package/dom/jsview-dom/src/engine-js/browser/page_base.js +0 -941
- package/dom/jsview-dom/src/engine-js/browser/particle_view.js +0 -526
- package/dom/jsview-dom/src/engine-js/browser/platform_timer.js +0 -61
- package/dom/jsview-dom/src/engine-js/browser/react_utils.js +0 -5
- package/dom/jsview-dom/src/engine-js/browser/rect_utils.js +0 -91
- package/dom/jsview-dom/src/engine-js/browser/render_bridge.js +0 -128
- package/dom/jsview-dom/src/engine-js/browser/render_texture_proxy.js +0 -155
- package/dom/jsview-dom/src/engine-js/browser/renderer_deprecated.js +0 -75
- package/dom/jsview-dom/src/engine-js/browser/sound_pool.js +0 -139
- package/dom/jsview-dom/src/engine-js/browser/steps_animation.js +0 -192
- package/dom/jsview-dom/src/engine-js/browser/text_style_cache.js +0 -454
- package/dom/jsview-dom/src/engine-js/browser/text_utils.js +0 -299
- package/dom/jsview-dom/src/engine-js/browser/text_view.js +0 -428
- package/dom/jsview-dom/src/engine-js/browser/texture_manager.js +0 -1060
- package/dom/jsview-dom/src/engine-js/browser/url.js +0 -69
- package/dom/jsview-dom/src/engine-js/browser/velocity.js +0 -40
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/autofroze_sensor.js +0 -77
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/drag_impact_sensor.js +0 -67
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor.js +0 -98
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_callback.js +0 -21
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_manager.js +0 -24
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/index.js +0 -9
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor.js +0 -268
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor_manager.js +0 -84
- package/dom/jsview-dom/src/engine-js/browser/view_sensor/visible_sensor.js +0 -213
- package/dom/jsview-dom/src/engine-js/browser/view_store.js +0 -41
- package/dom/jsview-dom/src/engine-js/index.js +0 -2
- package/dom/jsview-dom/src/engine-js/native/README.md +0 -1
|
@@ -1,715 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-extra-boolean-cast */
|
|
2
|
-
/* eslint-disable no-prototype-builtins */
|
|
3
|
-
|
|
4
|
-
import Forge from "../../engine-js/ForgeDefine";
|
|
5
|
-
|
|
6
|
-
function DebugPrintFocusNode() {
|
|
7
|
-
console.log("FocusNode:");
|
|
8
|
-
console.log(FocusNode.sLastFocus);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
class Hub {
|
|
12
|
-
constructor(container_only, name_space) {
|
|
13
|
-
this.RouterDelegate = {
|
|
14
|
-
ref: null
|
|
15
|
-
};
|
|
16
|
-
if (!container_only) {
|
|
17
|
-
this.RouterDelegate.ref = new RouterInner(false, name_space); // 创建正式Router
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
getNodeByName(name) {
|
|
22
|
-
return this.RouterDelegate.ref.getNodeByName(name);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
focusByNameBeforeMount(name, resotre_pre_child_focus) {
|
|
26
|
-
if (name.includes(".")) {
|
|
27
|
-
name = name.split(".");
|
|
28
|
-
}
|
|
29
|
-
return this.RouterDelegate.ref.focusBeforeMount(name, resotre_pre_child_focus);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
setFocus(name, resotre_pre_child_focus) {
|
|
33
|
-
return this.focusByNameBeforeMount(name, resotre_pre_child_focus);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
printFocusList() {
|
|
37
|
-
for (let node_name in this.RouterDelegate.ref._ChildMap) {
|
|
38
|
-
console.log(`branchName[${node_name}] ${node_name === this.RouterDelegate.ref._FocusNodeName ? "focused" : ""}`,
|
|
39
|
-
this.RouterDelegate.ref._ChildMap[node_name]);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
printGlobalLastFocus() {
|
|
44
|
-
DebugPrintFocusNode();
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
getCurrentFocusStack() {
|
|
48
|
-
const result = [];
|
|
49
|
-
if (this.RouterDelegate.ref) {
|
|
50
|
-
let node = this.RouterDelegate.ref.getCurrentFocusNode();
|
|
51
|
-
// 仅处理单Hub中的内容
|
|
52
|
-
// TODO:要处理跨HUB的内容报出,为了vue从根hub进行焦点打印时的需求
|
|
53
|
-
while (node
|
|
54
|
-
&& node instanceof FocusNode
|
|
55
|
-
&& node.RouterDelegate.ref === this.RouterDelegate.ref) {
|
|
56
|
-
result.push({
|
|
57
|
-
name: node.BranchName,
|
|
58
|
-
});
|
|
59
|
-
node = node.GetParentPage();
|
|
60
|
-
}
|
|
61
|
-
} else {
|
|
62
|
-
console.error("getCurrentFocusStack failed: router delegate is null.")
|
|
63
|
-
}
|
|
64
|
-
return result;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
debugPrintNodes() {
|
|
68
|
-
console.log("***print focus nodes***");
|
|
69
|
-
for (let key in this.RouterDelegate.ref._ChildMap) {
|
|
70
|
-
if (!key.includes("__DEFAULT_ID_")) {
|
|
71
|
-
console.log(key, this.RouterDelegate.ref._ChildMap[key]);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
console.log("***********************");
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
class RouterInner {
|
|
79
|
-
constructor(is_tmp, name_space) {
|
|
80
|
-
this._IsTemp = !!is_tmp;
|
|
81
|
-
this._ChildMap = {}
|
|
82
|
-
this._FocusNameBeforeMount = null;
|
|
83
|
-
this._FocusNodeName = null;
|
|
84
|
-
this.NameSpace = name_space;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
getCurrentFocusNode() {
|
|
88
|
-
return this._ChildMap[this._FocusNodeName];
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
getNodeByName(full_name, caller_node) {
|
|
92
|
-
// Router拓补图设计是仿照namespace嵌套的拓扑图设计的,full_name格式为
|
|
93
|
-
// 相对namespace访问方式: namespace.namespace.name
|
|
94
|
-
// 以root为基点访问方式: .namespace.namespace.name
|
|
95
|
-
// 所以查找逻辑为:
|
|
96
|
-
// 1. 找到full_name中第一节所对应的Router:
|
|
97
|
-
// A. 绝对路径为root node的router
|
|
98
|
-
// B. 相对路径为本节点的router
|
|
99
|
-
// C. 仅有name则本节点router为查找源
|
|
100
|
-
// 2. 一节节分析full_name,作为NameSpace查找下一级Router直到最后一节router
|
|
101
|
-
// 3. 在最后一节router中以name查找节点
|
|
102
|
-
let path_array = full_name.split(".");
|
|
103
|
-
let start_router = this._FindRouterSearchBase(path_array, caller_node);
|
|
104
|
-
return start_router._GetNodeFromPathArray(path_array, full_name);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
_FindRouterSearchBase(path_array, caller_node) {
|
|
108
|
-
if (path_array[0].length == 0) {
|
|
109
|
-
// 绝对路径,找root节点,再从root开始查找
|
|
110
|
-
let node = undefined;
|
|
111
|
-
for (let id in this._ChildMap) {
|
|
112
|
-
// 以任意节点开始溯源
|
|
113
|
-
node = this._ChildMap[id];
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
let root_node;
|
|
117
|
-
do {
|
|
118
|
-
root_node = node;
|
|
119
|
-
node = node.GetParentPage();
|
|
120
|
-
} while (node != null);
|
|
121
|
-
|
|
122
|
-
// 去除path_array中代表root的第一节
|
|
123
|
-
path_array.splice(0, 1);
|
|
124
|
-
|
|
125
|
-
return root_node.RouterDelegate.ref;
|
|
126
|
-
} else {
|
|
127
|
-
// 相对路径
|
|
128
|
-
if (caller_node && caller_node.AsHub) {
|
|
129
|
-
// Hub节点的默认查找行为,不是向子查找,而是查找兄弟节点,所以父节点的Router来查找
|
|
130
|
-
if (caller_node.GetParentPage()) {
|
|
131
|
-
return caller_node.GetParentPage().RouterDelegate.ref;
|
|
132
|
-
} else {
|
|
133
|
-
// Root节点,自能从自己进行查找
|
|
134
|
-
return this;
|
|
135
|
-
}
|
|
136
|
-
} else {
|
|
137
|
-
// 以本节点为基础进行查找
|
|
138
|
-
return this;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
_GetNodeFromPathArray(path_array, full_name) {
|
|
144
|
-
let deepth = 0;
|
|
145
|
-
let router = this;
|
|
146
|
-
|
|
147
|
-
// 以节点的Router是否与自己相同来判断是否是含有实际Router的节点
|
|
148
|
-
// 然后通过名字对比找到目标Router
|
|
149
|
-
while (deepth < path_array.length - 1) {
|
|
150
|
-
let found = false;
|
|
151
|
-
for (let id in router._ChildMap) {
|
|
152
|
-
let child_router = router._ChildMap[id].RouterDelegate.ref;
|
|
153
|
-
if (child_router != router && child_router.NameSpace == path_array[deepth]) {
|
|
154
|
-
// 找到子节点
|
|
155
|
-
router = child_router;
|
|
156
|
-
deepth++;
|
|
157
|
-
found = true;
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
if (!found) {
|
|
162
|
-
console.error(`Error: no found subpath fname=${full_name}`);
|
|
163
|
-
return undefined;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
let name = path_array[deepth]; // 路径最后一节为节点名称
|
|
168
|
-
if (router._ChildMap.hasOwnProperty(name)) {
|
|
169
|
-
return router._ChildMap[name];
|
|
170
|
-
} else {
|
|
171
|
-
console.error(`Error: no found fname=${full_name}`);
|
|
172
|
-
return undefined;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
add(name, focus_node) {
|
|
177
|
-
if (name.indexOf('.') >= 0) {
|
|
178
|
-
console.error(`ERROR: FDiv name can not contains '.'`)
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
if (this._ChildMap.hasOwnProperty(name) && this._ChildMap[name] !== focus_node) {
|
|
183
|
-
console.error(`ERROR: FDiv router branch name duplicated:[${name}]`);
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
this._ChildMap[name] = focus_node;
|
|
188
|
-
|
|
189
|
-
// Resume focus before mount/add
|
|
190
|
-
if (this._FocusNameBeforeMount) {
|
|
191
|
-
if (typeof this._FocusNameBeforeMount == "string") {
|
|
192
|
-
if (this._FocusNameBeforeMount == name) {
|
|
193
|
-
this._FocusNameBeforeMount = null;
|
|
194
|
-
focus_node.Focus();
|
|
195
|
-
}
|
|
196
|
-
} else{
|
|
197
|
-
let nodeName = this._FocusNameBeforeMount[0];
|
|
198
|
-
if (nodeName == name) {
|
|
199
|
-
focus_node.RouterDelegate.ref.focusBeforeMount(this._FocusNameBeforeMount.slice(1))
|
|
200
|
-
this._FocusNameBeforeMount = null;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
remove(name, focus_node) {
|
|
207
|
-
let map_node = this._ChildMap[name];
|
|
208
|
-
if (map_node && map_node == focus_node) {
|
|
209
|
-
delete this._ChildMap[name];
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// 清理焦点缓存信息会导致节点重新mount时丢失焦点,因此需要保持缓存
|
|
213
|
-
// if (this._FocusNodeName == name) {
|
|
214
|
-
// this._FocusNodeName = null;
|
|
215
|
-
// }
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
rename(origin_name, new_name) {
|
|
219
|
-
// 检查是否在列表中
|
|
220
|
-
if (!this._ChildMap.hasOwnProperty(origin_name)) {
|
|
221
|
-
console.error(`ERROR: alter name failed ${origin_name}->${new_name}`);
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// 移除原名
|
|
226
|
-
let focus_node = this._ChildMap[origin_name];
|
|
227
|
-
delete this._ChildMap[origin_name];
|
|
228
|
-
|
|
229
|
-
// 添加为新名
|
|
230
|
-
this.add(new_name, focus_node);
|
|
231
|
-
|
|
232
|
-
// 焦点缓存也进行切换
|
|
233
|
-
if (this._FocusNodeName == origin_name) {
|
|
234
|
-
this._FocusNodeName = new_name;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
focusBeforeMount(name, resotre_pre_child_focus) {
|
|
239
|
-
let nameLegal = false;
|
|
240
|
-
if (name.indexOf(".") >= 0) {
|
|
241
|
-
console.error("ERROR: not support name with namespace")
|
|
242
|
-
return false;
|
|
243
|
-
}
|
|
244
|
-
if (typeof name == "string") {
|
|
245
|
-
if (!name.includes(".")) {
|
|
246
|
-
nameLegal = true;
|
|
247
|
-
let focus_node = this._ChildMap[name];
|
|
248
|
-
this._FocusNodeName = name;
|
|
249
|
-
if (focus_node) {
|
|
250
|
-
focus_node.Focus(!resotre_pre_child_focus);
|
|
251
|
-
return true
|
|
252
|
-
}
|
|
253
|
-
this._FocusNameBeforeMount = name;
|
|
254
|
-
return false;
|
|
255
|
-
}
|
|
256
|
-
} else if (typeof name == "object") {
|
|
257
|
-
if (Array.isArray(name)) {
|
|
258
|
-
if (name.length > 0) {
|
|
259
|
-
nameLegal = true;
|
|
260
|
-
if (name.length == 1) {
|
|
261
|
-
return this.focusBeforeMount(name[0])
|
|
262
|
-
} else {
|
|
263
|
-
let nodeName = name[0];
|
|
264
|
-
let focus_node = this._ChildMap[nodeName];
|
|
265
|
-
this._FocusNodeName = nodeName;
|
|
266
|
-
if (focus_node) {
|
|
267
|
-
return focus_node.RouterDelegate.ref.focusBeforeMount(name.slice(1))
|
|
268
|
-
}
|
|
269
|
-
this._FocusNameBeforeMount = name;
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
if (!nameLegal) {
|
|
276
|
-
console.error("illegal name param", name)
|
|
277
|
-
}
|
|
278
|
-
return false;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
focus(name, resotre_pre_child_focus) {
|
|
282
|
-
let node_existed = this.focusBeforeMount(name, resotre_pre_child_focus);
|
|
283
|
-
if (!node_existed)
|
|
284
|
-
console.log("No found branch:" + name);
|
|
285
|
-
|
|
286
|
-
return node_existed;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
forEach(func) {
|
|
290
|
-
for (let name in this._ChildMap) {
|
|
291
|
-
func(this._ChildMap[name], name, this._ChildMap)
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
printNodes() {
|
|
296
|
-
console.log(this._ChildMap);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
class FocusNode extends Forge.PageBase {
|
|
301
|
-
constructor(name) {
|
|
302
|
-
super(name);
|
|
303
|
-
this._OnKeyDown = null;
|
|
304
|
-
this._OnKeyUp = null;
|
|
305
|
-
this._OnFocus = null;
|
|
306
|
-
this._OnBlur = null;
|
|
307
|
-
this._DispatchKeyDown = null;
|
|
308
|
-
this._DispatchKeyUp = null;
|
|
309
|
-
this._OnCustomerEvent = null;
|
|
310
|
-
this._DKeyDownProxy = undefined;
|
|
311
|
-
this._DKeyUpProxy = undefined;
|
|
312
|
-
this._Mounted = false;
|
|
313
|
-
this.BranchName = name;
|
|
314
|
-
this.AsHub = false;
|
|
315
|
-
|
|
316
|
-
this.InterfaceHub = null;
|
|
317
|
-
|
|
318
|
-
// RouterDelegate
|
|
319
|
-
// 当子节点RouterDelegate不独立时, 父子节点中的RouterDelegate为同一实例
|
|
320
|
-
// 用解决RouterDelegate.ref由临时节点改为正式节点时,所有非独立Router的FocusNode能同时改变的问题
|
|
321
|
-
this.RouterDelegate = {
|
|
322
|
-
ref: null,
|
|
323
|
-
};
|
|
324
|
-
this._TmpRouter = null;
|
|
325
|
-
|
|
326
|
-
// 不能写成(ev)=>模式,因为里面需要调用super
|
|
327
|
-
this._OriginDispatchKeyDown = this._OriginDispatchKeyDown.bind(this);
|
|
328
|
-
this._OriginDispatchKeyUp = this._OriginDispatchKeyUp.bind(this);
|
|
329
|
-
|
|
330
|
-
this._AutoShow = false; // TODO: AutoShow调整成false以避免PageBase产生问题
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
updateMountState() {
|
|
334
|
-
this._Mounted = true;
|
|
335
|
-
let sub_nodes = this.SubPages; // 拿去SubPages当前对象,不能永久ref,SubPages进行清空时会换对象
|
|
336
|
-
for (let index in sub_nodes) {
|
|
337
|
-
sub_nodes[index].updateMountState();
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
getHub() {
|
|
342
|
-
// 不直接返回RouterInner, 访问RouterInner的外部接口由Hub提供
|
|
343
|
-
if (!this.InterfaceHub) {
|
|
344
|
-
this.InterfaceHub = new Hub(true);
|
|
345
|
-
this.InterfaceHub.RouterDelegate = this.RouterDelegate;
|
|
346
|
-
}
|
|
347
|
-
return this.InterfaceHub;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
setHub(hub) {
|
|
351
|
-
if (!this.RouterDelegate.ref) {
|
|
352
|
-
// 只同步hub中的Router实例
|
|
353
|
-
this.RouterDelegate.ref = hub.RouterDelegate.ref;
|
|
354
|
-
this.AsHub = true;
|
|
355
|
-
} else {
|
|
356
|
-
console.error("Error: hub is already setted.");
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
_UseParentRouter(router_delegate) {
|
|
361
|
-
this.RouterDelegate = router_delegate;
|
|
362
|
-
|
|
363
|
-
// 同时更新用户调用接口中的RouterDelegate
|
|
364
|
-
if (this.InterfaceHub) {
|
|
365
|
-
this.InterfaceHub.RouterDelegate = router_delegate;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
routerAdd(name, focus_node) {
|
|
370
|
-
if (!focus_node.RouterDelegate.ref) {
|
|
371
|
-
// 子节点自身无Router,则共用父节点的Router
|
|
372
|
-
focus_node._UseParentRouter(this.RouterDelegate);
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
if (!this.RouterDelegate.ref) {
|
|
376
|
-
// 未和根节点取得联系,线使用临时Router收集所有子节点
|
|
377
|
-
this.RouterDelegate.ref = new RouterInner(true);
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
this.RouterDelegate.ref.add(name, focus_node);
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
routerRenameChild(origin_name, new_name) {
|
|
384
|
-
this.RouterDelegate.ref.rename(origin_name, new_name);
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
printFocusList() {
|
|
388
|
-
if (this.RouterDelegate.ref) {
|
|
389
|
-
this.RouterDelegate.ref.printFocusList();
|
|
390
|
-
} else {
|
|
391
|
-
console.error("Error: no router");
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
routerUnbind() {
|
|
396
|
-
let router
|
|
397
|
-
if (this.AsHub) {
|
|
398
|
-
// Hub节点的默认查找行为,不是向子查找,而是查找兄弟节点,所以父节点的Router来查找
|
|
399
|
-
if (this.GetParentPage()) {
|
|
400
|
-
router = this.GetParentPage().RouterDelegate.ref;
|
|
401
|
-
}
|
|
402
|
-
} else {
|
|
403
|
-
router = this.RouterDelegate.ref
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
if (router) {
|
|
407
|
-
router.remove(this.BranchName, this);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
setBranchName(name) {
|
|
412
|
-
if (name === this.BranchName) {
|
|
413
|
-
// 同名不用改
|
|
414
|
-
return;
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
let origin_name = this.BranchName;
|
|
418
|
-
this.BranchName = name;
|
|
419
|
-
this.PageName = name;
|
|
420
|
-
|
|
421
|
-
if (this._ParentPage) {
|
|
422
|
-
// 已经关联父节点,需要进行Router更名
|
|
423
|
-
this._ParentPage.routerRenameChild(origin_name, name);
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
setOnKeyDown(onkeydown) {
|
|
428
|
-
this._OnKeyDown = onkeydown;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
setOnKeyUp(onkeyup) {
|
|
432
|
-
this._OnKeyUp = onkeyup;
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
setOnFocus(onfoucs) {
|
|
436
|
-
this._OnFocus = onfoucs;
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
setOnBlur(onblur) {
|
|
440
|
-
this._OnBlur = onblur;
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
setDispatchKeyUp(dispatchckeyup) {
|
|
444
|
-
this._DispatchKeyUp = dispatchckeyup;
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
setDispatchKeyDown(dispatchkeydown) {
|
|
448
|
-
this._DispatchKeyDown = dispatchkeydown
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
setOnCustomerEvent(onCustomerEvent) {
|
|
452
|
-
this._OnCustomerEvent = onCustomerEvent;
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
setDispatchKeyProxy(keydown_proxy, keyup_proxy) {
|
|
456
|
-
this._DKeyDownProxy = keydown_proxy;
|
|
457
|
-
this._DKeyUpProxy = keyup_proxy;
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
requestFocus(resotre_pre_child_focus) {
|
|
461
|
-
let router = this.RouterDelegate.ref;
|
|
462
|
-
if (this.AsHub) {
|
|
463
|
-
// Hub节点的默认查找行为,不是向子查找,而是查找兄弟节点,所以父节点的Router来查找
|
|
464
|
-
if (this.GetParentPage()) {
|
|
465
|
-
router = this.GetParentPage().RouterDelegate.ref;
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
if (!!router) {
|
|
469
|
-
return router.focus(this.BranchName, resotre_pre_child_focus);
|
|
470
|
-
} else {
|
|
471
|
-
console.error("error: lost router");
|
|
472
|
-
return false;
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
// Override OnKeyDown
|
|
477
|
-
OnKeyDown(ev) {
|
|
478
|
-
if (!!this._OnKeyDown) {
|
|
479
|
-
return this._OnKeyDown(ev);
|
|
480
|
-
} else {
|
|
481
|
-
return false;
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
// Override OnKeyUp
|
|
486
|
-
OnKeyUp(ev) {
|
|
487
|
-
if (!!this._OnKeyUp) {
|
|
488
|
-
return this._OnKeyUp(ev);
|
|
489
|
-
} else {
|
|
490
|
-
return false;
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
// Override OnCustomerEvent
|
|
495
|
-
OnCustomerEvent(ev) {
|
|
496
|
-
if (this._OnCustomerEvent) {
|
|
497
|
-
return this._OnCustomerEvent(ev);
|
|
498
|
-
} else {
|
|
499
|
-
return false;
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
// alter of PageBase.BubbleCustomerEvent
|
|
504
|
-
bubbleCustomerEvent(ev) {
|
|
505
|
-
this.BubbleCustomerEvent(ev);
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
// alter of PageBase.DispatchKeyDown()
|
|
509
|
-
dispatchKeyDown(ev) {
|
|
510
|
-
return this.DispatchKeyDown(ev);
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
// Override DispatchKeyDown
|
|
514
|
-
DispatchKeyDown(ev) {
|
|
515
|
-
FocusNode.sLastFocus = this;
|
|
516
|
-
if (this._DKeyDownProxy) {
|
|
517
|
-
// 外部接管Dispatch流程,例如react的root
|
|
518
|
-
return this._DKeyDownProxy(ev, this._OriginDispatchKeyDown);
|
|
519
|
-
} else {
|
|
520
|
-
return this._OriginDispatchKeyDown(ev);
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
_OriginDispatchKeyDown(ev) {
|
|
525
|
-
let consumed = false;
|
|
526
|
-
if (this._DispatchKeyDown) {
|
|
527
|
-
consumed = this._DispatchKeyDown(ev);
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
if (!consumed) {
|
|
531
|
-
return super.DispatchKeyDown(ev);
|
|
532
|
-
} else {
|
|
533
|
-
return true;
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
// alter of PageBase.DispatchKeyDown()
|
|
538
|
-
dispatchKeyUp(ev) {
|
|
539
|
-
return this.DispatchKeyUp(ev);
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
// Override DispatchKeyUp
|
|
543
|
-
DispatchKeyUp(ev) {
|
|
544
|
-
if (this.__DKeyUpProxy) {
|
|
545
|
-
// 外部接管Dispatch流程,例如react的root
|
|
546
|
-
return this.__DKeyUpProxy(ev, this._OriginDispatchKeyUp);
|
|
547
|
-
} else {
|
|
548
|
-
return this._OriginDispatchKeyUp(ev);
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
_OriginDispatchKeyUp(ev) {
|
|
553
|
-
let consumed = false;
|
|
554
|
-
if (this._DispatchKeyUp) {
|
|
555
|
-
consumed = this._DispatchKeyUp(ev);
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
if (!consumed) {
|
|
559
|
-
return super.DispatchKeyUp(ev);
|
|
560
|
-
} else {
|
|
561
|
-
return true;
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
// alter of PageBase.attachToActivity()
|
|
566
|
-
attachToActivity(activity, content_view) {
|
|
567
|
-
this.AttachToActivity(activity, content_view);
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
// Override AttachToActivity
|
|
571
|
-
AttachToActivity(activity, content_view) {
|
|
572
|
-
super.SetParent(activity, content_view);
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
// alter of PageBase.SetParent()
|
|
576
|
-
setParent(parent) {
|
|
577
|
-
this.SetParent(parent);
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
// Override SetParent
|
|
581
|
-
SetParent(parent) {
|
|
582
|
-
if (parent == null) {
|
|
583
|
-
// Forge.ThrowError("ERROR: parent is null");
|
|
584
|
-
return;
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
super.SetParent(parent, null);
|
|
588
|
-
|
|
589
|
-
if (this._ParentPage._Mounted) {
|
|
590
|
-
this.updateMountState();
|
|
591
|
-
trigger_focus();
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
if (parent instanceof FocusNode) {
|
|
595
|
-
if (this.RouterDelegate.ref && this.RouterDelegate.ref._IsTemp) {
|
|
596
|
-
// 发现临时节点
|
|
597
|
-
let tmp_router = this.RouterDelegate.ref;
|
|
598
|
-
this.RouterDelegate.ref = null; // 重置ref,避免RouterDelegate向上关联处理失效
|
|
599
|
-
|
|
600
|
-
// 将节点内所有子内容转移到父节点中
|
|
601
|
-
tmp_router.forEach((value, key) => {
|
|
602
|
-
parent.routerAdd(key, value)
|
|
603
|
-
});
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
// 挂载自身到父节点中
|
|
607
|
-
parent.routerAdd(this.BranchName, this);
|
|
608
|
-
} else {
|
|
609
|
-
// 纯forge节点(可能为root节点),不需要Router进行关联处理
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
// alter of PageBase.Focus()
|
|
614
|
-
focus(blur_child_foucs) {
|
|
615
|
-
this.Focus(blur_child_foucs);
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
// Override Focus
|
|
619
|
-
Focus(blur_child_foucs) {
|
|
620
|
-
if (!this._Mounted) {
|
|
621
|
-
FocusNode.sFocusMemos.push({ obj: this, bcf: blur_child_foucs });
|
|
622
|
-
console.log("page base tree not build, cache focus")
|
|
623
|
-
return;
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
super.Focus(blur_child_foucs);
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
//Override OnFocus
|
|
630
|
-
OnFocus() {
|
|
631
|
-
if (this._OnFocus)
|
|
632
|
-
this._OnFocus();
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
//Override OnBlur
|
|
636
|
-
OnBlur() {
|
|
637
|
-
if (this._OnBlur)
|
|
638
|
-
this._OnBlur();
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
onUnMount() {
|
|
642
|
-
// 脱离父节点
|
|
643
|
-
let parent_node = this.GetParentPage();
|
|
644
|
-
if (parent_node) {
|
|
645
|
-
parent_node.RemoveSubPage(this);
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
// 清理所有子节点
|
|
649
|
-
this.ClearSubPages();
|
|
650
|
-
|
|
651
|
-
// 解除Rounter关联
|
|
652
|
-
this.routerUnbind();
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
getName() {
|
|
656
|
-
let node = this;
|
|
657
|
-
let path_array = [this.RouterDelegate.ref.NameSpace];
|
|
658
|
-
if(!this.AsHub) {
|
|
659
|
-
path_array.push(this.BranchName);
|
|
660
|
-
}
|
|
661
|
-
let router = this.RouterDelegate.ref;
|
|
662
|
-
do {
|
|
663
|
-
node = node.GetParentPage();
|
|
664
|
-
if (path_array[0] == "__AppRoot__") {
|
|
665
|
-
break;
|
|
666
|
-
}
|
|
667
|
-
if (node && node.RouterDelegate.ref != router) {
|
|
668
|
-
// Found new level router
|
|
669
|
-
router = node.RouterDelegate.ref;
|
|
670
|
-
path_array.unshift(router.NameSpace);
|
|
671
|
-
}
|
|
672
|
-
} while (node);
|
|
673
|
-
|
|
674
|
-
if (path_array[0] == "__AppRoot__") {
|
|
675
|
-
// 调整root节点的显示名
|
|
676
|
-
path_array[0] = "";
|
|
677
|
-
} else {
|
|
678
|
-
console.error("ERROR: missing app root");
|
|
679
|
-
}
|
|
680
|
-
|
|
681
|
-
return path_array.join('.');
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
getNodeByName(name) {
|
|
685
|
-
return this.RouterDelegate.ref.getNodeByName(name, this);
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
printFocusNodeList() {
|
|
689
|
-
this.getHub().printFocusList();
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
printGlobalLastFocus() {
|
|
693
|
-
this.getHub().printGlobalLastFocus()
|
|
694
|
-
}
|
|
695
|
-
}
|
|
696
|
-
FocusNode.sFocusMemos = [];
|
|
697
|
-
FocusNode.sLastFocus = null;
|
|
698
|
-
FocusNode.sRootPageNode = null;
|
|
699
|
-
|
|
700
|
-
let trigger_focus = () => {
|
|
701
|
-
let memo_size = FocusNode.sFocusMemos.length;
|
|
702
|
-
if (memo_size > 0) {
|
|
703
|
-
let focus_memo = FocusNode.sFocusMemos;
|
|
704
|
-
FocusNode.sFocusMemos = [];
|
|
705
|
-
for (let i = 0; i < memo_size; i++) {
|
|
706
|
-
focus_memo[i].obj.Focus(focus_memo[i].bcf);
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
export {
|
|
712
|
-
FocusNode,
|
|
713
|
-
trigger_focus as TriggerFocus,
|
|
714
|
-
Hub as FocusHub
|
|
715
|
-
}
|