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.
Files changed (51) hide show
  1. package/apps/index.jsp +97 -10
  2. package/apps/kugou/rank/detail.js +1 -1
  3. package/apps/noice/index.html +43 -0
  4. package/apps/noice/main.html +3 -0
  5. package/apps/noice/main.js +96 -0
  6. package/apps/noice/main.less +30 -0
  7. package/coms/basic/FormData.js +11 -1
  8. package/coms/basic/Item.js +14 -5
  9. package/coms/basic/Tree.js +44 -5
  10. package/coms/basic/bdecode.js +34 -1
  11. package/coms/basic/cross_.js +96 -46
  12. package/coms/basic/decodeGBK.js +79 -0
  13. package/coms/basic/decodeGBK_test.js +16 -0
  14. package/coms/basic/isEmpty.js +1 -1
  15. package/coms/basic/parseKV.js +31 -3
  16. package/coms/basic/serialize.js +28 -4
  17. package/coms/frame/edit.js +3 -3
  18. package/coms/frame/list.html +4 -1
  19. package/coms/frame/list.js +18 -10
  20. package/coms/frame/list.less +3 -0
  21. package/coms/kugou/api.js +2 -1
  22. package/coms/kugou/buildList.html +2 -2
  23. package/coms/kugou/buildList.less +3 -0
  24. package/coms/kugou/buildScroll.js +11 -2
  25. package/coms/kugou/song.less +16 -0
  26. package/coms/pivot/bdecode2.js +26 -0
  27. package/coms/pivot/plist.js +34 -2
  28. package/coms/reptile/cross.js +4 -2
  29. package/coms/view//344/272/272/346/260/221/345/270/201.js +53 -0
  30. package/coms/zimoli/audio.js +18 -4
  31. package/coms/zimoli/button.less +1 -1
  32. package/coms/zimoli/cast.js +11 -6
  33. package/coms/zimoli/chooseFile.js +11 -3
  34. package/coms/zimoli/contextmenu.js +37 -4
  35. package/coms/zimoli/cross.js +1 -1
  36. package/coms/zimoli/css.js +14 -5
  37. package/coms/zimoli/data.js +1 -0
  38. package/coms/zimoli/getGenerator.js +2 -2
  39. package/coms/zimoli/lattice.js +20 -16
  40. package/coms/zimoli/list.js +3 -3
  41. package/coms/zimoli/loading.html +1 -1
  42. package/coms/zimoli/menu.js +7 -7
  43. package/coms/zimoli/menuList.js +0 -2
  44. package/coms/zimoli/popup.js +12 -22
  45. package/coms/zimoli/render.js +3 -1
  46. package/coms/zimoli/tree.js +8 -0
  47. package/coms/zimoli/tree.less +26 -0
  48. package/data/gbk.txt +1 -0
  49. package/package.json +1 -1
  50. package/public/efront.js +1 -1
  51. package/data/gbk-unicode-utf8-cn.txt +0 -6763
package/coms/kugou/api.js CHANGED
@@ -7,8 +7,9 @@
7
7
  "song-mix;": "mget:script:nth-last-child(2) mixsong/:hashid.html",
8
8
  "rank-list": "get:[].panel-img-list%20li rank/list#href=a!href&=a!href\\rank-info&imgurl=img!_src&name=p|innerText",
9
9
  "rank-info": "get:[].panel-songslist%20li rank/info/:id#src=!id&name=.panel-songs-item-name|innerText&data=.panel-songs-item-download/innerText",
10
+ "rank-title": "get:.page-title rank/info/:id#title=!innerText",
10
11
  "plist-index": "get:[].panel-img-list%20li plist/index#href=a!href&=a!href\\plist-info&imgurl=img!_src&name=.panel-img-content-first|innerText&count=.panel-img-content-sub|innerText",
