efront 3.27.1 → 3.28.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.
@@ -1,5 +1,5 @@
1
1
  <slider elementid=pages class="pages"></slider>
2
- <titlebar class="title-bar">
2
+ <titlebar>
3
3
  <tag type=white ng-repeat="t in tags" ng-click="pages.go(t.index)" ng-class="{activate:t===tags.active}">
4
4
  <span ng-bind=t.text></span>
5
5
  </tag>
@@ -8,6 +8,11 @@
8
8
  <icon class="search-icon"></icon>
9
9
  </search>
10
10
  <btn class="search-btn" ng-click="go('/search/search')">
11
- <icon class="search-icon"></icon>
11
+ <svg class="search-icon" style="fill: currentColor;overflow: hidden;"
12
+ viewBox="0 0 1024 1024" version="1" xmlns="http://www.w3.org/2000/svg" p-id="2144">
13
+ <path
14
+ d="M936 843l-182-182c41-55 64-123 64-194 0-179-146-325-325-325s-325 146-325 325 146 325 325 325c77 0 149-26 207-74l180 180 55-55zM492 728c-143 0-260-117-260-260s117-260 260-260c143 0 260 117 260 260 0 67-25 131-71 179-49 52-116 80-189 80z"
15
+ fill="" p-id="2145"></path>
16
+ </svg>
12
17
  </btn>
13
18
  </titlebar>
