efront 4.35.5 → 4.35.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/apps/_index.html +41 -41
- package/apps/blank/index.html +20 -20
- package/apps/noice/index.html +42 -42
- package/apps/pay/paypal.jsp +0 -0
- package/apps/pay/wxpay.jsp +32 -0
- package/apps/pivot/dht/rent.html +14 -0
- package/apps/pivot/dht/rent.js +148 -0
- package/apps/pivot/dht/rent.less +46 -0
- package/apps/pivot/home/desktop.xht +0 -0
- package/apps/pivot/menu.yml +6 -1
- package/apps/pivot/shop/goods/list.xht +183 -0
- package/apps/pivot/shop/home.xht +20 -0
- package/apps/pivot/shop/mind/list.xht +1 -0
- package/apps/pivot/shop/order/create.xht +49 -0
- package/apps/pivot/shop/order/list.xht +1 -0
- package/apps/pivot/shop/paypal.jsp +23 -0
- package/apps/pivot/soft/list.html +0 -0
- package/apps/pivot/soft/list.js +9 -0
- package/apps/pivot/soft/list.less +0 -0
- package/apps/pivot//344/270/273/351/241/265.html +42 -42
- package/coms/7z_temp/Java.js +93 -0
- package/coms/7z_temp/LzmaBench.java +392 -0
- package/coms/7z_temp/read-from-java-code.js +28 -0
- package/coms/7z_temp//350/257/264/346/230/216.md +1 -0
- package/coms/basic/JSAM.js +259 -259
- package/coms/basic/JSAM_test.js +3 -5
- package/coms/basic/check.js +42 -42
- package/coms/basic/color.js +696 -696
- package/coms/basic/crc.js +39 -39
- package/coms/basic/getIndexFromOrderedArray.js +39 -39
- package/coms/basic/isObject.js +3 -3
- package/coms/basic/keys.js +4 -4
- package/coms/basic/lazy.js +78 -78
- package/coms/basic/refilm.js +96 -96
- package/coms/basic/saveToOrderedArray.js +11 -11
- package/coms/basic/strings.js +0 -1
- package/coms/basic_/&pget.js +1 -0
- package/coms/basic_/&pset.js +1 -0
- package/coms/basic_/Proxy.js +6 -0
- package/coms/basic_/Reflect.js +55 -0
- package/coms/compile/autoeval.js +24 -5
- package/coms/compile/autoeval_test.js +5 -1
- package/coms/compile/bracket.js +51 -0
- package/coms/compile/bracket_test.js +9 -0
- package/coms/compile/createvm.js +35 -0
- package/coms/compile/createvm_test.js +7 -0
- package/coms/compile/scanner.js +653 -653
- package/coms/compile/scanner2.js +23 -0
- package/coms/docs/getMimeData_test.js +19 -19
- package/coms/docs/md5.js +173 -173
- package/coms/frame/top.less +190 -190
- package/coms/pivot/DB.js +9 -0
- package/coms/pivot/paypal-var.js +1 -0
- package/coms/pivot//345/225/206/345/223/201.js +1 -0
- package/coms/zimoli/AudioContext_test.html +5 -5
- package/coms/zimoli/AudioContext_test.js +92 -92
- package/coms/zimoli/AudioContext_test.less +114 -114
- package/coms/zimoli/alert_test.js +11 -11
- package/coms/zimoli/dispatch.js +50 -50
- package/coms/zimoli/extendTouchEvent.js +8 -8
- package/coms/zimoli/fullscreen.js +52 -52
- package/coms/zimoli/gallery.less +13 -13
- package/coms/zimoli/gallery_test.html +2 -2
- package/coms/zimoli/gallery_test.js +14 -14
- package/coms/zimoli/gallery_test.less +17 -17
- package/coms/zimoli/getChanged.js +7 -7
- package/coms/zimoli/getChanges.js +13 -13
- package/coms/zimoli/lattice.js +109 -109
- package/coms/zimoli/lattice_test.less +23 -23
- package/coms/zimoli/picture.less +71 -71
- package/coms/zimoli/refilm_test.html +41 -41
- package/coms/zimoli/refilm_test.less +102 -102
- package/coms/zimoli/xml.js +131 -131
- package/data/keystore/cross-cert.pem +21 -21
- package/data/keystore/cross-key.pem +27 -27
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/public//346/226/207/344/273/266/347/263/273/347/273/237//344/270/273/351/241/265.jsp +2 -2
- /package/apps/pivot/{tick → ticket}/list.js +0 -0
package/apps/_index.html
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<!--
|
|
3
|
-
http://efront.cc
|
|
4
|
-
没有有效限制措施的条文不是法律,而是愚弄民众的说辞。
|
|
5
|
-
-->
|
|
6
|
-
<html lang="zh-CN">
|
|
7
|
-
|
|
8
|
-
<head>
|
|
9
|
-
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
|
10
|
-
<meta charset="utf-8" />
|
|
11
|
-
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
12
|
-
<link rel="Shortcut Icon" href="/favicon.ico" type="image/x-icon" />
|
|
13
|
-
<meta name="viewport" content="initial-scale=1,maximum-scale=1,width=device-width,user-scalable=no,initial-scale=1" />
|
|
14
|
-
<title>efront 项目</title>
|
|
15
|
-
<script deleteoncompile efrontloader>
|
|
16
|
-
// 若要在开发环境使用内置组件,请保留此script标签中的代码,在编译发布时,这里的代码会自动删除
|
|
17
|
-
</script>
|
|
18
|
-
<style>
|
|
19
|
-
html {
|
|
20
|
-
height: 100%;
|
|
21
|
-
font-family: "SF Pro SC", "SF Pro Text", "SF Pro Icons", "PingFang SC", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
*,
|
|
25
|
-
::before,
|
|
26
|
-
::after {
|
|
27
|
-
box-sizing: border-box;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
body {
|
|
31
|
-
border: none;
|
|
32
|
-
margin: 0;
|
|
33
|
-
padding: 0;
|
|
34
|
-
height: 100%;
|
|
35
|
-
overflow: hidden;
|
|
36
|
-
}
|
|
37
|
-
</style>
|
|
38
|
-
</head>
|
|
39
|
-
|
|
40
|
-
<body scroll=no max-render=1440></body>
|
|
41
|
-
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<!--
|
|
3
|
+
http://efront.cc
|
|
4
|
+
没有有效限制措施的条文不是法律,而是愚弄民众的说辞。
|
|
5
|
+
-->
|
|
6
|
+
<html lang="zh-CN">
|
|
7
|
+
|
|
8
|
+
<head>
|
|
9
|
+
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
|
10
|
+
<meta charset="utf-8" />
|
|
11
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
12
|
+
<link rel="Shortcut Icon" href="/favicon.ico" type="image/x-icon" />
|
|
13
|
+
<meta name="viewport" content="initial-scale=1,maximum-scale=1,width=device-width,user-scalable=no,initial-scale=1" />
|
|
14
|
+
<title>efront 项目</title>
|
|
15
|
+
<script deleteoncompile efrontloader>
|
|
16
|
+
// 若要在开发环境使用内置组件,请保留此script标签中的代码,在编译发布时,这里的代码会自动删除
|
|
17
|
+
</script>
|
|
18
|
+
<style>
|
|
19
|
+
html {
|
|
20
|
+
height: 100%;
|
|
21
|
+
font-family: "SF Pro SC", "SF Pro Text", "SF Pro Icons", "PingFang SC", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
*,
|
|
25
|
+
::before,
|
|
26
|
+
::after {
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
body {
|
|
31
|
+
border: none;
|
|
32
|
+
margin: 0;
|
|
33
|
+
padding: 0;
|
|
34
|
+
height: 100%;
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
}
|
|
37
|
+
</style>
|
|
38
|
+
</head>
|
|
39
|
+
|
|
40
|
+
<body scroll=no max-render=1440></body>
|
|
41
|
+
|
|
42
42
|
</html>
|
package/apps/blank/index.html
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
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="http://efront.cc/favicon.ico" type="image/x-icon" />
|
|
12
|
-
<meta name="viewport" content="initial-scale=1,maximum-scale=1,width=device-width" />
|
|
13
|
-
<title>efront 空项目</title>
|
|
14
|
-
<script deleteoncompile efrontloader>
|
|
15
|
-
// 若要在开发环境使用内置组件,请保留此script标签中的代码,在编译发布时,这里的代码会自动删除
|
|
16
|
-
</script>
|
|
17
|
-
</head>
|
|
18
|
-
|
|
19
|
-
<body scroll=no max-render=1440></body>
|
|
20
|
-
|
|
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="http://efront.cc/favicon.ico" type="image/x-icon" />
|
|
12
|
+
<meta name="viewport" content="initial-scale=1,maximum-scale=1,width=device-width" />
|
|
13
|
+
<title>efront 空项目</title>
|
|
14
|
+
<script deleteoncompile efrontloader>
|
|
15
|
+
// 若要在开发环境使用内置组件,请保留此script标签中的代码,在编译发布时,这里的代码会自动删除
|
|
16
|
+
</script>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body scroll=no max-render=1440></body>
|
|
20
|
+
|
|
21
21
|
</html>
|
package/apps/noice/index.html
CHANGED
|
@@ -1,43 +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
|
-
|
|
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
43
|
</html>
|
|
File without changes
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
var host = "https://api.mch.weixin.qq.com";
|
|
3
|
+
var auth = function (method, url, params) {
|
|
4
|
+
var data = [];
|
|
5
|
+
method = method.toUpperCase();
|
|
6
|
+
if (method === 'GET') {
|
|
7
|
+
if (typeof params === "object") params = serialize(params);
|
|
8
|
+
if (isHandled(params)) {
|
|
9
|
+
url += /\?/.test(url) ? "&" : "?";
|
|
10
|
+
url += params;
|
|
11
|
+
}
|
|
12
|
+
params = "";
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
if (typeof params === 'object') params = JSON.stringify(params);
|
|
16
|
+
}
|
|
17
|
+
var mask = Math.random().toString(36).slice(2);
|
|
18
|
+
data.push(method, url, new Date / 1000 | 0, params)
|
|
19
|
+
data = data.join("\n") + "\n";
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
</script>
|
|
23
|
+
<!doctype html>
|
|
24
|
+
<html>
|
|
25
|
+
|
|
26
|
+
<head>
|
|
27
|
+
<title>微信js支付</title>
|
|
28
|
+
</head>
|
|
29
|
+
|
|
30
|
+
<body></body>
|
|
31
|
+
|
|
32
|
+
</html>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<div head>${i18n`文件`}</div>
|
|
2
|
+
<div body>
|
|
3
|
+
<loading -if="pending"></loading>
|
|
4
|
+
<tree arrow #t1 -src="o in opened">
|
|
5
|
+
<c>
|
|
6
|
+
<span -html="o"></span> <a -if="o.url" -pending="testing[o.url]" @click="test(o.url,o)">${i18n`测试`}</a>
|
|
7
|
+
</c>
|
|
8
|
+
</tree>
|
|
9
|
+
</div>
|
|
10
|
+
<scrollbar target="t1"></scrollbar>
|
|
11
|
+
<div foot>
|
|
12
|
+
<a style="float: left" @click="testAll">${i18n`全部测试`}</a>
|
|
13
|
+
<btn @click="addTested">${i18n`添加可用链接`}</btn>
|
|
14
|
+
</div>
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
var peer_id = [];
|
|
2
|
+
for (var cx = 0, dx = 20; cx < dx; cx++)peer_id.push(256 * Math.random() | 0);
|
|
3
|
+
peer_id = peer_id.map(a => String.fromCharCode(a)).join('');
|
|
4
|
+
var encodeid = a => {
|
|
5
|
+
var res = [];
|
|
6
|
+
|
|
7
|
+
for (var a of a) {
|
|
8
|
+
if (
|
|
9
|
+
a >= 65 && a <= 90 || // A-Z
|
|
10
|
+
a >= 97 && a <= 122 || // a-z
|
|
11
|
+
a >= 48 && a <= 57 || // 0-9
|
|
12
|
+
a === 45 || // -
|
|
13
|
+
a === 46 || // .
|
|
14
|
+
a === 95 || // _
|
|
15
|
+
a === 126 // ~
|
|
16
|
+
) {
|
|
17
|
+
res.push(String.fromCharCode(a));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
res.push(a < 16 ? "%0" : "%", a.toString(16).toUpperCase());
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return res.join('');
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
var toString = function () { return this.name };
|
|
27
|
+
var createTree = function (data, item, info) {
|
|
28
|
+
var count = item.count;
|
|
29
|
+
var rest = [];
|
|
30
|
+
if (typeof data !== "object" || data === null) {
|
|
31
|
+
console.log(data, info)
|
|
32
|
+
var item1 = new Item({ name: String(data), info, toString });
|
|
33
|
+
if (/^\w+%3A/.test(data)) data = decodeURI(data);
|
|
34
|
+
|
|
35
|
+
Tree.appendTo(item, [item1]);
|
|
36
|
+
if (/^(http|udp)\:/.test(data)) count++, item1.value = { name: data.replace(/^(http|udp)\:/, '<b>$&</b>'), toString, url: data, info };
|
|
37
|
+
}
|
|
38
|
+
else if (data instanceof ArrayBuffer || data instanceof Uint8Array) {
|
|
39
|
+
var item1 = new Item(`buffer(${data.length || data.size})[......]`);
|
|
40
|
+
Tree.appendTo(item, item1);
|
|
41
|
+
}
|
|
42
|
+
else if (data instanceof Array) {
|
|
43
|
+
var items = data.map(o => {
|
|
44
|
+
if (typeof o !== 'object' || o === null) {
|
|
45
|
+
if (/^\w+%3A/.test(o)) o = decodeURI(o);
|
|
46
|
+
var item1 = new Item(String(o));
|
|
47
|
+
if (/^(http|udp)\:/.test(o)) count++, item1.value = { name: o.replace(/^(http|udp)\:/, '<b>$&</b>'), toString, url: o, info };
|
|
48
|
+
return item1;
|
|
49
|
+
}
|
|
50
|
+
if (o instanceof Array) {
|
|
51
|
+
var item1 = new Item(`Array(${o.length})`);
|
|
52
|
+
item1.tab = item.tab + 1;
|
|
53
|
+
rest.push(o, item1);
|
|
54
|
+
return item1;
|
|
55
|
+
}
|
|
56
|
+
if (o instanceof ArrayBuffer || o instanceof Uint8Array) return new Item(`buffer(${data.size || data.length})[......]`);
|
|
57
|
+
var item1 = new Item(`{}`);
|
|
58
|
+
item1.tab = item.tab + 1;
|
|
59
|
+
rest.push(o, item1);
|
|
60
|
+
return item1;
|
|
61
|
+
});
|
|
62
|
+
Tree.appendTo(item, items);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
var items = Object.keys(data).map(k => {
|
|
66
|
+
var d = data[k];
|
|
67
|
+
var item1 = new Item(k);
|
|
68
|
+
item1.tab = item.tab + 1;
|
|
69
|
+
rest.push(d, item1);
|
|
70
|
+
item1.closed = true;
|
|
71
|
+
return item1;
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
Tree.appendTo(item, items)
|
|
75
|
+
}
|
|
76
|
+
while (rest.length) {
|
|
77
|
+
var o = rest.shift();
|
|
78
|
+
var item1 = rest.shift();
|
|
79
|
+
createTree(o, item1, info);
|
|
80
|
+
count += item1.count;
|
|
81
|
+
}
|
|
82
|
+
item.count = count;
|
|
83
|
+
}
|
|
84
|
+
function main() {
|
|
85
|
+
var page = view();
|
|
86
|
+
page.innerHTML = template;
|
|
87
|
+
renderWithDefaults(page, {
|
|
88
|
+
torrents: [],
|
|
89
|
+
loading,
|
|
90
|
+
pending: true,
|
|
91
|
+
tested: {},
|
|
92
|
+
opened: new Tree,
|
|
93
|
+
testing: {},
|
|
94
|
+
scrollbar,
|
|
95
|
+
tree,
|
|
96
|
+
async load(t) {
|
|
97
|
+
this.torrents.push(t);
|
|
98
|
+
var item = new Item(t.info ? t.info["name.utf-8"] || t.info.name : '<span style="color:#666">(未命名)</span>');
|
|
99
|
+
createTree(t, item, t.info);
|
|
100
|
+
Tree.appendTo(this.opened, item);
|
|
101
|
+
item.closed = true;
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
async testAll() {
|
|
105
|
+
this.tested = {};
|
|
106
|
+
for (var t of this.torrents) {
|
|
107
|
+
if (t.announce in this.tested) continue;
|
|
108
|
+
if (t.announce) await this.test(t.announce, t);
|
|
109
|
+
if (t["announce-list"]) for (var a of t["announce-list"]) {
|
|
110
|
+
if (a[0] in this.tested) continue;
|
|
111
|
+
await this.test(a[0], t);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
async test(url, info) {
|
|
117
|
+
if (!/^http/i.test(url)) return;
|
|
118
|
+
this.testing[url] = true;
|
|
119
|
+
var info_hash = info.info.pieces.slice(0, 20);
|
|
120
|
+
console.log(info_hash, encodeid(info_hash))
|
|
121
|
+
try {
|
|
122
|
+
var r = cross('get', url).send(serialize({ info_hash: encodeid(info_hash) }, null));
|
|
123
|
+
r.timeout = 6000;
|
|
124
|
+
r.responseType = 'arraybuffer';
|
|
125
|
+
await r;
|
|
126
|
+
r = bdecode2(r.response);
|
|
127
|
+
console.log(r);
|
|
128
|
+
this.tested[url] = !r["failure reason"];
|
|
129
|
+
} catch {
|
|
130
|
+
this.tested[url] = false;
|
|
131
|
+
}
|
|
132
|
+
this.testing[url] = false;
|
|
133
|
+
render.refresh();
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
async addTested() {
|
|
137
|
+
for (var k in this.tested) {
|
|
138
|
+
if (!this.tested[k]) continue;
|
|
139
|
+
var url = parseURL(k);
|
|
140
|
+
await pedit.send('nodes', `name`, { name: `${url.protocol}//${url.host}${url.port ? ':' + url.port : url.port}`, host: url.host, port: url.port });
|
|
141
|
+
render.refresh();
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
drag.on(page, page.firstChild);
|
|
146
|
+
resize.on(page);
|
|
147
|
+
return page;
|
|
148
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
.name {
|
|
2
|
+
background-color: #fff;
|
|
3
|
+
padding: 10px 20px;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.item {
|
|
7
|
+
border: 1px solid #0003;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.announce {
|
|
11
|
+
padding: 10px 20px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
& {
|
|
15
|
+
height: 300px;
|
|
16
|
+
position: absolute;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
loading {
|
|
20
|
+
margin-top: 0;
|
|
21
|
+
position: relative;
|
|
22
|
+
font-size: 6px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.fail:after {
|
|
26
|
+
color: #c24;
|
|
27
|
+
content: "❌";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.pass:after {
|
|
31
|
+
color: #092;
|
|
32
|
+
content: "✔️";
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
tree {
|
|
37
|
+
height: 100%;
|
|
38
|
+
|
|
39
|
+
>a {
|
|
40
|
+
background: inherit !important;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
b {
|
|
45
|
+
color: #29c;
|
|
46
|
+
}
|
|
File without changes
|
package/apps/pivot/menu.yml
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
首页: /home/welcome
|
|
2
|
+
DHT:
|
|
3
|
+
服务器列表: /dht/list
|
|
2
4
|
WEB:
|
|
3
5
|
路径映射: /proxy/list
|
|
4
6
|
文件管理: /wow/root
|
|
@@ -7,10 +9,13 @@ WEB:
|
|
|
7
9
|
字典: /dict/list
|
|
8
10
|
证书管理: /cert/main
|
|
9
11
|
共享目录: /share/list
|
|
12
|
+
# 软件管理:
|
|
13
|
+
# 软件列表: /soft/list
|
|
14
|
+
# 权限管理: /soft/limit
|
|
10
15
|
服务:
|
|
11
16
|
密钥管理: /token/list
|
|
12
17
|
任务管理: /task/list
|
|
13
18
|
服务器日志:
|
|
14
19
|
访问计数: /log/count
|
|
15
20
|
启动记录: /log/boot
|
|
16
|
-
|
|
21
|
+
商店: /shop/home
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
<style>
|
|
2
|
+
[g-name] {
|
|
3
|
+
font-size: 20px;
|
|
4
|
+
font-weight: 600;
|
|
5
|
+
font-family: 宋体, sans-serif;
|
|
6
|
+
padding-bottom: 20px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
[g-description] {
|
|
10
|
+
padding: 2px 0px;
|
|
11
|
+
color: #ccc;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
[g-id] {
|
|
15
|
+
color: #ccc;
|
|
16
|
+
font-size: 10px;
|
|
17
|
+
padding: 10px 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
[price] {
|
|
21
|
+
color: #d26;
|
|
22
|
+
font-family: 楷书, sans-serif;
|
|
23
|
+
font-size: 20px;
|
|
24
|
+
float: right;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
[tags] {
|
|
28
|
+
padding: 16px 0;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
[tag] {
|
|
32
|
+
display: inline-block;
|
|
33
|
+
padding: 0 6px;
|
|
34
|
+
background: #666;
|
|
35
|
+
color: #fff;
|
|
36
|
+
font-size: 16px;
|
|
37
|
+
vertical-align: middle;
|
|
38
|
+
border-radius: 4px;
|
|
39
|
+
font-family: 宋体, sans-serif;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
a {
|
|
43
|
+
font-size: 16px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
[buy] {
|
|
47
|
+
float: right;
|
|
48
|
+
display: block;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
& {
|
|
53
|
+
padding: 10px;
|
|
54
|
+
height: 100%;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.goodsitem {
|
|
58
|
+
perspective: 1200px;
|
|
59
|
+
|
|
60
|
+
>[face],
|
|
61
|
+
>[back] {
|
|
62
|
+
transition: transform .3s;
|
|
63
|
+
padding: 10px 20px;
|
|
64
|
+
color: #fff;
|
|
65
|
+
transform-style: preserve-3d;
|
|
66
|
+
backface-visibility: hidden;
|
|
67
|
+
overflow: hidden;
|
|
68
|
+
border-radius: 12px;
|
|
69
|
+
box-shadow: 0 0 10px -6px #000c;
|
|
70
|
+
|
|
71
|
+
>* {
|
|
72
|
+
position: relative;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
img {
|
|
76
|
+
position: absolute;
|
|
77
|
+
left: 0;
|
|
78
|
+
top: 90%;
|
|
79
|
+
height: 120px;
|
|
80
|
+
width: auto;
|
|
81
|
+
margin: -60px 0;
|
|
82
|
+
opacity: .2;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
[dot] {
|
|
87
|
+
position: absolute;
|
|
88
|
+
color: #fff9;
|
|
89
|
+
right: 20px;
|
|
90
|
+
top: 10px;
|
|
91
|
+
width: 20px;
|
|
92
|
+
height: 20px;
|
|
93
|
+
text-align: center;
|
|
94
|
+
line-height: 20px;
|
|
95
|
+
margin: 0 -10px;
|
|
96
|
+
content: "";
|
|
97
|
+
display: block;
|
|
98
|
+
cursor: pointer;
|
|
99
|
+
z-index: 1;
|
|
100
|
+
|
|
101
|
+
&:active {
|
|
102
|
+
color: #fff;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
>[back] {
|
|
108
|
+
position: absolute;
|
|
109
|
+
left: 0;
|
|
110
|
+
right: 0;
|
|
111
|
+
top: 0;
|
|
112
|
+
bottom: 0;
|
|
113
|
+
transform: rotateY(180deg) rotateX(30deg);
|
|
114
|
+
background: #333;
|
|
115
|
+
font-family: 仿宋, sans-serif;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
>[face] {
|
|
119
|
+
background: #000;
|
|
120
|
+
transform: rotateY(0deg) rotateX(30deg);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
&.turned {
|
|
124
|
+
|
|
125
|
+
[face] {
|
|
126
|
+
transform: rotateY(180deg) rotateX(30deg);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
[back] {
|
|
130
|
+
transform: rotateY(360deg) rotateX(30deg);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
</style>
|
|
136
|
+
<lattice a-src="g in goods" renderid=goodslist>
|
|
137
|
+
<padding .goodsitem -class="{turned:g.turned}">
|
|
138
|
+
<div back a-style="g.back">
|
|
139
|
+
<div dot @click="turn(g)">⋮</div>
|
|
140
|
+
<div>
|
|
141
|
+
<span g.id?></span><br />
|
|
142
|
+
<span g.name?></span><br />
|
|
143
|
+
<span g.description?></span>
|
|
144
|
+
</div>
|
|
145
|
+
<div tags -if="g.content?.length">
|
|
146
|
+
包含: <span tag -bind="c" -repeat="c in g.content"></span>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
<div face a-style="g.face">
|
|
150
|
+
<img draggable="false" -src="g.logo" />
|
|
151
|
+
<div g.id?></div>
|
|
152
|
+
<div dot @click="turn(g)">⋮</div>
|
|
153
|
+
<div price>
|
|
154
|
+
¥<span -bind=g.price.toFixed(2)></span>
|
|
155
|
+
</div>
|
|
156
|
+
<div g.name?> </div>
|
|
157
|
+
<div>
|
|
158
|
+
<a buy @click="buy(g)">购买</a>
|
|
159
|
+
</div>
|
|
160
|
+
<div style="clear:both"></div>
|
|
161
|
+
</div>
|
|
162
|
+
</padding>
|
|
163
|
+
</lattice>
|
|
164
|
+
<script>
|
|
165
|
+
var goods = 商品(`,10`);
|
|
166
|
+
var a = button;
|
|
167
|
+
on('append')(this, function () {
|
|
168
|
+
console.log(goodslist)
|
|
169
|
+
});
|
|
170
|
+
var buy = function (data) {
|
|
171
|
+
return go('/order/create', data);
|
|
172
|
+
};
|
|
173
|
+
var turned = {
|
|
174
|
+
value: false,
|
|
175
|
+
writable: true,
|
|
176
|
+
configurable: true,
|
|
177
|
+
enumerable: false,
|
|
178
|
+
};
|
|
179
|
+
var turn = function (g) {
|
|
180
|
+
turned.value = !g.turned;
|
|
181
|
+
Object.defineProperty(g, 'turned', turned);
|
|
182
|
+
};
|
|
183
|
+
</script>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<style>
|
|
2
|
+
& {
|
|
3
|
+
height: 100%;
|
|
4
|
+
}
|
|
5
|
+
</style>
|
|
6
|
+
<template -if="serverStatus.userid">
|
|
7
|
+
<xmenu tag #tg class="navbar" -src="m of menus">
|
|
8
|
+
</xmenu>
|
|
9
|
+
<container -src="tg.selected?.path"></container>
|
|
10
|
+
</template>
|
|
11
|
+
<template -else>${i18n`拥有注册号的用户可查看商品`}</template>
|
|
12
|
+
<script>
|
|
13
|
+
data.from("/:version")
|
|
14
|
+
var xmenu = menu;
|
|
15
|
+
var menus = [
|
|
16
|
+
{ name: i18n`商店`, path: "/shop/goods/list" },
|
|
17
|
+
{ name: i18n`订单`, path: "/order/list" },
|
|
18
|
+
{ name: i18n`留言`, path: '/mind/list' },
|
|
19
|
+
];
|
|
20
|
+
</script>
|