efront 4.1.5 → 4.1.6
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/refilm.js +74 -1
- package/coms/basic/refilm_decode.js +1 -0
- package/coms/frame/list.less +3 -2
- package/coms/zimoli/table.js +1 -1
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/basic/refilm.js
CHANGED
|
@@ -1,4 +1,77 @@
|
|
|
1
1
|
function refilm(str) {
|
|
2
2
|
if (str.raw) str = str.raw;
|
|
3
3
|
return refilm_decode.apply(null, [str].concat([].slice.call(arguments, 1)));
|
|
4
|
-
}
|
|
4
|
+
}
|
|
5
|
+
var patchOffset = refilm.patchOffset = function (fields, offset = fields.offset || 0) {
|
|
6
|
+
fields.offset = offset;
|
|
7
|
+
fields.forEach(f => {
|
|
8
|
+
f.offset = offset;
|
|
9
|
+
fields[f.key] = f;
|
|
10
|
+
offset += f.size * f.ratio;
|
|
11
|
+
});
|
|
12
|
+
fields.size = offset - fields.offset;
|
|
13
|
+
return offset;
|
|
14
|
+
};
|
|
15
|
+
refilm.createFromFields = function (fields, values) {
|
|
16
|
+
if (!fields.size) patchOffset(fields);
|
|
17
|
+
var size = fields.size;
|
|
18
|
+
var data = new Uint8Array(size);
|
|
19
|
+
if (!values) values = Object.create(null);
|
|
20
|
+
for (var f of fields) {
|
|
21
|
+
if (f.key in values || !f.value) continue;
|
|
22
|
+
values[f.key] = f.value;
|
|
23
|
+
}
|
|
24
|
+
writeFields(data, fields, values, 0);
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
var writeField = refilm.writeField = function (data, field, value, offset = field.offset, byteLimit = field.size * field.ratio) {
|
|
28
|
+
if (isArrayLike(value));
|
|
29
|
+
else if (typeof value === "string") {
|
|
30
|
+
value = encodeUTF8(value);
|
|
31
|
+
}
|
|
32
|
+
else if (typeof value === "number") {
|
|
33
|
+
var v = [];
|
|
34
|
+
var limit = byteLimit;
|
|
35
|
+
while (limit-- > 0) {
|
|
36
|
+
v.push(value & 0xff);
|
|
37
|
+
value = value >>> 8;
|
|
38
|
+
}
|
|
39
|
+
if (value) throw new Error("数据过大");
|
|
40
|
+
value = v;
|
|
41
|
+
}
|
|
42
|
+
else value = [value | 0];
|
|
43
|
+
if (value.length > byteLimit) {
|
|
44
|
+
throw new Error("数据超出大小限制!");
|
|
45
|
+
}
|
|
46
|
+
var offset = field.offset;
|
|
47
|
+
while (value.length) data[offset++] = value.shift();
|
|
48
|
+
};
|
|
49
|
+
var writeFields = refilm.writeFields = function (data, fields, values, offset = fields.offset) {
|
|
50
|
+
for (var f of fields) {
|
|
51
|
+
var size = f.size * f.ratio;
|
|
52
|
+
if (f.key in values) writeField(data, f, values[f.key], offset, size);
|
|
53
|
+
offset += size;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
var toint = function (buf) {
|
|
57
|
+
var n = 0;
|
|
58
|
+
for (var cx = 0, dx = buf.length; cx < dx; cx++) {
|
|
59
|
+
n += buf[cx] << (cx << 3);
|
|
60
|
+
}
|
|
61
|
+
return n;
|
|
62
|
+
};
|
|
63
|
+
var readField = refilm.readField = function (data, field, offset = field.offset, size = field.size * field.ratio) {
|
|
64
|
+
return data.slice(offset, offset + size);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
refilm.readFields = function (data, fields, offset = fields.offset || 0) {
|
|
68
|
+
var res = Object.create(null);
|
|
69
|
+
for (var f of fields) {
|
|
70
|
+
var size = f.size * f.ratio;
|
|
71
|
+
var v = readField(data, f, offset, size);
|
|
72
|
+
if (size <= 4) v = toint(v);
|
|
73
|
+
res[f.key] = v;
|
|
74
|
+
offset += size;
|
|
75
|
+
}
|
|
76
|
+
return res;
|
|
77
|
+
};
|
package/coms/frame/list.less
CHANGED
package/coms/zimoli/table.js
CHANGED