efront 4.18.4 → 4.19.1
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/#/345/233/275/351/231/205/345/214/226.yml +45 -0
- package/apps/kugou/main.js +17 -1
- package/apps/kugou/song/list.js +1 -1
- package/apps/pivot/api.yml +2 -0
- package/apps/pivot/db/config.xht +11 -5
- package/apps/pivot/db/edit.xht +74 -20
- package/apps/pivot/db/list.xht +2 -2
- package/apps/pivot/main.js +4 -1
- package/apps/pivot/menu.yml +1 -0
- package/coms/basic/cross_.js +15 -7
- package/coms/basic/data.js +2 -2
- package/coms/basic/mark_test.js +1 -1
- package/coms/basic/seek.js +1 -1
- package/coms/basic/spaces.js +50 -0
- package/coms/basic/submit_.js +1 -1
- package/coms/compile/Program.js +8 -36
- package/coms/kugou/api.js +4 -0
- package/coms/kugou/musicList.js +3 -0
- package/coms/kugou/parseSongsList.js +50 -6
- package/coms/kugou/player.js +1 -0
- package/coms/random/name.js +1 -506
- package/coms/random//345/247/223.js +1 -0
- package/coms/zimoli/password.js +1 -0
- package/coms/zimoli/password.less +32 -35
- package/coms/zimoli/render.js +48 -8
- package/coms/zimoli//345/203/217/344/270/255/346/226/207/344/272/272/345/220/215.js +22 -0
- package/coms//350/214/250/350/217/260//346/240/207/347/255/276/345/214/226.js +1 -1
- package/package.json +1 -1
- package/public/efront.js +1 -1
|
@@ -1,3 +1,48 @@
|
|
|
1
|
+
- zh-CN: 数据标识不能是纯数字
|
|
2
|
+
en: The data identifier cannot be a pure number
|
|
3
|
+
|
|
4
|
+
- zh-CN: "数据标识不能有“@”符号"
|
|
5
|
+
en: "Data identification cannot have the \"@\" symbol"
|
|
6
|
+
|
|
7
|
+
- zh-CN: 数据标识不能有特殊符号“$1”
|
|
8
|
+
en: "Data identification cannot have special symbol '$1'"
|
|
9
|
+
|
|
10
|
+
- zh-CN: 数据中不能有$1字段
|
|
11
|
+
en: There cannot be a $1 field in the data
|
|
12
|
+
|
|
13
|
+
- zh-CN: 您不能修改其他用户的数据
|
|
14
|
+
en: You cannot modify the data of other users
|
|
15
|
+
|
|
16
|
+
- zh-CN: 请不要冒充其他用户!
|
|
17
|
+
en: Please do not impersonate other users!
|
|
18
|
+
|
|
19
|
+
- zh-CN: 数据标识不可更改!
|
|
20
|
+
en: The data identifier cannot be changed!
|
|
21
|
+
|
|
22
|
+
- zh-CN: 请设置用户名
|
|
23
|
+
en: Please set a username
|
|
24
|
+
|
|
25
|
+
- zh-CN: 请登录后重试
|
|
26
|
+
en: Please log in and try again
|
|
27
|
+
|
|
28
|
+
- zh-CN: 参数异常
|
|
29
|
+
en: Parameter exception
|
|
30
|
+
|
|
31
|
+
- zh-CN: 您不能删除别人的数据
|
|
32
|
+
en: "You cannot delete someone else's data"
|
|
33
|
+
|
|
34
|
+
- zh-CN: 用户不存在!
|
|
35
|
+
en: The user does not exist!
|
|
36
|
+
|
|
37
|
+
- zh-CN: $1 被 $2 覆盖
|
|
38
|
+
en: $1 is covered by $2
|
|
39
|
+
|
|
40
|
+
- zh-CN: 是否公开
|
|
41
|
+
en: Is it publicly available
|
|
42
|
+
|
|
43
|
+
- zh-CN: 确定要删除标识为“$1”的$2“$3”吗?
|
|
44
|
+
en: "Are you sure you want to delete the $2 \"$3\" marked as \"$1\"?"
|
|
45
|
+
|
|
1
46
|
- zh-CN: $1已存在
|
|
2
47
|
en: $1 already exists
|
|
3
48
|
|
package/apps/kugou/main.js
CHANGED
|
@@ -6,4 +6,20 @@ data.getApi("kuwo-token").then(function (api) {
|
|
|
6
6
|
zimoli.switch("", null, "/home");
|
|
7
7
|
zimoli.enableTouchBack();
|
|
8
8
|
css("body", "background-color:#323336;");
|
|
9
|
-
zimoli();
|
|
9
|
+
zimoli();
|
|
10
|
+
document.addEventListener('dragover', function (e) {
|
|
11
|
+
e.preventDefault();
|
|
12
|
+
})
|
|
13
|
+
var parseSongsList = await init('parseSongsList');
|
|
14
|
+
document.addEventListener('drop', function (e) {
|
|
15
|
+
e.preventDefault();
|
|
16
|
+
var { files } = e.dataTransfer;
|
|
17
|
+
var objs = [];
|
|
18
|
+
for (var f of files) {
|
|
19
|
+
var url = URL.createObjectURL(f);
|
|
20
|
+
objs.push({ url, name: f.name });
|
|
21
|
+
}
|
|
22
|
+
objs = parseSongsList(objs);
|
|
23
|
+
musicList.push(...objs);
|
|
24
|
+
player.play(objs[0]);
|
|
25
|
+
})
|
package/apps/kugou/song/list.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
buildList(['song
|
|
1
|
+
buildList(['efront-song', 'songs-list']);
|
package/apps/pivot/api.yml
CHANGED
package/apps/pivot/db/config.xht
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
height: 100%;
|
|
5
5
|
display: block;
|
|
6
6
|
position: relative;
|
|
7
|
-
padding-right: 0!important;
|
|
7
|
+
padding-right: 0 !important;
|
|
8
8
|
overflow: hidden;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -23,15 +23,21 @@
|
|
|
23
23
|
</style>
|
|
24
24
|
|
|
25
25
|
<div head>
|
|
26
|
-
<span -bind="db.name"></span>
|
|
26
|
+
数据配置 - <span -bind="db.name"></span>
|
|
27
27
|
</div>
|
|
28
28
|
<div body>
|
|
29
|
-
<
|
|
30
|
-
<div>是否公开<swap -model="db.open"></swap></div>
|
|
29
|
+
<field -repeat="f in fields" -src="[f,db]"></field>
|
|
31
30
|
</div>
|
|
32
31
|
<div foot>
|
|
33
|
-
<button>保存</button>
|
|
32
|
+
<button @click="save">保存</button>
|
|
34
33
|
</div>
|
|
35
34
|
<script>
|
|
35
|
+
var fields = refilm`
|
|
36
|
+
是否公开/open swap`;
|
|
36
37
|
var [db] = arguments;
|
|
38
|
+
var save = async function () {
|
|
39
|
+
await data.from('dbset', db);
|
|
40
|
+
history.back();
|
|
41
|
+
};
|
|
42
|
+
console.log(db)
|
|
37
43
|
</script>
|
package/apps/pivot/db/edit.xht
CHANGED
|
@@ -1,47 +1,101 @@
|
|
|
1
|
-
<
|
|
1
|
+
<style>
|
|
2
|
+
[item] {
|
|
3
|
+
position: relative;
|
|
4
|
+
|
|
5
|
+
drop {
|
|
6
|
+
display: none;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
&:hover {
|
|
10
|
+
outline: 1px solid #333;
|
|
11
|
+
outline-offset: -2px;
|
|
12
|
+
|
|
13
|
+
drop {
|
|
14
|
+
display: block;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
[m-id] {
|
|
21
|
+
font-size: 10px;
|
|
22
|
+
color: #999;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
& {
|
|
26
|
+
width: 100%;
|
|
27
|
+
border-top: 28px solid transparent;
|
|
28
|
+
height: 100%;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
[head] {
|
|
32
|
+
line-height: 28px;
|
|
33
|
+
margin-top: -32px;
|
|
34
|
+
}
|
|
35
|
+
</style>
|
|
36
|
+
<div head>
|
|
2
37
|
编辑数据 - <span -bind="db.name"></span>
|
|
3
38
|
<a @click="add">添加</a>
|
|
4
39
|
</div>
|
|
5
40
|
|
|
6
|
-
<
|
|
7
|
-
<
|
|
8
|
-
<
|
|
9
|
-
<div
|
|
10
|
-
|
|
11
|
-
</
|
|
41
|
+
<lattice body -src="m in items">
|
|
42
|
+
<padding item>
|
|
43
|
+
<drop @click="rm(m)"></drop>
|
|
44
|
+
<div m.id?></div>
|
|
45
|
+
<div m.name?></div>
|
|
46
|
+
</padding>
|
|
47
|
+
</lattice>
|
|
12
48
|
<script>
|
|
13
49
|
var [db] = arguments;
|
|
14
50
|
var a = button;
|
|
15
|
-
var
|
|
51
|
+
var items = null;
|
|
52
|
+
var load = function (params) {
|
|
53
|
+
items = data.from('dbfind', { dbid: db.id, size: 60 });
|
|
54
|
+
return items;
|
|
55
|
+
};
|
|
56
|
+
var rm = async function (m) {
|
|
57
|
+
var res = await confirm(i18n`确定要删除标识为“${`<span style=color:red >${m.id}</span>`}”的${db.name}“${`<span style='color:red'>${m.name}</span>`}”吗?`, [i18n`确定`, i18n`取消`]);
|
|
58
|
+
if (!res) return;
|
|
59
|
+
await data.from('dadel', { dbid: db.id, id: m.id });
|
|
60
|
+
return load();
|
|
61
|
+
};
|
|
62
|
+
var add =async function () {
|
|
16
63
|
var elem = document.createElement('jsoncode');
|
|
17
64
|
elem.type = 'json';
|
|
18
65
|
elem.contentEditable = true;
|
|
19
|
-
|
|
66
|
+
await prompt(茨菰$编辑框(elem), '输入JSON格式的数据', function (text) {
|
|
20
67
|
try {
|
|
21
68
|
JSON.parse(text);
|
|
22
69
|
return true;
|
|
23
70
|
} catch (e) {
|
|
24
|
-
console.log(text, e)
|
|
25
71
|
return false;
|
|
26
72
|
}
|
|
27
73
|
}, {
|
|
28
74
|
wrap: true,
|
|
29
75
|
async submit(text) {
|
|
30
76
|
var d = JSON.parse(text);
|
|
31
|
-
|
|
32
|
-
if (!d
|
|
33
|
-
|
|
77
|
+
var upload = async function (d) {
|
|
78
|
+
if (!isObject(d)) return;
|
|
79
|
+
if (db.id === '用户') {
|
|
80
|
+
if (!d.id && !d.password) {
|
|
81
|
+
return alert("缺少密码!");
|
|
82
|
+
}
|
|
83
|
+
if (d.password) {
|
|
84
|
+
delete d.password;
|
|
85
|
+
d.a = encode62.geta(d.password);
|
|
86
|
+
}
|
|
34
87
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
88
|
+
await data.from('daadd', { dbid: db.id, ...d })
|
|
89
|
+
}
|
|
90
|
+
if (Array.isArray(d)) {
|
|
91
|
+
while (d.length) {
|
|
92
|
+
await upload(d.pop());
|
|
38
93
|
}
|
|
39
94
|
}
|
|
40
|
-
|
|
95
|
+
else await upload(d);
|
|
41
96
|
}
|
|
42
97
|
});
|
|
98
|
+
load();
|
|
43
99
|
};
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
console.log(arguments)
|
|
100
|
+
await load();
|
|
47
101
|
</script>
|
package/apps/pivot/db/list.xht
CHANGED
package/apps/pivot/main.js
CHANGED
|
@@ -49,7 +49,10 @@ data.bindInstance("base", async function (base) {
|
|
|
49
49
|
cross.addDirect(base.base);
|
|
50
50
|
var apimap = await data.getConfig();
|
|
51
51
|
for (var k in apimap) {
|
|
52
|
-
|
|
52
|
+
var api = apimap[k];
|
|
53
|
+
if (api.base || !/^\w+\:\/\//.test(api.url)) {
|
|
54
|
+
api.base = base.base;
|
|
55
|
+
}
|
|
53
56
|
}
|
|
54
57
|
});
|
|
55
58
|
var base = data.getInstance('base').base;
|
package/apps/pivot/menu.yml
CHANGED
package/coms/basic/cross_.js
CHANGED
|
@@ -35,20 +35,28 @@ function isChildPath(relative, path) {
|
|
|
35
35
|
return relative.replace(/^(.*\/)[^\/]*$/, path);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
var encodeNA = function (a) {
|
|
39
|
+
return a.replace(/[^\u0021-\u007f]/g, encodeURI);
|
|
40
|
+
};
|
|
38
41
|
var getCrossUrl = function (domain, headers, encrypt) {
|
|
39
42
|
if (notCross(domain, encrypt)) return domain;
|
|
40
43
|
var basehost = parseURL(base).host || parseURL(location_href).host;
|
|
44
|
+
var ishttps = /^(https\:|s\/\/)/i.test(domain);
|
|
45
|
+
var _headers = serialize(headers);
|
|
46
|
+
if (_headers) _headers = "," + _headers;
|
|
47
|
+
var b = encrypt ? "!" : `*`;
|
|
41
48
|
if (parseURL(domain).host === basehost) {
|
|
42
49
|
if (!encrypt) return domain;
|
|
43
50
|
domain = domain.replace(domainReg, "/$3$4");
|
|
51
|
+
if (_headers) domain = _headers + domain;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
domain = encodeNA(domain)
|
|
55
|
+
.replace(/^(s?)(\/\/)/i, "http$1:$2")
|
|
56
|
+
.replace(domainReg, (_, _1, $2, $3, $4) => {
|
|
57
|
+
return [$2, _headers, '/', $3, $4].join('');
|
|
58
|
+
});
|
|
44
59
|
}
|
|
45
|
-
var _headers = serialize(headers);
|
|
46
|
-
if (_headers) _headers = "," + _headers;
|
|
47
|
-
var b = encrypt ? "!" : `*`;
|
|
48
|
-
var ishttps = /^(https\:|s\/\/)/i.test(domain);
|
|
49
|
-
domain = domain
|
|
50
|
-
.replace(/^(s?)(\/\/)/i, "http$1:$2")
|
|
51
|
-
.replace(domainReg, `$2${_headers}/$3$4`)
|
|
52
60
|
if (ishttps) domain = b + domain;
|
|
53
61
|
if (encrypt) domain = encode62.timeencode(encode62.safeencode(domain, encrypt));
|
|
54
62
|
return base + b + domain;
|
package/coms/basic/data.js
CHANGED
|
@@ -431,8 +431,8 @@ function createApiMap(data) {
|
|
|
431
431
|
fixApi(api, href);
|
|
432
432
|
if (hasOwnProperty.call(apiMap, api.id)) {
|
|
433
433
|
const lastApi = apiMap[api.id];
|
|
434
|
-
|
|
435
|
-
console.
|
|
434
|
+
var fmat = api => `[${api.name}](${api.method} ${api.url})`;
|
|
435
|
+
console.warn(i18n`多次设置的id相同的api:%c${api.id + '%c, ' + i18n`${fmat(lastApi)} 被 ${fmat(api)} 覆盖`}`, 'color:red', 'color:');
|
|
436
436
|
}
|
|
437
437
|
apiMap[api.id] = api;
|
|
438
438
|
api.headers = _headers;
|
package/coms/basic/mark_test.js
CHANGED
package/coms/basic/seek.js
CHANGED
|
@@ -4,7 +4,7 @@ class join {
|
|
|
4
4
|
}
|
|
5
5
|
}
|
|
6
6
|
var seek = function (object, seeker) {
|
|
7
|
-
if (seeker === null || seeker === undefined ||
|
|
7
|
+
if (seeker === null || seeker === undefined || !isHandled(object)) return;
|
|
8
8
|
if (seeker instanceof Function) {
|
|
9
9
|
return seeker(object);
|
|
10
10
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
var spaceDefined = [
|
|
2
|
+
"\\u0002",
|
|
3
|
+
"\\b-\\r",// "\\b"/*8*/, "\\t"/*9*/, "\\n"/*10*/, "\\v"/*11*/, "\\f"/*12*/, "\\r"/*13*/,
|
|
4
|
+
" "/*32*/,
|
|
5
|
+
"\\u007f", "\\u00a0", "\\u00ad", "\\u034f", "\\u061c",
|
|
6
|
+
"\\u115f", "\\u1160",
|
|
7
|
+
"\\u17b4", "\\u17b5",
|
|
8
|
+
"\\u180b-\\u180e",
|
|
9
|
+
"\\u1cbb", "\\u1cbc",
|
|
10
|
+
"\\u2000-\\u200f",
|
|
11
|
+
"\\u2028-\\u202f",
|
|
12
|
+
"\\u205f-\\u206f",
|
|
13
|
+
"\\u2800", "\\u3000", "\\u3164",
|
|
14
|
+
"\\ufe00-\\ufe0f",
|
|
15
|
+
"\\ufeff", "\\uffa0",
|
|
16
|
+
"\\ufff0-\\ufff8",
|
|
17
|
+
];
|
|
18
|
+
var unicode = [
|
|
19
|
+
"\\ud80c\\udffc",// "\\u{133fc}",
|
|
20
|
+
"\\ud834[\\udd73-\\udd7a]"// "\\u{1d173}-\\u{1d17a}"
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
spaceDefined.avoid = function (extra_tokens) {
|
|
24
|
+
var u0 = "[^\\ud80c][\\udc00-\\udfff]|\\ud80c[^\\udffc]";
|
|
25
|
+
var u1 = "[^\\ud834][\\udc00-\\udfff]|\\ud834[^\\udd73-\\udd7a]";
|
|
26
|
+
return `[^${extra_tokens || ''}${spaceDefined.join('')}]|${u0}|${u1}`;
|
|
27
|
+
}
|
|
28
|
+
var reg = new RegExp(`(?:[${spaceDefined.join('')}]|${unicode.join('|')})+`);
|
|
29
|
+
var is_reg = new RegExp(`^${reg.source}$`);
|
|
30
|
+
var trim_reg = new RegExp(`^${reg.source}|${reg.source}$`, 'g');
|
|
31
|
+
var format_reg = new RegExp(reg.source, 'g');
|
|
32
|
+
spaceDefined.reg = reg;
|
|
33
|
+
spaceDefined.is_reg = is_reg;
|
|
34
|
+
spaceDefined.is = function (a) {
|
|
35
|
+
return is_reg.test(a);
|
|
36
|
+
};
|
|
37
|
+
spaceDefined.exec = function (a) {
|
|
38
|
+
return reg.exec(a);
|
|
39
|
+
};
|
|
40
|
+
spaceDefined.trim = function (a) {
|
|
41
|
+
return a.replace(trim_reg, '');
|
|
42
|
+
};
|
|
43
|
+
var formatter = function (a) {
|
|
44
|
+
if (/[ \u2002\u00a0\u3000]/.test(a)) return ' ';
|
|
45
|
+
return '';
|
|
46
|
+
};
|
|
47
|
+
spaceDefined.format = function (a) {
|
|
48
|
+
return a.replace(trim_reg, '').replace(format_reg, formatter);
|
|
49
|
+
};
|
|
50
|
+
module.exports = spaceDefined;
|
package/coms/basic/submit_.js
CHANGED
|
@@ -14,7 +14,7 @@ function submit_() {
|
|
|
14
14
|
else Object.assign(data, arg);
|
|
15
15
|
}
|
|
16
16
|
for (var fields of fieldsList) for (var f of fields) {
|
|
17
|
-
if (!check(data,
|
|
17
|
+
if (!check(data, f.needs)) continue;
|
|
18
18
|
var error = valid(f, data);
|
|
19
19
|
if (error === "empty") {
|
|
20
20
|
if (f.options instanceof Array || /date|time|range|switch|swap|radio/i.test(f.type)) {
|
package/coms/compile/Program.js
CHANGED
|
@@ -53,33 +53,8 @@ var stringsFromRegExp = function (reg) {
|
|
|
53
53
|
var res = combine(...queue).map(a => a.join(""));
|
|
54
54
|
return res;
|
|
55
55
|
}
|
|
56
|
-
var
|
|
57
|
-
|
|
58
|
-
"\\u0002",
|
|
59
|
-
"\\b-\\r",// "\\b"/*8*/, "\\t"/*9*/, "\\n"/*10*/, "\\v"/*11*/, "\\f"/*12*/, "\\r"/*13*/,
|
|
60
|
-
" "/*32*/,
|
|
61
|
-
"\\u007f", "\\u00a0", "\\u00ad", "\\u034f", "\\u061c",
|
|
62
|
-
"\\u115f", "\\u1160",
|
|
63
|
-
"\\u17b4", "\\u17b5",
|
|
64
|
-
"\\u180b-\\u180e",
|
|
65
|
-
"\\u1cbb", "\\u1cbc",
|
|
66
|
-
"\\u2000-\\u200f",
|
|
67
|
-
"\\u2028-\\u202f",
|
|
68
|
-
"\\u205f-\\u206f",
|
|
69
|
-
"\\u2800", "\\u3000", "\\u3164",
|
|
70
|
-
"\\ufe00-\\ufe0f",
|
|
71
|
-
"\\ufeff", "\\uffa0",
|
|
72
|
-
"\\ufff0-\\ufff8",
|
|
73
|
-
"\\u{133fc}",
|
|
74
|
-
"\\u{1d173}-\\u{1d17a}"
|
|
75
|
-
]
|
|
76
|
-
try {
|
|
77
|
-
new RegExp('.', 'u');
|
|
78
|
-
supportUnicodeRegExp = true;
|
|
79
|
-
} catch (e) {
|
|
80
|
-
spaceDefined.pop();
|
|
81
|
-
spaceDefined.pop();
|
|
82
|
-
}
|
|
56
|
+
var spaceDefined = require("../basic/spaces");
|
|
57
|
+
|
|
83
58
|
var powermap = require("./powermap");
|
|
84
59
|
class Program {
|
|
85
60
|
quotes = [
|
|
@@ -118,7 +93,6 @@ class Program {
|
|
|
118
93
|
structstrap_reg = /^(class|interface|struct|enum)$/;
|
|
119
94
|
control_reg = /^(if|else|switch|case|do|while|for|loop|break|continue|default|import|from|as|export|try|catch|finally|throw|await|yield|return)$/;
|
|
120
95
|
type_reg = /^(var|let|const|function|fn|func|class|interface|type|struct|enum|impl)$/;
|
|
121
|
-
spaces = spaceDefined;
|
|
122
96
|
nocase = false
|
|
123
97
|
keepspace = false;
|
|
124
98
|
lastIndex = 0
|
|
@@ -1010,14 +984,12 @@ class Program {
|
|
|
1010
984
|
});
|
|
1011
985
|
var scopes = this.scopes.map(a => a.join("")).join("");
|
|
1012
986
|
scopes = this.compile(scopes);
|
|
1013
|
-
var spaces = this.spaces.join("");
|
|
1014
987
|
tokens = Object.keys(tokens).join("");
|
|
1015
|
-
tokens = this.compile(tokens)
|
|
1016
|
-
var express = `(?:\\\\u\\{[^\\}]+\\}
|
|
1017
|
-
|
|
1018
|
-
this.
|
|
1019
|
-
this.
|
|
1020
|
-
this.space_exp = new RegExp(`[${spaces}]+`, flagUnicode);
|
|
988
|
+
tokens = this.compile(tokens);
|
|
989
|
+
var express = `(?:\\\\u\\{[^\\}]+\\}|${spaceDefined.avoid(tokens)})+`;
|
|
990
|
+
this.express_reg = new RegExp(`^${express}$`);
|
|
991
|
+
this.space_reg = spaceDefined.is_reg;
|
|
992
|
+
this.space_exp = spaceDefined.reg;
|
|
1021
993
|
var quotes_entries = this.createRegExp(this.comments.concat(this.quotes).map(q => q[0]), true).source;
|
|
1022
994
|
var powers = Object.keys(this.powermap).filter(k => k.length > 1 && stamp_reg.test(k));
|
|
1023
995
|
var powers_entries = this.createRegExp(this.tags.map(t => t[0]).concat(powers), true).source;
|
|
@@ -1026,7 +998,7 @@ class Program {
|
|
|
1026
998
|
var number_reg = this.number_reg;
|
|
1027
999
|
var numbers = number_reg.source.replace(/^\^|\$$/g, "");
|
|
1028
1000
|
this.digit_reg = new RegExp(/^[+\-]?/.source + numbers, number_reg.flags);
|
|
1029
|
-
this.entry_reg = new RegExp([
|
|
1001
|
+
this.entry_reg = new RegExp([`${spaceDefined.reg.source}|${quotes_entries}|[${scopes}]|${numbers}(?:${spaceDefined.avoid(tokens)})*|${express}|${powers_entries}|[${stamps}]`], "gi");
|
|
1030
1002
|
var stamps = this.stamps.slice();
|
|
1031
1003
|
for (var k in this.powermap) if (k.length === 1 && stamps.indexOf(k) < 0) stamps.push(k);
|
|
1032
1004
|
stamps.push.apply(stamps, powers);
|
package/coms/kugou/api.js
CHANGED
|
@@ -48,5 +48,9 @@
|
|
|
48
48
|
"https://music.91q.com/": {// 千千静听/百度音乐
|
|
49
49
|
"search-qqjt?word": "get:data.typeTrack v1/search#songname=title&singername=artist<、>.name&avatar=pic&priced=isVip",
|
|
50
50
|
"qqjt-url?TSID": "get:data v1/song/tracklink#url=path"
|
|
51
|
+
},
|
|
52
|
+
"https://efront.cc/": {
|
|
53
|
+
"efront-song": "get song/list",
|
|
54
|
+
"efront-singer": "get singer/list",
|
|
51
55
|
}
|
|
52
56
|
})
|
package/coms/kugou/musicList.js
CHANGED
|
@@ -1,10 +1,50 @@
|
|
|
1
1
|
var singerPhotosMap = Object.create(null);
|
|
2
|
-
await data.from("singer
|
|
2
|
+
await data.from("efront-singer", function (a) {
|
|
3
3
|
a.forEach(a => {
|
|
4
4
|
var b = a.replace(/\.\w+$/, '');
|
|
5
5
|
singerPhotosMap[b] = a;
|
|
6
6
|
})
|
|
7
|
-
})
|
|
7
|
+
});
|
|
8
|
+
var parseFileName = function (b) {
|
|
9
|
+
var [name, singer] = String(b).replace(/\.\w+$/, '')
|
|
10
|
+
.replace(/^\s*\d+[\s\.,\-]+(\S+)($|\W\s*\-)/, "$1$2")
|
|
11
|
+
.replace(/^\s*\d+[\.]+\s*([\s\S]+)/, "$1")
|
|
12
|
+
.replace(/^\s*\d+\s+(\W+)/, "$1")
|
|
13
|
+
.split(/\s-\s/);
|
|
14
|
+
|
|
15
|
+
if (!singer) {
|
|
16
|
+
var m = /\s+(\S+)\s*$/.exec(name);
|
|
17
|
+
if (m) {
|
|
18
|
+
var s = /^([\W\s]+\W)\s+/.exec(name);
|
|
19
|
+
if (s) {
|
|
20
|
+
singer = name.slice(s[0].length);
|
|
21
|
+
name = s[0];
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
singer = m[1];
|
|
25
|
+
name = name.slice(0, m.index);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (!singer) {
|
|
31
|
+
name = name.replace(/[\((]([^\))]+)[\))]/, function (_, m) {
|
|
32
|
+
singer = m;
|
|
33
|
+
return ''
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (!singer) {
|
|
37
|
+
if (/\W\-\W/.test(name)) {
|
|
38
|
+
[name, singer] = name.split('-');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (像中文人名(name) && !像中文人名(singer)) {
|
|
42
|
+
b = singer;
|
|
43
|
+
singer = name;
|
|
44
|
+
name = b;
|
|
45
|
+
}
|
|
46
|
+
return { name, singer };
|
|
47
|
+
};
|
|
8
48
|
return a => {
|
|
9
49
|
if (isElement(a)) {
|
|
10
50
|
var m = /songsdata\s*=\s*(\[[\s\S]*\])/.exec(a.innerText);
|
|
@@ -21,20 +61,24 @@ return a => {
|
|
|
21
61
|
}, b.data);
|
|
22
62
|
else if (isObject(b)) extend(data, b);
|
|
23
63
|
if (typeof b === 'string') {
|
|
24
|
-
var
|
|
64
|
+
var { name, singer } = parseFileName(b);
|
|
25
65
|
data.name = name;
|
|
26
66
|
data.singer = singer;
|
|
27
67
|
data.url = "song/" + b;
|
|
28
|
-
|
|
29
|
-
|
|
68
|
+
}
|
|
69
|
+
if (!data.singer) {
|
|
30
70
|
data.singer = data.author_name;
|
|
31
71
|
}
|
|
72
|
+
if (data.name && !data.singer) {
|
|
73
|
+
var { name, singer } = parseFileName(data.name);
|
|
74
|
+
data.name = name;
|
|
75
|
+
data.singer = singer;
|
|
76
|
+
}
|
|
32
77
|
if (!data.name) data.name = data.audio_name;
|
|
33
78
|
if (data.hash) data.hash = data.hash.replace(/^songs\_/i, '');
|
|
34
79
|
if (data.singer) data.singer = formatSingerNames(data.singer);
|
|
35
80
|
if (!data.avatar && data.singer) {
|
|
36
81
|
var singer0 = data.singer.split("、")[0];
|
|
37
|
-
console.log(singer0)
|
|
38
82
|
if (singer0 in singerPhotosMap) data.avatar = `singer/` + singerPhotosMap[singer0];
|
|
39
83
|
}
|
|
40
84
|
if (!data.singerName) data.singerName = data.singer;
|
package/coms/kugou/player.js
CHANGED
|
@@ -305,6 +305,7 @@ var $scope = {
|
|
|
305
305
|
musicList.setActive(music);
|
|
306
306
|
$scope.playing = true;
|
|
307
307
|
playState.width = 0;
|
|
308
|
+
$scope.info = Object.assign({}, music);
|
|
308
309
|
patchMusicInfo(music).then((response) => {
|
|
309
310
|
if (playid !== this.playid) return;
|
|
310
311
|
if (!this.playing) return;
|