@@ -35,6 +35,7 @@ render(page, {
35
35
  tag: button,
36
36
  btn: button,
37
37
  input,
38
+ titlebar,
38
39
  slider(elem) {
39
40
  var pages = slider(elem, function (index, ratio) {
40
41
  if (ratio === 1) {
@@ -1,4 +1,4 @@
1
- .title-bar {
1
+ .titlebar {
2
2
  position: absolute;
3
3
  // background-color: #fffb;
4
4
  left: 0;
@@ -8,14 +8,12 @@
8
8
  height: 44px;
9
9
  line-height: 44px;
10
10
  font-size: 16px;
11
- box-shadow: 0 2px 2px -2px rgba(0, 0, 0, .1);
12
11
  backdrop-filter: blur(20px);
13
12
  z-index: 1;
14
13
  padding: 0 10px;
15
14
  padding-right: 60px;
16
15
  cursor: default;
17
16
  white-space: nowrap;
18
- background-color: #1f4a3bd4;
19
17
 
20
18
  >tag {
21
19
  width: 25%;
@@ -45,7 +43,7 @@
45
43
  .track() {
46
44
  opacity: 1;
47
45
  box-shadow: none;
48
- background-color: #22a2c4;
46
+ background-color: #22a2c433;
49
47
  transition: margin-top .2s ease-out;
50
48
  }
51
49
 
@@ -77,8 +75,7 @@
77
75
  display: inline-block;
78
76
  height: 44px;
79
77
  width: 24px;
80
- vertical-align: middle;
81
- background: url('http://m.kugou.com/v3/static/images/index/search.png') no-repeat center/ 16px auto;
78
+ vertical-align: top;
82
79
  }
83
80
  }
84
81
 
@@ -1,4 +1,4 @@
1
1
  data.setConfig(api);
2
2
  zimoli.switch("", null, "/home");
3
- css("body", "background-color:#f2f4f6;");
3
+ css("body", "background-color:#323336;");
4
4
  zimoli();
@@ -5,12 +5,12 @@
5
5
  <icon class="loading" ng-if="result?.loading"></icon>
6
6
  <btn ng-click="keyword='';search()">清空</btn>
7
7
  </titlebar>
8
- <div ng-if="!keyword">
8
+ <div ng-if="!keyword" .history>
9
9
  <padding class="empty" ng-if="!searchHistory.length">
10
10
  搜索历史为空
11
11
  </padding>
12
12
  <padding ng-repeat="s in searchHistory">
13
- <btn ng-click="search(s,0)" type=white><span ng-bind="s"></span></btn>
13
+ <btn ng-click="search(s,0)"><span ng-bind="s"></span></btn>
14
14
  </padding>
15
15
  </div>
16
16
  <list ng-if="keyword" ng-src="s in result">
@@ -7,11 +7,12 @@
7
7
  bottom: 0;
8
8
  background: inherit;
9
9
  }
10
- .button{
10
+
11
+ .button {
11
12
  padding: 0 10px;
12
13
  }
13
14
 
14
- .empty{
15
+ .empty {
15
16
  color: #666;
16
17
  display: block;
17
18
  padding: 50px 10px;
@@ -28,6 +29,7 @@
28
29
  text-align: right;
29
30
  vertical-align: middle;
30
31
  width: auto;
32
+
31
33
  &:after {
32
34
  content: "⇵";
33
35
  }
@@ -65,43 +67,23 @@
65
67
  }
66
68
  }
67
69
 
68
- .input-box {
69
- height: 50px;
70
- position: relative;
71
- padding: 10px 12px;
72
-
70
+ .titlebar {
71
+ padding: 0 60px;
73
72
  >input {
74
73
  height: 30px;
75
74
  border: none;
76
75
  width: 100%;
77
76
  border-radius: 3px;
77
+ background: #000c;
78
78
  font-size: 14px;
79
79
  padding: 0 10px;
80
+ color: #fff;
80
81
  }
81
82
  }
82
83
 
83
- .keyword-pad {
84
- >div {
85
- padding: 10px 12px;
86
- background-color: #fff;
87
- }
88
-
89
- >div+div {
90
- border-top: 1px solid #ccc;
91
- }
92
- }
93
-
94
- .result-pad {
95
- b {
96
- color: rgb(44, 162, 149);
97
- }
98
-
99
- >div {
100
- padding: 10px 12px;
101
- background-color: #fff;
102
- }
103
-
104
- >div+div {
105
- border-top: 1px solid #ccc;
84
+ .history{
85
+ btn{
86
+ background: #5769;
87
+ padding: 0 16px;
106
88
  }
107
89
  }
@@ -0,0 +1,6 @@
1
+ <svg class="icon" style="vertical-align: middle;fill: currentColor;overflow: hidden;"
2
+ viewBox="0 0 1024 1024" version="1" xmlns="http://www.w3.org/2000/svg" p-id="2144">
3
+ <path
4
+ d="M936 843l-182-182c41-55 64-123 64-194 0-179-146-325-325-325s-325 146-325 325 146 325 325 325c77 0 149-26 207-74l180 180 55-55zM492 728c-143 0-260-117-260-260s117-260 260-260c143 0 260 117 260 260 0 67-25 131-71 179-49 52-116 80-189 80z"
5
+ fill="" p-id="2145"></path>
6
+ </svg>
@@ -1,4 +1,5 @@
1
1
  <group ng-repeat="data in datas">
2
+ <bg></bg>
2
3
  <padding ng-repeat="d in data">
3
4
  <song ng-src=d ng-click="go('/singer/list',d)"></song>
4
5
  </padding>
@@ -13,7 +13,9 @@ var datas = data.from("singer-class", function (response) {
13
13
  });
14
14
  var $scope = {
15
15
  datas,
16
+ group: padding,
16
17
  padding,
18
+ bg,
17
19
  song,
18
20
  go,
19
21
  };
@@ -4,26 +4,61 @@
4
4
 
5
5
  >group {
6
6
  position: relative;
7
- border-radius: 4px;
8
7
  overflow: hidden;
9
8
  display: block;
10
9
  border: solid transparent;
11
10
  border-width: 6px 0;
12
-
11
+
12
+ >bg {
13
+ display: none;
14
+ }
15
+
13
16
  >padding {
14
17
  height: auto;
15
18
  display: block;
16
19
  border: solid transparent;
17
20
  border-width: 0 6px;
18
- >song{
21
+
22
+ >song {
19
23
  line-height: 30px;
20
24
  }
21
25
  }
22
26
  }
23
27
 
28
+ @media (max-width:720px) {
29
+
30
+ song .bg {
31
+ display: none;
32
+ }
33
+
34
+ song {
35
+ border-radius: 0;
36
+ background: transparent;
37
+ }
38
+
39
+ >group {
40
+ overflow: hidden;
41
+ border-width: 6px;
42
+
43
+ padding+padding {
44
+ border-top: 1px solid #9992;
45
+ }
46
+ }
47
+
48
+ >group>padding {
49
+ border: none;
50
+ }
51
+
52
+ >group>bg {
53
+ background: #101216;
54
+ border-radius: 4px 0 4px 0;
55
+ display: block;
56
+ }
57
+ }
58
+
24
59
  @media(min-width:721px) {
25
60
  >group {
26
-
61
+
27
62
  >padding {
28
63
  width: 33.3333%;
29
64
  line-height: 40px;
@@ -1,5 +1,4 @@
1
1
  class Field {
2
2
  key = '';
3
3
  name = '';
4
- sort = 0;
5
4
  }
@@ -36,6 +36,7 @@ class Table extends Array {
36
36
  removeFromList(this.sortFields, field);
37
37
  this.sortFields.push(field);
38
38
  var sorted = this.sorted || this.source.slice(0);
39
+ if (isEmpty(field.sort)) field.sort = 0;
39
40
  field.sort = field.sort > 0 ? -1 : 1;
40
41
  this.sorted = sorted.sort(function (a, b) {
41
42
  a = seek(a, field.key);
@@ -286,16 +286,18 @@ function cross_(jsonp, digest = noop, method, url, headers) {
286
286
  }
287
287
  location = getRequestProtocol(url) + "//" + location;
288
288
  }
289
- var crs = cross_.call(cross, jsonp, digest, method, location, _headers);
290
- crs.isRedirected = (xhr.isRedirected || 0) + 1;
291
- crs.done(onload, false);
292
- crs.error(onerror, false);
293
- if (!isEmpty(datas)) crs.send(datas);
289
+ if (!redirected) redirected = [];
290
+ headers = _headers;
291
+ url = location;
292
+ var r = method + " " + url;
293
+ if (redirected.indexOf(r) >= 0 || redirected.length > 10) onerror(xhr);
294
+ else redirected.push(r), fire();
294
295
  break;
295
296
  default:
296
297
  onerror(xhr);
297
298
  }
298
299
  };
300
+ var redirected = null;
299
301
  var cross = this;
300
302
  var xhr = cross(callback, onerror);
301
303
  var send = xhr.send;
@@ -327,6 +329,8 @@ function cross_(jsonp, digest = noop, method, url, headers) {
327
329
  };
328
330
  var fire = async function (code) {
329
331
  if (!~requests.indexOf(xhr)) return;
332
+ xhr.method = method;
333
+ xhr.url = url;
330
334
  xhr.encrypt = code;
331
335
  var isform = /^f/i.test(method);
332
336
  if (isform) {
@@ -8,7 +8,7 @@ function rest_(o, keys) {
8
8
  var propertyIsEnumerable = Object.prototype.propertyIsEnumerable;
9
9
  var map = Object.create(null);
10
10
  for (var k of keys) map[k] = true;
11
- var res = Object.create(null);
11
+ var res = {};
12
12
  for (var k in o) {
13
13
  if (hasOwnProperty.call(o, k)) {
14
14
  if (k in map) continue;
package/coms/kugou/api.js CHANGED
@@ -16,7 +16,7 @@
16
16
  "singer-info0": "mget:[].singer-songs-list>li singer/info/:id#hash=!id&singer=.singer-name|innerText&name=.song-name|innerText&data=em/innerText"
17
17
  },
18
18
  "https://www.kugou.com/": {
19
- "singer-info": "cget:link[rel]+script yy/singer/home/:id.html",
19
+ "singer-info": "cget:link[rel]+script singer/info/:id",
20
20
  },
21
21
  "http://mobilecdn.kugou.com/": {
22
22
  "search?keyword": "get:data.info api/v3/search/song?format=json&page=1&pagesize=30&showtype=1"
@@ -0,0 +1,3 @@
1
+ function bg(elem) {
2
+ return elem || document.createElement("bg");
3
+ }
@@ -0,0 +1,34 @@
1
+ & {
2
+ border: 1px solid rgba(0, 0, 0, .1);
3
+ border-radius: inherit;
4
+ position: absolute;
5
+ left: 0;
6
+ right: 0;
7
+ top: 0;
8
+ bottom: 0;
9
+ overflow: hidden;
10
+
11
+ &:after {
12
+ margin: -100px -180px;
13
+ width: 300px;
14
+ height: 200px;
15
+ right: 0;
16
+ bottom: 0;
17
+ }
18
+
19
+ &:before {
20
+ width: 60px;
21
+ height: 100px;
22
+ margin: -55px -35px;
23
+ left: 0;
24
+ top: 0;
25
+ }
26
+
27
+ &:after,
28
+ &:before {
29
+ content: "";
30
+ background-color: #2873;
31
+ position: absolute;
32
+ border-radius: 50%;
33
+ }
34
+ }
@@ -4,23 +4,38 @@ function bindScroll(titlebar, page) {
4
4
  var labelarea = div();
5
5
  var [label, back] = titlebar.children;
6
6
  css(back, `height:${fromPixel(topHeight)}`);
7
- appendChild.after(label, labelarea);
8
- var init=function(){
9
- init=function(){};
10
- css(labelarea, "height:100%;width:100%;background:#000;position:absolute;left:0;top:0;z-index:-1");
7
+ var img = document.createElement("png");
8
+ css(labelarea, "backdrop-filter:blur(20px);height:100%;width:100%;background:inherit;position:absolute;left:0;top:0;z-index:-1");
9
+ css(img, 'position:absolute;left:0;top:0;width:100%;height:100%;filter:brightness(.8) saturate(.6);z-index:-1');
10
+ var init = function (image) {
11
+ if (image) {
12
+ appendChild.after(label, labelarea);
13
+ appendChild.after(label, img);
14
+ setOpacity(image, 0);
15
+ css(img, `background:${image.style.backgroundImage}no-repeat center;background-size:cover;`);
16
+ }
17
+ else {
18
+ remove(img);
19
+ remove(labelarea);
20
+ }
11
21
  };
12
- onappend(page, function () {
13
- css(titlebar, `min-height:${fromPixel(topHeight)}`);
14
- setTimeout(refresh);
15
- });
16
- var refresh = function () {
22
+ var getImage = function () {
17
23
  var image = page.children[0];
18
24
  if (!image) return;
19
25
  if (!image.style.backgroundImage && !/img/i.test(image.className)) image = page.children[1] || image;
20
26
  if (!image.style.backgroundImage && !/img/i.test(image.className)) return;
21
- init();
22
- setOpacity(image, 0);
23
- image.style.opacity = 0;
27
+ return image;
28
+ }
29
+
30
+ onmounted(page, function () {
31
+ css(titlebar, `min-height:${fromPixel(topHeight)}`);
32
+ var image = getImage();
33
+ init(image);
34
+ refresh();
35
+ });
36
+ var refresh = function () {
37
+ var image = getImage();
38
+ if (!image) return;
24
39
  var scrollTop = page.scrollTop;
25
40
  var offsetHeight = image.offsetHeight;
26
41
  var height = offsetHeight + image.offsetTop - scrollTop;
@@ -32,10 +47,10 @@ function bindScroll(titlebar, page) {
32
47
  }
33
48
  if (height > page.offsetHeight >> 1) {
34
49
  height = page.offsetHeight >> 1;
35
- css(image, { paddingBottom: fromOffset(height) })
50
+ css(image, { paddingBottom: fromOffset(height) });
36
51
  }
37
- css(titlebar, `background: center ${image.style.backgroundImage};background-size:cover;height:${fromOffset(height)}`);
38
- setOpacity(labelarea, (1 - (titlebar.offsetHeight + offsetHeight) / offsetHeight / 2));
52
+ css(titlebar, `height:${fromOffset(height)}`);
53
+ setOpacity(labelarea, 1 - (titlebar.offsetHeight) / offsetHeight);
39
54
  setOpacity(label, 1 - (titlebar.offsetHeight - topHeight) / (offsetHeight - topHeight));
40
55
  return {};
41
56
  };
@@ -1,5 +1,5 @@
1
1
  function main(dataid, datapath) {
2
- var page = div();
2
+ var page = document.createElement("list-page");
3
3
  page.innerHTML = buildList;
4
4
  render(page, {
5
5
  list: lattice,
@@ -1,5 +1,6 @@
1
1
  & {
2
2
  font-size: 16px;
3
+ height: 100%;
3
4
  }
4
5
 
5
6
  .list {
@@ -10,17 +11,8 @@
10
11
  right: 0;
11
12
  bottom: 0;
12
13
  left: 0;
13
-
14
- >div {
15
- background-color: #fff;
16
- width: 100%;
17
- padding: 10px 15px;
18
- }
19
-
20
- >div+div {
21
- border-top: 1px solid #ccc;
22
- }
23
14
  }
24
- .padding{
15
+
16
+ .padding {
25
17
  max-width: 100%;
26
18
  }
@@ -36,7 +36,6 @@ function Main(dataid, datapath, titleid) {
36
36
  data.from(titleid, {
37
37
  id
38
38
  }).then(function ({ title }) {
39
- console.log(arguments)
40
39
  _titlebar.setTitle(title);
41
40
  document.title = title;
42
41
  })
@@ -8,14 +8,21 @@
8
8
  box-shadow: 0 0 20px -6px rgba(0, 0, 0, .6);
9
9
  margin-bottom: 10px;
10
10
  overflow: visible;
11
- background: #fff;
11
+ background: #131416;
12
12
  margin-top: 0;
13
13
  transition: margin .2s ease-out;
14
+ color: #fff;
15
+ }
16
+ >.head{
17
+ background: inherit;
18
+ }
19
+ >.foot{
20
+ background: inherit;
14
21
  }
15
-
16
22
  >list.body {
17
23
  overflow-x: hidden;
18
24
  overflow-y: scroll;
25
+ background: #f2f4f622;
19
26
  padding: 0;
20
27
  }
21
28
 
@@ -249,7 +249,6 @@ var $scope = {
249
249
  $scope.playing = true;
250
250
  playState.width = 0;
251
251
  getMusicInfo(hash).loading_promise.then((response) => {
252
- console.log(response)
253
252
  if (!this.playing) return;
254
253
  if (hash !== musicList.active_hash) return;
255
254
  if (response.imgUrl) {
@@ -128,16 +128,17 @@
128
128
  >.track:after,
129
129
  >.avatar {
130
130
  border-color: @main-color;
131
- opacity: 1;
132
131
  box-shadow: 0 0 6px -3px @main-color;
133
132
  }
134
-
133
+
135
134
  >.track {
136
- transition: height .3s;
135
+ opacity: .7;
136
+ transition: height .3s, opacity .3s;
137
137
  top: 12px;
138
138
  }
139
-
139
+
140
140
  >.avatar {
141
+ opacity: 1;
141
142
  top: 0;
142
143
  }
143
144
 
@@ -219,6 +220,7 @@
219
220
 
220
221
  >div.progress>.track {
221
222
  height: 3px;
223
+ opacity: 1;
222
224
  }
223
225
 
224
226
  >.track {
@@ -1,4 +1,4 @@
1
- <div class="bg"></div>
1
+ <bg></bg>
2
2
  <png class="logo" ng-if="song.imgurl" ng-src=song.imgurl></png>
3
3
  <div class="singer" ng-if="song.singer" ng-model=song.singerMarked></div>
4
4
  <div class="song" ng-model=song.songMarked></div>
@@ -4,6 +4,7 @@ function main(elem) {
4
4
  var $scope = {
5
5
  filterTime,
6
6
  png: img,
7
+ bg,
7
8
  playState: kugou$playState,
8
9
  song: {},
9
10
  musicList: kugou$musicList,
@@ -19,7 +20,7 @@ function main(elem) {
19
20
  }
20
21
  }
21
22
  $scope.song = {
22
- hash: item.hash,
23
+ hash: item.hash || item.hashid,
23
24
  imgurl: item.imgurl,
24
25
  singer: singerName,
25
26
  songMarked: mark(songName, elem.mark),
@@ -6,16 +6,17 @@
6
6
  white-space: nowrap;
7
7
  overflow: hidden;
8
8
  text-overflow: ellipsis;
9
- background: #fff;
9
+ background: #101216;
10
+ color: #fffc;
10
11
 
11
12
  border: 2px solid transparent;
12
13
 
13
14
  &:hover {
14
- border-color: #2cf;
15
+ border-color: #276;
15
16
  }
16
17
 
17
18
  &:active {
18
- border-color: #29c;
19
+ border-color: #253;
19
20
  }
20
21
  }
21
22
 
@@ -63,10 +64,9 @@
63
64
  }
64
65
 
65
66
  b {
66
- border: 1px solid #1f4a3bd4;
67
- color: #1f4a3bd4;
67
+ border: 1.2px solid #288833;
68
68
  font-weight: normal;
69
- background: #a8ebd4d4;
69
+ background: #2836;
70
70
 
71
71
  }
72
72
 
@@ -78,12 +78,15 @@ b {
78
78
  text-align: center;
79
79
  line-height: 12px;
80
80
  font-size: 12px;
81
- color: #888;
81
+ color: #fff9;
82
82
 
83
83
  &+.song {
84
84
  padding-top: 8px;
85
85
  }
86
86
  }
87
+ png{
88
+ filter: brightness(.7) contrast(.9);
89
+ }
87
90
 
88
91
  >.play-state {
89
92
  position: absolute;
@@ -1,10 +1,7 @@
1
1
  & {
2
- background-color: #1f4a3b99;
3
2
  height: 44px;
4
3
  line-height: 42px;
5
4
  font-size: 16px;
6
- backdrop-filter: blur(20px);
7
-
8
5
  >.button {
9
6
  height: 44px;
10
7
  line-height: 44px;
@@ -3,39 +3,4 @@
3
3
  position: relative;
4
4
  background: #fffc;
5
5
  border-radius: 4px 0 4px 0;
6
- }
7
-
8
- >.bg {
9
- border: 1px solid rgba(0, 0, 0, .1);
10
- border-radius: inherit;
11
- position: absolute;
12
- left: 0;
13
- right: 0;
14
- top: 0;
15
- bottom: 0;
16
- overflow: hidden;
17
-
18
- &:after {
19
- margin: -100px -180px;
20
- width: 300px;
21
- height: 200px;
22
- right: 0;
23
- bottom: 0;
24
- }
25
-
26
- &:before {
27
- width: 60px;
28
- height: 100px;
29
- margin: -55px -35px;
30
- left: 0;
31
- top: 0;
32
- }
33
-
34
- &:after,
35
- &:before {
36
- content: "";
37
- background-color: rgba(90, 200, 250, 0.1);
38
- position: absolute;
39
- border-radius: 50%;
40
- }
41
6
  }