11
- "plist-info": "get:[].panel-songslist%20li plist/list/:id#name=.panel-songs-item-name|innerText&data=.panel-songs-item-download/innerText",
12
+ "plist-info": "mget:[].panel-songslist%20li plist/list/:id/#name=.panel-songs-item-name|innerText&data=.panel-songs-item-download/innerText",
12
13
  "search-hot": "get api/v3/search/hot?format=json&plat=0&count=30",
13
14
  "singer-class": "get:[].bd%20li singer/class#href=a!href&=a!href\\singer-list&name=a|innerText&group=?parentNode",
14
15
  "singer-list": "get:[].singer-img-list>li singer/list/:id#href=a!href&=a!href\\singer-info0&imgurl=img!_src&name=p|innerText",
@@ -1,6 +1,6 @@
1
- <list ng-src="s in datas" min-width=240>
1
+ <list ng-src="s in datas" min-width:=datas[0]?.name?320:120>
2
2
  <padding>
3
- <song ng-click="run(s)" ng-class="{activate:s.hash===musicList.active_hash}" ng-src="s"></song>
3
+ <song ng-click="run(s)" ng-class="{activate:s.hash===musicList.active_hash,imgonly:!datas[0]?.name}" ng-src="s"></song>
4
4
  </padding>
5
5
  </list>
6
6
  <loading ng-if="datas.is_loading"></loading>
@@ -20,4 +20,7 @@
20
20
  >div+div {
21
21
  border-top: 1px solid #ccc;
22
22
  }
23
+ }
24
+ .padding{
25
+ max-width: 100%;
23
26
  }
