efront 3.25.0 → 3.25.3
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/apps/index.jsp +97 -10
- package/apps/kugou/rank/detail.js +1 -1
- package/apps/noice/index.html +43 -0
- package/apps/noice/main.html +3 -0
- package/apps/noice/main.js +96 -0
- package/apps/noice/main.less +30 -0
- package/coms/basic/FormData.js +11 -1
- package/coms/basic/Item.js +14 -5
- package/coms/basic/Tree.js +44 -5
- package/coms/basic/bdecode.js +34 -1
- package/coms/basic/cross_.js +96 -46
- package/coms/basic/decodeGBK.js +79 -0
- package/coms/basic/decodeGBK_test.js +16 -0
- package/coms/basic/isEmpty.js +1 -1
- package/coms/basic/parseKV.js +31 -3
- package/coms/basic/serialize.js +28 -4
- package/coms/frame/edit.js +3 -3
- package/coms/frame/list.html +4 -1
- package/coms/frame/list.js +18 -10
- package/coms/frame/list.less +3 -0
- package/coms/kugou/api.js +2 -1
- package/coms/kugou/buildList.html +2 -2
- package/coms/kugou/buildList.less +3 -0
- package/coms/kugou/buildScroll.js +11 -2
- package/coms/kugou/song.less +16 -0
- package/coms/pivot/bdecode2.js +26 -0
- package/coms/pivot/plist.js +34 -2
- package/coms/reptile/cross.js +4 -2
- package/coms/view//344/272/272/346/260/221/345/270/201.js +53 -0
- package/coms/zimoli/audio.js +18 -4
- package/coms/zimoli/button.less +1 -1
- package/coms/zimoli/cast.js +11 -6
- package/coms/zimoli/chooseFile.js +11 -3
- package/coms/zimoli/contextmenu.js +37 -4
- package/coms/zimoli/cross.js +1 -1
- package/coms/zimoli/css.js +14 -5
- package/coms/zimoli/data.js +1 -0
- package/coms/zimoli/getGenerator.js +2 -2
- package/coms/zimoli/lattice.js +20 -16
- package/coms/zimoli/list.js +3 -3
- package/coms/zimoli/loading.html +1 -1
- package/coms/zimoli/menu.js +7 -7
- package/coms/zimoli/menuList.js +0 -2
- package/coms/zimoli/popup.js +12 -22
- package/coms/zimoli/render.js +3 -1
- package/coms/zimoli/tree.js +8 -0
- package/coms/zimoli/tree.less +26 -0
- package/data/gbk.txt +1 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/data/gbk-unicode-utf8-cn.txt +0 -6763
package/apps/index.jsp
CHANGED
|
@@ -25,11 +25,24 @@
|
|
|
25
25
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
26
26
|
<link rel="Shortcut Icon" href="/favicon.ico" type="image/x-icon" />
|
|
27
27
|
<meta name="viewport" content="initial-scale=1,maximum-scale=1,width=device-width" />
|
|
28
|
-
<title
|
|
28
|
+
<title>欢迎使用 efront 开发套件</title>
|
|
29
29
|
<style>
|
|
30
|
-
|
|
31
|
-
height:
|
|
32
|
-
|
|
30
|
+
h1 {
|
|
31
|
+
line-height: 1.2;
|
|
32
|
+
border: 12px solid transparent;
|
|
33
|
+
box-sizing: border-box;
|
|
34
|
+
text-indent: 32px;
|
|
35
|
+
font-size: 20px;
|
|
36
|
+
margin: 0;
|
|
37
|
+
font-weight: 400;
|
|
38
|
+
color: #fff;
|
|
39
|
+
background: #244 url('/favicon.ico') no-repeat left top 2px / 20px 20px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
[content] {
|
|
43
|
+
display: block;
|
|
44
|
+
font-size: 0;
|
|
45
|
+
padding: 12px 0 0 12px;
|
|
33
46
|
}
|
|
34
47
|
|
|
35
48
|
*,
|
|
@@ -39,19 +52,93 @@
|
|
|
39
52
|
}
|
|
40
53
|
|
|
41
54
|
body {
|
|
42
|
-
|
|
55
|
+
background: url('feedback/logo.svg') no-repeat left bottom -160px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
body,
|
|
59
|
+
html {
|
|
60
|
+
height: 100%;
|
|
43
61
|
margin: 0;
|
|
44
62
|
padding: 0;
|
|
45
|
-
|
|
46
|
-
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
th,
|
|
66
|
+
td {
|
|
67
|
+
text-align: left;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
a {
|
|
71
|
+
display: inline-block;
|
|
72
|
+
width: 160px;
|
|
73
|
+
text-decoration: none;
|
|
74
|
+
line-height: 1.2;
|
|
75
|
+
margin: 0 12px 12px 0;
|
|
76
|
+
padding: 4px 6px;
|
|
77
|
+
border: 1px solid #0001;
|
|
78
|
+
background: #fff9;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
a:hover {
|
|
82
|
+
border-color: #0004;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
a>[name] {
|
|
86
|
+
font-size: 18px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
a>[time] {
|
|
90
|
+
font-size: 6px;
|
|
91
|
+
color: #999;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
a:hover>[name] {
|
|
95
|
+
text-decoration: underline;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
[name] {
|
|
99
|
+
display: block;
|
|
47
100
|
}
|
|
48
101
|
</style>
|
|
49
102
|
</head>
|
|
50
103
|
|
|
51
104
|
<body scroll=no max-render=1440>
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
105
|
+
<div content>
|
|
106
|
+
<script serverside>
|
|
107
|
+
var rows = [];
|
|
108
|
+
var fs = require("fs");
|
|
109
|
+
var path = require("path");
|
|
110
|
+
for (var n of context.names) {
|
|
111
|
+
var stats = await new Promise(function (ok, oh) {
|
|
112
|
+
fs.stat(path.join(__dirname, n), function (error, stats) {
|
|
113
|
+
if (error) return oh(error);
|
|
114
|
+
ok(stats);
|
|
115
|
+
})
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
rows.push(`<a href="${n}?${stats.mtime.toLocaleDateString()}" target=_blank ><b name>${n}</b><span time>${stats.mtime.toLocaleDateString()}</span></a>`);
|
|
119
|
+
}
|
|
120
|
+
return rows.join('')
|
|
121
|
+
</script>
|
|
122
|
+
<a href="https://www.npmjs.com/package/efront">
|
|
123
|
+
<b name>efront</b>
|
|
124
|
+
<span time> </span>
|
|
125
|
+
</a>
|
|
126
|
+
</div>
|
|
127
|
+
<script>
|
|
128
|
+
- function () {
|
|
129
|
+
var time = document.body.querySelector("a:last-child>[time]");
|
|
130
|
+
var xhr = new XMLHttpRequest;
|
|
131
|
+
xhr.open("get", '/**www.npmjs.com/package/efront');
|
|
132
|
+
xhr.onload = function () {
|
|
133
|
+
var d = xhr.getResponseHeader("last-modified");
|
|
134
|
+
if (!d) return;
|
|
135
|
+
d = new Date(d);
|
|
136
|
+
time.innerHTML = d.toLocaleDateString();
|
|
137
|
+
var a = time.parentNode;
|
|
138
|
+
a.href += '?' + +d;
|
|
139
|
+
};
|
|
140
|
+
xhr.send();
|
|
141
|
+
}();
|
|
55
142
|
</script>
|
|
56
143
|
</body>
|
|
57
144
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
buildScroll("rank-info");
|
|
1
|
+
buildScroll("rank-info", undefined, 'rank-title');
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<!--
|
|
3
|
+
http://efront.cc
|
|
4
|
+
-->
|
|
5
|
+
<html lang="zh-CN">
|
|
6
|
+
|
|
7
|
+
<head>
|
|
8
|
+
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
|
9
|
+
<meta charset="utf-8" />
|
|
10
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
11
|
+
<link rel="Shortcut Icon" href="/favicon.ico" type="image/x-icon" />
|
|
12
|
+
<meta name="viewport" content="initial-scale=1,maximum-scale=1,width=device-width" />
|
|
13
|
+
<title>声音监测仪</title>
|
|
14
|
+
<script deleteoncompile efrontloader>
|
|
15
|
+
// 若要在开发环境使用内置组件,请保留此script标签中的代码,在编译发布时,这里的代码会自动删除
|
|
16
|
+
efrontNoice = true;
|
|
17
|
+
</script>
|
|
18
|
+
<script>if (!window.efrontNoice && /^http\:/i.test(location.href)) location.href = location.href.replace(/^http\:/i, 'https:');</script>
|
|
19
|
+
<style>
|
|
20
|
+
html {
|
|
21
|
+
height: 100%;
|
|
22
|
+
font-family: "SF Pro SC", "SF Pro Text", "SF Pro Icons", "PingFang SC", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
*,
|
|
26
|
+
::before,
|
|
27
|
+
::after {
|
|
28
|
+
box-sizing: border-box;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
body {
|
|
32
|
+
border: none;
|
|
33
|
+
margin: 0;
|
|
34
|
+
padding: 0;
|
|
35
|
+
height: 100%;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
}
|
|
38
|
+
</style>
|
|
39
|
+
</head>
|
|
40
|
+
|
|
41
|
+
<body scroll=no max-render=1440></body>
|
|
42
|
+
|
|
43
|
+
</html>
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
var avg = function (list) {
|
|
2
|
+
var sum = 0, dp = 1;
|
|
3
|
+
for (var cx = 0, dx = list.length; cx < dx; cx++) {
|
|
4
|
+
var p = Math.sin(cx / dx * Math.PI);
|
|
5
|
+
p = p * p;
|
|
6
|
+
sum += list[cx] * p;
|
|
7
|
+
dp += p;
|
|
8
|
+
}
|
|
9
|
+
return sum / dp;
|
|
10
|
+
};
|
|
11
|
+
class Ndb {
|
|
12
|
+
constructor(now, ndb) {
|
|
13
|
+
this.now = now;
|
|
14
|
+
this.ndb = ndb;
|
|
15
|
+
}
|
|
16
|
+
valueOf() {
|
|
17
|
+
return this.ndb;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function init() {
|
|
21
|
+
var recoder = audio.getRecorder();
|
|
22
|
+
recoder.init("f");
|
|
23
|
+
var _block = document.createElement("noice");
|
|
24
|
+
_block.innerHTML = template;
|
|
25
|
+
render(_block, recoder);
|
|
26
|
+
var canvas = _block.querySelector("canvas");
|
|
27
|
+
canvas.width = +innerWidth;
|
|
28
|
+
canvas.height = +innerHeight;
|
|
29
|
+
var context = canvas.getContext("2d");
|
|
30
|
+
var date = new Date;
|
|
31
|
+
var noice = 0;
|
|
32
|
+
var noiceList, noiceCache;
|
|
33
|
+
var gradient = context.createLinearGradient(0, 0, 0, canvas.height); //创建渐变对象 渐变开始点和渐变结束点
|
|
34
|
+
gradient.addColorStop(0, '#f096'); //添加颜色点
|
|
35
|
+
gradient.addColorStop(0.7, '#ff06'); //添加颜色点
|
|
36
|
+
gradient.addColorStop(0.9, '#0cc3'); //添加颜色点
|
|
37
|
+
gradient.addColorStop(1, '#0cc0'); //添加颜色点
|
|
38
|
+
var gradient1 = context.createLinearGradient(0, 0, 0, canvas.height); //创建渐变对象 渐变开始点和渐变结束点
|
|
39
|
+
gradient1.addColorStop(0, '#f09'); //添加颜色点
|
|
40
|
+
gradient1.addColorStop(0.7, '#f90'); //添加颜色点
|
|
41
|
+
gradient1.addColorStop(.9, '#0cc6'); //添加颜色点
|
|
42
|
+
gradient1.addColorStop(1, '#0cc0'); //添加颜色点
|
|
43
|
+
recoder.noice = "0dB";
|
|
44
|
+
recoder.onprocess = function (buffer) {
|
|
45
|
+
if (!noiceList) noiceList = new Array(buffer.length), noiceCache = [];
|
|
46
|
+
context.clearRect(0, 0, canvas.width, canvas.height);
|
|
47
|
+
context.beginPath();
|
|
48
|
+
context.moveTo(0, canvas.offsetHeight / 2);
|
|
49
|
+
var maxdb = -1;
|
|
50
|
+
var mindb = 1;
|
|
51
|
+
var now = new Date;
|
|
52
|
+
var dt = now - date;
|
|
53
|
+
var sch = 1000;
|
|
54
|
+
date = now;
|
|
55
|
+
var dx = canvas.width / buffer.length;
|
|
56
|
+
Array.prototype.forEach.call(buffer, function (db, cx) {
|
|
57
|
+
if (db > maxdb) maxdb = db;
|
|
58
|
+
if (db < mindb) mindb = db;
|
|
59
|
+
context.lineTo(cx * dx, canvas.height / 2 - db / 4 * canvas.height);
|
|
60
|
+
});
|
|
61
|
+
context.strokeStyle = "#000";
|
|
62
|
+
context.stroke();
|
|
63
|
+
if (dt > sch) return;
|
|
64
|
+
var ndb = 20 * Math.log10((maxdb - mindb) * 2 ** 16);
|
|
65
|
+
if (noiceCache.length && now - noiceCache[0].now > 400) noiceCache.shift();
|
|
66
|
+
noiceCache.push(new Ndb(now, ndb));
|
|
67
|
+
noice = avg(noiceCache);
|
|
68
|
+
if (+noice) recoder.noice = noice.toFixed() + "dB";
|
|
69
|
+
context.beginPath();
|
|
70
|
+
noiceList.shift();
|
|
71
|
+
noiceList.push(new Ndb(now, noice));
|
|
72
|
+
var start = false;
|
|
73
|
+
noiceList.forEach(function (db, cx) {
|
|
74
|
+
if (!start) {
|
|
75
|
+
start = true;
|
|
76
|
+
context.moveTo(cx * dx, canvas.height);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
context.lineTo(cx * dx, canvas.height - db / 100 * canvas.height);
|
|
80
|
+
});
|
|
81
|
+
context.lineTo(canvas.width, canvas.height);
|
|
82
|
+
context.fillStyle = gradient;
|
|
83
|
+
context.strokeStyle = gradient1;
|
|
84
|
+
context.stroke();
|
|
85
|
+
context.fill();
|
|
86
|
+
render.refresh();
|
|
87
|
+
};
|
|
88
|
+
onmounted(_block, function () {
|
|
89
|
+
_block.$scope.start();
|
|
90
|
+
})
|
|
91
|
+
return _block;
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
function main() {
|
|
95
|
+
return init();
|
|
96
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
& {
|
|
2
|
+
display: block;
|
|
3
|
+
height: 100%;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
>canvas {
|
|
7
|
+
width: 100%;
|
|
8
|
+
height: 100%;
|
|
9
|
+
background-image: url('data:image/png;base64,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');
|
|
10
|
+
background-size: 20px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
>span {
|
|
14
|
+
display: block;
|
|
15
|
+
font-size: 120px;
|
|
16
|
+
top: 12%;
|
|
17
|
+
line-height: 260px;
|
|
18
|
+
text-align: center;
|
|
19
|
+
position: relative;
|
|
20
|
+
margin-bottom: -260px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
>a {
|
|
24
|
+
position: absolute;
|
|
25
|
+
color: #69c;
|
|
26
|
+
left: 16px;
|
|
27
|
+
bottom: 10px;
|
|
28
|
+
line-height: 1;
|
|
29
|
+
background: #fff;
|
|
30
|
+
}
|
package/coms/basic/FormData.js
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
var FormData = this.FormData;
|
|
2
2
|
if (!FormData) {
|
|
3
3
|
FormData = function FormData() {
|
|
4
|
-
this.form =
|
|
4
|
+
this.form = Object.create(null);
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
FormData.prototype.append = function (key, value) {
|
|
8
|
+
if (!this.form[key]) this.form[key] = [];
|
|
8
9
|
this.form[key] = value;
|
|
9
10
|
};
|
|
10
11
|
|
|
11
12
|
FormData.prototype.toString = function () {
|
|
12
13
|
return serialize(this.form);
|
|
13
14
|
};
|
|
15
|
+
FormData.prototype.keys = function () {
|
|
16
|
+
return Object.keys(this.form);
|
|
17
|
+
};
|
|
18
|
+
FormData.prototype.getAll = function (k) {
|
|
19
|
+
return this.form[k] ? this.form[k].slice() : [];
|
|
20
|
+
};
|
|
21
|
+
FormData.prototype.get = function (k) {
|
|
22
|
+
return this.form[k] ? this.form[k][0] : null;
|
|
23
|
+
};
|
|
14
24
|
}
|
package/coms/basic/Item.js
CHANGED
|
@@ -10,7 +10,8 @@ class Item extends Array {
|
|
|
10
10
|
this.extends(value);
|
|
11
11
|
}
|
|
12
12
|
extends(value) {
|
|
13
|
-
this.value = value;
|
|
13
|
+
if (value instanceof Item) this.value = value.value;
|
|
14
|
+
else this.value = value;
|
|
14
15
|
if (value.children instanceof Array) {
|
|
15
16
|
var children = value.children.map(item => new Item(item));
|
|
16
17
|
children.forEach(item => item.parent = item);
|
|
@@ -28,6 +29,9 @@ class Item extends Array {
|
|
|
28
29
|
if (value.href) this.href = value.href;
|
|
29
30
|
if (value.src) this.src = value.src;
|
|
30
31
|
}
|
|
32
|
+
else {
|
|
33
|
+
this.tab = 1;
|
|
34
|
+
}
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
valueOf() {
|
|
@@ -48,10 +52,12 @@ class Item extends Array {
|
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
isClosed() {
|
|
51
|
-
return !!this.value.closed;
|
|
55
|
+
if (isObject(this.value)) return !!this.value.closed;
|
|
56
|
+
return this.closed;
|
|
52
57
|
}
|
|
53
58
|
setClosed(value) {
|
|
54
|
-
this.value.closed = value;
|
|
59
|
+
if (isObject(this.value)) this.value.closed = value;
|
|
60
|
+
else this.closed = value;
|
|
55
61
|
}
|
|
56
62
|
isActive() {
|
|
57
63
|
if (isObject(this.value)) {
|
|
@@ -71,13 +77,16 @@ class Item extends Array {
|
|
|
71
77
|
this.actived = value;
|
|
72
78
|
}
|
|
73
79
|
isSelected() {
|
|
74
|
-
return !!this.value.selected;
|
|
80
|
+
if (isObject(this.value)) return !!this.value.selected;
|
|
81
|
+
return this.selected;
|
|
75
82
|
}
|
|
76
83
|
isChecked() {
|
|
84
|
+
if (isObject(this.value)) return !!this.value.checked;
|
|
77
85
|
return !!this.value.checked;
|
|
78
86
|
}
|
|
79
87
|
getClass() {
|
|
80
|
-
return !!this.value.class;
|
|
88
|
+
if (isObject(this.value)) return !!this.value.class;
|
|
89
|
+
return this.class;
|
|
81
90
|
}
|
|
82
91
|
|
|
83
92
|
}
|
package/coms/basic/Tree.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
var setRoot = function (item, root) {
|
|
2
|
+
item.root = root;
|
|
3
|
+
for (var o of item) setRoot(o, root);
|
|
4
|
+
};
|
|
1
5
|
class Tree extends Array {
|
|
6
|
+
count = 0;
|
|
7
|
+
total = 0;
|
|
2
8
|
constructor(src) {
|
|
3
9
|
if (src instanceof Tree) return src;
|
|
4
10
|
if (src instanceof Array && src[0] && ('tab' in src[0] || 'deep' in src[0])) {
|
|
@@ -11,6 +17,7 @@ class Tree extends Array {
|
|
|
11
17
|
return Tree.fromData(src.children);
|
|
12
18
|
}
|
|
13
19
|
super();
|
|
20
|
+
this.root = this;
|
|
14
21
|
}
|
|
15
22
|
static fromData(array) {
|
|
16
23
|
if (array instanceof Tree) return array;
|
|
@@ -133,21 +140,53 @@ class Tree extends Array {
|
|
|
133
140
|
result.deep = max_deep;
|
|
134
141
|
return result;
|
|
135
142
|
}
|
|
136
|
-
static
|
|
143
|
+
static remove(item) {
|
|
144
|
+
var parent = item.parent;
|
|
145
|
+
if (parent) {
|
|
146
|
+
delete item.parent;
|
|
147
|
+
var index = parent.indexOf(item);
|
|
148
|
+
if (index >= 0) {
|
|
149
|
+
parent.splice(index, 1);
|
|
150
|
+
var count = item.count;
|
|
151
|
+
var total = item.total;
|
|
152
|
+
while (parent) {
|
|
153
|
+
parent.count -= count;
|
|
154
|
+
parent.total -= total;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
static appendTo(parent) {
|
|
137
160
|
var tab = parent && parent.tab + 1 || 1;
|
|
138
161
|
var length = parent.length;
|
|
162
|
+
var datas = [];
|
|
163
|
+
for (var cx = 1, dx = arguments.length; cx < dx; cx++) {
|
|
164
|
+
var arg = arguments[cx];
|
|
165
|
+
if (arg instanceof Item) datas.push(arg);
|
|
166
|
+
else if (arg instanceof Array) datas.push.apply(datas, arg);
|
|
167
|
+
else datas.push(arg);
|
|
168
|
+
}
|
|
139
169
|
for (var data of datas) {
|
|
140
|
-
if (isObject(data)) {
|
|
141
|
-
|
|
142
|
-
|
|
170
|
+
if (isObject(data) || isString(data)) {
|
|
171
|
+
var item;
|
|
172
|
+
if (data instanceof Item) {
|
|
173
|
+
item = data;
|
|
174
|
+
Tree.remove(item);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
item = new Item(data);
|
|
178
|
+
}
|
|
179
|
+
item.tab = tab;
|
|
180
|
+
if (item.closed === undefined) item.closed = true;
|
|
143
181
|
item.parent = parent;
|
|
144
|
-
item.root
|
|
182
|
+
if (parent.root && item.root !== parent.root) setRoot(item, parent.root);
|
|
145
183
|
parent.push(item);
|
|
146
184
|
}
|
|
147
185
|
}
|
|
148
186
|
var delta = parent.length - length;
|
|
149
187
|
while (parent) {
|
|
150
188
|
parent.count += delta;
|
|
189
|
+
parent.total += delta;
|
|
151
190
|
parent = parent.parent;
|
|
152
191
|
}
|
|
153
192
|
}
|
package/coms/basic/bdecode.js
CHANGED
|
@@ -33,6 +33,39 @@ function decode(str, i) {
|
|
|
33
33
|
}
|
|
34
34
|
return [, str.length]
|
|
35
35
|
}
|
|
36
|
+
var _indexOf = Array.prototype.indexOf;
|
|
37
|
+
function decodeArrayBuffer(a, i) {
|
|
38
|
+
var e = i;
|
|
39
|
+
switch (a[i]) {
|
|
40
|
+
case 105://i
|
|
41
|
+
e = _indexOf.call(a, 101/*e*/, i);
|
|
42
|
+
if (e < 0) e = a.length;
|
|
43
|
+
return [+String.fromCharCode.apply(String, a.slice(i + 1, e)), e + 1];
|
|
44
|
+
case 100://d
|
|
45
|
+
var res = {};
|
|
46
|
+
i++;
|
|
47
|
+
while (i < a.length && a[i] !== 101) {
|
|
48
|
+
var [k, i] = decodeArrayBuffer(a, i);
|
|
49
|
+
var [v, i] = decodeArrayBuffer(a, i);
|
|
50
|
+
k = decodeUTF8(k);
|
|
51
|
+
res[k] = v;
|
|
52
|
+
}
|
|
53
|
+
return [res, i + 1];
|
|
54
|
+
case 108://l
|
|
55
|
+
var res = [];
|
|
56
|
+
i++;
|
|
57
|
+
while (i < a.length && a[i] !== 101) {
|
|
58
|
+
var [o, i] = decodeArrayBuffer(a, i);
|
|
59
|
+
res.push(o);
|
|
60
|
+
}
|
|
61
|
+
return [res, i + 1];
|
|
62
|
+
default:
|
|
63
|
+
e = i;
|
|
64
|
+
while (a[i] >= 48/*0*/ && a[i] <= 57/*9*/) i++;
|
|
65
|
+
var l = +String.fromCharCode.apply(String, a.slice(e, i));
|
|
66
|
+
return [a.slice(++i, i += l), i];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
36
69
|
function bdecode(str) {
|
|
37
|
-
return decode(str, 0)[0];
|
|
70
|
+
return str instanceof ArrayBuffer ? decodeArrayBuffer(new Uint8Array(str), 0)[0] : decode(str, 0)[0];
|
|
38
71
|
}
|