efront 3.3.8 → 3.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pivot/api.yml +3 -0
- package/apps/pivot/auth/login.html +9 -0
- package/apps/pivot/auth/login.js +30 -0
- package/apps/pivot/auth/login.less +11 -0
- package/apps/pivot/home/short.html +1 -0
- package/apps/pivot/home/short.js +5 -0
- package/apps/pivot/home/short.less +1 -0
- package/apps/pivot/home/welcome.html +14 -0
- package/apps/pivot/home/welcome.js +24 -0
- package/apps/pivot/home/welcome.less +8 -0
- package/apps/pivot/index.html +41 -0
- package/apps/pivot/main.js +18 -0
- package/apps/pivot/menu.yml +3 -0
- package/apps/zimoli/book/main.js +1 -1
- package/apps/zimoli/broadcast/main.js +1 -1
- package/apps/zimoli/index.html +1 -0
- package/apps/zimoli/main.js +1 -1
- package/apps/zimoli/nearby/main.js +1 -1
- package/apps/zimoli/yuanfen/main.js +1 -1
- package/coms/basic/crypt.js +1 -1
- package/coms/basic/refilm_decode.js +13 -2
- package/coms/basic/valid.js +10 -0
- package/coms/compile/common.js +12 -0
- package/coms/compile/scanner2.js +1 -1
- package/coms/crypt/encode62.js +23 -33
- package/coms/crypt/encode62_test.js +2 -1
- package/coms/frame/left.html +11 -6
- package/coms/frame/left.js +6 -3
- package/coms/frame/left.less +38 -36
- package/coms/frame/main.js +1 -1
- package/coms/frame/route.js +52 -4
- package/coms/frame/top.less +12 -13
- package/coms/kugou/buildList.js +1 -0
- package/coms/kugou/player.js +3 -0
- package/coms/layer/glance.less +4 -2
- package/coms/zimoli/alert.js +8 -4
- package/coms/zimoli/avatar.js +0 -1
- package/coms/zimoli/checker.html +1 -1
- package/coms/zimoli/checker.less +8 -13
- package/coms/zimoli/cross.js +1 -1
- package/coms/zimoli/css.js +1 -0
- package/coms/zimoli/data.js +8 -3
- package/coms/zimoli/encode62.js +13 -0
- package/coms/zimoli/field.html +2 -0
- package/coms/zimoli/field.js +41 -17
- package/coms/zimoli/field.less +19 -0
- package/coms/zimoli/form.js +8 -0
- package/coms/zimoli/menu.js +11 -1
- package/coms/zimoli/menu.less +1 -1
- package/coms/zimoli/menuItem.js +4 -1
- package/coms/zimoli/model.js +1 -0
- package/coms/zimoli/radio.html +1 -3
- package/coms/zimoli/radio.less +10 -22
- package/coms/zimoli/render.js +34 -63
- package/coms/zimoli/renderDefaults.js +1 -0
- package/coms/zimoli/submit.js +41 -0
- package/coms/zimoli/view.js +0 -5
- package/coms/zimoli/view.less +17 -11
- package/coms/zimoli/zimoli.js +11 -9
- package/data/mime.json +3 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/coms/zimoli/beian.html +0 -1
- package/coms/zimoli/beian.js +0 -5
- package/coms/zimoli/beian.less +0 -13
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
var fields = refilm`
|
|
2
|
+
密码/password* password
|
|
3
|
+
`;
|
|
4
|
+
|
|
5
|
+
function main() {
|
|
6
|
+
var page = view();
|
|
7
|
+
page.innerHTML = login;
|
|
8
|
+
drag.on(page);
|
|
9
|
+
on("append")(page, function () {
|
|
10
|
+
move.bindPosition(page, [.5, .5]);
|
|
11
|
+
});
|
|
12
|
+
renderWithDefaults(page, { fields, data: {}, pending: false });
|
|
13
|
+
on("submit")(page, async function () {
|
|
14
|
+
var { password } = submit(fields, this.$scope.data);
|
|
15
|
+
this.$scope.pending = true;
|
|
16
|
+
page.disabled = true;
|
|
17
|
+
try {
|
|
18
|
+
var info = await data.from("login", {
|
|
19
|
+
a: encode62.timeencode(encode62.geta(password))
|
|
20
|
+
}).loading_promise;
|
|
21
|
+
info = encode62.timeupdate(info);
|
|
22
|
+
data.setSource({ authorization: info });
|
|
23
|
+
user.login({})
|
|
24
|
+
go('/main')
|
|
25
|
+
} catch {
|
|
26
|
+
}
|
|
27
|
+
this.$scope.pending = false;
|
|
28
|
+
})
|
|
29
|
+
return page;
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<div>短链接管理,敬请期待</div>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
&{}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
function main() {
|
|
2
|
+
var page = div();
|
|
3
|
+
page.innerHTML = template;
|
|
4
|
+
renderWithDefaults(page, {
|
|
5
|
+
status: [],
|
|
6
|
+
async run(id, target) {
|
|
7
|
+
target.setAttribute('pending', '')
|
|
8
|
+
try {
|
|
9
|
+
var info = await data.from("run", {
|
|
10
|
+
run: id
|
|
11
|
+
}).loading_promise;
|
|
12
|
+
if (info) alert(info, 'pass');
|
|
13
|
+
} catch { }
|
|
14
|
+
target.removeAttribute('pending');
|
|
15
|
+
},
|
|
16
|
+
logout() {
|
|
17
|
+
data.setSource('authorization', null);
|
|
18
|
+
user.logout();
|
|
19
|
+
location.reload();
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
console.log(page)
|
|
23
|
+
return page;
|
|
24
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
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>Efront 服务器管控平台</title>
|
|
14
|
+
<script deleteoncompile efrontloader>
|
|
15
|
+
// 若要在开发环境使用内置组件,请保留此script标签中的代码,在编译发布时,这里的代码会自动删除
|
|
16
|
+
</script>
|
|
17
|
+
<style>
|
|
18
|
+
html {
|
|
19
|
+
height: 100%;
|
|
20
|
+
font-family: "SF Pro SC", "SF Pro Text", "SF Pro Icons", "PingFang SC", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
*,
|
|
24
|
+
::before,
|
|
25
|
+
::after {
|
|
26
|
+
box-sizing: border-box;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
body {
|
|
30
|
+
border: none;
|
|
31
|
+
margin: 0;
|
|
32
|
+
padding: 0;
|
|
33
|
+
height: 100%;
|
|
34
|
+
overflow: hidden;
|
|
35
|
+
}
|
|
36
|
+
</style>
|
|
37
|
+
</head>
|
|
38
|
+
|
|
39
|
+
<body scroll=no menu="menu.yml"></body>
|
|
40
|
+
|
|
41
|
+
</html>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
data.loadConfig("api.yml");
|
|
2
|
+
user.loginPath = '/auth/login';
|
|
3
|
+
// user.token = data.getSource('authorization');
|
|
4
|
+
setInterval(function () {
|
|
5
|
+
var auth = data.getSource('authorization');
|
|
6
|
+
if (!auth) return;
|
|
7
|
+
var auth1 = encode62.timeupdate(auth);
|
|
8
|
+
if (auth1 !== auth) data.setSource("authorization", auth1);
|
|
9
|
+
user.token = auth1;
|
|
10
|
+
}, 2000);
|
|
11
|
+
login();
|
|
12
|
+
var layer = layer$glance({
|
|
13
|
+
left: "frame$left",
|
|
14
|
+
top: 'frame$top'
|
|
15
|
+
});
|
|
16
|
+
function main() {
|
|
17
|
+
return layer;
|
|
18
|
+
}
|
package/apps/zimoli/book/main.js
CHANGED
package/apps/zimoli/index.html
CHANGED
package/apps/zimoli/main.js
CHANGED
|
@@ -8,7 +8,7 @@ css(qq_icon, "width:28px;height:28px;margin:-14px;top:50%;left:50%;position:abso
|
|
|
8
8
|
css(loginBtn, "display:inline-block;position:absolute;right:0;top:0;height:100%;width:60px;background-color:transparent");
|
|
9
9
|
var tbar = titlebar("EFRONT.cc", [loginBtn], false);
|
|
10
10
|
css(tbar,"text-align:left;padding-left:20px;")
|
|
11
|
-
var page = createElement(div,
|
|
11
|
+
var page = createElement(div, tbar, slider());
|
|
12
12
|
css(page, "font-size:40px;color:#fff;padding-top:50px;");
|
|
13
13
|
|
|
14
14
|
var group_sample = createElement(div);
|
package/coms/basic/crypt.js
CHANGED
|
@@ -260,8 +260,16 @@ function parse(piece) {
|
|
|
260
260
|
}
|
|
261
261
|
var [name, type, options] = piece, key, repeat;
|
|
262
262
|
if (piece.length === 1 && isObject(name)) {
|
|
263
|
-
var { name, needs, type, key, size, unit, endwith, ratio, value, repeat, comment, options } = name;
|
|
263
|
+
var { name, needs, required, checks, type, key, size, unit, endwith, ratio, value, repeat, comment, options } = name;
|
|
264
264
|
} else {
|
|
265
|
+
var is_require = a => {
|
|
266
|
+
if (/^\*|\*$/.test(a)) {
|
|
267
|
+
required = true;
|
|
268
|
+
return a.replace(/^\*|\*$/, '');
|
|
269
|
+
}
|
|
270
|
+
return a;
|
|
271
|
+
};
|
|
272
|
+
type = is_require(type);
|
|
265
273
|
if (typeof name === 'string') {
|
|
266
274
|
if (!isContainer) {
|
|
267
275
|
if (!type) {
|
|
@@ -362,14 +370,17 @@ function parse(piece) {
|
|
|
362
370
|
type = type.slice(1);
|
|
363
371
|
}
|
|
364
372
|
if (typeof options === "string") {
|
|
373
|
+
options = is_require(options);
|
|
365
374
|
var needUnfold = /^\[|\]$/.test(options);
|
|
366
375
|
options = options.replace(/^\[|\]$/g, '');
|
|
367
376
|
if (/,/.test(options)) options = scanSlant(options, ',');
|
|
368
377
|
else options = scanSlant(options, "");
|
|
369
378
|
if (needUnfold) unfoldOptions(size, options);
|
|
370
379
|
}
|
|
380
|
+
name = is_require(name);
|
|
381
|
+
key = is_require(key);
|
|
371
382
|
}
|
|
372
|
-
var field = { name, needs, type, key, size, unit, endwith, ratio, value, repeat, comment, options };
|
|
383
|
+
var field = { name, checks, required, needs, type, key, size, unit, endwith, ratio, value, repeat, comment, options };
|
|
373
384
|
var parent = piecepath[piecepath.length - 1];
|
|
374
385
|
if (parent) {
|
|
375
386
|
field.parent = parent;
|
package/coms/compile/common.js
CHANGED
|
@@ -15,6 +15,7 @@ var number_reg = /^[\+\-]?(0x[0-9a-f]+|0b\d+|0o\d+|(\d*\.\d+|\d+\.?)(e[\+\-]?\d+
|
|
|
15
15
|
var skipAssignment = function (o) {
|
|
16
16
|
var needpunc = false;
|
|
17
17
|
var o0 = o;
|
|
18
|
+
var qcount = 0;
|
|
18
19
|
loop: while (o) switch (o.type) {
|
|
19
20
|
case STAMP:
|
|
20
21
|
switch (o.text) {
|
|
@@ -32,6 +33,17 @@ var skipAssignment = function (o) {
|
|
|
32
33
|
o = o.next;
|
|
33
34
|
needpunc = false;
|
|
34
35
|
break;
|
|
36
|
+
case "?":
|
|
37
|
+
qcount++;
|
|
38
|
+
needpunc = false;
|
|
39
|
+
o = o.next;
|
|
40
|
+
break;
|
|
41
|
+
case ":":
|
|
42
|
+
qcount--;
|
|
43
|
+
if (qcount < 0) break loop;
|
|
44
|
+
needpunc = false;
|
|
45
|
+
o = o.next;
|
|
46
|
+
break;
|
|
35
47
|
default:
|
|
36
48
|
if (/^[!~\+\-]+$/.test(o.text)) {
|
|
37
49
|
needpunc = false;
|
package/coms/compile/scanner2.js
CHANGED
package/coms/crypt/encode62.js
CHANGED
|
@@ -7,7 +7,7 @@ src.split("").forEach((s, i) => map[s] = i);
|
|
|
7
7
|
function encode62(string) {
|
|
8
8
|
string = String(string)
|
|
9
9
|
string = string.length + string + "2017-08-19";
|
|
10
|
-
var buff =
|
|
10
|
+
var buff = src.split('');
|
|
11
11
|
for (var cx = 0, dx = buff.length + src.length, sl = string.length, cl = buff.length; cx < dx; cx++) {
|
|
12
12
|
var s1 = string.charCodeAt(cx % sl) % cl;
|
|
13
13
|
var s2 = cx % cl;
|
|
@@ -15,7 +15,7 @@ function encode62(string) {
|
|
|
15
15
|
buff[s1] = buff[s2];
|
|
16
16
|
buff[s2] = btemp;
|
|
17
17
|
}
|
|
18
|
-
return buff.
|
|
18
|
+
return buff.join('');
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
|
|
@@ -35,9 +35,23 @@ Object.assign(encode62, {
|
|
|
35
35
|
},
|
|
36
36
|
timeencode(string) {
|
|
37
37
|
var { time_delta } = this;
|
|
38
|
-
var
|
|
38
|
+
var time_free = time_delta / 6 | 0;
|
|
39
|
+
var time_stamp = +new Date() - time_free;
|
|
39
40
|
var time_rest = time_stamp % time_delta;
|
|
40
|
-
|
|
41
|
+
var time_rest_str = time_rest.toString(36);
|
|
42
|
+
var time_delta_str = time_delta.toString(36);
|
|
43
|
+
return this.encode62(string, time_stamp.toString(36)) + repeat("0", time_delta_str.length - time_rest_str.length) + time_rest_str;
|
|
44
|
+
},
|
|
45
|
+
timeupdate(string) {
|
|
46
|
+
var { time_delta } = this;
|
|
47
|
+
var time_rest = string.slice(string.length - time_delta.toString(36).length, string.length);
|
|
48
|
+
var time_start = parseInt((new Date() - parseInt(time_rest, 36)) / time_delta) * time_delta;
|
|
49
|
+
var time_stamp = time_start + parseInt(time_rest, 36);
|
|
50
|
+
if (time_stamp + (time_delta >> 1) > +new Date()) {
|
|
51
|
+
return string;
|
|
52
|
+
} else {
|
|
53
|
+
return this.timeencode(this.timedecode(string));
|
|
54
|
+
}
|
|
41
55
|
},
|
|
42
56
|
encode62(data, sign) {
|
|
43
57
|
if (!sign) return data;
|
|
@@ -53,15 +67,6 @@ Object.assign(encode62, {
|
|
|
53
67
|
});
|
|
54
68
|
return result;
|
|
55
69
|
},
|
|
56
|
-
encode(data, sign) {
|
|
57
|
-
if (!sign) return data;
|
|
58
|
-
var result = Buffer.from(data);
|
|
59
|
-
sign = Buffer.from(sign);
|
|
60
|
-
for (var cx = 0, dx = data.length; cx < dx; cx++) {
|
|
61
|
-
result[cx] = result[cx] ^ sign[cx % sign.length];
|
|
62
|
-
}
|
|
63
|
-
return result;
|
|
64
|
-
},
|
|
65
70
|
decode(data, sign) {
|
|
66
71
|
if (!sign) return data;
|
|
67
72
|
var result = Buffer.from(data);
|
|
@@ -75,7 +80,7 @@ Object.assign(encode62, {
|
|
|
75
80
|
return encode62(string);
|
|
76
81
|
},
|
|
77
82
|
genb() {
|
|
78
|
-
return encode62(Date.now() + "" + Math.random());
|
|
83
|
+
return encode62(Date.now() * Math.random() + "" + Math.random().toString(36) + Math.random().toString(36).toUpperCase());
|
|
79
84
|
},
|
|
80
85
|
huan(x, y) {
|
|
81
86
|
return x.split("").map(s => y[map[s]]).join("");
|
|
@@ -90,24 +95,9 @@ Object.assign(encode62, {
|
|
|
90
95
|
y.split("").forEach((a, j) => y_map[a] = j);
|
|
91
96
|
return z.split("").map(c => src[y_map[c]]).join("");
|
|
92
97
|
},
|
|
93
|
-
ab2c(a, b) {
|
|
94
|
-
return this.huan(a, b);
|
|
95
|
-
},
|
|
96
|
-
ba2d(a, b) {
|
|
97
|
-
return this.huan(b, a);
|
|
98
|
-
},
|
|
99
|
-
ca2b(c, a) {
|
|
100
|
-
return this.yuan(c, a);
|
|
101
|
-
},
|
|
102
|
-
cb2a(c, b) {
|
|
103
|
-
return this.suan(c, b);
|
|
104
|
-
},
|
|
105
|
-
da2b(d, a) {
|
|
106
|
-
return this.suan(d, a);
|
|
107
|
-
},
|
|
108
|
-
db2a(d, b) {
|
|
109
|
-
return this.yuan(d, b);
|
|
110
|
-
}
|
|
111
98
|
});
|
|
112
|
-
|
|
99
|
+
encode62.ab2c = encode62.ba2d = encode62.huan;
|
|
100
|
+
encode62.db2a = encode62.ca2b = encode62.yuan;
|
|
101
|
+
encode62.da2b = encode62.cb2a = encode62.suan;
|
|
102
|
+
encode62.encode = encode62.decode;
|
|
113
103
|
encode62.decode62 = encode62.encode62;
|
package/coms/frame/left.html
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
<div class="navbar-header">
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
<div ng-if="!user.isLogin" class="navbar-header">
|
|
2
|
+
<!-- <avatar></avatar> -->
|
|
3
|
+
<a @click="popup('#/user/login')" class="dashboard_text">请登录</a>
|
|
4
|
+
</div>
|
|
5
|
+
<div -else class="navbar-header">
|
|
6
|
+
<span class="dashboard_text" @click="go('/user/profile')">
|
|
7
|
+
<avatar ng-src="user.avatar" size=30></avatar>
|
|
8
|
+
<span ng-bind="user.name"></span>
|
|
9
|
+
<span ng-bind="user.roles"></span>
|
|
10
|
+
</span>
|
|
5
11
|
</div>
|
|
6
12
|
<ylist mode=inline ng-src="menu in menus" class="sidebar-menu" ng-active="menus.open(event.value)">
|
|
7
|
-
</ylist>
|
|
8
|
-
<btn class="setting" ng-click="go('/user/setting')"><i class="fa fa-gear"></i>设置</btn>
|
|
13
|
+
</ylist>
|
package/coms/frame/left.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
var page =
|
|
1
|
+
var page = document.createElement("都说我负天下人_可你们天下人_又何曾善待过我");
|
|
2
2
|
page.innerHTML = left;
|
|
3
|
-
|
|
3
|
+
if (!user.avatar) user.avatar = "user/avatar.png";
|
|
4
|
+
frame$route.fetch('menu.yml')
|
|
4
5
|
render(page, {
|
|
5
6
|
ylist: menu,
|
|
6
7
|
btn: button,
|
|
7
8
|
go,
|
|
8
9
|
user,
|
|
9
|
-
|
|
10
|
+
avatar,
|
|
11
|
+
popup,
|
|
12
|
+
menus: frame$route,
|
|
10
13
|
});
|
|
11
14
|
function main() {
|
|
12
15
|
return page;
|
package/coms/frame/left.less
CHANGED
|
@@ -1,43 +1,45 @@
|
|
|
1
1
|
& {
|
|
2
|
-
padding
|
|
2
|
+
padding: 50px 0 0 0;
|
|
3
3
|
position: relative;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
.navbar-header {
|
|
7
|
-
height
|
|
8
|
-
padding
|
|
9
|
-
font-size
|
|
10
|
-
line-height
|
|
7
|
+
height: 50px;
|
|
8
|
+
padding: 10px 15px 10px 25px;
|
|
9
|
+
font-size: 25px;
|
|
10
|
+
line-height: 25px;
|
|
11
11
|
text-transform: uppercase;
|
|
12
|
-
color
|
|
13
|
-
margin-top
|
|
12
|
+
color: #b8c7ce;
|
|
13
|
+
margin-top: -50px;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
.dashboard_text {
|
|
17
|
-
font-size
|
|
17
|
+
font-size: 12px;
|
|
18
18
|
text-transform: capitalize;
|
|
19
|
-
display
|
|
19
|
+
display: block;
|
|
20
20
|
letter-spacing: 1px;
|
|
21
|
-
padding-left
|
|
22
|
-
display
|
|
21
|
+
padding-left: 35px;
|
|
22
|
+
display: none;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
ylist {
|
|
26
|
+
width: 100%;
|
|
27
|
+
}
|
|
26
28
|
|
|
27
29
|
.sidebar-menu {
|
|
28
|
-
height
|
|
30
|
+
height: 100%;
|
|
29
31
|
box-shadow: none;
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
.label {
|
|
33
35
|
border-radius: 4px;
|
|
34
|
-
height
|
|
35
|
-
line-height
|
|
36
|
-
margin
|
|
37
|
-
float
|
|
38
|
-
top
|
|
39
|
-
padding
|
|
40
|
-
color
|
|
36
|
+
height: 18px;
|
|
37
|
+
line-height: 18px;
|
|
38
|
+
margin: 12px 2px;
|
|
39
|
+
float: right;
|
|
40
|
+
top: 50%;
|
|
41
|
+
padding: 0 8px;
|
|
42
|
+
color: #fff;
|
|
41
43
|
|
|
42
44
|
&.label-primary {
|
|
43
45
|
background-color: #cd3213;
|
|
@@ -57,9 +59,9 @@
|
|
|
57
59
|
}
|
|
58
60
|
|
|
59
61
|
.fa-angle-left {
|
|
60
|
-
width
|
|
61
|
-
height
|
|
62
|
-
padding
|
|
62
|
+
width: auto;
|
|
63
|
+
height: auto;
|
|
64
|
+
padding: 0;
|
|
63
65
|
line-height: inherit;
|
|
64
66
|
}
|
|
65
67
|
|
|
@@ -72,10 +74,10 @@
|
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
.tab1.header {
|
|
75
|
-
font-size
|
|
76
|
-
color
|
|
77
|
-
background
|
|
78
|
-
height
|
|
77
|
+
font-size: 12px;
|
|
78
|
+
color: #4b646f;
|
|
79
|
+
background: #1a2226;
|
|
80
|
+
height: 32px;
|
|
79
81
|
line-height: 32px;
|
|
80
82
|
|
|
81
83
|
&:hover {
|
|
@@ -84,18 +86,18 @@
|
|
|
84
86
|
}
|
|
85
87
|
|
|
86
88
|
&>.setting {
|
|
87
|
-
position
|
|
88
|
-
bottom
|
|
89
|
-
right
|
|
90
|
-
left
|
|
91
|
-
background
|
|
92
|
-
text-align
|
|
89
|
+
position: absolute;
|
|
90
|
+
bottom: 0;
|
|
91
|
+
right: 0;
|
|
92
|
+
left: 0;
|
|
93
|
+
background: transparent;
|
|
94
|
+
text-align: left;
|
|
93
95
|
line-height: 40px;
|
|
94
|
-
height
|
|
96
|
+
height: 40px;
|
|
95
97
|
|
|
96
98
|
i {
|
|
97
|
-
height
|
|
98
|
-
opacity
|
|
99
|
+
height: 40px;
|
|
100
|
+
opacity: .9;
|
|
99
101
|
margin-right: 10px;
|
|
100
102
|
line-height: inherit;
|
|
101
103
|
}
|