@@ -1,4 +1,4 @@
1
- function Main(dataid, datapath) {
1
+ function Main(dataid, datapath, titleid) {
2
2
  var _titlebar = titlebar(" ");
3
3
  var page = createVboxWithState(state);
4
4
  page.initialStyle = 'margin-left:100%';
@@ -24,7 +24,7 @@ function Main(dataid, datapath) {
24
24
  bindScroll(_titlebar, page);
25
25
  var loadedId;
26
26
  function main(params) {
27
- var { _text, title, name = _text || title, id } = params;
27
+ var { _text, title = "", name = _text || title, id } = params;
28
28
  if (loadedId !== id) {
29
29
  loadedId = id;
30
30
  var ranklist = data.from(dataid, {
@@ -32,6 +32,15 @@ function Main(dataid, datapath) {
32
32
  }, parseSongsList);
33
33
  page.$scope.config = params;
34
34
  page.$scope.datas = ranklist;
35
+ if (titleid) {
36
+ data.from(titleid, {
37
+ id
38
+ }).then(function ({ title }) {
39
+ console.log(arguments)
40
+ _titlebar.setTitle(title);
41
+ document.title = title;
42
+ })
43
+ }
35
44
  }
36
45
  _titlebar.setTitle(name);
37
46
  document.title = name;
@@ -38,6 +38,22 @@
38
38
  }
39
39
 
40
40
  }
41
+ &.imgonly{
42
+ padding: 0;
43
+ line-height: 0;
44
+ font-size: 0;
45
+ padding-bottom: 76%;
46
+ height: auto;
47
+ >:not(png){
48
+ display: none;
49
+ }
50
+ >.logo{
51
+ position: absolute;
52
+ height: 100%;
53
+ width: 100%;
54
+ margin: 0;
55
+ }
56
+ }
41
57
 
42
58
  >.song {
43
59
  line-height: 30px;
@@ -0,0 +1,26 @@
1
+ var encoding = '';
2
+ function kv(o) {
3
+ if (o instanceof Uint8Array) return /^gb/i.test(encoding) ? decodeGBK(o) : decodeUTF8(o);
4
+ if (isArray(o)) return o.map(kv);
5
+ if (isString(o)) return o;
6
+ if (isObject(o)) for (var k in o) {
7
+ if (/piece|ed2k|peer|hash$/.test(k)) continue;
8
+ if (/\.utf-8$/i.test(k)) {
9
+ var e = encoding;
10
+ encoding = '';
11
+ o[k] = kv(o[k]);
12
+ encoding = e;
13
+ }
14
+ else {
15
+ o[k] = kv(o[k])
16
+ }
17
+ }
18
+ return o
19
+ }
20
+ function bdecode2(rent) {
21
+ var d = bdecode(rent);
22
+ if (d.encoding) encoding = String.fromCharCode.apply(String, d.encoding);
23
+ else encoding = '';
24
+ d = kv(d);
25
+ return d;
26
+ }
@@ -1,5 +1,36 @@
1
1
 
2
- function main(title, type, fields, edit_ref, options, idkey = fields[0].key) {
2
+ function main() {
3
+ var title, type, fields, edit_ref, options, idkey, buttons;
4
+ var parse = function (a) {
5
+ switch (typeof a) {
6
+ case "string":
7
+ if (!title) title = a;
8
+ else if (!type) type = a;
9
+ else if (!edit_ref) edit_ref = a;
10
+ else idkey = a;
11
+ break;
12
+ case "object":
13
+ if (a instanceof Array) {
14
+ if (!fields) fields = a;
15
+ else if (!options) options = a;
16
+ }
17
+ else if (a !== null) {
18
+ ({
19
+ fields = fields,
20
+ options=options,
21
+ buttons=buttons,
22
+ idkey=idkey,
23
+ edit_ref=edit_ref,
24
+ title=title,
25
+ type=type
26
+ } = a);
27
+ }
28
+ break;
29
+ }
30
+ }
31
+ for (var a of arguments) parse(a);
32
+ if (!fields) parse(this);
33
+ if (!idkey) idkey = fields[0].key;
3
34
  return frame$list(title, {
4
35
  load() {
5
36
  return data.from("list", { type }, a => JSAM.parse(encode62.timedecode(a || '')));
@@ -8,9 +39,10 @@ function main(title, type, fields, edit_ref, options, idkey = fields[0].key) {
8
39
  return data.from("edit", { type, key: encode62.timeencode(o[idkey]), value: encode62.timeencode("") }).loading_promise;
9
40
  },
10
41
  fields,
42
+ buttons,
11
43
  options,
12
44
  }, edit_ref ? edit_ref : function (o) {
13
- var p = pedit(title, type, { data: o, fields });
45
+ var p = pedit(title, type, o);
14
46
  p.initialStyle = popup.style;
15
47
  popup(p, true);
16
48
  move.setPosition(p, [.5, .5]);
@@ -65,11 +65,13 @@ return cross_.bind(function (callback, onerror) {
65
65
  xhr.readyState = 4;
66
66
  callback();
67
67
  });
68
- res.on("error", function (e) {
68
+ var onerror1 = function (e) {
69
69
  xhr.readyState = 4;
70
70
  error = e;
71
71
  onerror(e);
72
- });
72
+ };
73
+ res.on("error", onerror1);
74
+ res.on('timeout', onerror1);
73
75
  this.readyState = 2;
74
76
  });
75
77
  this.readyState = 1;
@@ -0,0 +1,53 @@
1
+ // 这里使用的数级换算关系如下:
2
+ // 1亿 = 1万万
3
+ // 1兆 = 1亿亿
4
+ // 1京 = 1兆兆
5
+ // 1垓 = 1京京
6
+ // 1杼 = 1垓垓
7
+ // 1穰 = 1杼杼
8
+ // 1沟 = 1穰穰
9
+ // 1涧 = 1沟沟
10
+ // 1正 = 1涧涧
11
+ // 1载 = 1正正
12
+ // 可表示的数字最大为 8192 位
13
+ // 元拾佰仟
14
+ // 万拾佰仟
15
+ // 亿拾佰仟万拾佰仟
16
+ // 兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟
17
+ // 京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟
18
+ // 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟
19
+ // 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟
20
+ // 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟
21
+ // 沟拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟
22
+ // 涧拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 沟拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟
23
+ // 正拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 沟拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 涧拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 沟拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟
24
+ // 载拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 沟拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 涧拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 沟拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 正拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 沟拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 涧拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 沟拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 穰拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟 杼拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟垓拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟京拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟万拾佰仟亿拾佰仟万拾佰仟
25
+ var 数位 = "拾佰仟";
26
+ for (var 级 of "万亿兆京垓杼穰沟涧正载") {
27
+ 数位 = [数位, 级, 数位].join('');
28
+ }
29
+ 数位 = "元" + 数位;
30
+ var 数字 = "零壹贰叁肆伍陆柒捌玖";
31
+ var 人民币 = function (n) {
32
+ var [a, b] = n.split('.');
33
+ var res = '';
34
+ if (+b[1] !== 0) res = 数字[b[1]] + "分";
35
+ if (+b[0] !== 0) res = 数字[b[0]] + "角" + res;
36
+ else if (res) res = "零" + res;
37
+ var s = a.split('').reverse().map((a, i, q) => {
38
+ if (+a === 1 && i % 4 === 1 && (i + 1 === q.length || q.length > i + 2 && q[i + 1] === 0 && q[i + 2] === 0)) return 数位[i];
39
+ if (a > 0) return 数字[a] + 数位[i];
40
+ if (i % 4 === 0) return 数位[i];
41
+ return '零';
42
+ }).reverse().filter((m, i) => {
43
+ return !(m === '零' && (a[i + 1] === '零' || (a.length - i) % 4 === 0))
44
+ }).join('');
45
+ if (s.length < 2) {
46
+ if (!res) res = "零元整";
47
+ }
48
+ else {
49
+ if (!res) res = "整";
50
+ res = s + res;
51
+ }
52
+ return res;
53
+ };
@@ -21,7 +21,7 @@ var reportError = function (error) {
21
21
  }
22
22
  };
23
23
 
24
- function init() {
24
+ function init(type) {
25
25
  if (!this.audioPromise) {
26
26
  this.audioPromise = navigator.mediaDevices.getUserMedia({
27
27
  audio: { deviceId: this.deviceId }
@@ -32,6 +32,20 @@ function init() {
32
32
  analyser.fftSize = 2048;
33
33
  context.resume();
34
34
  var source = context.createMediaStreamSource(stream);
35
+ if (/^f/i.test(type)) {
36
+ this.dancingArray = new Float32Array(analyser.fftSize);
37
+ this.getTimeDomainData = analyser.getFloatTimeDomainData;
38
+ this.getFrequencyData = analyser.getFloatFrequencyData;
39
+ } else {
40
+ this.dancingArray = new Uint8Array(analyser.fftSize);
41
+ this.getTimeDomainData = analyser.getByteTimeDomainData;
42
+ this.getFrequencyData = analyser.getByteFrequencyData;
43
+ }
44
+ this.maxDecibels = analyser.maxDecibels;
45
+ this.minDecibels = analyser.minDecibels;
46
+ this.source = source;
47
+ this.context = context;
48
+ this.analyser = analyser;
35
49
  return [source, context, analyser];
36
50
  });
37
51
  }
@@ -70,9 +84,9 @@ async function start() {
70
84
  }
71
85
  if (commandCount !== this.commandCount) return;
72
86
  this.context = context;
73
- var dancingArray = new Uint8Array(analyser.fftSize);
87
+ var dancingArray = this.dancingArray;
74
88
  var animate = () => {
75
- analyser.getByteTimeDomainData(dancingArray);
89
+ this.getTimeDomainData.call(analyser, dancingArray);
76
90
  cast(this, dancingArray);
77
91
  analyser.frame = requestAnimationFrame(animate);
78
92
  this.onprocess instanceof Function && this.onprocess(dancingArray);
@@ -81,7 +95,7 @@ async function start() {
81
95
  this.running = true;
82
96
 
83
97
  source.connect(analyser);
84
- source.connect(this.gain).connect(context.destination);
98
+ // source.connect(this.gain).connect(context.destination);
85
99
  if (this.audio) this.audio.play();
86
100
  }
87
101
 
@@ -19,7 +19,7 @@
19
19
  user-select: none;
20
20
  }
21
21
 
22
- >.label {
22
+ >* {
23
23
  position: relative;
24
24
  }
25
25
 
@@ -24,11 +24,16 @@ function cast(target, type, data) {
24
24
  var datakey = `cast(${type})`;
25
25
  type = `care(${type})`;
26
26
  if (target[type] instanceof Array) {
27
- target[type].forEach(function (listener) {
28
- if (listener instanceof Function) {
29
- listener.call(target, data, target[datakey]);
30
- }
31
- });
32
- target[datakey] = data;
27
+ var listeners = target[type];
28
+ if (!listeners.datas) listeners.datas = [];
29
+ var datas = listeners.datas;
30
+ datas.push(data);
31
+ if (datas.length === 1) {
32
+ while (datas.length) target[type].forEach(function (listener) {
33
+ if (listener instanceof Function) {
34
+ listener.call(target, datas[0], target[datakey]);
35
+ }
36
+ }), target[datakey] = datas.shift();
37
+ }
33
38
  }
34
39
  }
@@ -28,9 +28,17 @@ function chooseFile(accept, multiple, extra) {
28
28
  alert(e + "打开文件失败!");
29
29
  }
30
30
  } else {
31
- setTimeout(() => {
32
- ok(this.files);
33
- }, 100);
31
+ var count = 0;
32
+ var getFiles = function () {
33
+ count++;
34
+ if (input.files && input.files.length) {
35
+ ok(input.files);
36
+ return;
37
+ }
38
+ if (count > 20) return;
39
+ setTimeout(getFiles, 100);
40
+ };
41
+ getFiles();
34
42
  }
35
43
  });
36
44
  });
@@ -18,8 +18,7 @@ var createMenu = function (event, items) {
18
18
  return elem;
19
19
  }
20
20
  function contextmenu(target, menuItems) {
21
- on("contextmenu")(target, function (event) {
22
- event.preventDefault();
21
+ var showContext = function (event) {
23
22
  var menu;
24
23
  if (menuItems instanceof Function) {
25
24
  menu = menuItems.call(this, event);
@@ -32,9 +31,43 @@ function contextmenu(target, menuItems) {
32
31
  position: "absolute",
33
32
  });
34
33
  popup(menu, event);
35
- menu.focus();
36
34
  onmousedown(menu, e => e.preventDefault());
37
- onblur(menu, lazy(e => remove(menu)));
35
+ return menu;
36
+ };
37
+ var menuHandle = 0;
38
+ var tm;
39
+ bindtouch(target, {
40
+ start(event) {
41
+ if (event.defaultPrevented) return;
42
+ event.preventDefault();
43
+ clearTimeout(menuHandle);
44
+ if (tm) remove(tm), tm = null;
45
+ menuHandle = setTimeout(function () {
46
+ tm = showContext(event);
47
+ }, 600);
48
+ },
49
+ move() {
50
+ if (onclick.preventClick) return clearTimeout(menuHandle);
51
+ },
52
+ end(event) {
53
+ clearTimeout(menuHandle);
54
+ if (tm) {
55
+ event.preventDefault();
56
+ setTimeout(function () {
57
+ if (!tm) return;
58
+ tm.focus();
59
+ onblur(tm, lazy(e => remove(tm)));
60
+ }, 60);
61
+ }
62
+ }
63
+ })
64
+ on("contextmenu")(target, function (event) {
65
+ if (event.defaultPrevented) return;
66
+ event.preventDefault();
67
+ if (tm) remove(tm), tm = null;
68
+ tm = showContext(event);
69
+ tm.focus();
70
+ onblur(tm, lazy(e => remove(tm)));
38
71
  });
39
72
  return sampleElement;
40
73
  }
@@ -29,7 +29,7 @@ var cross = cross_.bind(function (callback, onerror) {
29
29
  abort.call(this);
30
30
  };
31
31
  xhr.onerror = onerror;
32
-
32
+ xhr.ontimeout = onerror;
33
33
  xhr.onreadystatechange = function () {
34
34
  if (xhr.readyState === 4) {
35
35
  switch (xhr.status) {
@@ -18,6 +18,11 @@ var transfromSimpleValue = function (value) {
18
18
  return value;
19
19
  };
20
20
  var transformValue = function (value, k) {
21
+ if (value instanceof Array) {
22
+ var res = [];
23
+ for (var v of value) res.push(transformValue(v, k));
24
+ return res;
25
+ }
21
26
  if (ratioPropReg.test(k) || !value) return value;
22
27
  if (/^[\w\s\.]+$/.test(value)) return isFinite(value) ? transfromSimpleValue(value) : String(value).split(/\s+/).map(transfromSimpleValue).join(' ');
23
28
  return value;
@@ -28,6 +33,12 @@ var partifyValue = function (v) {
28
33
  var isSameValue = function (v1, v2) {
29
34
  return partifyValue(v1) === partifyValue(v2);
30
35
  };
36
+ var setValue = function (o, k, v) {
37
+ if (v instanceof Array) for (var v0 of v) setValue(o, k, v0);
38
+ else {
39
+ if (!isSameValue(o[k], v)) o[k] = v;
40
+ }
41
+ }
31
42
  /**
32
43
  * 将中划线转成驼峰式
33
44
  * @param {string} key
@@ -80,9 +91,7 @@ var cssTargetNode = function (targetNode, oStyle, oValue) {
80
91
  styleobject[transformNodeKey(oStyle)] = transformValue(oValue, oStyle);
81
92
  return;
82
93
  } else {
83
- try {
84
- oStyle = parseKV(oStyle, ';', ':');
85
- } catch (e) { }
94
+ oStyle = parseKV(oStyle, ';', ':');
86
95
  }
87
96
  }
88
97
  if (isObject(oStyle)) {
@@ -93,7 +102,7 @@ var cssTargetNode = function (targetNode, oStyle, oValue) {
93
102
  if (key in styleobject) {
94
103
  try {
95
104
  var value = transformValue(oStyle[k], key);
96
- if (!isSameValue(value, styleobject[value])) styleobject[key] = transformValue(oStyle[k], key);
105
+ setValue(styleobject, key, value);
97
106
  } catch (e) {
98
107
  console.warn(key, oStyle[k], "无效");
99
108
  }
@@ -103,7 +112,7 @@ var cssTargetNode = function (targetNode, oStyle, oValue) {
103
112
  for (var k in oStyle) {
104
113
  var key = transformNodeKey(k);
105
114
  var value = transformValue(oStyle[k], key);
106
- if (key in styleobject && !isSameValue(value, styleobject[key])) styleobject[key] = value;
115
+ if (key in styleobject) setValue(styleobject, key, value);
107
116
  }
108
117
  }
109
118
  }
@@ -178,6 +178,7 @@ function getUrlParamsForApi(api, url) {
178
178
  return r;
179
179
  });
180
180
  if (api.base) base = api.base + base;
181
+ if (/\/$/.test(base)) base += "?";
181
182
  var params = {};
182
183
  url = url.replace(/[\?#]*$/g, function (match) {
183
184
  match.split(/[&#\?]+/).forEach(function (s) {
@@ -30,7 +30,7 @@ var getGenerator = function (container, tagName = 'item') {
30
30
  com = container.src[index];
31
31
  }
32
32
  if (com === undefined) return;
33
- if (!element) {
33
+ if (!isNode(element)) {
34
34
  var template1 = template.cloneNode(true);
35
35
  if (!template1.childNodes.length) {
36
36
  element = template1;
@@ -71,7 +71,7 @@ var getGenerator = function (container, tagName = 'item') {
71
71
  }
72
72
  }
73
73
  var newItem = render(element, newScope, scopes, false);
74
- if (element.with) newItem.with = render(newItem.with = element.with, newScope, scopes, false);
74
+ if (element.with) newItem.with = render(element.with, newScope, scopes, false);
75
75
  }
76
76
  return newItem;
77
77
  };
@@ -1,10 +1,15 @@
1
1
  var complete_class = "complete";
2
2
  var inadequate_class = "lack";
3
- function lattice(element, minWidth, maxWidth = minWidth << 1, layers) {
4
- var boxCount;
3
+ function lattice(element, minWidth, _maxWidth, layers) {
4
+ var boxCount, maxWidth = _maxWidth || minWidth << 1;
5
5
  var resize = function () {
6
6
  var _layers = layers || _box.src || [];
7
7
  if (!_layers.length) return;
8
+ var _minWidth = +(element.getAttribute("min-width") || element.getAttribute("item-width"));
9
+ if (_minWidth) {
10
+ minWidth = _minWidth;
11
+ maxWidth = _maxWidth || minWidth << 1;
12
+ }
8
13
  var clientWidth = parseFloat(freePixel(_box.clientWidth));
9
14
  if (!clientWidth) return;
10
15
  var savedCount = boxCount;
@@ -80,30 +85,29 @@ function lattice(element, minWidth, maxWidth = minWidth << 1, layers) {
80
85
  }
81
86
  function main() {
82
87
  var element, minWidth, maxWidth, layers;
88
+ var initMinWidth = function (arg) {
89
+ if (minWidth) {
90
+ if (arg >= minWidth) {
91
+ maxWidth = arg;
92
+ } else {
93
+ maxWidth = minWidth;
94
+ minWidth = arg;
95
+ }
96
+ } else {
97
+ minWidth = arg;
98
+ }
99
+ };
83
100
  [].forEach.call(arguments, function (arg) {
84
101
  if (isNode(arg)) {
85
102
  element = arg;
86
103
  } else if (isArray(arg)) {
87
104
  layers = arg;
88
105
  } else if (isFinite(arg)) {
89
- if (minWidth) {
90
- if (arg >= minWidth) {
91
- maxWidth = arg;
92
- } else {
93
- maxWidth = minWidth;
94
- minWidth = arg;
95
- }
96
- } else {
97
- minWidth = arg;
98
- }
106
+ initMinWidth(arg);
99
107
  }
100
108
  });
101
109
  if (element && element.$scope) {
102
110
  layers = null;
103
111
  }
104
-
105
- if (isNode(element) && !minWidth) {
106
- minWidth = +(element.getAttribute("min-width") || element.getAttribute("item-width"));
107
- }
108
112
  return lattice(element, minWidth || 240, maxWidth, layers);
109
113
  }
@@ -190,7 +190,7 @@ function ylist(container, generator, $Y) {
190
190
  var runbuild = lazy(function () {
191
191
  patchBottom();
192
192
  patchTop();
193
- var firstElement = getFirstElement(), y;
193
+ var firstElement = getFirstElement(1), y;
194
194
  if (firstElement) {
195
195
  y = firstElement.index * getNodeTarget(firstElement).offsetHeight;
196
196
  } else {
@@ -302,7 +302,7 @@ function ylist(container, generator, $Y) {
302
302
  var cache_height = list.offsetHeight;
303
303
 
304
304
  var childrenMap = getChildrenMap();
305
- var first_element, flag_element = first_element = getFirstElement();
305
+ var first_element, flag_element = first_element = getFirstElement(1);
306
306
  if (!flag_element || !isFinite(flag_element.offsetTop)) return;
307
307
  var offset = flag_element.index || 0;
308
308
  var offsetTop = flag_element.offsetTop;
@@ -435,7 +435,7 @@ function ylist(container, generator, $Y) {
435
435
  return index + scrolled;
436
436
  };
437
437
  list.topIndex = function () {
438
- var element = getFirstElement();
438
+ var element = getFirstElement(1);
439
439
  return element ? element.index : 0;
440
440
  };
441
441
  list.getIndexedElement = getIndexedElement;
@@ -1,3 +1,3 @@
1
- loading..
1
+ 加载中..
2
2
  <div class="loader">
3
3
  </div>