efront 4.22.17 → 4.22.19
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/coms/basic/JSAM.js +34 -14
- package/coms/basic/JSAM_test.js +253 -3
- package/coms/basic/assert.js +21 -6
- package/coms/zimoli/appendChild.js +10 -18
- package/coms/zimoli/getArgsChildren.js +22 -0
- package/coms/zimoli/getGenerator.js +62 -34
- package/coms/zimoli/menuList.js +6 -7
- package/coms/zimoli/model.js +3 -0
- package/coms/zimoli/popup.js +33 -2
- package/coms/zimoli/remove.js +2 -11
- package/coms/zimoli/zimoli.js +9 -3
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/basic/JSAM.js
CHANGED
|
@@ -23,7 +23,8 @@ var isValidK = function (k) {
|
|
|
23
23
|
var extractK = function (k) {
|
|
24
24
|
return k.length < 16 && isFinite(k);
|
|
25
25
|
};
|
|
26
|
-
var noDulp = false, plength = 0;
|
|
26
|
+
var noDulp = false, plength = 0, dulp = false;
|
|
27
|
+
var hasOwnProperty = {}.hasOwnProperty;
|
|
27
28
|
function _tostring(memery, preload, dist) {
|
|
28
29
|
if (memery === undefined) return '';
|
|
29
30
|
if (check(memery)) return String(memery);
|
|
@@ -40,7 +41,8 @@ function _tostring(memery, preload, dist) {
|
|
|
40
41
|
}
|
|
41
42
|
if (memery instanceof Date) return date(memery);
|
|
42
43
|
if (memery instanceof RegExp) return regexp(memery);
|
|
43
|
-
var
|
|
44
|
+
var constructor = memery.constructor;
|
|
45
|
+
var d = preload.indexOf(constructor);
|
|
44
46
|
var pre = memery instanceof Array ? "[" : "{";
|
|
45
47
|
var aft = pre === "{" ? "}" : "]"
|
|
46
48
|
if (d >= 0) pre = d + pre;
|
|
@@ -49,19 +51,34 @@ function _tostring(memery, preload, dist) {
|
|
|
49
51
|
dist.push(undefined);
|
|
50
52
|
for (var k in memery) {
|
|
51
53
|
var v = memery[k];
|
|
54
|
+
if (!hasOwnProperty.call(memery, k)) {
|
|
55
|
+
if (!d || !hasOwnProperty.call(constructor.prototype, k)) break;
|
|
56
|
+
}
|
|
52
57
|
if (v && typeof v === 'object' || typeof v === 'function') {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
if (v instanceof Date) {
|
|
59
|
+
v = date(v);
|
|
60
|
+
}
|
|
61
|
+
else if (v instanceof RegExp) {
|
|
62
|
+
v = regexp(v);
|
|
57
63
|
}
|
|
58
64
|
else {
|
|
59
|
-
i =
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
var i = preload.indexOf(v);
|
|
66
|
+
if (i >= 0) {
|
|
67
|
+
if (noDulp) throw new Error(i18n`数据异常`);
|
|
68
|
+
v = i;
|
|
69
|
+
dulp = true;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
i = plength + dist.length;
|
|
73
|
+
preload.push(v);
|
|
74
|
+
v = _tostring(v, preload, dist);
|
|
75
|
+
if (!v.length) {
|
|
76
|
+
preload.pop();
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (noDulp) preload.pop();
|
|
80
|
+
v = i;
|
|
81
|
+
}
|
|
65
82
|
}
|
|
66
83
|
}
|
|
67
84
|
else {
|
|
@@ -78,6 +95,7 @@ function _tostring(memery, preload, dist) {
|
|
|
78
95
|
}
|
|
79
96
|
inc++;
|
|
80
97
|
}
|
|
98
|
+
if (arr.length && !arr[arr.length - 1].length) arr.push('');
|
|
81
99
|
dist[index] = pre + arr.join(',') + aft;
|
|
82
100
|
return dist[index];
|
|
83
101
|
}
|
|
@@ -93,8 +111,10 @@ function stringify(memery, preload, hasDulp = true) {
|
|
|
93
111
|
}
|
|
94
112
|
else preload = [memery];
|
|
95
113
|
var dist = [];
|
|
96
|
-
plength = preload.length;
|
|
114
|
+
plength = preload.length - 1;
|
|
115
|
+
dulp = false;
|
|
97
116
|
dist[0] = _tostring(memery, preload, dist);
|
|
117
|
+
if (dist.length === 1 && dulp) { dist.push(''); }
|
|
98
118
|
return dist.join(',');
|
|
99
119
|
}
|
|
100
120
|
function parseValue(v) {
|
|
@@ -174,7 +194,7 @@ function scanblock(string, index, preload, obj) {
|
|
|
174
194
|
case ",":
|
|
175
195
|
d = spaces.trim(string.slice(start, match.index));
|
|
176
196
|
if (preload === obj) isjsam = true;
|
|
177
|
-
if (!d && typeof k === 'number') {
|
|
197
|
+
if (!d && typeof k === 'number' && !(obj instanceof Array)) {
|
|
178
198
|
start = index;
|
|
179
199
|
k = inc++;
|
|
180
200
|
continue;
|
package/coms/basic/JSAM_test.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var test = function (o) {
|
|
2
2
|
var s = JSAM.stringify(o);
|
|
3
3
|
var a = JSAM.parse(s);
|
|
4
|
-
console.log(s, a);
|
|
4
|
+
if (!assert(a, o)) console.log(o, s.replace(/[\]\}],/g, '$&\r\n').split("\r\n").map((a, i) => `<${i}> ${a}`), a);
|
|
5
5
|
|
|
6
6
|
};
|
|
7
7
|
var test_self = function () {
|
|
@@ -51,9 +51,257 @@ var test_self = function () {
|
|
|
51
51
|
test([{ "name": "用户", "open": true }, { "name": "导航", "open": true }, { "name": "商品", "open": true },]);
|
|
52
52
|
console.log(JSAM.parse(`[1:2,3:2,4:5,6:7,8:2,9:2,10:2,11:2,12:13,14:13,15:16],"is_errored",null,"error_message","is_loading",false,"is_loaded",true,"is_readonly","loading","loading_promise","data","appid",,"sign","smap",{17:7,18:7},"zh","en"`))
|
|
53
53
|
};
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
function test_deep() {
|
|
57
|
+
var addScope = function (groups) {
|
|
58
|
+
var parentScopes = [{ groups }];
|
|
59
|
+
groups.forEach((group, i) => {
|
|
60
|
+
var $scope = { $item: group, $index: i };
|
|
61
|
+
var ps = parentScopes.push($scope);
|
|
62
|
+
group.forEach((item, i) => {
|
|
63
|
+
var s = { $item: item, $index: i };
|
|
64
|
+
item.target = {
|
|
65
|
+
$scope: s,
|
|
66
|
+
parentScopes: ps,
|
|
67
|
+
$mounted: true,
|
|
68
|
+
$renderid: 1,
|
|
69
|
+
className: '',
|
|
70
|
+
$renders: [{ call() { } }],
|
|
71
|
+
a: function () {
|
|
72
|
+
var a = function () { };
|
|
73
|
+
a.className = 'a';
|
|
74
|
+
a.call = function () { };
|
|
75
|
+
return a;
|
|
76
|
+
},
|
|
77
|
+
$struct: {
|
|
78
|
+
emits: {},
|
|
79
|
+
waits: {},
|
|
80
|
+
binds: {},
|
|
81
|
+
attrs: [],
|
|
82
|
+
copys: [],
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
var files = [
|
|
90
|
+
[
|
|
91
|
+
{ name: "a", size: 1, lastModified: 1721945589673, lastModifiedDate: new Date, path: '' },
|
|
92
|
+
{ name: "b", size: 2, lastModified: 1721945589673, lastModifiedDate: new Date, path: '' },
|
|
93
|
+
],
|
|
94
|
+
[
|
|
95
|
+
{ name: "c", size: 2, lastModified: 1721945589673, lastModifiedDate: new Date, path: '' },
|
|
96
|
+
],
|
|
97
|
+
[
|
|
98
|
+
{ name: "d", size: 2, lastModified: 1721945589673, lastModifiedDate: new Date, path: '' },
|
|
99
|
+
],
|
|
100
|
+
[
|
|
101
|
+
{ name: "g", size: 2, lastModified: 1721945589673, lastModifiedDate: new Date, path: '' },
|
|
102
|
+
],
|
|
103
|
+
[
|
|
104
|
+
{ name: "e", size: 2, lastModified: 1721945589673, lastModifiedDate: new Date, path: '' },
|
|
105
|
+
{ name: "f", size: 2, lastModified: 1721945589673, lastModifiedDate: new Date, path: '' },
|
|
106
|
+
],
|
|
107
|
+
[
|
|
108
|
+
{ name: "e", size: 2, lastModified: 1721945589673, lastModifiedDate: new Date, path: '' },
|
|
109
|
+
{ name: "f", size: 2, lastModified: 1721945589673, lastModifiedDate: new Date, path: '' },
|
|
110
|
+
],
|
|
111
|
+
[
|
|
112
|
+
{ name: "a", size: 2, lastModified: 1721945589673, lastModifiedDate: new Date, path: '' },
|
|
113
|
+
{ name: "b", size: 2, lastModified: 1721945589673, lastModifiedDate: new Date, path: '' },
|
|
114
|
+
],
|
|
115
|
+
];
|
|
116
|
+
addScope(files);
|
|
117
|
+
test(files);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
function test_parse() {
|
|
124
|
+
var data = JSAM.parse(`[1,40,57,74,91,122,153],
|
|
125
|
+
[2,26],
|
|
126
|
+
{target:3,src:"blob:http://localhost/07d435d9-0a5e-4e30-9b73-b8c58cb4b4c7",name:"花粥.jpeg",lastModified:+1721945589673,"lastModifiedDate":2024-07-25T22:13:09.673Z,"webkitRelativePath":""},
|
|
127
|
+
{origin:2,$h_mounted00:null,$scope:4,$parentScopes:5,$struct:15,$renders:25,$mounted:true,$renderid:+2,complete:true,width:+120,height:+120},
|
|
128
|
+
{$key:+0,$item:2,$index:+0,m:2},
|
|
129
|
+
[6,14],
|
|
130
|
+
{groups:0,ylist:7,actived:+0,padding:8,close:9,xlist:10,url:11,xbox:12,loading:false,tags:13},
|
|
131
|
+
{className:"lattice- lattice lattice"},
|
|
132
|
+
{className:"padding- padding padding"},
|
|
133
|
+
{className:"chooseclose- chooseclose chooseclose"},
|
|
134
|
+
{className:"list- list list"},
|
|
135
|
+
[],
|
|
136
|
+
{className:"vbox- vbox vbox"},
|
|
137
|
+
[],
|
|
138
|
+
{$key:+0,$item:1,$index:+0,i:+0,g:1,$origin:1},
|
|
139
|
+
{emits:16,waits:17,if:,repeat:,copys:18,binds:21,attrs:22,props:23,ids:24,once:},
|
|
140
|
+
{},
|
|
141
|
+
{},
|
|
142
|
+
[19,20],
|
|
143
|
+
{namespaceURI:null,prefix:null,localName:"height",name:"height",value:"120",ownerElement:3,specified:true},
|
|
144
|
+
{namespaceURI:null,prefix:null,localName:"width",name:"width",value:"120",ownerElement:3,specified:true},
|
|
145
|
+
{},
|
|
146
|
+
{},
|
|
147
|
+
{height:+120,width:+120},
|
|
148
|
+
[],
|
|
149
|
+
[],
|
|
150
|
+
{target:27,src:"blob:http://localhost/b64ea880-2af7-4781-9318-ab967df43932",name:"陈一发儿.jpg",lastModified:+1721945107240,"lastModifiedDate":2024-07-25T22:05:07.240Z,"webkitRelativePath":""},
|
|
151
|
+
{origin:26,$h_mounted00:null,$scope:28,$parentScopes:5,$struct:29,$renders:39,$mounted:true,$renderid:+2,complete:true,width:+120,height:+120},
|
|
152
|
+
{$key:+1,$item:26,$index:+1,m:26},
|
|
153
|
+
{emits:30,waits:31,if:,repeat:,copys:32,binds:35,attrs:36,props:37,ids:38,once:},
|
|
154
|
+
{},
|
|
155
|
+
{},
|
|
156
|
+
[33,34],
|
|
157
|
+
{namespaceURI:null,prefix:null,localName:"height",name:"height",value:"120",ownerElement:27,specified:true},
|
|
158
|
+
{namespaceURI:null,prefix:null,localName:"width",name:"width",value:"120",ownerElement:27,specified:true},
|
|
159
|
+
{},
|
|
160
|
+
{},
|
|
161
|
+
{height:+120,width:+120},
|
|
162
|
+
[],
|
|
163
|
+
[],
|
|
164
|
+
[41],
|
|
165
|
+
{target:42,src:null,name:"ucbr.png",lastModified:+1670542984813,"lastModifiedDate":2022-12-08T23:43:04.813Z,"webkitRelativePath":""},
|
|
166
|
+
{origin:41,$h_mounted00:null,$scope:43,$parentScopes:44,$struct:46,$renders:56,$mounted:true,$renderid:+2,complete:true,width:+120,height:+120},
|
|
167
|
+
{$key:+0,$item:41,$index:+0,m:41},
|
|
168
|
+
[6,45],
|
|
169
|
+
{$key:+1,$item:40,$index:+1,i:+1,g:40,$origin:40},
|
|
170
|
+
{emits:47,waits:48,if:,repeat:,copys:49,binds:52,attrs:53,props:54,ids:55,once:},
|
|
171
|
+
{},
|
|
172
|
+
{},
|
|
173
|
+
[50,51],
|
|
174
|
+
{namespaceURI:null,prefix:null,localName:"height",name:"height",value:"120",ownerElement:42,specified:true},
|
|
175
|
+
{namespaceURI:null,prefix:null,localName:"width",name:"width",value:"120",ownerElement:42,specified:true},
|
|
176
|
+
{},
|
|
177
|
+
{},
|
|
178
|
+
{height:+120,width:+120},
|
|
179
|
+
[],
|
|
180
|
+
[],
|
|
181
|
+
[58],
|
|
182
|
+
{target:59,src:null,name:"kuwo.png",lastModified:+1672029521697,"lastModifiedDate":2022-12-26T04:38:41.697Z,"webkitRelativePath":""},
|
|
183
|
+
{origin:58,$h_mounted00:null,$scope:60,$parentScopes:61,$struct:63,$renders:73,$mounted:true,$renderid:+2,complete:true,width:+120,height:+120},
|
|
184
|
+
{$key:+0,$item:58,$index:+0,m:58},
|
|
185
|
+
[6,62],
|
|
186
|
+
{$key:+2,$item:57,$index:+2,i:+2,g:57,$origin:57},
|
|
187
|
+
{emits:64,waits:65,if:,repeat:,copys:66,binds:69,attrs:70,props:71,ids:72,once:},
|
|
188
|
+
{},
|
|
189
|
+
{},
|
|
190
|
+
[67,68],
|
|
191
|
+
{namespaceURI:null,prefix:null,localName:"height",name:"height",value:"120",ownerElement:59,specified:true},
|
|
192
|
+
{namespaceURI:null,prefix:null,localName:"width",name:"width",value:"120",ownerElement:59,specified:true},
|
|
193
|
+
{},
|
|
194
|
+
{},
|
|
195
|
+
{height:+120,width:+120},
|
|
196
|
+
[],
|
|
197
|
+
[],
|
|
198
|
+
[75],
|
|
199
|
+
{target:76,name:"icon.png",lastModified:+1586739267873,"lastModifiedDate":2020-04-13T00:54:27.873Z,"webkitRelativePath":""},
|
|
200
|
+
{origin:75,$h_mounted00:null,$scope:77,$parentScopes:78,$struct:80,$renders:90,$mounted:true,$renderid:+2,complete:true,width:+120,height:+120},
|
|
201
|
+
{$key:+0,$item:75,$index:+0,m:75},
|
|
202
|
+
[6,79],
|
|
203
|
+
{$key:+3,$item:74,$index:+3,i:+3,g:74,$origin:74},
|
|
204
|
+
{emits:81,waits:82,if:,repeat:,copys:83,binds:86,attrs:87,props:88,ids:89,once:},
|
|
205
|
+
{},
|
|
206
|
+
{},
|
|
207
|
+
[84,85],
|
|
208
|
+
{namespaceURI:null,prefix:null,localName:"height",name:"height",value:"120",ownerElement:76,specified:true},
|
|
209
|
+
{namespaceURI:null,prefix:null,localName:"width",name:"width",value:"120",ownerElement:76,specified:true},
|
|
210
|
+
{},
|
|
211
|
+
{},
|
|
212
|
+
{height:+120,width:+120},
|
|
213
|
+
[],
|
|
214
|
+
[],
|
|
215
|
+
[92,108],
|
|
216
|
+
{target:93,name:"mirror.png",lastModified:+1674329306397,"lastModifiedDate":2023-01-21T19:28:26.397Z,"webkitRelativePath":""},
|
|
217
|
+
{origin:92,$h_mounted00:null,$scope:94,$parentScopes:95,$struct:97,$renders:107,$mounted:true,$renderid:+2,complete:true,width:+120,height:+120},
|
|
218
|
+
{$key:+0,$item:92,$index:+0,m:92},
|
|
219
|
+
[6,96],
|
|
220
|
+
{$key:+4,$item:91,$index:+4,i:+4,g:91,$origin:91},
|
|
221
|
+
{emits:98,waits:99,if:,repeat:,copys:100,binds:103,attrs:104,props:105,ids:106,once:},
|
|
222
|
+
{},
|
|
223
|
+
{},
|
|
224
|
+
[101,102],
|
|
225
|
+
{namespaceURI:null,prefix:null,localName:"height",name:"height",value:"120",ownerElement:93,specified:true},
|
|
226
|
+
{namespaceURI:null,prefix:null,localName:"width",name:"width",value:"120",ownerElement:93,specified:true},
|
|
227
|
+
{},
|
|
228
|
+
{},
|
|
229
|
+
{height:+120,width:+120},
|
|
230
|
+
[],
|
|
231
|
+
[],
|
|
232
|
+
{target:109,name:"cat.jpg",lastModified:+1674329302876,"lastModifiedDate":2023-01-21T19:28:22.876Z,"webkitRelativePath":""},
|
|
233
|
+
{origin:108,$h_mounted00:null,$scope:110,$parentScopes:95,$struct:111,$renders:121,$mounted:true,$renderid:+2,complete:true,width:+120,height:+120},
|
|
234
|
+
{$key:+1,$item:108,$index:+1,m:108},
|
|
235
|
+
{emits:112,waits:113,if:,repeat:,copys:114,binds:117,attrs:118,props:119,ids:120,once:},
|
|
236
|
+
{},
|
|
237
|
+
{},
|
|
238
|
+
[115,116],
|
|
239
|
+
{namespaceURI:null,prefix:null,localName:"height",name:"height",value:"120",ownerElement:109,specified:true},
|
|
240
|
+
{namespaceURI:null,prefix:null,localName:"width",name:"width",value:"120",ownerElement:109,specified:true},
|
|
241
|
+
{},
|
|
242
|
+
{},
|
|
243
|
+
{height:+120,width:+120},
|
|
244
|
+
[],
|
|
245
|
+
[],
|
|
246
|
+
[123,139],
|
|
247
|
+
{target:124,name:"mirror.png",lastModified:+1742618719560,"lastModifiedDate":2025-03-22T04:45:19.560Z,"webkitRelativePath":""},
|
|
248
|
+
{origin:123,$h_mounted00:null,$scope:125,$parentScopes:126,$struct:128,$renders:138,$mounted:true,$renderid:+2,complete:true,width:+120,height:+120},
|
|
249
|
+
{$key:+0,$item:123,$index:+0,m:123},
|
|
250
|
+
[6,127],
|
|
251
|
+
{$key:+5,$item:122,$index:+5,i:+5,g:122,$origin:122},
|
|
252
|
+
{emits:129,waits:130,if:,repeat:,copys:131,binds:134,attrs:135,props:136,ids:137,once:},
|
|
253
|
+
{},
|
|
254
|
+
{},
|
|
255
|
+
[132,133],
|
|
256
|
+
{namespaceURI:null,prefix:null,localName:"height",name:"height",value:"120",ownerElement:124,specified:true},
|
|
257
|
+
{namespaceURI:null,prefix:null,localName:"width",name:"width",value:"120",ownerElement:124,specified:true},
|
|
258
|
+
{},
|
|
259
|
+
{},
|
|
260
|
+
{height:+120,width:+120},
|
|
261
|
+
[],
|
|
262
|
+
[],
|
|
263
|
+
{target:140,name:"cat.jpg",lastModified:+1742618719558,"lastModifiedDate":2025-03-22T04:45:19.558Z,"webkitRelativePath":""},
|
|
264
|
+
{origin:139,$h_mounted00:null,$scope:141,$parentScopes:126,$struct:142,$renders:152,$mounted:true,$renderid:+2,complete:true,width:+120,height:+120},
|
|
265
|
+
{$key:+1,$item:139,$index:+1,m:139},
|
|
266
|
+
{emits:143,waits:144,if:,repeat:,copys:145,binds:148,attrs:149,props:150,ids:151,once:},
|
|
267
|
+
{},
|
|
268
|
+
{},
|
|
269
|
+
[146,147],
|
|
270
|
+
{namespaceURI:null,prefix:null,localName:"height",name:"height",value:"120",ownerElement:140,specified:true},
|
|
271
|
+
{namespaceURI:null,prefix:null,localName:"width",name:"width",value:"120",ownerElement:140,specified:true},
|
|
272
|
+
{},
|
|
273
|
+
{},
|
|
274
|
+
{height:+120,width:+120},
|
|
275
|
+
[],
|
|
276
|
+
[],
|
|
277
|
+
[154,155],
|
|
278
|
+
{name:"陈一发儿.jpg",lastModified:+1742785178480,"lastModifiedDate":2025-03-24T02:59:38.480Z,"webkitRelativePath":""},
|
|
279
|
+
{name:"花粥.jpeg",lastModified:+1742785178478,"lastModifiedDate":2025-03-24T02:59:38.478Z,"webkitRelativePath":""}`);
|
|
280
|
+
assert(seek(data, '0.length'), 2);
|
|
281
|
+
assert(seek(data, '0.0.name'), '花粥.jpeg');
|
|
282
|
+
assert(seek(data, '0.0.target.$scope.$item.name'), '花粥.jpeg');
|
|
283
|
+
assert(seek(data, '0.1.name'), '陈一发儿.jpg');
|
|
284
|
+
assert(seek(data, '0.1.target.$scope.$item.name'), '陈一发儿.jpg');
|
|
285
|
+
assert(seek(data, '1.length'), 1);
|
|
286
|
+
assert(seek(data, '1.0.name'), 'ucbr.png');
|
|
287
|
+
assert(seek(data, '2.length'), 1);
|
|
288
|
+
assert(seek(data, '2.0.name'), 'kuwo.png');
|
|
289
|
+
assert(seek(data, '3.length'), 1);
|
|
290
|
+
assert(seek(data, '3.0.name'), 'icon.png');
|
|
291
|
+
assert(seek(data, '4.length'), 2);
|
|
292
|
+
assert(seek(data, '4.0.name'), 'mirror.png');
|
|
293
|
+
assert(seek(data, '4.1.name'), 'cat.jpg');
|
|
294
|
+
assert(seek(data, '5.length'), 2);
|
|
295
|
+
assert(seek(data, '5.0.name'), 'mirror.png');
|
|
296
|
+
assert(seek(data, '5.1.name'), 'cat.jpg');
|
|
297
|
+
assert(seek(data, '6.length'), 2);
|
|
298
|
+
assert(seek(data, '6.0.name'), '陈一发儿.jpg');
|
|
299
|
+
assert(seek(data, '6.1.name'), '花粥.jpeg');
|
|
300
|
+
|
|
301
|
+
}
|
|
54
302
|
function test2(obj) {
|
|
55
303
|
var data = JSAM.parse(JSON.stringify(obj));
|
|
56
|
-
console.log(data);
|
|
304
|
+
if (!assert(data, obj)) console.log(data);
|
|
57
305
|
}
|
|
58
306
|
function test_json() {
|
|
59
307
|
test2({ 1: 2 });
|
|
@@ -81,9 +329,11 @@ function test_time() {
|
|
|
81
329
|
console.log(t1, t2, t3, t4);
|
|
82
330
|
}
|
|
83
331
|
function JSAM_test() {
|
|
84
|
-
JSAM.debug = true;
|
|
85
332
|
test_self();
|
|
86
333
|
test_json();
|
|
334
|
+
JSAM.debug = true;
|
|
335
|
+
test_deep();
|
|
336
|
+
test_parse();
|
|
87
337
|
JSAM.debug = false;
|
|
88
338
|
test_time();
|
|
89
339
|
}
|
package/coms/basic/assert.js
CHANGED
|
@@ -51,6 +51,7 @@ var colorString = function (s, color1, e, color2) {
|
|
|
51
51
|
else s += c1;
|
|
52
52
|
return s;
|
|
53
53
|
}
|
|
54
|
+
var ros = [], eos = [];
|
|
54
55
|
var assert = function (result, expect, log = dump) {
|
|
55
56
|
var errors = {}, hasCollect;
|
|
56
57
|
var collect = function (k, args) {
|
|
@@ -64,9 +65,8 @@ var assert = function (result, expect, log = dump) {
|
|
|
64
65
|
var color3 = format("<cyan>;</cyan>").split(";");
|
|
65
66
|
mark.setTag1(color1[1], color1[0]);
|
|
66
67
|
mark.setTag2(color2[1], color2[0]);
|
|
67
|
-
var [r, e] = mark.pair(result, expect);
|
|
68
|
+
var [r, e] = mark.pair(String(result), String(expect));
|
|
68
69
|
var s = r;
|
|
69
|
-
if (typeof s === 'object') console.log(typeof s, s);
|
|
70
70
|
|
|
71
71
|
r = colorString(r, color1, e, color2);
|
|
72
72
|
e = colorString(e, color2, s, color1);
|
|
@@ -84,7 +84,7 @@ var assert = function (result, expect, log = dump) {
|
|
|
84
84
|
};
|
|
85
85
|
};
|
|
86
86
|
var res = false;
|
|
87
|
-
if (result === expect) {
|
|
87
|
+
if (result === expect || result !== result && expect !== expect) {
|
|
88
88
|
res = true;
|
|
89
89
|
}
|
|
90
90
|
else if (typeof result === "number" && typeof expect === "number") {
|
|
@@ -105,8 +105,18 @@ var assert = function (result, expect, log = dump) {
|
|
|
105
105
|
res = expect(result, (...args) => (b) => assert(result.apply(null, args), b, collect(b, args)), collect(`()`)) !== false;
|
|
106
106
|
} else if (isObject(expect) && isObject(result)) {
|
|
107
107
|
var res = true;
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
var ri = ros.indexOf(result);
|
|
109
|
+
var ei = eos.indexOf(expect);
|
|
110
|
+
if (ri !== ei) {
|
|
111
|
+
var color3 = format('<cyan>;</cyan>').split(";");;
|
|
112
|
+
res = false; collect(k)(`${color3.join("引用" + ri)} 应为 ${color3.join("引用" + ei)}`);
|
|
113
|
+
}
|
|
114
|
+
else if (ri === -1) {
|
|
115
|
+
ros.push(result);
|
|
116
|
+
eos.push(expect);
|
|
117
|
+
for (var k in expect) {
|
|
118
|
+
res = res && assert(result[k], expect[k], collect(k));
|
|
119
|
+
}
|
|
110
120
|
}
|
|
111
121
|
}
|
|
112
122
|
if (!res) {
|
|
@@ -116,4 +126,9 @@ var assert = function (result, expect, log = dump) {
|
|
|
116
126
|
}
|
|
117
127
|
return res;
|
|
118
128
|
}
|
|
119
|
-
module.exports =
|
|
129
|
+
module.exports = function (result, expect, dump) {
|
|
130
|
+
var res = assert(result, expect, dump);
|
|
131
|
+
ros = [];
|
|
132
|
+
eos = [];
|
|
133
|
+
return res;
|
|
134
|
+
};
|
|
@@ -19,12 +19,9 @@ function _onappend(node, append = createEvent("append"), mount = createEvent("mo
|
|
|
19
19
|
}
|
|
20
20
|
dispatch(node, mount);
|
|
21
21
|
}
|
|
22
|
+
|
|
22
23
|
function appendChild(parent, obj, transition) {
|
|
23
|
-
|
|
24
|
-
var children = [].concat(obj);
|
|
25
|
-
} else {
|
|
26
|
-
var children = isArrayLike(obj) ? slice.call(obj, 0) : slice.call(arguments, 1);
|
|
27
|
-
}
|
|
24
|
+
var children = getArgsChildren(arguments);
|
|
28
25
|
if (parent.appendChild) {
|
|
29
26
|
for (var cx = 0, dx = children.length; cx < dx; cx++) {
|
|
30
27
|
var o = release(children[cx]);
|
|
@@ -43,11 +40,7 @@ function appendChild(parent, obj, transition) {
|
|
|
43
40
|
function insertBefore(alreadyMounted, obj, transition) {
|
|
44
41
|
var parent = alreadyMounted && alreadyMounted.parentNode;
|
|
45
42
|
if (!parent || !parent.insertBefore) return;
|
|
46
|
-
|
|
47
|
-
var children = [].concat(obj);
|
|
48
|
-
} else {
|
|
49
|
-
var children = isArray(obj) ? slice.call(obj, 0) : slice.call(arguments, 1);
|
|
50
|
-
}
|
|
43
|
+
var children = getArgsChildren(arguments);
|
|
51
44
|
for (var cx = 0, dx = children.length; cx < dx; cx++) {
|
|
52
45
|
var o = release(children[cx]);
|
|
53
46
|
if (!o) continue;
|
|
@@ -60,21 +53,20 @@ function insertBefore(alreadyMounted, obj, transition) {
|
|
|
60
53
|
}
|
|
61
54
|
}
|
|
62
55
|
}
|
|
56
|
+
|
|
63
57
|
function insertAfter(alreadyMounted, obj, transition) {
|
|
64
58
|
var parent = alreadyMounted && alreadyMounted.parentNode;
|
|
65
59
|
if (!parent || !parent.insertBefore) return;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
children = children.reverse();
|
|
60
|
+
var nextSibling = alreadyMounted.nextSibling;
|
|
61
|
+
var children = getArgsChildren(arguments);
|
|
62
|
+
transition = transition !== false;
|
|
63
|
+
if (!nextSibling) return appendChild(parent, children, transition);
|
|
72
64
|
for (var cx = 0, dx = children.length; cx < dx; cx++) {
|
|
73
65
|
var o = release(children[cx]);
|
|
74
66
|
if (!o) continue;
|
|
75
67
|
if (o.removeTimer) clearTimeout(o.removeTimer);
|
|
76
|
-
parent.insertBefore(o,
|
|
77
|
-
o.with && insertBefore(
|
|
68
|
+
parent.insertBefore(o, nextSibling);
|
|
69
|
+
o.with && insertBefore(nextSibling, o.with, transition);
|
|
78
70
|
if (isMounted(parent)) _onappend(o);
|
|
79
71
|
if (hasEnterStyle(o) && transition !== false) {
|
|
80
72
|
isFunction(appendChild.transition) && appendChild.transition(o);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
var getArgsChildren = function (args, from = 1) {
|
|
2
|
+
var obj = args[from];
|
|
3
|
+
if (isArray(obj) && !obj.with) return obj;
|
|
4
|
+
var transition = args[from + 1];
|
|
5
|
+
var children;
|
|
6
|
+
if (isArrayLike(obj)) {
|
|
7
|
+
children = Array.apply(null, obj);
|
|
8
|
+
var ith = obj.with;
|
|
9
|
+
while (ith) {
|
|
10
|
+
if (isNode(ith)) children.push(ith), ith = null;
|
|
11
|
+
else if (isArray(ith)) children.push.apply(children, ith), ith = ith.with;
|
|
12
|
+
else ith = null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
else if (transition === false) {
|
|
16
|
+
children = [].concat(obj);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
children = Array.prototype.slice.call(args, from);
|
|
20
|
+
}
|
|
21
|
+
return children;
|
|
22
|
+
}
|
|
@@ -11,12 +11,67 @@ var cloneChildNodes = function (template) {
|
|
|
11
11
|
}
|
|
12
12
|
return cNodes;
|
|
13
13
|
}
|
|
14
|
+
var getitem = function (i) {
|
|
15
|
+
var src = this.src;
|
|
16
|
+
if (!src || i > src.length) return;
|
|
17
|
+
if (isFunction(src.get)) return src.get(i);
|
|
18
|
+
else return src[i];
|
|
19
|
+
}
|
|
20
|
+
var setitem = function (i, v) {
|
|
21
|
+
var src = this.src;
|
|
22
|
+
if (!src || i > src.length) return;
|
|
23
|
+
if (isFunction(src.set)) return src.set(i);
|
|
24
|
+
else return src[i] = v;
|
|
25
|
+
}
|
|
26
|
+
var createScope = function (container, index, com) {
|
|
27
|
+
var parsedSrc = container.$src;
|
|
28
|
+
var wraped = undefined;
|
|
29
|
+
var origin = com;
|
|
30
|
+
if (container.$wrapItem) {
|
|
31
|
+
com = container.$wrapItem(com);
|
|
32
|
+
}
|
|
33
|
+
if (com.constructor === Item) {
|
|
34
|
+
wraped = com;
|
|
35
|
+
com = com.value;
|
|
36
|
+
} else {
|
|
37
|
+
}
|
|
38
|
+
if (parsedSrc) {
|
|
39
|
+
var newScope = parsedSrc.createScope(com, index, index, wraped);
|
|
40
|
+
} else {
|
|
41
|
+
var newScope = container.src[index];
|
|
42
|
+
if (!isObject(newScope)) newScope = {
|
|
43
|
+
get $item() {
|
|
44
|
+
return getitem.call(container, this.$index);
|
|
45
|
+
},
|
|
46
|
+
set $item(v) {
|
|
47
|
+
return setitem.call(container, this.$index, v);
|
|
48
|
+
},
|
|
49
|
+
$key: index,
|
|
50
|
+
$index: index,
|
|
51
|
+
toString() {
|
|
52
|
+
return this.$item;
|
|
53
|
+
},
|
|
54
|
+
valueOf() {
|
|
55
|
+
return this.$item;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (wraped) newScope.$wraped = wraped;
|
|
59
|
+
}
|
|
60
|
+
newScope.$origin = origin;
|
|
61
|
+
return newScope;
|
|
62
|
+
}
|
|
63
|
+
var update = function (scope, index) {
|
|
64
|
+
var item = getitem.call(this, index);
|
|
65
|
+
if (!isHandled(item) || item === scope.$origin) return;
|
|
66
|
+
var newScope = createScope(this, index, item);
|
|
67
|
+
extend(scope, newScope);
|
|
68
|
+
}
|
|
14
69
|
|
|
15
70
|
/**
|
|
16
71
|
* @param {Element} container
|
|
17
72
|
* @param {Element|string} tagName;
|
|
18
73
|
*/
|
|
19
|
-
var getGenerator = function (container, tagName = 'item') {
|
|
74
|
+
var getGenerator = function (container, tagName = 'item', wrapItem = false) {
|
|
20
75
|
if (!container) return;
|
|
21
76
|
var scopes = container.$parentScopes || [];
|
|
22
77
|
if (container.$scope) scopes = scopes.concat(container.$scope);
|
|
@@ -26,6 +81,9 @@ var getGenerator = function (container, tagName = 'item') {
|
|
|
26
81
|
var tagTemplate = isElement(tagName);
|
|
27
82
|
var templates = [];
|
|
28
83
|
var hasAfter = false;
|
|
84
|
+
if (wrapItem) {
|
|
85
|
+
container.$wrapItem = isFunction(wrapItem) ? wrapItem : Item;
|
|
86
|
+
}
|
|
29
87
|
for (let a of container.childNodes) {
|
|
30
88
|
if (a.nodeType === 1 && a.hasAttribute('insert')) {
|
|
31
89
|
if (!templates.length) a.$isbefore = true;
|
|
@@ -67,10 +125,7 @@ var getGenerator = function (container, tagName = 'item') {
|
|
|
67
125
|
*/
|
|
68
126
|
return container.$generator = function (index, com, element) {
|
|
69
127
|
if (com === undefined) {
|
|
70
|
-
|
|
71
|
-
if (!src || index >= src.length) return;
|
|
72
|
-
if (isFunction(src.get)) com = src.get(index);
|
|
73
|
-
else com = src[index];
|
|
128
|
+
com = getitem.call(container, index);
|
|
74
129
|
}
|
|
75
130
|
if (com === undefined) return;
|
|
76
131
|
if (isNode(element));
|
|
@@ -83,37 +138,10 @@ var getGenerator = function (container, tagName = 'item') {
|
|
|
83
138
|
if (childNodes.length > 1) element.with = Array.prototype.slice.call(childNodes, 1);
|
|
84
139
|
}
|
|
85
140
|
var scopes = container.$generatorScopes;
|
|
86
|
-
var
|
|
87
|
-
var wraped = undefined;
|
|
88
|
-
if (com instanceof Item) {
|
|
89
|
-
wraped = com;
|
|
90
|
-
com = com.value;
|
|
91
|
-
}
|
|
92
|
-
if (parsedSrc) {
|
|
93
|
-
var newScope = parsedSrc.createScope(com, index, index, wraped);
|
|
94
|
-
} else {
|
|
95
|
-
var newScope = container.src[index];
|
|
96
|
-
if (!isObject(newScope)) newScope = {
|
|
97
|
-
get $item() {
|
|
98
|
-
return container.src[this.$index];
|
|
99
|
-
},
|
|
100
|
-
set $item(v) {
|
|
101
|
-
container.src[this.$index] = v;
|
|
102
|
-
this.value = v;
|
|
103
|
-
},
|
|
104
|
-
$key: index,
|
|
105
|
-
$index: index,
|
|
106
|
-
toString() {
|
|
107
|
-
return this.$item;
|
|
108
|
-
},
|
|
109
|
-
valueOf() {
|
|
110
|
-
return this.$item;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
if (wraped) newScope.$wraped = wraped;
|
|
114
|
-
}
|
|
141
|
+
var newScope = createScope(container, index, com);
|
|
115
142
|
element.$scope = newScope;
|
|
116
143
|
element.$parentScopes = scopes;
|
|
144
|
+
element.$renders = [update.bind(container, newScope, index)];
|
|
117
145
|
var newItem = render(element, newScope, scopes, false);
|
|
118
146
|
if (element.with) newItem.with = render(element.with, newScope, scopes, false);
|
|
119
147
|
return newItem;
|
package/coms/zimoli/menuList.js
CHANGED
|
@@ -284,11 +284,7 @@ function main() {
|
|
|
284
284
|
ItemTemplate.setAttribute("e-class", className);
|
|
285
285
|
if (src.itemName) ItemTemplate.setAttribute("e-if", notHidden);
|
|
286
286
|
ItemTemplate.innerHTML = menuItem.template;
|
|
287
|
-
var generator = getGenerator(page, ItemTemplate)
|
|
288
|
-
page.$generatorScopes.push($scope);
|
|
289
|
-
list(page, function (index) {
|
|
290
|
-
var item = items[index];
|
|
291
|
-
if (!item) return;
|
|
287
|
+
var generator = getGenerator(page, ItemTemplate, (item) => {
|
|
292
288
|
if (item.constructor !== Item) item = new Item(item);
|
|
293
289
|
if (istoolbar) {
|
|
294
290
|
if (item.constructor === Item && item.length && !item.extended) {
|
|
@@ -296,8 +292,11 @@ function main() {
|
|
|
296
292
|
item.value = Object.assign({}, item.value);
|
|
297
293
|
}
|
|
298
294
|
}
|
|
299
|
-
return
|
|
300
|
-
}
|
|
295
|
+
return item;
|
|
296
|
+
});
|
|
297
|
+
page.$generatorScopes.push($scope);
|
|
298
|
+
page.src = items;
|
|
299
|
+
list(page, generator, direction);
|
|
301
300
|
if (!page.$renders) page.$renders = [];
|
|
302
301
|
page.$renders.unshift(function () {
|
|
303
302
|
this.$scope.hasIcon = hasIcon();
|
package/coms/zimoli/model.js
CHANGED
|
@@ -247,6 +247,9 @@ var setContent = function (value) {
|
|
|
247
247
|
if (this.field.type === 'html') this.innerHTML = value;
|
|
248
248
|
else this.innerText = value;
|
|
249
249
|
}
|
|
250
|
+
else {
|
|
251
|
+
remove(this.childNodes);
|
|
252
|
+
}
|
|
250
253
|
};
|
|
251
254
|
var Binder = render.Binder, Model = render.Model;
|
|
252
255
|
Object.keys(readonly_types).forEach(k => {
|