Showing preview only (742K chars total). Download the full file or copy to clipboard to get everything.
Repository: JxiaoC/animeMusic
Branch: master
Commit: 14463b19529b
Files: 73
Total size: 702.3 KB
Directory structure:
gitextract__ra2tpqm/
├── .gitignore
├── LICENSE
├── README.md
├── _config.yml
├── anime-music.js
├── animeMusic_server/
│ ├── aliyun/
│ │ ├── __init__.py
│ │ └── oss.py
│ ├── anime_music/
│ │ ├── README.md
│ │ ├── apps/
│ │ │ ├── __init__.py
│ │ │ ├── app/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── app.py
│ │ │ │ ├── appv2.py
│ │ │ │ ├── base.py
│ │ │ │ ├── god.py
│ │ │ │ └── setting.py
│ │ │ └── settings.py
│ │ ├── daemon.sh
│ │ ├── main.py
│ │ ├── nginx/
│ │ │ └── anime-music.jijidown.com.conf
│ │ ├── restart.sh
│ │ ├── script/
│ │ │ ├── __init__.py
│ │ │ ├── mongoIndex.py
│ │ │ ├── realpath.py
│ │ │ └── savetoImage.py
│ │ ├── setting.py
│ │ ├── static/
│ │ │ ├── css/
│ │ │ │ ├── layui.css
│ │ │ │ ├── layui.mobile.css
│ │ │ │ └── modules/
│ │ │ │ ├── code.css
│ │ │ │ ├── laydate/
│ │ │ │ │ └── default/
│ │ │ │ │ └── laydate.css
│ │ │ │ └── layer/
│ │ │ │ └── default/
│ │ │ │ └── layer.css
│ │ │ ├── god/
│ │ │ │ ├── anime.html
│ │ │ │ └── music.html
│ │ │ ├── lay/
│ │ │ │ └── modules/
│ │ │ │ ├── carousel.js
│ │ │ │ ├── code.js
│ │ │ │ ├── element.js
│ │ │ │ ├── flow.js
│ │ │ │ ├── form.js
│ │ │ │ ├── jquery.js
│ │ │ │ ├── laydate.js
│ │ │ │ ├── layedit.js
│ │ │ │ ├── layer.js
│ │ │ │ ├── laypage.js
│ │ │ │ ├── laytpl.js
│ │ │ │ ├── mobile.js
│ │ │ │ ├── table.js
│ │ │ │ ├── tree.js
│ │ │ │ ├── upload.js
│ │ │ │ └── util.js
│ │ │ ├── layui.all.js
│ │ │ └── layui.js
│ │ └── templates/
│ │ └── app/
│ │ └── god/
│ │ └── index.html
│ ├── db/
│ │ ├── __init__.py
│ │ ├── conn.py
│ │ └── setting.py
│ ├── helper/
│ │ ├── __init__.py
│ │ ├── app.py
│ │ ├── c_python.py
│ │ ├── file_server.py
│ │ ├── ftp.py
│ │ ├── image.py
│ │ ├── realpath.py
│ │ ├── scp.py
│ │ └── tietuku.py
│ ├── lib/
│ │ └── bangumi.py
│ └── models/
│ ├── __init__.py
│ ├── anime_music/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ └── model.py
│ ├── base.py
│ └── settings.py
├── anime_music_icon.css
├── demo.css
└── demo.html
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.idea
*.pyc
temp
__test__
certificate
*/aliyun/setting.py
*/helper/setting.py
*.txt
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2020 xiaoC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
### 所有音乐对应的动漫LOGO和BG图片已经补全完毕, 背景图都已补充2K画质图片 2023-3-28 19:09:29
### 已经开始着手修复图片不显示的问题(丢了...重新慢慢找) 2023-3-22 10:48:07
# API
#### 随机返回一首音乐
> 请求URL: https://anime-music.jijidown.com/api/v2/music
> 请求方式: GET
> 请求参数: <br>recommend bool 非必须 #是否只返回推荐曲目
> 返回内容:
```
{
msg: "ok",
code: 0,
res: {
anime_info: {
bg: "http://i1.fuimg.com/510372/a7d92b4163395fd3.jpg",
year: 2014,
id: "5b8369c4b02de2130c916266",
title: "境界触发者",
atime: 1425915035,
desc: "某一天﹐通往异世界的门打开了﹐从异世界而来的侵略者“近界民”﹐蹂躏门附近的地区﹐街上被恐怖所覆盖。 突然出现的迷之团体“BORDER”击退了“近界民”﹐为了对抗陆续来袭的“近界民”﹐并在这边的世界建成基地。 四年后﹐“近界民”空闲游真从异世界来到日本寻找父亲的熟人﹐并遇上三云修。 修为了解“近界民”的真相﹐决定指引及监视人生路不熟的游真﹐两人的故事随着“BORDER”与“近界民”的战斗展开。",
logo: "http://i1.fuimg.com/510372/29d718b13038e23b.jpg",
month: 10,
},
play_url: "http://anime-music.files.jijidown.com/5b84dfd7b02de2088268793e_128.mp3?t=1538018792&sign=50FDEEE90BCB0612BD9C0C2E3CE4FF46",
type: "其他",
recommend: true,
title: "GIRIGIRI",
atime: 1535434711,
id: "5b84dfd7b02de2088268793e",
author: "未知",
},
}
```
#### 返回指定ID的信息
> 请求URL: https://anime-music.jijidown.com/api/v2/music/5b84dfd7b02de2088268793e
> 其他信息和上面的接口是一样的
#### 搜索歌曲/动漫
> 搜索歌曲请求URL: https://anime-music.jijidown.com/api/v2/music/search
> 搜索动漫请求URL: https://anime-music.jijidown.com/api/v2/anime/search
> 请求方式: GET
> 请求参数:
<br>key str 必须 #搜索关键词
<br>limit int 非必须 #每页返回数量
<br>page int 非必须 #页数
> 请求示例:
<br>https://anime-music.jijidown.com/api/v2/music/search?key=%E7%9A%84&limit=5&page=1
<br>https://anime-music.jijidown.com/api/v2/anime/search?key=%E7%9A%84&limit=5&page=1
# 前端
> 主要是用来给主站提供播放功能的一个小轮子, 包含完整的播放器功能, 提供了最常用的播放状态回调, 使用源生js实现。
> DEMO: [https://jxiaoc.github.io/animeMusic/demo.html](https://jxiaoc.github.io/animeMusic/demo.html)
## 简易文档
### 事件
##### 监听播放器播放事件
> animeMusic.onPlay = function() {console.log('play')};
当播放器开始播放时则会触发回调
##### 监听播放器播放事件(播放的渐入效果执行完毕)
> animeMusic.onPlayed = function() {console.log('played')};
当播放器开始播放后, 1.1秒后触发此事件(1秒的播放淡入效果, 留0.1秒作为冗余)
##### 监听播放器暂停事件
> animeMusic.onPause = function() {console.log('pause')};
当播放器开始播放时则会触发回调
##### 监听播放暂停事件(播放的渐入效果执行完毕)
> animeMusic.onPaused = function() {console.log('paused')};
当播放器暂停播放后, 1.1秒后触发此事件(1秒的暂停淡出效果, 留0.1秒作为冗余)
##### 监听播放器当前播放进度
> animeMusic.onProgress = function(per, now, all) {console.log('onProgress')};
返回的依次为播放百分比(Number), 当前播放时间(MM:SS), 总长度(MM:SS), 请根据需要使用, per可以用于控制进度条位置
##### 监听播放器开始加载
> animeMusic.onLoad = function() {console.log('load')};
当播放器开始加载数据时则会触发此回调
##### 监听播放器加载完毕
> animeMusic.onLoaded = function(res) {console.log(res)};
播放器加载完毕后会触发此回调,并且会传入res, 请根据res返回的数据进行页面填充, res格式详见最上方API
### 方法
##### 播放
> animeMusic.Play();
PS:第一次播放请使用animeMusic.Next(); 详细方法见demo
##### 暂停
> animeMusic.Pause();
##### 下一曲
> animeMusic.Next(); 或 animeMusic.Next(id);
传入id将会播放指定id的音乐,否则随机返回一首, id在onLoaded事件中会作为回调参数传入, res.id为音乐id, res.anime_info.id为该音乐对应动漫的id
##### 从指定位置开始播放
> animeMusic.PlayTo(percentage);
传入进度百分比, 比如animeMusic.PlayTo(50); 则从一半的位置开始播放, 不推荐直接调用此方法, 推荐使用下面的bindPlayTo方法
##### 绑定进度条后,实现从鼠标点击的指定位置开始播放
> animeMusic.bindPlayTo(selectName);
传入进度条所在的选择器key, 例animeMusic.bindPlayTo('.player .progress');此时该进度条就拥有了点击播放的功能了, 详见demo中的示例代码
### 参数
##### 返回推荐曲目
> animeMusic.recommend = true
请求将只会返回推荐的曲目, 在下次执行Next时生效, Next指定id时无效
# 服务端
> 服务器基于debian + nginx + python + redis + mongodb 开发
> 后台通过/god可以直接访问, python中没有做任何权限设置, 而是直接交由nginx处理, 详见[此文件](https://github.com/JxiaoC/animeMusic/blob/master/animeMusic_server/anime_music/nginx/anime-music.jijidown.com.conf)
> 图片存储在贴图库中, 通过官方API进行上传, 需要单独新建setting.py文件并且配置相应key, 在[此文件](https://github.com/JxiaoC/animeMusic/blob/master/animeMusic_server/helper/tietuku.py)中有详细注释
> MP3文件分别存储在阿里云OSS和自建的文件服务器上, OSS主要用于备份, 文件服务器用于MP3播放器直链; 文件服务器的数据管理通过FTP实现, 所以需要在文件服务器上自己搭建好FTP, 并在配置文件中配置好相应参数; 所有的配置参数均在代码的注释中有详细说明, [OSS](https://github.com/JxiaoC/animeMusic/blob/master/animeMusic_server/aliyun/oss.py), [FTP](https://github.com/JxiaoC/animeMusic/blob/master/animeMusic_server/helper/ftp.py), [(现在用的SCP代替FTP上传)](https://github.com/JxiaoC/animeMusic/blob/master/animeMusic_server/helper/scp.py)
> 同时为了降低文件服务器的负荷, 后台会将上传上来的MP3文件自动转码成128Kbps音质, 转码使用ffmpeg, 所以需要提前安装
<br>sudo apt-get install ffmpeg<br>pip3 install ffmpy
#### 服务端配置以及启动
> 启动文件main.py在 animeMusic_server/anime_music中
##### daemon.sh 文件
> daemon.sh文件主要负责主程序的启动和关闭
> <br> ./daemon.sh start ./daemon.sh stop
> 这里只写一些不常见的参数, 其他参数看变量名应该也能知道是什么
> <br>PORT_RANGE: 要监听的端口范围, 12040 12043 则为监听12040, 12041, 12042和12043共计4个端口, 也就意味着会启动4个线程
> <br>PORT_RANGE的端口范围要和nginx配置中的upstream一一对应
##### restart.sh 文件
> 负责启动和重启主程序, 通过调用daemon.sh的stop和start实现
##### main.py 文件
> 主程序入口, 负责监听指定端口, 常驻后台处理http请求, 一般情况下不需要直接运行此文件, 推荐通过restart.sh文件启动
# 文件服务器
> 为了保证可用性(之前使用网盘盗链导致后来所有文件失效, 还好有做备份, 所以这次重构不在考虑放在别的地方了QAQ),所有MP3文件均存放在自己搭建的文件服务器上, 为了尽量保证可用性, 单线程限速512KB, 为了减少恶意盗链行为, 文件服务器基于openresty, 使用lua进行文件鉴权, 鉴权代码如下
```
local request_uri = ngx.var.request_uri;
local arg = ngx.req.get_uri_args();
local key = 'key';
local function auth(name, t, sign)
if ngx.time() >= tonumber(t) then
ngx.header.content_type = "text/plain";
ngx.say('{"code": -1, "msg": "timeout"}');
ngx.exit(400);
end
local _ = ngx.md5(name .. t .. key);
if string.upper(_) ~= sign then
ngx.header.content_type = "text/plain";
ngx.say('{"code": -2, "msg": "sign fail"}');
ngx.exit(400);
end
end
if string.find(request_uri, '.mp3') then
local file_name = string.sub(request_uri, 2, 25);
local auth_pass = auth(file_name, arg['t'], arg['sign']);
end
```
================================================
FILE: _config.yml
================================================
theme: jekyll-theme-tactile
================================================
FILE: anime-music.js
================================================
var animeMusic = {
'recommend': false,
'max_load_time': 10, // 最大加载时间, 一首歌的加载时间超过此数值, 将会直接跳到下一曲
'_anime_music_player': new Audio(),
'_loading': false,
'_play_or_pauseing': false,
'_setI_play': null,
'_setI_pause': null,
'_setI_progress': null,
'_now_load_time': 0,
'Play': function () {
if ((animeMusic._play_or_pauseing || !animeMusic._anime_music_player.paused)) return;
animeMusic._play_or_pauseing = true;
try {
animeMusic.onPlay();
}
catch (e) {
}
if (animeMusic._anime_music_player.paused) {
animeMusic._anime_music_player.play();
animeMusic._setI_progress = setInterval(function () {
animeMusic.progress();
}, 333);
animeMusic._setI_play = setInterval(function () {
try {
animeMusic._anime_music_player.volume += 0.01;
}
catch (e) {
}
}, 10);
setTimeout(function () {
clearInterval(animeMusic._setI_play);
animeMusic._play_or_pauseing = false;
try {
animeMusic.onPlayed();
}
catch (e) {
}
}, 1100);
} else {
animeMusic.Next();
}
},
'PlayTo': function (percentage) {
animeMusic._anime_music_player.currentTime = animeMusic._anime_music_player.duration * (percentage / 100);
},
'Pause': function () {
if (animeMusic._play_or_pauseing || animeMusic._anime_music_player.paused) return;
animeMusic._play_or_pauseing = true;
clearInterval(animeMusic._setI_progress);
try {
animeMusic.onPause();
}
catch (e) {
}
animeMusic._setI_pause = setInterval(function () {
try {
animeMusic._anime_music_player.volume -= 0.01;
}
catch (e) {
}
}, 10);
setTimeout(function () {
clearInterval(animeMusic._setI_pause);
animeMusic._anime_music_player.pause();
animeMusic._play_or_pauseing = false;
try {
animeMusic.onPaused();
}
catch (e) {
}
}, 1100);
},
'Next': function (id) {
if (animeMusic._loading) return;
animeMusic._loading = true;
try {
animeMusic.onLoad();
}
catch (e) {
}
animeMusic.Pause();
var url;
if (id) url = '//anime-music.jijidown.com/api/v2/music/' + id + '?recommend=' + animeMusic.recommend.toString();
else url = '//anime-music.jijidown.com/api/v2/music?recommend=' + animeMusic.recommend.toString();
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
var res = JSON.parse(xmlhttp.response).res;
if (res.code != 0) {
setTimeout(function () {
animeMusic._anime_music_player.src = res.play_url;
animeMusic.Play();
animeMusic._now_load_time = 0;
animeMusic._loading = false;
try {
animeMusic.onLoaded(res);
}
catch (e) {
}
}, 1300);
} else {
animeMusic._loading = false;
setTimeout(function () {
animeMusic.Next();
}, 3000);
console.log(res.msg);
}
}
}
};
xmlhttp.onerror = function () {
animeMusic._loading = false;
setTimeout(function () {
animeMusic.Next();
}, 3000);
console.log('xmlhttp.onerror');
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
},
'progress': function () {
try {
var all_time = secondToDate(animeMusic._anime_music_player.duration);
var now_time = secondToDate(animeMusic._anime_music_player.currentTime);
var percentage = parseInt(animeMusic._anime_music_player.currentTime / animeMusic._anime_music_player.duration * 100);
try {
animeMusic.onProgress(percentage, now_time, all_time);
}
catch (e) {
}
}
catch (e) {
}
},
'bindPlayTo': function (name) {
var dom = document.querySelector(name);
if (dom) {
dom.onclick = function (ev) {
var oEvent = ev || event;
var left = oEvent.offsetX;
var percentage = parseInt(left / dom.offsetWidth * 100);
animeMusic.PlayTo(percentage);
}
}
else {
console.log('dom is not exists');
}
},
'onPlay': null,
'onPlayed': null,
'onPause': null,
'onPaused': null,
'onLoad': null,
'onLoaded': null,
'onProgress': null
};
function secondToDate(result) {
var m = Math.floor((result / 60 % 60)) < 10 ? '0' + Math.floor((result / 60 % 60)) : Math.floor((result / 60 % 60));
var s = Math.floor((result % 60)) < 10 ? '0' + Math.floor((result % 60)) : Math.floor((result % 60));
ret = m + ":" + s;
return ret == 'NaN:NaN' ? '00:00' : ret;
}
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
animeMusic._anime_music_player.onended = function () {
animeMusic.Next();
};
================================================
FILE: animeMusic_server/aliyun/__init__.py
================================================
================================================
FILE: animeMusic_server/aliyun/oss.py
================================================
import oss2
from .import setting
# setting参数说明
# OSSKEY 阿里云AccessKey ID
# OSSVALUE 阿里云Access Key Secret
# 详见https://usercenter.console.aliyun.com/#/manage/ak
ossauth = oss2.Auth(setting.OSSKEY, setting.OSSVALUE)
if setting.Debug:
ossendpoint = 'http://oss-cn-hangzhou.aliyuncs.com'
else:
ossendpoint = 'http://oss-cn-hangzhou-internal.aliyuncs.com'
ossbucket = oss2.Bucket(ossauth, ossendpoint, setting.OSSNAME)
def upload_file(key, path):
try:
if not ossbucket.object_exists(key):
ossbucket.put_object_from_file(key, path)
return True
except:
return False
def del_file(key):
try:
if ossbucket.object_exists(key):
ossbucket.delete_object(key)
return True
except:
return False
if __name__ == '__main__':
upload_file('test.html', '/home/xiaoc/index.html')
pass
================================================
FILE: animeMusic_server/anime_music/README.md
================================================
> sudo apt-get install ffmpeg
> pip3 install ffmpy
> 其他需要的运行库在运行时会直接通过报错的方式进行提示(没有就装)
================================================
FILE: animeMusic_server/anime_music/apps/__init__.py
================================================
================================================
FILE: animeMusic_server/anime_music/apps/app/__init__.py
================================================
from turbo import register
from .import app
from .import appv2
from .import god
register.register_group_urls('/api/v1', [
('/music', app.MusicHeader),
('/music/([0-9a-f]{24})', app.MusicHeader),
])
register.register_group_urls('/api/v2', [
('/music', appv2.MusicHeader),
('/music/([0-9a-f]{24})', appv2.MusicHeader),
('/music/list', appv2.MusicListHeader),
('/music/search', appv2.MusicSearchHeader),
('/anime/search', appv2.AnimeSearchHeader),
])
register.register_group_urls('/god', [
('', god.GodHeader),
])
register.register_group_urls('/god/api/v1', [
('/anime/list', god.AnimeListHeader),
('/anime/add', god.AnimeAddHeader),
('/anime/search_bangumi', god.AnimeSearchBangumiHeader),
('/anime/(save|del)/([0-9a-f]{24})', god.AnimeHeader),
('/anime/upload/(logo|bg)/([0-9a-f]{24})', god.AnimeUploadHeader),
('/music/list', god.MusicListHeader),
('/music/add/([0-9a-f]{24})', god.MusicAddHeader),
('/music/(save|del)/([0-9a-f]{24})', god.MusicHeader),
('/music/upload/([0-9a-f]{24})', god.MusicUploadHeader),
])
================================================
FILE: animeMusic_server/anime_music/apps/app/app.py
================================================
# -*- coding:utf-8 -*-
import turbo.log
from .base import BaseHandler
from helper import app
logger = turbo.log.getLogger(__file__)
class MusicHeader(BaseHandler):
def get(self, id=None):
recommend = self.get_argument('recommend', '0')
info = app.get_music_info(id, recommend)
self.write(info)
================================================
FILE: animeMusic_server/anime_music/apps/app/appv2.py
================================================
# -*- coding:utf-8 -*-
import turbo.log
from .base import BaseHandler
from helper import app
logger = turbo.log.getLogger(__file__)
class MusicHeader(BaseHandler):
def get(self, id=None):
recommend = self.get_argument('recommend', '0')
info = app.get_music_info(id, recommend)
self.write({'code': 0, 'msg': 'ok', 'res': info})
class MusicListHeader(BaseHandler):
def get(self):
limit = int(self.get_argument('limit', 15))
page = int(self.get_argument('limit', 1))
info = app.get_music_list(limit, page)
self.write({'code': 0, 'msg': 'ok', 'res': info})
class MusicSearchHeader(BaseHandler):
def get(self):
key = self.get_argument('key', '')
limit = int(self.get_argument('limit', 15))
page = int(self.get_argument('limit', 1))
res = app.search_music(key, limit, page)
self.write({'code': 0, 'msg': 'ok', 'res': res})
class AnimeSearchHeader(BaseHandler):
def get(self):
key = self.get_argument('key', '')
limit = int(self.get_argument('limit', 15))
page = int(self.get_argument('limit', 1))
res = app.search_anime(key, limit, page)
self.write({'code': 0, 'msg': 'ok', 'res': res})
================================================
FILE: animeMusic_server/anime_music/apps/app/base.py
================================================
# -*- coding:utf-8 -*-
import turbo
class BaseHandler(turbo.app.BaseHandler):
def initialize(self):
super(BaseHandler,self).initialize()
def prepare(self):
self.set_header("Access-Control-Allow-Origin", "*")
self.set_header("Access-Control-Allow-Headers", "x-requested-with")
self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
================================================
FILE: animeMusic_server/anime_music/apps/app/god.py
================================================
# -*- coding:utf-8 -*-
import turbo.log
from bson import ObjectId
import tornado
import redis
import time
import threading
import os
from models.anime_music import model
from helper.c_python import c_python as cp
from helper import image
from helper import tietuku
from helper import file_server
from helper import ftp
from lib import bangumi
from aliyun import oss
from tornado import gen
from tornado.concurrent import run_on_executor
from concurrent.futures import ThreadPoolExecutor
import hashlib
logger = turbo.log.getLogger(__file__)
tb_anime = model.AnimeList()
tb_music = model.MusicList()
r = redis.Redis(host='127.0.0.1', port=6379,db=0)
def Sign(self):
m2 = hashlib.md5()
m2.update('%s%s{AnimeToken}' % (self.av, self.url))
sign = m2.hexdigest().upper()
return True if sign == self.sign else False
def GetSignUrl(id):
timeout = int(time.time() + 3600)
m2 = hashlib.md5()
m2.update(('%s%s{AnimeToken}' % (id, timeout)).encode('utf-8'))
return 'http://anime-music-files.jijidown.com/%s_128.mp3?t=%s&sign=%s' % (id, timeout, m2.hexdigest().upper())
class GodHeader(turbo.app.BaseHandler):
def get(self):
self.render('app/god/index.html')
class AnimeListHeader(turbo.app.BaseHandler):
def get(self):
search_value = self.get_argument('search_value', '')
search_type = self.get_argument('search_type', '')
page = int(self.get_argument('page', 1))
if page <= 0: page = 1
limit = int(self.get_argument('limit', 10))
if limit <=0 or limit >= 100: limit = 10
Q = {}
if search_value and search_type in ['title', '_id']:
if search_type == '_id':
Q[search_type] = ObjectId(search_value)
else:
Q[search_type] = {'$regex': search_value}
_list = tb_anime.find(Q).sort('atime', -1).limit(limit).skip((page - 1) * limit)
count = tb_anime.find(Q).count()
res = []
for f in _list:
f['atime'] = str(cp.unixtimeToDatetime(f.get('atime', 0)))
res.append(cp.formatWriteJson(f))
self.write({
'code': 0,
'msg': 'ok',
'count': count,
'data': res,
})
class AnimeAddHeader(turbo.app.BaseHandler):
def post(self):
title = self.get_argument('title', '')
if tb_anime.find_one({'title': title}):
self.write({'code': -1, 'msg': '已经存在相同的名称了'})
return
tb_anime.insert({
'title': title,
'atime': int(time.time()),
'desc': '',
'bg': '',
'logo': '',
'year': 0,
'month': 0,
})
self.write({'code': 0, 'msg': 'ok'})
class AnimeSearchBangumiHeader(turbo.app.BaseHandler):
def post(self):
title = self.get_argument('title', '')
res = bangumi.search(title)
self.write({'code': 0, 'msg': 'ok', 'res': res})
class AnimeHeader(turbo.app.BaseHandler):
def post(self, type, id):
if not id or not ObjectId.is_valid(id):
return
self.id = ObjectId(id)
self.route(type)
def do_save(self):
title = self.get_argument('title', '')
desc = self.get_argument('desc', '')
year = int(self.get_argument('year', 0))
month = int(self.get_argument('month', 0))
bangumi_id = int(self.get_argument('bangumi_id', 0))
tb_anime.update({'_id': self.id}, {'$set': {
'title': title,
'desc': desc,
'year': year,
'month': month,
'bangumi_id': bangumi_id,
}})
self.write({'code': 0, 'msg': 'ok'})
def do_del(self):
if tb_music.find({'anime_id': self.id}).count() > 0:
self.write({'code': -1, 'msg': '数据库内还有音频数据,无法删除'})
return
tb_anime.remove({'_id': self.id})
self.write({'code': 0, 'msg': 'ok'})
class AnimeUploadHeader(turbo.app.BaseHandler):
def post(self, type, id):
try:
if not id or not ObjectId.is_valid(id):
return
id = ObjectId(id)
if not os.path.exists('temp'):
os.mkdir('temp')
file_path = 'temp/%s' % self.request.files['file'][0]['filename']
out_file_path = file_path.replace('png', 'jpg')
with open(file_path, 'wb') as f:
f.write(self.request.files['file'][0]['body'])
if type == 'logo':
image.clipResizeImg(path=file_path, out_path=out_file_path, width=1220, height=604, quality=85)
else:
image.resizeImg(path=file_path, out_path=out_file_path, width=1920, quality=85)
image_url = tietuku.uploadImgToTieTuKu(out_file_path)
if os.path.exists(file_path):
os.remove(file_path)
if os.path.exists(out_file_path):
os.remove(out_file_path)
if image_url:
tb_anime.update({'_id': id}, {'$set': {type: image_url}})
self.write({'code': 0, 'msg': 'ok', 'src': image_url})
else:
self.write({'code': -1, 'msg': '上传失败'})
except Exception as e:
self.write({'code': -1, 'msg': e})
class MusicListHeader(turbo.app.BaseHandler):
def get(self):
search_value = self.get_argument('search_value', '')
search_type = self.get_argument('search_type', '')
page = int(self.get_argument('page', 1))
if page <= 0: page = 1
limit = int(self.get_argument('limit', 10))
if limit <=0 or limit >= 100: limit = 10
Q = {}
if search_value and search_type in ['title', '_id', 'anime_id']:
if search_type in ['_id', 'anime_id']:
Q[search_type] = ObjectId(search_value)
else:
Q[search_type] = {'$regex': search_value}
_list = tb_music.find(Q).sort('atime', -1).limit(limit).skip((page - 1) * limit)
count = tb_music.find(Q).count()
res = []
for f in _list:
f['play_url'] = GetSignUrl(str(f['_id']))
anime_info = tb_anime.find_one({'_id': f.get('anime_id', None)})
if anime_info:
f['anime_name'] = anime_info.get('title')
else:
f['anime_name'] = '未知'
f['atime'] = str(cp.unixtimeToDatetime(f['atime']))
res.append(cp.formatWriteJson(f))
self.write({
'code': 0,
'msg': 'ok',
'count': count,
'data': res,
})
class MusicAddHeader(turbo.app.BaseHandler):
def post(self, id):
if not id or not ObjectId.is_valid(id):
return
id = ObjectId(id)
title = self.get_argument('title', '')
if tb_music.find_one({'title': title}):
self.write({'code': -1, 'msg': '已经存在相同的名称了'})
return
tb_music.insert({
'title': title,
'atime': int(time.time()),
'anime_id': id,
'author': '',
'recommend': False,
})
self.write({'code': 0, 'msg': 'ok'})
class MusicHeader(turbo.app.BaseHandler):
@gen.coroutine
def post(self, type, id):
if not id or not ObjectId.is_valid(id):
return
self.id = ObjectId(id)
self.route(type)
def do_save(self):
title = self.get_argument('title', '')
author = self.get_argument('author', '')
type = self.get_argument('type', '')
recommend = True if self.get_argument('recommend', 'true') == 'true' else False
tb_music.update({'_id': self.id}, {'$set': {
'title': title,
'type': type,
'author': author,
'recommend': recommend,
}})
self.write({'code': 0, 'msg': 'ok'})
self.finish()
def do_del(self):
tb_music.remove({'_id': self.id})
_thread = threading.Thread(target=self.thread_del)
_thread.start()
self.write({'code': 0, 'msg': 'ok'})
self.finish()
def thread_del(self):
name = '%s.mp3' % self.id
oss.del_file(name)
ftp.del_file(name.replace('.mp3', '_128.mp3'))
class MusicUploadHeader(turbo.app.BaseHandler):
executor = ThreadPoolExecutor(4)
@gen.coroutine
def post(self, id):
image_url, error_data = yield self.upload(id)
if image_url:
self.write({'code': 0, 'msg': 'ok', 'src': GetSignUrl(str(id))})
else:
self.write({'code': -1, 'msg': '上传失败:' + error_data})
@run_on_executor
def upload(self, id):
if not id or not ObjectId.is_valid(id):
return
id = ObjectId(id)
if not os.path.exists('temp'):
os.mkdir('temp')
file_path = 'temp/%s' % self.request.files['file'][0]['filename']
with open(file_path, 'wb') as f:
f.write(self.request.files['file'][0]['body'])
return file_server.upload_file_to_oss_and_scp(file_path, '%s.mp3' % id)
================================================
FILE: animeMusic_server/anime_music/apps/app/setting.py
================================================
#-*- coding:utf-8 -*-
# sub app setting
# try not to include function or class
import os
SERVER_DIR = os.path.dirname(os.path.abspath(__file__))
if os.path.exists(os.path.join(SERVER_DIR, '__test__')):
Debug = True
else:
Debug = False
================================================
FILE: animeMusic_server/anime_music/apps/settings.py
================================================
# -*- coding:utf-8 -*-
# installed app list
INSTALLED_APPS = (
'app',
)
================================================
FILE: animeMusic_server/anime_music/daemon.sh
================================================
#!/bin/bash
usage="Usage: $0 [start | stop]"
PORT_RANGE="12040 12043"
service="anime-music-server"
LOG_DIR="/tmp/jijidown/$service"
pid="$LOG_DIR/service.pid"
log="$LOG_DIR/service.log"
ROOTDIR=$(dirname $0)
MAIN=$ROOTDIR/main.py
if [ ! -d $LOG_DIR ]; then
mkdir -p "$LOG_DIR"
fi
case $1 in
(start)
for i in `seq $PORT_RANGE`
do
_pid=$pid.$i
if [ -f $_pid ]; then
if kill -0 `cat $_pid` > /dev/null 2>&1; then
echo $service running as process `cat $_pid`. Stop it first.
exit 1
fi
fi
echo [port: $i] starting $service ...
nohup python3 $MAIN --port=$i >"$log.$i" 2>&1 < /dev/null &
echo $! > "$_pid"
sleep 0.5; head "$log.$i"
done
;;
(stop)
for i in `seq $PORT_RANGE`
do
_pid=$pid.$i
if [ -f $_pid ]; then
if kill -0 `cat $_pid` > /dev/null 2>&1; then
echo [port: $i] stopping $service `cat $_pid`...
kill `cat $_pid`
else
echo no $service to stop
fi
else
echo no $service to stop
fi
done
;;
(test)
python3 $MAIN --port=9000
;;
(*)
echo $usage
exit 1
;;
esac
================================================
FILE: animeMusic_server/anime_music/main.py
================================================
#-*- coding:utf-8 -*-
from tornado.options import define, options
import tornado.options
import setting
import turbo.register
import turbo.app
turbo.register.register_app(setting.SERVER_NAME, setting.TURBO_APP_SETTING, setting.WEB_APPLICATION_SETTING, __file__, globals())
define("port", default=8885, type=int)
if __name__ == '__main__':
tornado.options.parse_command_line()
turbo.app.start(options.port)
================================================
FILE: animeMusic_server/anime_music/nginx/anime-music.jijidown.com.conf
================================================
upstream anime_music_jijidown_com_server {
server localhost:12040;
server localhost:12041;
server localhost:12042;
server localhost:12043;
}
server {
listen 80;
server_name anime-music.jijidown.com;
listen 443 ssl;
ssl_certificate /home/xiaoc/wwwroot/JIJIDown_Python/anime_music/certificate/anime-music.jijidown.com.pem;
ssl_certificate_key /home/xiaoc/wwwroot/JIJIDown_Python/anime_music/certificate/anime-music.jijidown.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/anime-music.jijidown.com.log;
error_log /var/log/nginx/anime-music.jijidown.com.err;
location / {
add_header X-Cached $upstream_cache_status;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://anime_music_jijidown_com_server;
}
location /god {
auth_basic "Need login";
auth_basic_user_file /data/passwd/.htpasswd;
add_header X-Cached $upstream_cache_status;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://anime_music_jijidown_com_server;
}
}
================================================
FILE: animeMusic_server/anime_music/restart.sh
================================================
#!/usr/bin/env bash
ROOTDIR=$(pwd)/$(dirname $0)
$ROOTDIR/daemon.sh stop && sleep 1 && $ROOTDIR/daemon.sh start
================================================
FILE: animeMusic_server/anime_music/script/__init__.py
================================================
================================================
FILE: animeMusic_server/anime_music/script/mongoIndex.py
================================================
# coding=utf-8
from __future__ import absolute_import
import realpath
from models.anime_music import model
tb_anime_list = model.AnimeList()
tb_anime_list.ensure_index([('title', -1), ('atime', -1)])
tb_anime_list.ensure_index([('_id', -1), ('atime', -1)])
tb_anime_list.ensure_index('tietukuname')
music_list = model.MusicList()
music_list.ensure_index('atime')
music_list.ensure_index('recommend')
music_list.ensure_index([('title', -1), ('atime', -1)])
music_list.ensure_index([('_id', -1), ('atime', -1)])
music_list.ensure_index([('anime_id', -1), ('atime', -1)])
================================================
FILE: animeMusic_server/anime_music/script/realpath.py
================================================
#-*- coding:utf-8 -*-
import os
import sys
# load app path into sys.path
def app_path_load(dir_level_num=3):
app_root_path = os.path.abspath(__file__)
for i in range(0, dir_level_num):
app_root_path = os.path.dirname(app_root_path)
sys.path.append(app_root_path)
app_path_load()
================================================
FILE: animeMusic_server/anime_music/script/savetoImage.py
================================================
# coding=utf-8
from __future__ import absolute_import
import realpath
import requests
import os
from models.anime_music import model
from helper import tietuku
tb_anime_list = model.AnimeList()
def downloadAndUpload(title, url, filename):
print('download for', title, url)
with open("./" + filename, "wb") as code:
code.write(requests.get(url).content)
print('uploading...')
img_url = tietuku.uploadImgToTieTuKu("./" + filename)
try:
os.remove("./" + filename)
except:
pass
return img_url
skip = 0
limit = 100
total = tb_anime_list.find({'tietukuname': None}).count()
complete_num = 0
while True:
i = 0
_list = tb_anime_list.find({'tietukuname': None}).limit(limit).skip(skip)
for f in _list:
i += 1
try:
logo = f['logo']
bg = f['bg']
if not logo and not bg:
continue
title = f['title']
filename = '%s.jpg' % f['_id']
new_logo = ''
new_bg = ''
if logo:
new_logo = downloadAndUpload(title, logo, filename)
if not new_logo:
print('logo upload error')
continue
if bg:
new_bg = downloadAndUpload(title, bg, filename)
if not new_bg:
print('bg upload error')
continue
tb_anime_list.update({'_id': f['_id']}, {'$set': {
'bg': new_bg,
'logo': new_logo,
'tietukuname': '419067339@qq.com',
}})
complete_num += 1
print('(', complete_num, '/', total, ')', title)
except Exception as e:
print(e)
pass
if i == 0:
print('complete')
break
skip += limit
================================================
FILE: animeMusic_server/anime_music/setting.py
================================================
import os
import sys
from tornado.util import ObjectDict
# server name
SERVER_NAME = 'anime_music-server'
# server dir
SERVER_DIR = os.path.dirname(os.path.abspath(__file__))
# project dir
PROJECT_DIR = os.path.dirname(SERVER_DIR)
sys.path.append(PROJECT_DIR)
# tornado web application settings
# details in http://www.tornadoweb.org/en/stable/web.html#tornado.web.Application.settings
WEB_APPLICATION_SETTING = ObjectDict(
static_path=os.path.join(SERVER_DIR, "static"),
template_path=os.path.join(SERVER_DIR, "templates"),
xsrf_cookies=False,
cookie_secret="xxx-xxx-xxx",
)
# turbo app setting
TURBO_APP_SETTING = ObjectDict(
log=ObjectDict(
log_path=os.path.join("/var/log/", SERVER_NAME+'.log'),
log_size=500*1024*1024,
log_count=3,
),
session_config=ObjectDict({
'secret_key': 'fLjUfxqXtfNoIldA0AIJ'
})
)
# check if app start in debug
if os.path.exists(os.path.join(SERVER_DIR, '__test__')):
WEB_APPLICATION_SETTING['debug'] = True
TURBO_APP_SETTING.log.log_path = os.path.join("", SERVER_NAME+'.log')
================================================
FILE: animeMusic_server/anime_music/static/css/layui.css
================================================
/** layui-v2.4.2 MIT License By https://www.layui.com */
.layui-inline,img{display:inline-block;vertical-align:middle}h1,h2,h3,h4,h5,h6{font-weight:400}.layui-edge,.layui-header,.layui-inline,.layui-main{position:relative}.layui-btn,.layui-edge,.layui-inline,img{vertical-align:middle}.layui-btn,.layui-disabled,.layui-icon,.layui-unselect{-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{border:none}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h4,h5,h6{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:24px;font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{height:1px;margin:10px 0;border:0;clear:both}a{color:#333;text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{*display:inline;*zoom:1}.layui-edge{display:inline-block;width:0;height:0;border-width:6px;border-style:dashed;border-color:transparent;overflow:hidden}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=240);src:url(../font/iconfont.eot?v=240#iefix) format('embedded-opentype'),url(../font/iconfont.svg?v=240#iconfont) format('svg'),url(../font/iconfont.woff?v=240) format('woff'),url(../font/iconfont.ttf?v=240) format('truetype')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-reply-fill:before{content:"\e611"}.layui-icon-set-fill:before{content:"\e614"}.layui-icon-menu-fill:before{content:"\e60f"}.layui-icon-search:before{content:"\e615"}.layui-icon-share:before{content:"\e641"}.layui-icon-set-sm:before{content:"\e620"}.layui-icon-engine:before{content:"\e628"}.layui-icon-close:before{content:"\1006"}.layui-icon-close-fill:before{content:"\1007"}.layui-icon-chart-screen:before{content:"\e629"}.layui-icon-star:before{content:"\e600"}.layui-icon-circle-dot:before{content:"\e617"}.layui-icon-chat:before{content:"\e606"}.layui-icon-release:before{content:"\e609"}.layui-icon-list:before{content:"\e60a"}.layui-icon-chart:before{content:"\e62c"}.layui-icon-ok-circle:before{content:"\1005"}.layui-icon-layim-theme:before{content:"\e61b"}.layui-icon-table:before{content:"\e62d"}.layui-icon-right:before{content:"\e602"}.layui-icon-left:before{content:"\e603"}.layui-icon-cart-simple:before{content:"\e698"}.layui-icon-face-cry:before{content:"\e69c"}.layui-icon-face-smile:before{content:"\e6af"}.layui-icon-survey:before{content:"\e6b2"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-upload-circle:before{content:"\e62f"}.layui-icon-add-circle:before{content:"\e61f"}.layui-icon-download-circle:before{content:"\e601"}.layui-icon-templeate-1:before{content:"\e630"}.layui-icon-util:before{content:"\e631"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-edit:before{content:"\e642"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-down:before{content:"\e61a"}.layui-icon-file:before{content:"\e621"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-rate-half:before{content:"\e6c9"}.layui-icon-add-circle-fine:before{content:"\e608"}.layui-icon-prev-circle:before{content:"\e633"}.layui-icon-read:before{content:"\e705"}.layui-icon-404:before{content:"\e61c"}.layui-icon-carousel:before{content:"\e634"}.layui-icon-help:before{content:"\e607"}.layui-icon-code-circle:before{content:"\e635"}.layui-icon-water:before{content:"\e636"}.layui-icon-username:before{content:"\e66f"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-about:before{content:"\e60b"}.layui-icon-location:before{content:"\e715"}.layui-icon-up:before{content:"\e619"}.layui-icon-pause:before{content:"\e651"}.layui-icon-date:before{content:"\e637"}.layui-icon-layim-uploadfile:before{content:"\e61d"}.layui-icon-delete:before{content:"\e640"}.layui-icon-play:before{content:"\e652"}.layui-icon-top:before{content:"\e604"}.layui-icon-friends:before{content:"\e612"}.layui-icon-refresh-3:before{content:"\e9aa"}.layui-icon-ok:before{content:"\e605"}.layui-icon-layer:before{content:"\e638"}.layui-icon-face-smile-fine:before{content:"\e60c"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-group:before{content:"\e613"}.layui-icon-layim-download:before{content:"\e61e"}.layui-icon-picture-fine:before{content:"\e60d"}.layui-icon-link:before{content:"\e64c"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-log:before{content:"\e60e"}.layui-icon-rate-solid:before{content:"\e67a"}.layui-icon-fonts-del:before{content:"\e64f"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-fonts-clear:before{content:"\e639"}.layui-icon-triangle-r:before{content:"\e623"}.layui-icon-circle:before{content:"\e63f"}.layui-icon-radio:before{content:"\e643"}.layui-icon-align-center:before{content:"\e647"}.layui-icon-align-right:before{content:"\e648"}.layui-icon-align-left:before{content:"\e649"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-return:before{content:"\e65c"}.layui-icon-fonts-strong:before{content:"\e62b"}.layui-icon-upload:before{content:"\e67c"}.layui-icon-dialogue:before{content:"\e63a"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-cellphone-fine:before{content:"\e63b"}.layui-icon-add-1:before{content:"\e654"}.layui-icon-face-smile-b:before{content:"\e650"}.layui-icon-fonts-html:before{content:"\e64b"}.layui-icon-form:before{content:"\e63c"}.layui-icon-cart:before{content:"\e657"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-tabs:before{content:"\e62a"}.layui-icon-fonts-code:before{content:"\e64e"}.layui-icon-fire:before{content:"\e756"}.layui-icon-set:before{content:"\e716"}.layui-icon-fonts-u:before{content:"\e646"}.layui-icon-triangle-d:before{content:"\e625"}.layui-icon-tips:before{content:"\e702"}.layui-icon-picture:before{content:"\e64a"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-flag:before{content:"\e66c"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-fonts-i:before{content:"\e644"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-home:before{content:"\e68e"}.layui-icon-user:before{content:"\e770"}.layui-icon-notice:before{content:"\e667"}.layui-icon-login-weibo:before{content:"\e675"}.layui-icon-voice:before{content:"\e688"}.layui-icon-upload-drag:before{content:"\e681"}.layui-icon-login-qq:before{content:"\e676"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-file-b:before{content:"\e655"}.layui-icon-template:before{content:"\e663"}.layui-icon-auz:before{content:"\e672"}.layui-icon-console:before{content:"\e665"}.layui-icon-app:before{content:"\e653"}.layui-icon-prev:before{content:"\e65a"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-next:before{content:"\e65b"}.layui-icon-component:before{content:"\e857"}.layui-icon-more:before{content:"\e65f"}.layui-icon-login-wechat:before{content:"\e677"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-camera:before{content:"\e660"}.layui-icon-note:before{content:"\e66e"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-female:before{content:"\e661"}.layui-icon-male:before{content:"\e662"}.layui-icon-password:before{content:"\e673"}.layui-icon-senior:before{content:"\e674"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-rate:before{content:"\e67b"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-vercode:before{content:"\e679"}.layui-icon-cellphone:before{content:"\e678"}.layui-icon-screen-full:before{content:"\e622"}.layui-icon-screen-restore:before{content:"\e758"}.layui-icon-cols:before{content:"\e610"}.layui-icon-export:before{content:"\e67d"}.layui-icon-print:before{content:"\e66d"}.layui-icon-slider:before{content:"\e714"}.layui-main{width:1140px;margin:0 auto}.layui-header{z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;left:0;top:0;bottom:0;z-index:999;width:200px;overflow-x:hidden}.layui-side-scroll{position:relative;width:220px;height:100%;overflow-x:hidden}.layui-body{position:absolute;left:200px;right:0;top:0;bottom:0;z-index:998;width:auto;overflow:hidden;overflow-y:auto;box-sizing:border-box}.layui-layout-body{overflow:hidden}.layui-layout-admin .layui-header{background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{top:60px;bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;height:44px;line-height:44px;padding:0 15px;background-color:#eee}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:'';display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:768px){.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:750px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:970px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1170px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space3{margin:-1.5px}.layui-col-space3>*{padding:1.5px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space8{margin:-3.5px}.layui-col-space8>*{padding:3.5px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:22px;border-left:5px solid #009688;border-radius:0 2px 2px 0;background-color:#f2f2f2}.layui-quote-nm{border-style:solid;border-width:1px 1px 1px 5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border-width:1px 0 0}.layui-field-box{padding:10px 15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#e2e2e2}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#5FB878;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#666}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#f2f2f2;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:22px;color:#666}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-card:last-child{margin-bottom:0}.layui-card-header{position:relative;height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f6f6f6;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-card-body{position:relative;padding:10px 15px;line-height:24px}.layui-card-body[pad15]{padding:15px}.layui-card-body[pad20]{padding:20px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #E6E6E6;background-color:#fff}.layui-auxiliar-moving{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;background:0 0;z-index:9999999999}.layui-form-label,.layui-form-mid,.layui-form-select,.layui-input-block,.layui-input-inline,.layui-textarea{position:relative}.layui-bg-red{background-color:#FF5722!important}.layui-bg-orange{background-color:#FFB800!important}.layui-bg-green{background-color:#009688!important}.layui-bg-cyan{background-color:#2F4056!important}.layui-bg-blue{background-color:#1E9FFF!important}.layui-bg-black{background-color:#393D49!important}.layui-bg-gray{background-color:#eee!important;color:#666!important}.layui-badge-rim,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-input,.layui-layedit,.layui-layedit-tool,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#e6e6e6}.layui-timeline-item:before,hr{background-color:#e6e6e6}.layui-text{line-height:22px;font-size:14px;color:#666}.layui-text h1,.layui-text h2,.layui-text h3{font-weight:500;color:#333}.layui-text h1{font-size:30px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text a:not(.layui-btn){color:#01AAED}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text em,.layui-word-aux{color:#999!important;padding:0 5px!important}.layui-btn{display:inline-block;height:38px;line-height:38px;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border:none;border-radius:2px;cursor:pointer}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{font-size:0}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{margin-right:3px;font-size:18px;vertical-align:bottom;vertical-align:middle\9}.layui-btn-primary{border:1px solid #C9C9C9;background-color:#fff;color:#555}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1E9FFF}.layui-btn-warm{background-color:#FFB800}.layui-btn-danger{background-color:#FF5722}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border:1px solid #e6e6e6;background-color:#FBFBFB;color:#C9C9C9;cursor:not-allowed;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-sm i{font-size:16px!important}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:14px!important}.layui-btn-group{display:inline-block;vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#C9C9C9;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #c9c9c9}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border-width:1px;border-style:solid;background-color:#fff;border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#D2D2D2!important}.layui-input:focus,.layui-textarea:focus{border-color:#C9C9C9!important}.layui-textarea{min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{float:left;display:block;padding:9px 15px;width:80px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#FF5722!important}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#f2f2f2;-webkit-transition:.5s all;transition:.5s all}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#5FB878;color:#fff}.layui-form-checkbox,.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-checkbox,.layui-form-checkbox *,.layui-form-switch{display:inline-block;vertical-align:middle}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-3px\9}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;height:30px;line-height:30px;margin-right:10px;padding-right:30px;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;top:0;width:30px;height:28px;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#5FB878}.layui-form-checked span,.layui-form-checked:hover span{background-color:#5FB878}.layui-form-checked i,.layui-form-checked:hover i{color:#5FB878}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;min-width:18px;min-height:18px;border:none!important;margin-right:0;padding-left:28px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#666}.layui-form-checkbox[lay-skin=primary] i{right:auto;left:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#5FB878;background-color:#5FB878;color:#fff}.layui-checkbox-disbaled[lay-skin=primary] span{background:0 0!important;color:#c2c2c2}.layui-checkbox-disbaled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;height:22px;line-height:22px;min-width:35px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:relative;top:0;width:25px;margin-left:21px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#5FB878;background-color:#5FB878}.layui-checkbox-disbaled,.layui-checkbox-disbaled i{border-color:#e2e2e2!important}.layui-form-onswitch i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch em{margin-left:5px;margin-right:21px;color:#fff!important}.layui-checkbox-disbaled span{background-color:#e2e2e2!important}.layui-checkbox-disbaled:hover i{color:#fff!important}[lay-radio]{display:none}.layui-form-radio,.layui-form-radio *{display:inline-block;vertical-align:middle}.layui-form-radio{line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio *{font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio>i:hover,.layui-form-radioed>i{color:#5FB878}.layui-radio-disbaled>i{color:#e2e2e2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#FBFBFB;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0 1px 0 0}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-layedit{border-width:1px;border-style:solid;border-radius:2px}.layui-layedit-tool{padding:3px 5px;border-bottom-width:1px;border-bottom-style:solid;font-size:0}.layedit-tool-fixed{position:fixed;top:0;border-top:1px solid #e2e2e2}.layui-layedit-tool .layedit-tool-mid,.layui-layedit-tool .layui-icon{display:inline-block;vertical-align:middle;text-align:center;font-size:14px}.layui-layedit-tool .layui-icon{position:relative;width:32px;height:30px;line-height:30px;margin:3px 5px;color:#777;cursor:pointer;border-radius:2px}.layui-layedit-tool .layui-icon:hover{color:#393D49}.layui-layedit-tool .layui-icon:active{color:#000}.layui-layedit-tool .layedit-tool-active{background-color:#e2e2e2;color:#000}.layui-layedit-tool .layui-disabled,.layui-layedit-tool .layui-disabled:hover{color:#d2d2d2;cursor:not-allowed}.layui-layedit-tool .layedit-tool-mid{width:1px;height:18px;margin:0 10px;background-color:#d2d2d2}.layedit-tool-html{width:50px!important;font-size:30px!important}.layedit-tool-b,.layedit-tool-code,.layedit-tool-help{font-size:16px!important}.layedit-tool-d,.layedit-tool-face,.layedit-tool-image,.layedit-tool-unlink{font-size:18px!important}.layedit-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-layedit-iframe iframe{display:block;width:100%}#LAY_layedit_code{overflow:hidden}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #e2e2e2}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-flow-more a *,.layui-laypage input,.layui-table-view select[lay-ignore]{display:inline-block}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh{vertical-align:top}.layui-laypage .layui-laypage-refresh i{font-size:18px;cursor:pointer}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-table,.layui-table-view{margin:10px 0}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;background-color:#fff;color:#666}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:400}.layui-table tbody tr:hover,.layui-table thead tr,.layui-table-click,.layui-table-header,.layui-table-hover,.layui-table-mend,.layui-table-patch,.layui-table-tool,.layui-table-total,.layui-table-total tr,.layui-table[lay-even] tr:nth-child(even){background-color:#f2f2f2}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-total,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#e6e6e6}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0 0 1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0 1px 0 0}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding:15px 30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:40px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{font-size:12px;padding:5px 10px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:20px;line-height:20px}.layui-table[lay-data]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view .layui-table{position:relative;width:auto;margin:0}.layui-table-view .layui-table[lay-skin=line]{border-width:0 1px 0 0}.layui-table-view .layui-table[lay-skin=row]{border-width:0 0 1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:5px 0;border-top:none;border-left:none}.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-view .layui-form-radio{padding:0}.layui-table-view .layui-form-radio>i{margin:0;font-size:20px}.layui-table-init{position:absolute;left:0;top:0;width:100%;height:100%;text-align:center;z-index:10}.layui-table-init .layui-icon{position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:30px;color:#c2c2c2}.layui-table-header{border-width:0 0 1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-tool .layui-inline[lay-event]{position:relative;width:26px;height:26px;padding:5px;line-height:16px;margin-right:10px;text-align:center;color:#333;border:1px solid #ccc;cursor:pointer;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool .layui-inline[lay-event]:hover{border:1px solid #999}.layui-table-tool-temp{padding-right:120px}.layui-table-tool-self{position:absolute;right:17px;top:10px}.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin:0 0 0 10px}.layui-table-tool-panel{position:absolute;top:29px;left:-1px;padding:5px 0;min-width:150px;min-height:40px;border:1px solid #d2d2d2;text-align:left;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-table-tool-panel li{padding:0 10px;line-height:30px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%;padding-left:28px}.layui-table-tool-panel li:hover{background-color:#f2f2f2}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i{position:absolute;left:0;top:0}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span{padding:0}.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left:auto;right:-1px}.layui-table-col-set{position:absolute;right:0;top:0;width:20px;height:100%;border-width:0 0 0 1px;background-color:#fff}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:3px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#666}.layui-table-sort .layui-table-sort-desc{bottom:5px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#666}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:28px;line-height:28px;padding:0 15px;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-table-link{color:#01AAED}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{padding:0;text-align:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:15px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0;z-index:101}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:0 -1px 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0 0 0 1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;z-index:890;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0 0 1px}.layui-table-tool .layui-btn-container .layui-btn{margin-bottom:0}.layui-table-page,.layui-table-total{border-width:1px 0 0;margin-bottom:-1px;overflow:hidden}.layui-table-page{position:relative;width:100%;padding:7px 7px 0;height:41px;font-size:12px;white-space:nowrap}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-7px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;width:100%;height:100%;padding:0 14px 1px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15)}.layui-table-edit:focus{border-color:#5FB878!important}select.layui-table-edit{padding:0 0 0 10px;border-color:#C9C9C9}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0;box-sizing:content-box}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}.layui-table-view .layui-form-checkbox i{height:26px}.layui-table-grid .layui-table-cell{overflow:visible}.layui-table-grid-down{position:absolute;top:0;right:0;width:26px;line-height:28px;height:100%;padding:5px 0;border-width:0 0 0 1px;text-align:center;background-color:#fff;color:#999;cursor:pointer}.layui-table-grid-down:hover{background-color:#fbfbfb}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.12)}.layui-table-tips-main{margin:-44px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#666}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#666;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-drag,.layui-upload-form,.layui-upload-wrap{display:inline-block}.layui-upload-list{margin:10px 0}.layui-upload-choose{padding:0 10px;color:#999}.layui-upload-drag{position:relative;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-tree{line-height:26px}.layui-tree li{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-tree li .layui-tree-spread,.layui-tree li a{display:inline-block;vertical-align:top;height:26px;*display:inline;*zoom:1;cursor:pointer}.layui-tree li a{font-size:0}.layui-tree li a i{font-size:16px}.layui-tree li a cite{padding:0 6px;font-size:14px;font-style:normal}.layui-tree li i{padding-left:6px;color:#333;-moz-user-select:none}.layui-tree li .layui-tree-check{font-size:13px}.layui-tree li .layui-tree-check:hover{color:#009E94}.layui-tree li ul{display:none;margin-left:20px}.layui-tree li .layui-tree-enter{line-height:24px;border:1px dotted #000}.layui-tree-drag{display:none;position:absolute;left:-666px;top:-666px;background-color:#f2f2f2;padding:5px 10px;border:1px dotted #000;white-space:nowrap}.layui-tree-drag i{padding-right:5px}.layui-nav{position:relative;padding:0 20px;background-color:#393D49;color:#fff;border-radius:2px;font-size:0;box-sizing:border-box}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar,.layui-nav-tree .layui-nav-itemed:after{position:absolute;left:0;top:0;width:0;height:5px;background-color:#5FB878;transition:all .2s;-webkit-transition:all .2s}.layui-nav-bar{z-index:1000}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{content:'';top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{content:'';width:0;height:0;border-style:solid dashed dashed;border-color:#fff transparent transparent;overflow:hidden;cursor:pointer;transition:all .2s;-webkit-transition:all .2s;position:absolute;top:50%;right:3px;margin-top:-3px;border-width:6px;border-top-color:rgba(255,255,255,.7)}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{margin-top:-9px;border-style:dashed dashed solid;border-color:transparent transparent #fff}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #d2d2d2;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap}.layui-nav .layui-nav-child a{color:#333}.layui-nav .layui-nav-child a:hover{background-color:#f2f2f2;color:#000}.layui-nav-child dd{position:relative}.layui-nav .layui-nav-child dd.layui-this a,.layui-nav-child dd.layui-this{background-color:#5FB878;color:#fff}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:45px}.layui-nav-tree .layui-nav-item a{position:relative;height:45px;line-height:45px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item a:hover{background-color:#4E5465}.layui-nav-tree .layui-nav-bar{width:5px;height:0;background-color:#009688}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child a{height:40px;line-height:40px;color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-tree .layui-nav-more{right:10px}.layui-nav-itemed>.layui-nav-child{display:block;padding:0;background-color:rgba(0,0,0,.3)!important}.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display:block}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-bg-blue .layui-nav-bar,.layui-bg-blue .layui-nav-itemed:after,.layui-bg-blue .layui-this:after{background-color:#93D1FF}.layui-bg-blue .layui-nav-child dd.layui-this{background-color:#1E9FFF}.layui-bg-blue .layui-nav-itemed>a,.layui-nav-tree.layui-bg-blue .layui-nav-title a,.layui-nav-tree.layui-bg-blue .layui-nav-title a:hover{background-color:#007DDB!important}.layui-breadcrumb{visibility:hidden;font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#5FB878!important}.layui-breadcrumb a cite{color:#666;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#999}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s;position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:'';width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#e2e2e2;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\9;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:10px}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#FF5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #5FB878}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#f2f2f2}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#5FB878}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#5FB878;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#FF5722}.layui-timeline-item:before{content:'';position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:last-child:before{display:none}.layui-timeline-item:first-child:before{display:block}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#FF5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#666}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-8px 6px 0}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\9;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add],.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\9;opacity:1;left:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#e2e2e2;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown]>[carousel-item]>*,.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:999999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9F9F9F;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-code{position:relative;margin:10px 0;padding:15px;line-height:20px;border:1px solid #ddd;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New;font-size:12px}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#FFB800;margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-colorpicker{width:26px;height:26px;border:1px solid #e6e6e6;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:34px;height:34px;line-height:32px}.layui-colorpicker.layui-colorpicker-sm{width:24px;height:24px;line-height:22px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:20px}.layui-colorpicker-trigger-bgcolor{display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px}.layui-colorpicker-trigger-span{display:block;height:100%;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;text-align:center}.layui-colorpicker-trigger-i{display:inline-block;color:#FFF;font-size:12px}.layui-colorpicker-trigger-i.layui-icon-close{color:#999}.layui-colorpicker-main{position:absolute;z-index:66666666;width:280px;padding:7px;background:#FFF;border:1px solid #d2d2d2;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-colorpicker-main-wrapper{height:180px;position:relative}.layui-colorpicker-basis{width:260px;height:100%;position:relative}.layui-colorpicker-basis-white{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(90deg,#FFF,hsla(0,0%,100%,0))}.layui-colorpicker-basis-black{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(0deg,#000,transparent)}.layui-colorpicker-basis-cursor{width:10px;height:10px;border:1px solid #FFF;border-radius:50%;position:absolute;top:-3px;right:-3px;cursor:pointer}.layui-colorpicker-side{position:absolute;top:0;right:0;width:12px;height:100%;background:linear-gradient(red,#FF0,#0F0,#0FF,#00F,#F0F,red)}.layui-colorpicker-side-slider{width:100%;height:5px;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;left:0}.layui-colorpicker-main-alpha{display:none;height:12px;margin-top:7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-alpha-bgcolor{height:100%;position:relative}.layui-colorpicker-alpha-slider{width:5px;height:100%;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;top:0}.layui-colorpicker-main-pre{padding-top:7px;font-size:0}.layui-colorpicker-pre{width:20px;height:20px;border-radius:2px;display:inline-block;margin-left:6px;margin-bottom:7px;cursor:pointer}.layui-colorpicker-pre:nth-child(11n+1){margin-left:0}.layui-colorpicker-pre-isalpha{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-pre.layui-this{box-shadow:0 0 3px 2px rgba(0,0,0,.15)}.layui-colorpicker-pre>div{height:100%;border-radius:2px}.layui-colorpicker-main-input{text-align:right;padding-top:7px}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;margin-right:10px;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:150px;height:30px;color:#666}.layui-slider{height:4px;background:#e2e2e2;border-radius:3px;position:relative;cursor:pointer}.layui-slider-bar{border-radius:3px;position:absolute;height:100%}.layui-slider-step{position:absolute;top:0;width:4px;height:4px;border-radius:50%;background:#FFF;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.layui-slider-wrap{width:36px;height:36px;position:absolute;top:-16px;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10;text-align:center}.layui-slider-wrap-btn{width:12px;height:12px;border-radius:50%;background:#FFF;display:inline-block;vertical-align:middle;cursor:pointer;transition:.3s}.layui-slider-wrap:after{content:"";height:100%;display:inline-block;vertical-align:middle}.layui-slider-wrap-btn.layui-slider-hover,.layui-slider-wrap-btn:hover{transform:scale(1.2)}.layui-slider-wrap-btn.layui-disabled:hover{transform:scale(1)!important}.layui-slider-tips{position:absolute;top:-42px;z-index:66666666;white-space:nowrap;display:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#FFF;background:#000;border-radius:3px;height:25px;line-height:25px;padding:0 10px}.layui-slider-tips:after{content:'';position:absolute;bottom:-12px;left:50%;margin-left:-6px;width:0;height:0;border-width:6px;border-style:solid;border-color:#000 transparent transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #e6e6e6;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-15px}.layui-slider-input-btn{display:none;position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #d2d2d2}.layui-slider-input-btn i{cursor:pointer;position:absolute;right:0;bottom:0;width:20px;height:50%;font-size:12px;line-height:16px;text-align:center;color:#999}.layui-slider-input-btn i:first-child{top:0;border-bottom:1px solid #d2d2d2}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none}.layui-slider-input-btn i:hover{color:#009688}.layui-slider-vertical{width:4px;margin-left:34px}.layui-slider-vertical .layui-slider-bar{width:4px}.layui-slider-vertical .layui-slider-step{top:auto;left:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-wrap{top:auto;left:-16px;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-tips{top:auto;left:2px}@media \0screen{.layui-slider-wrap-btn{margin-left:-20px}.layui-slider-vertical .layui-slider-wrap-btn{margin-left:0;margin-bottom:-20px}.layui-slider-vertical .layui-slider-tips{margin-left:-8px}.layui-slider>span{margin-left:8px}}.layui-anim{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.layui-trans,.layui-trans a{transition:all .3s;-webkit-transition:all .3s}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,30px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,30px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout}
================================================
FILE: animeMusic_server/anime_music/static/css/layui.mobile.css
================================================
/** layui-v2.4.2 MIT License By https://www.layui.com */
blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,legend,li,ol,p,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{font:12px 'Helvetica Neue','PingFang SC',STHeitiSC-Light,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0)}a{text-decoration:none;background:0 0}a:active,a:hover{outline:0}table{border-collapse:collapse;border-spacing:0}li{list-style:none}b,strong{font-weight:700}h1,h2,h3,h4,h5,h6{font-weight:500}address,cite,dfn,em,var{font-style:normal}dfn{font-style:italic}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}img{border:0;vertical-align:bottom}.layui-inline,input,label{vertical-align:middle}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;outline:0}button,select{text-transform:none}select{-webkit-appearance:none;border:none}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=1.0.7);src:url(../font/iconfont.eot?v=1.0.7#iefix) format('embedded-opentype'),url(../font/iconfont.woff?v=1.0.7) format('woff'),url(../font/iconfont.ttf?v=1.0.7) format('truetype'),url(../font/iconfont.svg?v=1.0.7#iconfont) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-box,.layui-box *{-webkit-box-sizing:content-box!important;-moz-box-sizing:content-box!important;box-sizing:content-box!important}.layui-border-box,.layui-border-box *{-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1}.layui-edge,.layui-upload-iframe{position:absolute;width:0;height:0}.layui-edge{border-style:dashed;border-color:transparent;overflow:hidden}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-disabled,.layui-disabled:active{background-color:#d2d2d2!important;color:#fff!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-upload-iframe{border:0;visibility:hidden}.layui-upload-enter{border:1px solid #009E94;background-color:#009E94;color:#fff;-webkit-transform:scale(1.1);transform:scale(1.1)}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}@-webkit-keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-left{-webkit-animation-name:layui-m-anim-left;animation-name:layui-m-anim-left}@-webkit-keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-right{-webkit-animation-name:layui-m-anim-right;animation-name:layui-m-anim-right}@-webkit-keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.layui-m-anim-lout{-webkit-animation-name:layui-m-anim-lout;animation-name:layui-m-anim-lout}@-webkit-keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}.layui-m-anim-rout{-webkit-animation-name:layui-m-anim-rout;animation-name:layui-m-anim-rout}.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layerbtn,.layui-m-layerbtn span{position:relative;text-align:center;border-radius:0 0 5px 5px}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px}
================================================
FILE: animeMusic_server/anime_music/static/css/modules/code.css
================================================
/** layui-v2.2.45 MIT License By http://www.layui.com */
html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}
================================================
FILE: animeMusic_server/anime_music/static/css/modules/laydate/default/laydate.css
================================================
/** layui-v2.2.45 MIT License By http://www.layui.com */
.laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}
================================================
FILE: animeMusic_server/anime_music/static/css/modules/layer/default/layer.css
================================================
/** layui-v2.2.45 MIT License By http://www.layui.com */
.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}}
================================================
FILE: animeMusic_server/anime_music/static/god/anime.html
================================================
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Anime</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/css/layui.css" media="all">
<style>
.anime-add {
display: inline-block;
float: right;
}
.anime-info {
display: none;
}
.layui-input-inline {
width: auto !important;
}
.layui-upload-img {
min-height: 100px;
border: 1px solid #ccc;
}
.bangumi.items {
padding: 5px;
}
.bangumi .item {
display: inline-block;
overflow: hidden;
width: 100px;
position: relative;
cursor: pointer;
}
.bangumi img {
width: 100%;
}
.bangumi .item .title {
font-size: 12px;
height: 18px;
position: absolute;
bottom: 0;
background: #00000047;
color: #fff;
width: 100%;
text-align: center;
}
</style>
</head>
<body>
<div class="demoTable layui-form">
<div class="layui-inline">
<select name="search_type" lay-filter="aihao">
<option value="_id">id</option>
<option value="title" selected="">标题</option>
</select>
</div>
<div class="layui-inline">
<input class="layui-input" name="id" id="searchReload" autocomplete="off" style="width: 210px;">
</div>
<button class="layui-btn" data-type="reload" id="search">搜索</button>
<div class="anime-add">
<div class="layui-inline">
<input class="layui-input" name="title" autocomplete="off" placeholder="新的anime名称"
style="width: 210px;">
</div>
<button class="layui-btn" data-type="reload" id="search" onclick="add(this);">添加</button>
</div>
</div>
<table class="layui-hide" id="table" lay-filter="table"></table>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-xs layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-xs layui-btn-xs" lay-event="music">音乐</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<div class="layui-form anime-info">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend>详细信息</legend>
</fieldset>
<div class="layui-form-item">
<label class="layui-form-label">id</label>
<div class="layui-input-block">
<input type="text" name="id" lay-verify="title" autocomplete="off" placeholder="id" class="layui-input"
readonly>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">名称</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="title" autocomplete="off" placeholder="名称"
class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">BangumiID</label>
<div class="layui-input-block">
<div class="layui-input-inline" style="width: 100px;">
<input type="text" name="bangumi_id" placeholder="对应Bangumi的番剧id" autocomplete="off"
class="layui-input">
</div>
<div class="layui-input-inline" style="width: 100px;">
<button class="layui-btn" id="search_bangumi" onclick="search_bangumi();">查询</button>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">LOGO</label>
<div class="layui-input-inline">
<div class="layui-upload">
<div class="layui-upload-list logo">
<img class="layui-upload-img" id="upload_logo" width="300" height="154"/>
<p id="logo_text"></p>
</div>
</div>
</div>
<label class="layui-form-label">背景</label>
<div class="layui-input-inline">
<div class="layui-upload">
<div class="layui-upload-list bg">
<img class="layui-upload-img" id="upload_bg" width="300" height="154"/>
<p id="bg_text"></p>
</div>
</div>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">描述</label>
<div class="layui-input-block">
<textarea placeholder="描述" class="layui-textarea" name="desc"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">放送日期</label>
<div class="layui-input-inline" style="width: 100px;">
<input type="text" name="year" placeholder="年" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline" style="width: 100px;">
<input type="text" name="month" placeholder="月" autocomplete="off" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" onclick="save();">保 存</button>
</div>
</div>
</div>
<script>
var g_anime_info = {};
var g_bangumi_info = {};
layui.use('table', function () {
var table = layui.table
, form = layui.form;
table.render({
elem: '#table'
, url: '/god/api/v1/anime/list'
, cellMinWidth: 80
, cols: [[
{type: 'numbers'}
, {field: '_id', title: 'id', width: 250, unresize: true, sort: true}
, {field: 'title', title: '名称'}
, {field: 'desc', title: '描述'}
, {field: 'atime', title: '添加时间', width: 200}
, {fixed: 'right', title: '操作', toolbar: '#barDemo', align: 'center', width: 170}
]]
, id: 'tableReload'
, page: true
, done: function (res) {
g_anime_info = {};
for (var i in res.data) {
g_anime_info[res.data[i]._id] = res.data[i];
}
}
});
var $ = layui.$, active = {
reload: function () {
var searchReload = $('#searchReload');
//执行重载
table.reload('tableReload', {
page: {
curr: 1 //重新从第 1 页开始
}
, where: {
search_value: searchReload.val(),
search_type: $('select[name="search_type"]').val(),
}
});
}
};
$('.demoTable .layui-btn').on('click', function () {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
//监听行工具事件
table.on('tool(table)', function (obj) {
var data = obj.data;
if (obj.event === 'edit') {
edit(data);
} else if (obj.event === 'music') {
music(data._id);
} else if (obj.event === 'del') {
del(data._id);
}
});
});
function del(id) {
if (confirm('确定删除选中项吗?')) {
$.post("/god/api/v1/anime/del/" + id, function (res) {
if (res.code != 0) {
alert(res.msg);
return;
}
if (id == $('.anime-info input[name="id"]').val()) {
$('.anime-info').hide();
}
reLoad();
});
}
}
function reLoad() {
$('#search').click();
}
function music(id) {
window.open('/god?url=/static/god/music.html<animeid=' + id);
console.log('/god?url=/static/god/music.html<animeid=' + id);
}
function edit(data) {
var id = data._id;
var _anime_info = g_anime_info[id];
$('.anime-info input[name="id"]').val(id);
$('.anime-info input[name="title"]').val(_anime_info['title']);
$('.anime-info textarea[name="desc"]').val(_anime_info['desc']);
$('.anime-info input[name="year"]').val(_anime_info['year']);
$('.anime-info input[name="month"]').val(_anime_info['month']);
$('.anime-info input[name="bangumi_id"]').val(_anime_info['bangumi_id']);
$('.layui-upload-list.logo').html('<img class="layui-upload-img" id="upload_logo" width="300"><input class="layui-upload-file" type="file" name="file"><p id="logo_text"></p>');
$('.layui-upload-list.bg').html('<img class="layui-upload-img" id="upload_bg" width="300"><input class="layui-upload-file" type="file" name="file"><p id="bg_text"></p>');
$('#upload_logo').attr('src', _anime_info['logo']);
$('#upload_bg').attr('src', _anime_info['bg']);
layui.use('upload', function () {
var $ = layui.jquery
, upload = layui.upload
, demoText = $('#logo_text');
//普通图片上传
var uploadInst = upload.render({
elem: '#upload_logo'
, url: '/god/api/v1/anime/upload/logo/' + $('.anime-info input[name="id"]').val()
, before: function (obj) {
demoText.html('<span style="color: #009688;">上传中...</span>');
}
, done: function (res) {
//如果上传失败
if (res.code < 0) {
return layer.msg('上传失败');
}
//上传成功
$('#upload_logo').attr('src', res.src);
g_anime_info[$('.anime-info input[name="id"]').val()]['logo'] = res.src;
demoText.html('<span style="color: #009688;">上传成功</span>');
}
, error: function () {
//演示失败状态,并实现重传
demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
demoText.find('.demo-reload').on('click', function () {
uploadInst.upload();
});
}
});
});
layui.use('upload', function () {
var $ = layui.jquery
, upload = layui.upload
, demoText = $('#bg_text');
//普通图片上传
var uploadInst = upload.render({
elem: '#upload_bg'
, url: '/god/api/v1/anime/upload/bg/' + $('.anime-info input[name="id"]').val()
, before: function (obj) {
demoText.html('<span style="color: #009688;">上传中...</span>');
}
, done: function (res) {
//如果上传失败
if (res.code < 0) {
return layer.msg('上传失败');
}
//上传成功
$('#upload_bg').attr('src', res.src);
g_anime_info[$('.anime-info input[name="id"]').val()]['bg'] = res.src;
demoText.html('<span style="color: #009688;">上传成功</span>');
}
, error: function () {
//演示失败状态,并实现重传
demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
demoText.find('.demo-reload').on('click', function () {
uploadInst.upload();
});
}
});
});
$('.anime-info').show();
}
function save() {
var id = $('.anime-info input[name="id"]').val();
var title = $('.anime-info input[name="title"]').val();
if (!title) {
alert('请输入标题名称');
return;
}
var desc = $('.anime-info textarea[name="desc"]').val();
if (!desc) {
alert('请输入描述');
return;
}
var year = $('.anime-info input[name="year"]').val();
var month = $('.anime-info input[name="month"]').val();
var bangumi_id = $('.anime-info input[name="bangumi_id"]').val();
$.post("/god/api/v1/anime/save/" + id, {title: title, desc: desc, year: year, month: month, bangumi_id: bangumi_id}, function (res) {
g_anime_info[id]['title'] = title;
g_anime_info[id]['desc'] = desc;
g_anime_info[id]['year'] = year;
g_anime_info[id]['month'] = month;
g_anime_info[id]['bangumi_id'] = bangumi_id;
console.log(res);
});
}
function add() {
var title = $('.anime-add input[name="title"]').val();
if (!title) {
alert('请输入标题名称');
return;
}
$('.anime-add input[name="title"]').val('');
$.post("/god/api/v1/anime/add", {title: title}, function (res) {
reLoad();
});
}
function search_bangumi() {
if ($('#search_bangumi').text() == '查询中') return;
$('#search_bangumi').text('查询中')
var title = $('.anime-info input[name="title"]').val();
$.post("/god/api/v1/anime/search_bangumi", {title: title}, function (res) {
console.log(res)
var html = '<div class="bangumi items">'
g_bangumi_info = {}
for (var f of res.res) {
g_bangumi_info[f['id']] = f
html += '\n<div class="item" data-id="' + f['id'] + '">\n'
html += '\n<img src="' + f['img'] + '"/>\n'
html += '\n<div class="title">' + f['name_cn'] + '(' + f['name'] + ')' + '</div>\n'
html += '\n</div>\n'
}
html += '\n</div>\n'
layer.open({
type: 1, // page 层类型
area: ['855px', '348px'],
title: '查询结果',
shade: 0.6, // 遮罩透明度
shadeClose: true, // 点击遮罩区域,关闭弹层
maxmin: true, // 允许全屏最小化
anim: 0, // 0-6 的动画形式,-1 不开启
content: html,
success: function () {
$('.bangumi .item').unbind().click(function(){
var bangumi_id = $(this).data('id');
select_bangumi_id(bangumi_id);
layer.closeAll();
})
}
});
$('#search_bangumi').text('查询')
});
}
function select_bangumi_id(id) {
$('.anime-info input[name="bangumi_id"]').val(id);
if(confirm('是否自动补全信息')){
$('.anime-info input[name="year"]').val(g_bangumi_info[id]['year']);
$('.anime-info input[name="month"]').val(g_bangumi_info[id]['month']);
$('.anime-info textarea[name="desc"]').val(g_bangumi_info[id]['desc']);
}
g_bangumi_info = {};
}
layui.use('form', function () {
var form = layui.form;
form.render();
});
</script>
</body>
</html>
================================================
FILE: animeMusic_server/anime_music/static/god/music.html
================================================
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Music</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/css/layui.css" media="all">
<style>
.music-add, .js-search {
display: none;
}
.music-info {
display: none;
}
.layui-input-inline {
width: auto !important;
}
</style>
</head>
<body>
<div class="demoTable layui-form">
<div class="js-search">
<div class="layui-inline">
<select name="search_type" lay-filter="aihao">
<option value="_id">id</option>
<option value="anime_id">anime_id</option>
<option value="title" selected="">标题</option>
</select>
</div>
<div class="layui-inline">
<input class="layui-input" name="id" id="searchReload" autocomplete="off" style="width: 210px;">
</div>
<button class="layui-btn" data-type="reload" id="search">搜索</button>
</div>
<div class="music-add">
<div class="layui-inline">
<input class="layui-input" name="title" autocomplete="off" placeholder="新的music名称" style="width: 210px;">
</div>
<button class="layui-btn" data-type="reload" id="search" onclick="add(this);">添加</button>
</div>
</div>
<table class="layui-hide" id="table" lay-filter="table"></table>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-xs layui-btn-xs" lay-event="play">试听页面</a>
<a class="layui-btn layui-btn-xs layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<div class="layui-form music-info">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend>详细信息</legend>
</fieldset>
<div class="layui-form-item">
<label class="layui-form-label">id</label>
<div class="layui-input-block">
<input type="text" name="id" lay-verify="title" autocomplete="off" placeholder="id" class="layui-input"
readonly>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">名称</label>
<div class="layui-input-block">
<input type="text" name="title" lay-verify="title" autocomplete="off" placeholder="名称" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-block">
<select name="type" lay-filter="aihao">
<option value="" selected="">请选择所属类型</option>
<option value="OP">OP</option>
<option value="ED">ED</option>
<option value="BGM">BGM</option>
<option value="插曲">插曲</option>
<option value="角色歌">角色歌</option>
<option value="其他">其他</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">作者</label>
<div class="layui-input-block">
<input type="text" name="author" lay-verify="title" autocomplete="off" placeholder="作者" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">推荐</label>
<div class="layui-input-block">
<input type="checkbox" name="recommend" lay-skin="switch" lay-text="Yes|No">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">MP3试听</label>
<div class="layui-input-block">
<audio name="mp3_player" controls="" style="width: 100%;"/>
</div>
</div>
<div class="layui-form-item"><label class="layui-form-label"></label>
<div class="layui-input-block">
<div class="layui-upload">
<div class="layui-upload-list upload_mp3">
<button class="layui-btn layui-btn-normal" id="upload_mp3">上传MP3</button>
<p id="upload_text"></p>
</div>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" onclick="save();">保 存</button>
</div>
</div>
</div>
<script>
var g_anime_id = null;
var g_music_info = {};
layui.use('table', function () {
var $ = layui.$
, table = layui.table
, form = layui.form;
var url = '/god/api/v1/music/list';
var anime_id = GetQueryString('animeid', true);
if (anime_id) {
url += ('?search_type=anime_id&search_value=' + anime_id);
g_anime_id = anime_id;
$('.music-add').css('display', 'inline-block');
$('select[name="search_type"]').val('anime_id');
$('#searchReload').val(g_anime_id);
form.render('select');
}else{
$('.js-search').show();
}
table.render({
elem: '#table'
, url: url
, cellMinWidth: 80
, cols: [[
{type: 'numbers'}
, {field: '_id', title: 'id', width: 250, unresize: true, sort: true}
, {field: 'title', title: '名称'}
, {field: 'anime_name', title: '所属动漫'}
, {field: 'author', title: '作者'}
, {field: 'atime', title: '添加时间', width: 200}
, {fixed: 'right', title: '操作', toolbar: '#barDemo', align: 'center', width: 200}
]]
, id: 'tableReload'
, page: true
, done: function (res) {
g_music_info = {};
for (var i in res.data) {
g_music_info[res.data[i]._id] = res.data[i];
}
}
});
//监听行工具事件
table.on('tool(table)', function (obj) {
var data = obj.data;
if (obj.event === 'edit') {
edit(data._id);
}
else if (obj.event === 'del') {
del(data._id);
}
else if (obj.event === 'play') {
window.open('https://jxiaoc.github.io/animeMusic/demo.html?id=' + data._id);
}
});
var active = {
reload: function () {
var searchReload = $('#searchReload');
//执行重载
table.reload('tableReload', {
page: {
curr: 1 //重新从第 1 页开始
}
, where: {
search_value: searchReload.val(),
search_type: $('select[name="search_type"]').val(),
}
});
}
};
$('.demoTable .layui-btn').on('click', function () {
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
});
function del(id) {
if (confirm('确定删除选中项吗?')) {
$.post("/god/api/v1/music/del/" + id, function (res) {
reLoad();
console.log(res);
});
if (id == $('.music-info input[name="id"]').val()){
$('.music-info').hide();
}
}
}
function reLoad() {
$('#search').click();
}
function edit(id) {
var _music_info = g_music_info[id];
$('.music-info input[name="id"]').val(id);
$('.music-info input[name="title"]').val(_music_info['title']);
$('.music-info input[name="author"]').val(_music_info['author']);
$('.music-info select[name="type"]').val(_music_info['type']);
$('.layui-upload-list.upload_mp3').html('<button class="layui-btn layui-btn-normal" id="upload_mp3">上传MP3</button><p id="upload_text"></p>');
$('.music-info audio[name="mp3_player"]')[0].src = _music_info['play_url'];
if (_music_info['recommend']) {
$('.music-info input[name="recommend"]')[0].checked = true;
} else {
$('.music-info input[name="recommend"]')[0].checked = false;
}
layui.use('form', function () {
var form = layui.form;
form.render();
});
layui.use('upload', function () {
var $ = layui.jquery
, upload = layui.upload
, demoText = $('#upload_text');
//普通图片上传
var uploadInst = upload.render({
elem: '#upload_mp3'
,accept: 'file'
, url: '/god/api/v1/music/upload/' + $('.music-info input[name="id"]').val()
, before: function (obj) {
demoText.html('<span style="color: #009688;">上传中...</span>');
}
, done: function (res) {
//如果上传失败
if (res.code < 0) {
return layer.msg('上传失败');
}
//上传成功
$('.music-info audio[name="mp3_player"]')[0].src = res.src;
g_music_info[$('.music-info input[name="id"]').val()]['play_url'] = res.src;
demoText.html('<span style="color: #009688;">上传成功</span>');
}
, error: function () {
//演示失败状态,并实现重传
demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
demoText.find('.demo-reload').on('click', function () {
uploadInst.upload();
});
}
});
});
$('.music-info').show();
}
function save() {
var id = $('.music-info input[name="id"]').val();
var title = $('.music-info input[name="title"]').val();
if (!title){
alert('请输入标题名称');
return;
}
var author = $('.music-info input[name="author"]').val();
if (!author){
alert('请输入作者');
return;
}
var type = $('.music-info select[name="type"]').val();
if (!type){
alert('请输入类型');
return;
}
var recommend = $('.music-info input[name="recommend"]')[0].checked;
$.post("/god/api/v1/music/save/" + id, {title: title, author: author, recommend: recommend, type: type}, function (res) {
g_music_info[id]['title'] = title;
g_music_info[id]['author'] = author;
g_music_info[id]['recommend'] = recommend;
console.log(res);
reLoad();
});
}
function add() {
var title = $('.music-add input[name="title"]').val();
if (!title){
alert('请输入标题名称');
return;
}
$('.music-add input[name="title"]').val('');
$.post("/god/api/v1/music/add/" + g_anime_id, {title: title}, function (res) {
reLoad();
});
}
layui.use('form', function () {
var form = layui.form;
form.render();
});
</script>
</body>
</html>
================================================
FILE: animeMusic_server/anime_music/static/lay/modules/carousel.js
================================================
/** layui-v2.2.45 MIT License By http://www.layui.com */
;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['<button class="layui-icon '+u+'" lay-type="sub">'+("updown"===n.anim?"":"")+"</button>",'<button class="layui-icon '+u+'" lay-type="add">'+("updown"===n.anim?"":"")+"</button>"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['<div class="'+c+'"><ul>',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("<li"+(n.index===e?' class="layui-this"':"")+"></li>")}),i.join("")}(),"</ul></div>"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a<n.index&&e.slide("sub",n.index-a)})},m.prototype.slide=function(e,i){var n=this,l=n.elemItem,u=n.config,c=u.index,m=u.elem.attr("lay-filter");n.haveSlide||("sub"===e?(n.subIndex(i),l.eq(u.index).addClass(d),setTimeout(function(){l.eq(c).addClass(r),l.eq(u.index).addClass(r)},50)):(n.addIndex(i),l.eq(u.index).addClass(s),setTimeout(function(){l.eq(c).addClass(o),l.eq(u.index).addClass(o)},50)),setTimeout(function(){l.removeClass(a+" "+d+" "+s+" "+o+" "+r),l.eq(u.index).addClass(a),n.haveSlide=!1},300),n.elemInd.find("li").eq(u.index).addClass(a).siblings().removeClass(a),n.haveSlide=!0,layui.event.call(this,t,"change("+m+")",{index:u.index,prevIndex:c,item:l.eq(u.index)}))},m.prototype.events=function(){var e=this,i=e.config;i.elem.data("haveEvents")||(i.elem.on("mouseenter",function(){clearInterval(e.timer)}).on("mouseleave",function(){e.autoplay()}),i.elem.data("haveEvents",!0))},n.render=function(e){var i=new m(e);return i},e(t,n)});
================================================
FILE: animeMusic_server/anime_music/static/lay/modules/code.js
================================================
/** layui-v2.2.45 MIT License By http://www.layui.com */
;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('<ol class="layui-code-ol"><li>'+o.replace(/[\r\t\n]+/g,"</li><li>")+"</li></ol>"),c.find(">.layui-code-h3")[0]||c.prepend('<h3 class="layui-code-h3">'+(c.attr("lay-title")||e.title||"code")+(e.about?'<a href="'+l+'" target="_blank">layui.code</a>':"")+"</h3>");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss");
================================================
FILE: animeMusic_server/anime_music/static/lay/modules/element.js
================================================
/** layui-v2.2.45 MIT License By http://www.layui.com */
;layui.define("jquery",function(i){"use strict";var t=layui.$,a=(layui.hint(),layui.device()),e="element",l="layui-this",n="layui-show",s=function(){this.config={}};s.prototype.set=function(i){var a=this;return t.extend(!0,a.config,i),a},s.prototype.on=function(i,t){return layui.onevent.call(this,e,i,t)},s.prototype.tabAdd=function(i,a){var e=".layui-tab-title",l=t(".layui-tab[lay-filter="+i+"]"),n=l.children(e),s=n.children(".layui-tab-bar"),o=l.children(".layui-tab-content"),c='<li lay-id="'+(a.id||"")+'">'+(a.title||"unnaming")+"</li>";return s[0]?s.before(c):n.append(c),o.append('<div class="layui-tab-item">'+(a.content||"")+"</div>"),y.hideTabMore(!0),y.tabAuto(),this},s.prototype.tabDelete=function(i,a){var e=".layui-tab-title",l=t(".layui-tab[lay-filter="+i+"]"),n=l.children(e),s=n.find('>li[lay-id="'+a+'"]');return y.tabDelete(null,s),this},s.prototype.tabChange=function(i,a){var e=".layui-tab-title",l=t(".layui-tab[lay-filter="+i+"]"),n=l.children(e),s=n.find('>li[lay-id="'+a+'"]');return y.tabClick(null,null,s),this},s.prototype.tab=function(i){i=i||{},v.on("click",i.headerElem,function(a){var e=t(this).index();y.tabClick.call(this,a,e,null,i)})},s.prototype.progress=function(i,a){var e="layui-progress",l=t("."+e+"[lay-filter="+i+"]"),n=l.find("."+e+"-bar"),s=n.find("."+e+"-text");return n.css("width",a),s.text(a),this};var o=".layui-nav",c="layui-nav-item",r="layui-nav-bar",u="layui-nav-tree",d="layui-nav-child",h="layui-nav-more",f="layui-anim layui-anim-upbit",y={tabClick:function(i,a,s,o){o=o||{};var c=s||t(this),a=a||c.parent().children("li").index(c),r=o.headerElem?c.parent():c.parents(".layui-tab").eq(0),u=o.bodyElem?t(o.bodyElem):r.children(".layui-tab-content").children(".layui-tab-item"),d=c.find("a"),h=r.attr("lay-filter");"javascript:;"!==d.attr("href")&&"_blank"===d.attr("target")||(c.addClass(l).siblings().removeClass(l),u.eq(a).addClass(n).siblings().removeClass(n)),layui.event.call(this,e,"tab("+h+")",{elem:r,index:a})},tabDelete:function(i,a){var n=a||t(this).parent(),s=n.index(),o=n.parents(".layui-tab").eq(0),c=o.children(".layui-tab-content").children(".layui-tab-item"),r=o.attr("lay-filter");n.hasClass(l)&&(n.next()[0]?y.tabClick.call(n.next()[0],null,s+1):n.prev()[0]&&y.tabClick.call(n.prev()[0],null,s-1)),n.remove(),c.eq(s).remove(),setTimeout(function(){y.tabAuto()},50),layui.event.call(this,e,"tabDelete("+r+")",{elem:o,index:s})},tabAuto:function(){var i="layui-tab-more",e="layui-tab-bar",l="layui-tab-close",n=this;t(".layui-tab").each(function(){var s=t(this),o=s.children(".layui-tab-title"),c=(s.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),r=t('<span class="layui-unselect layui-tab-bar" '+c+"><i "+c+' class="layui-icon"></i></span>');if(n===window&&8!=a.ie&&y.hideTabMore(!0),s.attr("lay-allowClose")&&o.find("li").each(function(){var i=t(this);if(!i.find("."+l)[0]){var a=t('<i class="layui-icon layui-unselect '+l+'">ဆ</i>');a.on("click",y.tabDelete),i.append(a)}}),o.prop("scrollWidth")>o.outerWidth()+1){if(o.find("."+e)[0])return;o.append(r),s.attr("overflow",""),r.on("click",function(t){o[this.title?"removeClass":"addClass"](i),this.title=this.title?"":"收缩"})}else o.find("."+e).remove(),s.removeAttr("overflow")})},hideTabMore:function(i){var a=t(".layui-tab-title");i!==!0&&"tabmore"===t(i.target).attr("lay-stope")||(a.removeClass("layui-tab-more"),a.find(".layui-tab-bar").attr("title",""))},clickThis:function(){var i=t(this),a=i.parents(o),n=a.attr("lay-filter"),s=i.find("a"),c="string"==typeof i.attr("lay-unselect");i.find("."+d)[0]||("javascript:;"!==s.attr("href")&&"_blank"===s.attr("target")||c||(a.find("."+l).removeClass(l),i.addClass(l)),layui.event.call(this,e,"nav("+n+")",i))},clickChild:function(){var i=t(this),a=i.parents(o),n=a.attr("lay-filter");a.find("."+l).removeClass(l),i.addClass(l),layui.event.call(this,e,"nav("+n+")",i)},showChild:function(){var i=t(this),a=i.parents(o),e=i.parent(),l=i.siblings("."+d);a.hasClass(u)&&(l.removeClass(f),e["none"===l.css("display")?"addClass":"removeClass"](c+"ed"))},collapse:function(){var i=t(this),a=i.find(".layui-colla-icon"),l=i.siblings(".layui-colla-content"),s=i.parents(".layui-collapse").eq(0),o=s.attr("lay-filter"),c="none"===l.css("display");if("string"==typeof s.attr("lay-accordion")){var r=s.children(".layui-colla-item").children("."+n);r.siblings(".layui-colla-title").children(".layui-colla-icon").html(""),r.removeClass(n)}l[c?"addClass":"removeClass"](n),a.html(c?"":""),layui.event.call(this,e,"collapse("+o+")",{title:i,content:l,show:c})}};s.prototype.init=function(i,e){var l=function(){return e?'[lay-filter="'+e+'"]':""}(),s={tab:function(){y.tabAuto.call({})},nav:function(){var i=200,e={},s={},p={},v=function(l,o,c){var r=t(this),y=r.find("."+d);o.hasClass(u)?l.css({top:r.position().top,height:r.children("a").height(),opacity:1}):(y.addClass(f),l.css({left:r.position().left+parseFloat(r.css("marginLeft")),top:r.position().top+r.height()-l.height()}),e[c]=setTimeout(function(){l.css({width:r.width(),opacity:1})},a.ie&&a.ie<10?0:i),clearTimeout(p[c]),"block"===y.css("display")&&clearTimeout(s[c]),s[c]=setTimeout(function(){y.addClass(n),r.find("."+h).addClass(h+"d")},300))};t(o+l).each(function(a){var l=t(this),o=t('<span class="'+r+'"></span>'),f=l.find("."+c);l.find("."+r)[0]||(l.append(o),f.on("mouseenter",function(){v.call(this,o,l,a)}).on("mouseleave",function(){l.hasClass(u)||(clearTimeout(s[a]),s[a]=setTimeout(function(){l.find("."+d).removeClass(n),l.find("."+h).removeClass(h+"d")},300))}),l.on("mouseleave",function(){clearTimeout(e[a]),p[a]=setTimeout(function(){l.hasClass(u)?o.css({height:0,top:o.position().top+o.height()/2,opacity:0}):o.css({width:0,left:o.position().left+o.width()/2,opacity:0})},i)})),f.each(function(){var i=t(this),a=i.find("."+d);if(a[0]&&!i.find("."+h)[0]){var e=i.children("a");e.append('<span class="'+h+'"></span>')}i.off("click",y.clickThis).on("click",y.clickThis),i.children("a").off("click",y.showChild).on("click",y.showChild),a.children("dd").off("click",y.clickChild).on("click",y.clickChild)})})},breadcrumb:function(){var i=".layui-breadcrumb";t(i+l).each(function(){var i=t(this),a="lay-separator",e=i.attr(a)||"/",l=i.find("a");l.next("span["+a+"]")[0]||(l.each(function(i){i!==l.length-1&&t(this).after("<span "+a+">"+e+"</span>")}),i.css("visibility","visible"))})},progress:function(){var i="layui-progress";t("."+i+l).each(function(){var a=t(this),e=a.find(".layui-progress-bar"),l=e.attr("lay-percent");e.css("width",function(){return/^.+\/.+$/.test(l)?100*new Function("return "+l)()+"%":l}()),a.attr("lay-showPercent")&&setTimeout(function(){e.html('<span class="'+i+'-text">'+l+"</span>")},350)})},collapse:function(){var i="layui-collapse";t("."+i+l).each(function(){var i=t(this).find(".layui-colla-item");i.each(function(){var i=t(this),a=i.find(".layui-colla-title"),e=i.find(".layui-colla-content"),l="none"===e.css("display");a.find(".layui-colla-icon").remove(),a.append('<i class="layui-icon layui-colla-icon">'+(l?"":"")+"</i>"),a.off("click",y.collapse).on("click",y.collapse)})})}};return s[i]?s[i]():layui.each(s,function(i,t){t()})},s.prototype.render=s.prototype.init;var p=new s,v=t(document);p.render();var b=".layui-tab-title li";v.on("click",b,y.tabClick),v.on("click",y.hideTabMore),t(window).on("resize",y.tabAuto),i(e,p)});
================================================
FILE: animeMusic_server/anime_music/static/lay/modules/flow.js
================================================
/** layui-v2.2.45 MIT License By http://www.layui.com */
;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='<i class="layui-anim layui-anim-rotate layui-anim-loop layui-icon "></i>';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="<cite>加载更多</cite>",h=l('<div class="layui-flow-more"><a href="javascript:;">'+d+"</a></div>");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;s<t.lazyimg.elem.length;s++){var v=t.lazyimg.elem.eq(s),y=a?function(){return v.offset().top-n.offset().top+m}():v.offset().top;if(c(v,f),i=s,y>u)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)});
================================================
FILE: animeMusic_server/anime_music/static/lay/modules/form.js
================================================
/** layui-v2.2.45 MIT License By http://www.layui.com */
;layui.define("layer",function(e){"use strict";var i=layui.$,t=layui.layer,a=layui.hint(),n=layui.device(),l="form",r=".layui-form",s="layui-this",o="layui-hide",c="layui-disabled",u=function(){this.config={verify:{required:[/[\S]+/,"必填项不能为空"],phone:[/^1\d{10}$/,"请输入正确的手机号"],email:[/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,"邮箱格式不正确"],url:[/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/,"链接格式不正确"],number:function(e){if(!e||isNaN(e))return"只能填写数字"},date:[/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,"日期格式不正确"],identity:[/(^\d{15}$)|(^\d{17}(x|X|\d)$)/,"请输入正确的身份证号"]}}};u.prototype.set=function(e){var t=this;return i.extend(!0,t.config,e),t},u.prototype.verify=function(e){var t=this;return i.extend(!0,t.config.verify,e),t},u.prototype.on=function(e,i){return layui.onevent.call(this,l,e,i)},u.prototype.render=function(e,t){var n=this,u=i(r+function(){return t?'[lay-filter="'+t+'"]':""}()),d={select:function(){var e,t="请选择",a="layui-form-select",n="layui-select-title",r="layui-select-none",d="",f=u.find("select"),y=function(t,l){i(t.target).parent().hasClass(n)&&!l||(i("."+a).removeClass(a+"ed "+a+"up"),e&&d&&e.val(d)),e=null},h=function(t,u,f){var h=i(this),p=t.find("."+n),m=p.find("input"),k=t.find("dl"),g=k.children("dd");if(!u){var x=function(){var e=t.offset().top+t.outerHeight()+5-v.scrollTop(),i=k.outerHeight();t.addClass(a+"ed"),g.removeClass(o),e+i>v.height()&&e>=i&&t.addClass(a+"up")},b=function(e){t.removeClass(a+"ed "+a+"up"),m.blur(),e||C(m.val(),function(e){e&&(d=k.find("."+s).html(),m&&m.val(d))})};p.on("click",function(e){t.hasClass(a+"ed")?b():(y(e,!0),x()),k.find("."+r).remove()}),p.find(".layui-edge").on("click",function(){m.focus()}),m.on("keyup",function(e){var i=e.keyCode;9===i&&x()}).on("keydown",function(e){var i=e.keyCode;9===i?b():13===i&&e.preventDefault()});var C=function(e,t,a){var n=0;layui.each(g,function(){var t=i(this),l=t.text(),r=l.indexOf(e)===-1;(""===e||"blur"===a?e!==l:r)&&n++,"keyup"===a&&t[r?"addClass":"removeClass"](o)});var l=n===g.length;return t(l),l},w=function(e){var i=this.value,t=e.keyCode;return 9!==t&&13!==t&&37!==t&&38!==t&&39!==t&&40!==t&&(C(i,function(e){e?k.find("."+r)[0]||k.append('<p class="'+r+'">无匹配项</p>'):k.find("."+r).remove()},"keyup"),void(""===i&&k.find("."+r).remove()))};f&&m.on("keyup",w).on("blur",function(i){e=m,d=k.find("."+s).html(),setTimeout(function(){C(m.val(),function(e){d||m.val("")},"blur")},200)}),g.on("click",function(){var e=i(this),a=e.attr("lay-value"),n=h.attr("lay-filter");return!e.hasClass(c)&&(e.hasClass("layui-select-tips")?m.val(""):(m.val(e.text()),e.addClass(s)),e.siblings().removeClass(s),h.val(a).removeClass("layui-form-danger"),layui.event.call(this,l,"select("+n+")",{elem:h[0],value:a,othis:t}),b(!0),!1)}),t.find("dl>dt").on("click",function(e){return!1}),i(document).off("click",y).on("click",y)}};f.each(function(e,l){var r=i(this),o=r.next("."+a),u=this.disabled,d=l.value,f=i(l.options[l.selectedIndex]),y=l.options[0];if("string"==typeof r.attr("lay-ignore"))return r.show();var v="string"==typeof r.attr("lay-search"),p=y?y.value?t:y.innerHTML||t:t,m=i(['<div class="'+(v?"":"layui-unselect ")+a+(u?" layui-select-disabled":"")+'">','<div class="'+n+'"><input type="text" placeholder="'+p+'" value="'+(d?f.html():"")+'" '+(v?"":"readonly")+' class="layui-input'+(v?"":" layui-unselect")+(u?" "+c:"")+'">','<i class="layui-edge"></i></div>','<dl class="layui-anim layui-anim-upbit'+(r.find("optgroup")[0]?" layui-select-group":"")+'">'+function(e){var i=[];return layui.each(e,function(e,a){0!==e||a.value?"optgroup"===a.tagName.toLowerCase()?i.push("<dt>"+a.label+"</dt>"):i.push('<dd lay-value="'+a.value+'" class="'+(d===a.value?s:"")+(a.disabled?" "+c:"")+'">'+a.innerHTML+"</dd>"):i.push('<dd lay-value="" class="layui-select-tips">'+(a.innerHTML||t)+"</dd>")}),0===i.length&&i.push('<dd lay-value="" class="'+c+'">没有选项</dd>'),i.join("")}(r.find("*"))+"</dl>","</div>"].join(""));o[0]&&o.remove(),r.after(m),h.call(this,m,u,v)})},checkbox:function(){var e={checkbox:["layui-form-checkbox","layui-form-checked","checkbox"],_switch:["layui-form-switch","layui-form-onswitch","switch"]},t=u.find("input[type=checkbox]"),a=function(e,t){var a=i(this);e.on("click",function(){var i=a.attr("lay-filter"),n=(a.attr("lay-text")||"").split("|");a[0].disabled||(a[0].checked?(a[0].checked=!1,e.removeClass(t[1]).find("em").text(n[1])):(a[0].checked=!0,e.addClass(t[1]).find("em").text(n[0])),layui.event.call(a[0],l,t[2]+"("+i+")",{elem:a[0],value:a[0].value,othis:e}))})};t.each(function(t,n){var l=i(this),r=l.attr("lay-skin"),s=(l.attr("lay-text")||"").split("|"),o=this.disabled;"switch"===r&&(r="_"+r);var u=e[r]||e.checkbox;if("string"==typeof l.attr("lay-ignore"))return l.show();var d=l.next("."+u[0]),f=i(['<div class="layui-unselect '+u[0]+(n.checked?" "+u[1]:"")+(o?" layui-checkbox-disbaled "+c:"")+'" lay-skin="'+(r||"")+'">',{_switch:"<em>"+((n.checked?s[0]:s[1])||"")+"</em><i></i>"}[r]||(n.title.replace(/\s/g,"")?"<span>"+n.title+"</span>":"")+'<i class="layui-icon">'+(r?"":"")+"</i>","</div>"].join(""));d[0]&&d.remove(),l.after(f),a.call(this,f,u)})},radio:function(){var e="layui-form-radio",t=["",""],a=u.find("input[type=radio]"),n=function(a){var n=i(this),s="layui-anim-scaleSpring";a.on("click",function(){var o=n[0].name,c=n.parents(r),u=n.attr("lay-filter"),d=c.find("input[name="+o.replace(/(\.|#|\[|\])/g,"\\$1")+"]");n[0].disabled||(layui.each(d,function(){var a=i(this).next("."+e);this.checked=!1,a.removeClass(e+"ed"),a.find(".layui-icon").removeClass(s).html(t[1])}),n[0].checked=!0,a.addClass(e+"ed"),a.find(".layui-icon").addClass(s).html(t[0]),layui.event.call(n[0],l,"radio("+u+")",{elem:n[0],value:n[0].value,othis:a}))})};a.each(function(a,l){var r=i(this),s=r.next("."+e),o=this.disabled;if("string"==typeof r.attr("lay-ignore"))return r.show();var u=i(['<div class="layui-unselect '+e+(l.checked?" "+e+"ed":"")+(o?" layui-radio-disbaled "+c:"")+'">','<i class="layui-anim layui-icon">'+t[l.checked?0:1]+"</i>","<span>"+(l.title||"未命名")+"</span>","</div>"].join(""));s[0]&&s.remove(),r.after(u),n.call(this,u)})}};return e?d[e]?d[e]():a.error("不支持的"+e+"表单渲染"):layui.each(d,function(e,i){i()}),n};var d=function(){var e=i(this),a=f.config.verify,s=null,o="layui-form-danger",c={},u=e.parents(r),d=u.find("*[lay-verify]"),y=e.parents("form")[0],v=u.find("input,select,textarea"),h=e.attr("lay-filter");if(layui.each(d,function(e,l){var r=i(this),c=r.attr("lay-verify").split("|"),u=r.attr("lay-verType"),d=r.val();if(r.removeClass(o),layui.each(c,function(e,i){var c,f="",y="function"==typeof a[i];if(a[i]){var c=y?f=a[i](d,l):!a[i][0].test(d);if(f=f||a[i][1],c)return"tips"===u?t.tips(f,function(){return"string"==typeof r.attr("lay-ignore")||"select"!==l.tagName.toLowerCase()&&!/^checkbox|radio$/.test(l.type)?r:r.next()}(),{tips:1}):"alert"===u?t.alert(f,{title:"提示",shadeClose:!0}):t.msg(f,{icon:5,shift:6}),n.android||n.ios||l.focus(),r.addClass(o),s=!0}}),s)return s}),s)return!1;var p={};return layui.each(v,function(e,i){if(i.name=(i.name||"").replace(/^\s*|\s*&/,""),i.name){if(/^.*\[\]$/.test(i.name)){var t=i.name.match(/^(.*)\[\]$/g)[0];p[t]=0|p[t],i.name=i.name.replace(/^(.*)\[\]$/,"$1["+p[t]++ +"]")}/^checkbox|radio$/.test(i.type)&&!i.checked||(c[i.name]=i.value)}}),layui.event.call(this,l,"submit("+h+")",{elem:this,form:y,field:c})},f=new u,y=i(document),v=i(window);f.render(),y.on("reset",r,function(){var e=i(this).attr("lay-filter");setTimeout(function(){f.render(null,e)},50)}),y.on("submit",r,d).on("click","*[lay-submit]",d),e(l,f)});
================================================
FILE: animeMusic_server/anime_music/static/lay/modules/jquery.js
================================================
/** layui-v2.2.45 MIT License By http://www.layui.com */
;!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=pe.type(e);return"function"!==n&&!pe.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return pe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(Ce.test(t))return pe.filter(t,e,n);t=pe.filter(t,e)}return pe.grep(e,function(e){return pe.inArray(e,t)>-1!==n})}function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t={};return pe.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function a(){re.addEventListener?(re.removeEventListener("DOMContentLoaded",s),e.removeEventListener("load",s)):(re.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(re.addEventListener||"load"===e.event.type||"complete"===re.readyState)&&(a(),pe.ready())}function u(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace(_e,"-$1").toLowerCase();if(n=e.getAttribute(r),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:qe.test(n)?pe.parseJSON(n):n)}catch(i){}pe.data(e,t,n)}else n=void 0}return n}function l(e){var t;for(t in e)if(("data"!==t||!pe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,r){if(He(e)){var i,o,a=pe.expando,s=e.nodeType,u=s?pe.cache:e,l=s?e[a]:e[a]&&a;if(l&&u[l]&&(r||u[l].data)||void 0!==n||"string"!=typeof t)return l||(l=s?e[a]=ne.pop()||pe.guid++:a),u[l]||(u[l]=s?{}:{toJSON:pe.noop}),"object"!=typeof t&&"function"!=typeof t||(r?u[l]=pe.extend(u[l],t):u[l].data=pe.extend(u[l].data,t)),o=u[l],r||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[pe.camelCase(t)]=n),"string"==typeof t?(i=o[t],null==i&&(i=o[pe.camelCase(t)])):i=o,i}}function f(e,t,n){if(He(e)){var r,i,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe.expando]:pe.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){pe.isArray(t)?t=t.concat(pe.map(t,pe.camelCase)):t in r?t=[t]:(t=pe.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;for(;i--;)delete r[t[i]];if(n?!l(r):!pe.isEmptyObject(r))return}(n||(delete a[s].data,l(a[s])))&&(o?pe.cleanData([e],!0):fe.deleteExpando||a!=a.window?delete a[s]:a[s]=void 0)}}}function d(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return pe.css(e,t,"")},u=s(),l=n&&n[3]||(pe.cssNumber[t]?"":"px"),c=(pe.cssNumber[t]||"px"!==l&&+u)&&Me.exec(pe.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do o=o||".5",c/=o,pe.style(e,t,c+l);while(o!==(o=s()/u)&&1!==o&&--a)}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}function p(e){var t=ze.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function h(e,t){var n,r,i=0,o="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||pe.nodeName(r,t)?o.push(r):pe.merge(o,h(r,t));return void 0===t||t&&pe.nodeName(e,t)?pe.merge([e],o):o}function g(e,t){for(var n,r=0;null!=(n=e[r]);r++)pe._data(n,"globalEval",!t||pe._data(t[r],"globalEval"))}function m(e){Be.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t,n,r,i){for(var o,a,s,u,l,c,f,d=e.length,y=p(t),v=[],x=0;x<d;x++)if(a=e[x],a||0===a)if("object"===pe.type(a))pe.merge(v,a.nodeType?[a]:a);else if(Ue.test(a)){for(u=u||y.appendChild(t.createElement("div")),l=(We.exec(a)||["",""])[1].toLowerCase(),f=Xe[l]||Xe._default,u.innerHTML=f[1]+pe.htmlPrefilter(a)+f[2],o=f[0];o--;)u=u.lastChild;if(!fe.leadingWhitespace&&$e.test(a)&&v.push(t.createTextNode($e.exec(a)[0])),!fe.tbody)for(a="table"!==l||Ve.test(a)?"<table>"!==f[1]||Ve.test(a)?0:u:u.firstChild,o=a&&a.childNodes.length;o--;)pe.nodeName(c=a.childNodes[o],"tbody")&&!c.childNodes.length&&a.removeChild(c);for(pe.merge(v,u.childNodes),u.textContent="";u.firstChild;)u.removeChild(u.firstChild);u=y.lastChild}else v.push(t.createTextNode(a));for(u&&y.removeChild(u),fe.appendChecked||pe.grep(h(v,"input"),m),x=0;a=v[x++];)if(r&&pe.inArray(a,r)>-1)i&&i.push(a);else if(s=pe.contains(a.ownerDocument,a),u=h(y.appendChild(a),"script"),s&&g(u),n)for(o=0;a=u[o++];)Ie.test(a.type||"")&&n.push(a);return u=null,y}function v(){return!0}function x(){return!1}function b(){try{return re.activeElement}catch(e){}}function w(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)w(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=x;else if(!i)return e;return 1===o&&(a=i,i=function(e){return pe().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=pe.guid++)),e.each(function(){pe.event.add(this,t,i,r,n)})}function T(e,t){return pe.nodeName(e,"table")&&pe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function C(e){return e.type=(null!==pe.find.attr(e,"type"))+"/"+e.type,e}function E(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function N(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,r,i,o=pe._data(e),a=pe._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;r<i;r++)pe.event.add(t,n,s[n][r])}a.data&&(a.data=pe.extend({},a.data))}}function k(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!fe.noCloneEvent&&t[pe.expando]){i=pe._data(t);for(r in i.events)pe.removeEvent(t,r,i.handle);t.removeAttribute(pe.expando)}"script"===n&&t.text!==e.text?(C(t).text=e.text,E(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),fe.html5Clone&&e.innerHTML&&!pe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Be.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}}function S(e,t,n,r){t=oe.apply([],t);var i,o,a,s,u,l,c=0,f=e.length,d=f-1,p=t[0],g=pe.isFunction(p);if(g||f>1&&"string"==typeof p&&!fe.checkClone&&rt.test(p))return e.each(function(i){var o=e.eq(i);g&&(t[0]=p.call(this,i,o.html())),S(o,t,n,r)});if(f&&(l=y(t,e[0].ownerDocument,!1,e,r),i=l.firstChild,1===l.childNodes.length&&(l=i),i||r)){for(s=pe.map(h(l,"script"),C),a=s.length;c<f;c++)o=l,c!==d&&(o=pe.clone(o,!0,!0),a&&pe.merge(s,h(o,"script"))),n.call(e[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,pe.map(s,E),c=0;c<a;c++)o=s[c],Ie.test(o.type||"")&&!pe._data(o,"globalEval")&&pe.contains(u,o)&&(o.src?pe._evalUrl&&pe._evalUrl(o.src):pe.globalEval((o.text||o.textContent||o.innerHTML||"").replace(ot,"")));l=i=null}return e}function A(e,t,n){for(var r,i=t?pe.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||pe.cleanData(h(r)),r.parentNode&&(n&&pe.contains(r.ownerDocument,r)&&g(h(r,"script")),r.parentNode.removeChild(r));return e}function D(e,t){var n=pe(t.createElement(e)).appendTo(t.body),r=pe.css(n[0],"display");return n.detach(),r}function j(e){var t=re,n=lt[e];return n||(n=D(e,t),"none"!==n&&n||(ut=(ut||pe("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement),t=(ut[0].contentWindow||ut[0].contentDocument).document,t.write(),t.close(),n=D(e,t),ut.detach()),lt[e]=n),n}function L(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function H(e){if(e in Et)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=Ct.length;n--;)if(e=Ct[n]+t,e in Et)return e}function q(e,t){for(var n,r,i,o=[],a=0,s=e.length;a<s;a++)r=e[a],r.style&&(o[a]=pe._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&Re(r)&&(o[a]=pe._data(r,"olddisplay",j(r.nodeName)))):(i=Re(r),(n&&"none"!==n||!i)&&pe._data(r,"olddisplay",i?n:pe.css(r,"display"))));for(a=0;a<s;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}function _(e,t,n){var r=bt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function F(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;o<4;o+=2)"margin"===n&&(a+=pe.css(e,n+Oe[o],!0,i)),r?("content"===n&&(a-=pe.css(e,"padding"+Oe[o],!0,i)),"margin"!==n&&(a-=pe.css(e,"border"+Oe[o]+"Width",!0,i))):(a+=pe.css(e,"padding"+Oe[o],!0,i),"padding"!==n&&(a+=pe.css(e,"border"+Oe[o]+"Width",!0,i)));return a}function M(t,n,r){var i=!0,o="width"===n?t.offsetWidth:t.offsetHeight,a=ht(t),s=fe.boxSizing&&"border-box"===pe.css(t,"boxSizing",!1,a);if(re.msFullscreenElement&&e.top!==e&&t.getClientRects().length&&(o=Math.round(100*t.getBoundingClientRect()[n])),o<=0||null==o){if(o=gt(t,n,a),(o<0||null==o)&&(o=t.style[n]),ft.test(o))return o;i=s&&(fe.boxSizingReliable()||o===t.style[n]),o=parseFloat(o)||0}return o+F(t,n,r||(s?"border":"content"),i,a)+"px"}function O(e,t,n,r,i){return new O.prototype.init(e,t,n,r,i)}function R(){return e.setTimeout(function(){Nt=void 0}),Nt=pe.now()}function P(e,t){va
gitextract__ra2tpqm/ ├── .gitignore ├── LICENSE ├── README.md ├── _config.yml ├── anime-music.js ├── animeMusic_server/ │ ├── aliyun/ │ │ ├── __init__.py │ │ └── oss.py │ ├── anime_music/ │ │ ├── README.md │ │ ├── apps/ │ │ │ ├── __init__.py │ │ │ ├── app/ │ │ │ │ ├── __init__.py │ │ │ │ ├── app.py │ │ │ │ ├── appv2.py │ │ │ │ ├── base.py │ │ │ │ ├── god.py │ │ │ │ └── setting.py │ │ │ └── settings.py │ │ ├── daemon.sh │ │ ├── main.py │ │ ├── nginx/ │ │ │ └── anime-music.jijidown.com.conf │ │ ├── restart.sh │ │ ├── script/ │ │ │ ├── __init__.py │ │ │ ├── mongoIndex.py │ │ │ ├── realpath.py │ │ │ └── savetoImage.py │ │ ├── setting.py │ │ ├── static/ │ │ │ ├── css/ │ │ │ │ ├── layui.css │ │ │ │ ├── layui.mobile.css │ │ │ │ └── modules/ │ │ │ │ ├── code.css │ │ │ │ ├── laydate/ │ │ │ │ │ └── default/ │ │ │ │ │ └── laydate.css │ │ │ │ └── layer/ │ │ │ │ └── default/ │ │ │ │ └── layer.css │ │ │ ├── god/ │ │ │ │ ├── anime.html │ │ │ │ └── music.html │ │ │ ├── lay/ │ │ │ │ └── modules/ │ │ │ │ ├── carousel.js │ │ │ │ ├── code.js │ │ │ │ ├── element.js │ │ │ │ ├── flow.js │ │ │ │ ├── form.js │ │ │ │ ├── jquery.js │ │ │ │ ├── laydate.js │ │ │ │ ├── layedit.js │ │ │ │ ├── layer.js │ │ │ │ ├── laypage.js │ │ │ │ ├── laytpl.js │ │ │ │ ├── mobile.js │ │ │ │ ├── table.js │ │ │ │ ├── tree.js │ │ │ │ ├── upload.js │ │ │ │ └── util.js │ │ │ ├── layui.all.js │ │ │ └── layui.js │ │ └── templates/ │ │ └── app/ │ │ └── god/ │ │ └── index.html │ ├── db/ │ │ ├── __init__.py │ │ ├── conn.py │ │ └── setting.py │ ├── helper/ │ │ ├── __init__.py │ │ ├── app.py │ │ ├── c_python.py │ │ ├── file_server.py │ │ ├── ftp.py │ │ ├── image.py │ │ ├── realpath.py │ │ ├── scp.py │ │ └── tietuku.py │ ├── lib/ │ │ └── bangumi.py │ └── models/ │ ├── __init__.py │ ├── anime_music/ │ │ ├── __init__.py │ │ ├── base.py │ │ └── model.py │ ├── base.py │ └── settings.py ├── anime_music_icon.css ├── demo.css └── demo.html
SYMBOL INDEX (300 symbols across 25 files)
FILE: anime-music.js
function secondToDate (line 160) | function secondToDate(result) {
function GetQueryString (line 167) | function GetQueryString(name) {
FILE: animeMusic_server/aliyun/oss.py
function upload_file (line 16) | def upload_file(key, path):
function del_file (line 25) | def del_file(key):
FILE: animeMusic_server/anime_music/apps/app/app.py
class MusicHeader (line 9) | class MusicHeader(BaseHandler):
method get (line 10) | def get(self, id=None):
FILE: animeMusic_server/anime_music/apps/app/appv2.py
class MusicHeader (line 9) | class MusicHeader(BaseHandler):
method get (line 10) | def get(self, id=None):
class MusicListHeader (line 16) | class MusicListHeader(BaseHandler):
method get (line 17) | def get(self):
class MusicSearchHeader (line 24) | class MusicSearchHeader(BaseHandler):
method get (line 25) | def get(self):
class AnimeSearchHeader (line 33) | class AnimeSearchHeader(BaseHandler):
method get (line 34) | def get(self):
FILE: animeMusic_server/anime_music/apps/app/base.py
class BaseHandler (line 5) | class BaseHandler(turbo.app.BaseHandler):
method initialize (line 6) | def initialize(self):
method prepare (line 9) | def prepare(self):
FILE: animeMusic_server/anime_music/apps/app/god.py
function Sign (line 32) | def Sign(self):
function GetSignUrl (line 39) | def GetSignUrl(id):
class GodHeader (line 46) | class GodHeader(turbo.app.BaseHandler):
method get (line 47) | def get(self):
class AnimeListHeader (line 51) | class AnimeListHeader(turbo.app.BaseHandler):
method get (line 52) | def get(self):
class AnimeAddHeader (line 84) | class AnimeAddHeader(turbo.app.BaseHandler):
method post (line 85) | def post(self):
class AnimeSearchBangumiHeader (line 102) | class AnimeSearchBangumiHeader(turbo.app.BaseHandler):
method post (line 103) | def post(self):
class AnimeHeader (line 109) | class AnimeHeader(turbo.app.BaseHandler):
method post (line 110) | def post(self, type, id):
method do_save (line 116) | def do_save(self):
method do_del (line 132) | def do_del(self):
class AnimeUploadHeader (line 140) | class AnimeUploadHeader(turbo.app.BaseHandler):
method post (line 141) | def post(self, type, id):
class MusicListHeader (line 177) | class MusicListHeader(turbo.app.BaseHandler):
method get (line 178) | def get(self):
class MusicAddHeader (line 216) | class MusicAddHeader(turbo.app.BaseHandler):
method post (line 217) | def post(self, id):
class MusicHeader (line 236) | class MusicHeader(turbo.app.BaseHandler):
method post (line 238) | def post(self, type, id):
method do_save (line 244) | def do_save(self):
method do_del (line 259) | def do_del(self):
method thread_del (line 266) | def thread_del(self):
class MusicUploadHeader (line 272) | class MusicUploadHeader(turbo.app.BaseHandler):
method post (line 276) | def post(self, id):
method upload (line 284) | def upload(self, id):
FILE: animeMusic_server/anime_music/script/realpath.py
function app_path_load (line 6) | def app_path_load(dir_level_num=3):
FILE: animeMusic_server/anime_music/script/savetoImage.py
function downloadAndUpload (line 13) | def downloadAndUpload(title, url, filename):
FILE: animeMusic_server/anime_music/static/lay/modules/jquery.js
function n (line 2) | function n(e){var t=!!e&&"length"in e&&e.length,n=pe.type(e);return"func...
function r (line 2) | function r(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,r){ret...
function i (line 2) | function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}
function o (line 2) | function o(e){var t={};return pe.each(e.match(De)||[],function(e,n){t[n]...
function a (line 2) | function a(){re.addEventListener?(re.removeEventListener("DOMContentLoad...
function s (line 2) | function s(){(re.addEventListener||"load"===e.event.type||"complete"===r...
function u (line 2) | function u(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace...
function l (line 2) | function l(e){var t;for(t in e)if(("data"!==t||!pe.isEmptyObject(e[t]))&...
function c (line 2) | function c(e,t,n,r){if(He(e)){var i,o,a=pe.expando,s=e.nodeType,u=s?pe.c...
function f (line 2) | function f(e,t,n){if(He(e)){var r,i,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe...
function d (line 2) | function d(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:functi...
function p (line 2) | function p(e){var t=ze.split("|"),n=e.createDocumentFragment();if(n.crea...
function h (line 2) | function h(e,t){var n,r,i=0,o="undefined"!=typeof e.getElementsByTagName...
function g (line 2) | function g(e,t){for(var n,r=0;null!=(n=e[r]);r++)pe._data(n,"globalEval"...
function m (line 2) | function m(e){Be.test(e.type)&&(e.defaultChecked=e.checked)}
function y (line 2) | function y(e,t,n,r,i){for(var o,a,s,u,l,c,f,d=e.length,y=p(t),v=[],x=0;x...
function v (line 2) | function v(){return!0}
function x (line 2) | function x(){return!1}
function b (line 2) | function b(){try{return re.activeElement}catch(e){}}
function w (line 2) | function w(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof ...
function T (line 2) | function T(e,t){return pe.nodeName(e,"table")&&pe.nodeName(11!==t.nodeTy...
function C (line 2) | function C(e){return e.type=(null!==pe.find.attr(e,"type"))+"/"+e.type,e}
function E (line 2) | function E(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function N (line 2) | function N(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,r,i,o=pe._data(e...
function k (line 2) | function k(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase...
function S (line 2) | function S(e,t,n,r){t=oe.apply([],t);var i,o,a,s,u,l,c=0,f=e.length,d=f-...
function A (line 2) | function A(e,t,n){for(var r,i=t?pe.filter(t,e):e,o=0;null!=(r=i[o]);o++)...
function D (line 2) | function D(e,t){var n=pe(t.createElement(e)).appendTo(t.body),r=pe.css(n...
function j (line 2) | function j(e){var t=re,n=lt[e];return n||(n=D(e,t),"none"!==n&&n||(ut=(u...
function L (line 2) | function L(e,t){return{get:function(){return e()?void delete this.get:(t...
function H (line 2) | function H(e){if(e in Et)return e;for(var t=e.charAt(0).toUpperCase()+e....
function q (line 2) | function q(e,t){for(var n,r,i,o=[],a=0,s=e.length;a<s;a++)r=e[a],r.style...
function _ (line 2) | function _(e,t,n){var r=bt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2...
function F (line 2) | function F(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t...
function M (line 2) | function M(t,n,r){var i=!0,o="width"===n?t.offsetWidth:t.offsetHeight,a=...
function O (line 2) | function O(e,t,n,r,i){return new O.prototype.init(e,t,n,r,i)}
function R (line 2) | function R(){return e.setTimeout(function(){Nt=void 0}),Nt=pe.now()}
function P (line 2) | function P(e,t){var n,r={height:e},i=0;for(t=t?1:0;i<4;i+=2-t)n=Oe[i],r[...
function B (line 2) | function B(e,t,n){for(var r,i=($.tweeners[t]||[]).concat($.tweeners["*"]...
function W (line 2) | function W(e,t,n){var r,i,o,a,s,u,l,c,f=this,d={},p=e.style,h=e.nodeType...
function I (line 2) | function I(e,t){var n,r,i,o,a;for(n in e)if(r=pe.camelCase(n),i=t[r],o=e...
function $ (line 2) | function $(e,t,n){var r,i,o=0,a=$.prefilters.length,s=pe.Deferred().alwa...
function z (line 2) | function z(e){return pe.attr(e,"class")||""}
function X (line 2) | function X(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function U (line 2) | function U(e,t,n,r){function i(s){var u;return o[s]=!0,pe.each(e[s]||[],...
function V (line 2) | function V(e,t){var n,r,i=pe.ajaxSettings.flatOptions||{};for(r in t)voi...
function Y (line 2) | function Y(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;"*"===u[0];...
function J (line 2) | function J(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for...
function G (line 2) | function G(e){return e.style&&e.style.display||pe.css(e,"display")}
function K (line 2) | function K(e){for(;e&&1===e.nodeType;){if("none"===G(e)||"hidden"===e.ty...
function Q (line 2) | function Q(e,t,n,r){var i;if(pe.isArray(t))pe.each(t,function(t,i){n||rn...
function Z (line 2) | function Z(){try{return new e.XMLHttpRequest}catch(t){}}
function ee (line 2) | function ee(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(...
function te (line 2) | function te(e){return pe.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e...
function t (line 2) | function t(e,t,n,r){var i,o,a,s,u,l,f,p,h=t&&t.ownerDocument,g=t?t.nodeT...
function n (line 2) | function n(){function e(n,r){return t.push(n+" ")>T.cacheLength&&delete ...
function r (line 2) | function r(e){return e[P]=!0,e}
function i (line 2) | function i(e){var t=H.createElement("div");try{return!!e(t)}catch(n){ret...
function o (line 2) | function o(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]...
function a (line 2) | function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sour...
function s (line 2) | function s(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 2) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function l (line 2) | function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i...
function c (line 2) | function c(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function f (line 2) | function f(){}
function d (line 2) | function d(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function p (line 2) | function p(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=I++;return t.first...
function h (line 2) | function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)...
function g (line 2) | function g(e,n,r){for(var i=0,o=n.length;i<o;i++)t(e,n[i],r);return r}
function m (line 2) | function m(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o...
function y (line 2) | function y(e,t,n,i,o,a){return i&&!i[P]&&(i=y(i)),o&&!o[P]&&(o=y(o,a)),r...
function v (line 2) | function v(e){for(var t,n,r,i=e.length,o=T.relative[e[0].type],a=o||T.re...
function x (line 2) | function x(e,n){var i=n.length>0,o=e.length>0,a=function(r,a,s,u,l){var ...
function t (line 4) | function t(){var t,c,f=re.documentElement;f.appendChild(u),l.style.cssTe...
function r (line 4) | function r(t,n,r,i){var o,f,v,x,w,C=n;2!==b&&(b=2,u&&e.clearTimeout(u),c...
FILE: animeMusic_server/anime_music/static/lay/modules/layer.js
function e (line 2) | function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}
function o (line 2) | function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onlo...
FILE: animeMusic_server/anime_music/static/lay/modules/mobile.js
function t (line 2) | function t(t){return null==t?String(t):J[W.call(t)]||"object"}
function e (line 2) | function e(e){return"function"==t(e)}
function n (line 2) | function n(t){return null!=t&&t==t.window}
function r (line 2) | function r(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}
function i (line 2) | function i(e){return"object"==t(e)}
function o (line 2) | function o(t){return i(t)&&!n(t)&&Object.getPrototypeOf(t)==Object.proto...
function a (line 2) | function a(t){var e=!!t&&"length"in t&&t.length,r=T.type(t);return"funct...
function s (line 2) | function s(t){return A.call(t,function(t){return null!=t})}
function u (line 2) | function u(t){return t.length>0?T.fn.concat.apply([],t):t}
function c (line 2) | function c(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/...
function l (line 2) | function l(t){return t in F?F[t]:F[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}
function f (line 2) | function f(t,e){return"number"!=typeof e||k[c(t)]?e:e+"px"}
function h (line 2) | function h(t){var e,n;return $[t]||(e=L.createElement(t),L.body.appendCh...
function p (line 2) | function p(t){return"children"in t?D.call(t.children):T.map(t.childNodes...
function d (line 2) | function d(t,e){var n,r=t?t.length:0;for(n=0;n<r;n++)this[n]=t[n];this.l...
function m (line 2) | function m(t,e,n){for(j in e)n&&(o(e[j])||Q(e[j]))?(o(e[j])&&!o(t[j])&&(...
function v (line 2) | function v(t,e){return null==e?T(t):T(t).filter(e)}
function g (line 2) | function g(t,n,r,i){return e(n)?n.call(t,r,i):n}
function y (line 2) | function y(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}
function x (line 2) | function x(t,e){var n=t.className||"",r=n&&n.baseVal!==E;return e===E?r?...
function b (line 2) | function b(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""=...
function w (line 2) | function w(t,e){e(t);for(var n=0,r=t.childNodes.length;n<r;n++)w(t.child...
function e (line 2) | function e(t){return t._zid||(t._zid=h++)}
function n (line 2) | function n(t,n,o,a){if(n=r(n),n.ns)var s=i(n.ns);return(v[e(t)]||[]).fil...
function r (line 2) | function r(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort()...
function i (line 2) | function i(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$...
function o (line 2) | function o(t,e){return t.del&&!y&&t.e in x||!!e}
function a (line 2) | function a(t){return b[t]||y&&x[t]||t}
function s (line 2) | function s(n,i,s,u,l,h,p){var d=e(n),m=v[d]||(v[d]=[]);i.split(/\s/).for...
function u (line 2) | function u(t,r,i,s,u){var c=e(t);(r||"").split(/\s/).forEach(function(e)...
function c (line 2) | function c(e,n){return!n&&e.isDefaultPrevented||(n||(n=e),t.each(T,funct...
function l (line 2) | function l(t){var e,n={originalEvent:t};for(e in t)j.test(e)||t[e]===f||...
function e (line 2) | function e(e,n,r){var i=t.Event(n);return t(e).trigger(i,r),!i.isDefault...
function n (line 2) | function n(t,n,r,i){if(t.global)return e(n||x,r,i)}
function r (line 2) | function r(e){e.global&&0===t.active++&&n(e,null,"ajaxStart")}
function i (line 2) | function i(e){e.global&&!--t.active&&n(e,null,"ajaxStop")}
function o (line 2) | function o(t,e){var r=e.context;return e.beforeSend.call(r,t,e)!==!1&&n(...
function a (line 2) | function a(t,e,r,i){var o=r.context,a="success";r.success.call(o,t,a,e),...
function s (line 2) | function s(t,e,r,i,o){var a=i.context;i.error.call(a,r,e,t),o&&o.rejectW...
function u (line 2) | function u(t,e,r){var o=r.context;r.complete.call(o,e,t),n(r,o,"ajaxComp...
function c (line 2) | function c(t,e,n){if(n.dataFilter==l)return t;var r=n.context;return n.d...
function l (line 2) | function l(){}
function f (line 2) | function f(t){return t&&(t=t.split(";",2)[0]),t&&(t==T?"html":t==j?"json...
function h (line 2) | function h(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}
function p (line 2) | function p(e){e.processData&&e.data&&"string"!=t.type(e.data)&&(e.data=t...
function d (line 2) | function d(e,n,r,i){return t.isFunction(n)&&(i=r,r=n,n=void 0),t.isFunct...
function m (line 2) | function m(e,n,r,i){var o,a=t.isArray(n),s=t.isPlainObject(n);t.each(n,f...
FILE: animeMusic_server/anime_music/static/layui.all.js
function s (line 2) | function s(e,t){var n="PLaySTATION 3"===navigator.platform?/^complete$/:...
function c (line 2) | function c(){l.push(layui[f]),e.length>1?y.use(e.slice(1),n,l):"function...
function n (line 2) | function n(e){var t=!!e&&"length"in e&&e.length,n=pe.type(e);return"func...
function r (line 2) | function r(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,r){ret...
function i (line 2) | function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}
function o (line 2) | function o(e){var t={};return pe.each(e.match(De)||[],function(e,n){t[n]...
function a (line 2) | function a(){re.addEventListener?(re.removeEventListener("DOMContentLoad...
function s (line 2) | function s(){(re.addEventListener||"load"===e.event.type||"complete"===r...
function u (line 2) | function u(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace...
function l (line 2) | function l(e){var t;for(t in e)if(("data"!==t||!pe.isEmptyObject(e[t]))&...
function c (line 2) | function c(e,t,n,r){if(He(e)){var i,o,a=pe.expando,s=e.nodeType,u=s?pe.c...
function f (line 2) | function f(e,t,n){if(He(e)){var r,i,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe...
function d (line 2) | function d(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:functi...
function p (line 2) | function p(e){var t=ze.split("|"),n=e.createDocumentFragment();if(n.crea...
function h (line 2) | function h(e,t){var n,r,i=0,o="undefined"!=typeof e.getElementsByTagName...
function g (line 2) | function g(e,t){for(var n,r=0;null!=(n=e[r]);r++)pe._data(n,"globalEval"...
function m (line 2) | function m(e){Be.test(e.type)&&(e.defaultChecked=e.checked)}
function y (line 2) | function y(e,t,n,r,i){for(var o,a,s,u,l,c,f,d=e.length,y=p(t),v=[],x=0;x...
function v (line 2) | function v(){return!0}
function x (line 2) | function x(){return!1}
function b (line 2) | function b(){try{return re.activeElement}catch(e){}}
function w (line 2) | function w(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof ...
function T (line 2) | function T(e,t){return pe.nodeName(e,"table")&&pe.nodeName(11!==t.nodeTy...
function C (line 2) | function C(e){return e.type=(null!==pe.find.attr(e,"type"))+"/"+e.type,e}
function E (line 2) | function E(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribu...
function N (line 2) | function N(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,r,i,o=pe._data(e...
function k (line 2) | function k(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase...
function S (line 2) | function S(e,t,n,r){t=oe.apply([],t);var i,o,a,s,u,l,c=0,f=e.length,d=f-...
function A (line 2) | function A(e,t,n){for(var r,i=t?pe.filter(t,e):e,o=0;null!=(r=i[o]);o++)...
function D (line 2) | function D(e,t){var n=pe(t.createElement(e)).appendTo(t.body),r=pe.css(n...
function j (line 2) | function j(e){var t=re,n=lt[e];return n||(n=D(e,t),"none"!==n&&n||(ut=(u...
function L (line 2) | function L(e,t){return{get:function(){return e()?void delete this.get:(t...
function H (line 2) | function H(e){if(e in Et)return e;for(var t=e.charAt(0).toUpperCase()+e....
function q (line 2) | function q(e,t){for(var n,r,i,o=[],a=0,s=e.length;a<s;a++)r=e[a],r.style...
function _ (line 2) | function _(e,t,n){var r=bt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2...
function F (line 2) | function F(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t...
function M (line 2) | function M(t,n,r){var i=!0,o="width"===n?t.offsetWidth:t.offsetHeight,a=...
function O (line 2) | function O(e,t,n,r,i){return new O.prototype.init(e,t,n,r,i)}
function R (line 2) | function R(){return e.setTimeout(function(){Nt=void 0}),Nt=pe.now()}
function P (line 2) | function P(e,t){var n,r={height:e},i=0;for(t=t?1:0;i<4;i+=2-t)n=Oe[i],r[...
function B (line 2) | function B(e,t,n){for(var r,i=($.tweeners[t]||[]).concat($.tweeners["*"]...
function W (line 2) | function W(e,t,n){var r,i,o,a,s,u,l,c,f=this,d={},p=e.style,h=e.nodeType...
function I (line 2) | function I(e,t){var n,r,i,o,a;for(n in e)if(r=pe.camelCase(n),i=t[r],o=e...
function $ (line 2) | function $(e,t,n){var r,i,o=0,a=$.prefilters.length,s=pe.Deferred().alwa...
function z (line 2) | function z(e){return pe.attr(e,"class")||""}
function X (line 2) | function X(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r...
function U (line 2) | function U(e,t,n,r){function i(s){var u;return o[s]=!0,pe.each(e[s]||[],...
function V (line 2) | function V(e,t){var n,r,i=pe.ajaxSettings.flatOptions||{};for(r in t)voi...
function Y (line 2) | function Y(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;"*"===u[0];...
function J (line 2) | function J(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for...
function G (line 2) | function G(e){return e.style&&e.style.display||pe.css(e,"display")}
function K (line 2) | function K(e){for(;e&&1===e.nodeType;){if("none"===G(e)||"hidden"===e.ty...
function Q (line 2) | function Q(e,t,n,r){var i;if(pe.isArray(t))pe.each(t,function(t,i){n||rn...
function Z (line 2) | function Z(){try{return new e.XMLHttpRequest}catch(t){}}
function ee (line 2) | function ee(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(...
function te (line 2) | function te(e){return pe.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e...
function t (line 2) | function t(e,t,n,r){var i,o,a,s,u,l,f,p,h=t&&t.ownerDocument,g=t?t.nodeT...
function n (line 2) | function n(){function e(n,r){return t.push(n+" ")>T.cacheLength&&delete ...
function r (line 2) | function r(e){return e[P]=!0,e}
function i (line 2) | function i(e){var t=H.createElement("div");try{return!!e(t)}catch(n){ret...
function o (line 2) | function o(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]...
function a (line 2) | function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sour...
function s (line 2) | function s(e){return function(t){var n=t.nodeName.toLowerCase();return"i...
function u (line 2) | function u(e){return function(t){var n=t.nodeName.toLowerCase();return("...
function l (line 2) | function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i...
function c (line 2) | function c(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}
function f (line 2) | function f(){}
function d (line 2) | function d(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}
function p (line 2) | function p(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=I++;return t.first...
function h (line 2) | function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)...
function g (line 2) | function g(e,n,r){for(var i=0,o=n.length;i<o;i++)t(e,n[i],r);return r}
function m (line 2) | function m(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o...
function y (line 2) | function y(e,t,n,i,o,a){return i&&!i[P]&&(i=y(i)),o&&!o[P]&&(o=y(o,a)),r...
function v (line 2) | function v(e){for(var t,n,r,i=e.length,o=T.relative[e[0].type],a=o||T.re...
function x (line 2) | function x(e,n){var i=n.length>0,o=e.length>0,a=function(r,a,s,u,l){var ...
function t (line 4) | function t(){var t,c,f=re.documentElement;f.appendChild(u),l.style.cssTe...
function r (line 4) | function r(t,n,r,i){var o,f,v,x,w,C=n;2!==b&&(b=2,u&&e.clearTimeout(u),c...
function e (line 5) | function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}
function o (line 5) | function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onlo...
function a (line 5) | function a(){n=e[l](function(){r.each(function(){var e=t(this),i=e.width...
function a (line 5) | function a(e,a,r){var o=t(this),l=t.data(this,g)||{};l.w=a!==i?a:o.width...
FILE: animeMusic_server/anime_music/static/layui.js
function s (line 2) | function s(e,t){var n="PLaySTATION 3"===navigator.platform?/^complete$/:...
function c (line 2) | function c(){l.push(layui[f]),e.length>1?y.use(e.slice(1),n,l):"function...
FILE: animeMusic_server/helper/app.py
function GetSignUrl (line 19) | def GetSignUrl(id):
function get_music_info (line 26) | def get_music_info(id, recommend):
function format_music_info (line 35) | def format_music_info(info):
function get_anime_info (line 47) | def get_anime_info(animeid):
function get_random_id (line 56) | def get_random_id(recommend):
function get_music_list (line 75) | def get_music_list(limit, page):
function search_music (line 85) | def search_music(key, limit, page):
function search_anime (line 96) | def search_anime(key, limit, page):
FILE: animeMusic_server/helper/c_python.py
class c_python (line 14) | class c_python:
method getString (line 17) | def getString(data, startStr, endStr, contain=False):
method removeDicKey (line 32) | def removeDicKey(dic, keyList=[]):
method strToTime (line 44) | def strToTime(str, format='auto'):
method getStrTime (line 84) | def getStrTime(time=datetime.datetime.now(), format='%Y-%m-%d'):
method unixtimeToDatetime (line 92) | def unixtimeToDatetime(timestamp):
method datetimeToUnixtime (line 98) | def datetimeToUnixtime(_datetime):
method formatWriteJson (line 103) | def formatWriteJson(data):
class c_spider (line 111) | class c_spider:
method getHtml (line 120) | def getHtml(url, headers=None, encode=None, maxError=3, timeout=10):
method getHtmlForRequests (line 143) | def getHtmlForRequests(url, maxError=5, timeout=10, headers=None, enco...
method postForRequest (line 162) | def postForRequest(url='', params='', _data='', headers=None, encode=N...
method postForRequestReturnHtmlAndCookie (line 175) | def postForRequestReturnHtmlAndCookie(url='', params='', _data='', hea...
method post (line 188) | def post(url, _data, headers=None, ):
method clearA (line 200) | def clearA(data):
method clearLabel (line 209) | def clearLabel(data, name):
method clearAllHtmlLabel (line 222) | def clearAllHtmlLabel(data):
method clearLabelForContains (line 227) | def clearLabelForContains(data, label, str):
method removeAttr (line 237) | def removeAttr(data, selectStr, attrList=[]):
method completionSrc (line 247) | def completionSrc(data, selectStr, host, attr='src'):
FILE: animeMusic_server/helper/file_server.py
function upload_file_to_oss_and_ftp (line 14) | def upload_file_to_oss_and_ftp(file_path, name):
function upload_file_to_oss_and_scp (line 41) | def upload_file_to_oss_and_scp(file_path, name):
function get_mp3file (line 68) | def get_mp3file(out_file_path, out_file_path_mp3):
FILE: animeMusic_server/helper/ftp.py
function upload_file (line 11) | def upload_file(file_path, name, to_dir=setting.FTPDIR):
function del_file (line 21) | def del_file(name, dir=setting.FTPDIR):
FILE: animeMusic_server/helper/image.py
function resizeImg (line 7) | def resizeImg(**args):
function clipResizeImg (line 46) | def clipResizeImg(**args):
FILE: animeMusic_server/helper/realpath.py
function app_path_load (line 6) | def app_path_load(dir_level_num=3):
FILE: animeMusic_server/helper/scp.py
function ssh_scp_put (line 8) | def ssh_scp_put(local_file, name):
FILE: animeMusic_server/helper/tietuku.py
function uploadImgToTieTuKu (line 11) | def uploadImgToTieTuKu(file_path):
FILE: animeMusic_server/lib/bangumi.py
function search (line 11) | def search(keywords: str):
FILE: animeMusic_server/models/anime_music/base.py
class Model (line 6) | class Model(BaseModel):
method __init__ (line 7) | def __init__(self):
FILE: animeMusic_server/models/anime_music/model.py
class AnimeList (line 7) | class AnimeList(Model):
class MusicList (line 35) | class MusicList(Model):
FILE: animeMusic_server/models/base.py
class MixinModel (line 15) | class MixinModel(turbo.model.MixinModel):
class BaseModel (line 20) | class BaseModel(turbo.model.BaseModel, MixinModel):
method __init__ (line 22) | def __init__(self, db_name='test'):
Condensed preview — 73 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (757K chars).
[
{
"path": ".gitignore",
"chars": 84,
"preview": "*.idea\n*.pyc\ntemp\n__test__\ncertificate\n*/aliyun/setting.py\n*/helper/setting.py\n*.txt"
},
{
"path": "LICENSE",
"chars": 1062,
"preview": "MIT License\n\nCopyright (c) 2020 xiaoC\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof t"
},
{
"path": "README.md",
"chars": 5671,
"preview": "### 所有音乐对应的动漫LOGO和BG图片已经补全完毕, 背景图都已补充2K画质图片 2023-3-28 19:09:29\n ### 已经开始着手修复图片不显示的问题(丢了...重新慢慢找) 2023-3-22 10:48:07\n \n "
},
{
"path": "_config.yml",
"chars": 27,
"preview": "theme: jekyll-theme-tactile"
},
{
"path": "anime-music.js",
"chars": 6019,
"preview": "var animeMusic = {\n 'recommend': false,\n 'max_load_time': 10, // 最大加载时间, 一首歌的加载时间超过此数值, 将会直接跳到下一曲\n '_anime_musi"
},
{
"path": "animeMusic_server/aliyun/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "animeMusic_server/aliyun/oss.py",
"chars": 869,
"preview": "import oss2\nfrom .import setting\n\n# setting参数说明\n# OSSKEY 阿里云AccessKey ID\n# OSSVALUE 阿里云Access Key Secret\n# 详见https://use"
},
{
"path": "animeMusic_server/anime_music/README.md",
"chars": 87,
"preview": "> sudo apt-get install ffmpeg\n\n> pip3 install ffmpy\n\n> 其他需要的运行库在运行时会直接通过报错的方式进行提示(没有就装)"
},
{
"path": "animeMusic_server/anime_music/apps/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "animeMusic_server/anime_music/apps/app/__init__.py",
"chars": 1088,
"preview": "\nfrom turbo import register\n\nfrom .import app\nfrom .import appv2\nfrom .import god\n\nregister.register_group_urls('/api/v1"
},
{
"path": "animeMusic_server/anime_music/apps/app/app.py",
"chars": 324,
"preview": "# -*- coding:utf-8 -*-\n\nimport turbo.log\nfrom .base import BaseHandler\nfrom helper import app\nlogger = turbo.log.getLogg"
},
{
"path": "animeMusic_server/anime_music/apps/app/appv2.py",
"chars": 1241,
"preview": "# -*- coding:utf-8 -*-\n\nimport turbo.log\nfrom .base import BaseHandler\nfrom helper import app\nlogger = turbo.log.getLogg"
},
{
"path": "animeMusic_server/anime_music/apps/app/base.py",
"chars": 389,
"preview": "# -*- coding:utf-8 -*-\n\nimport turbo\n\nclass BaseHandler(turbo.app.BaseHandler):\n def initialize(self):\n super("
},
{
"path": "animeMusic_server/anime_music/apps/app/god.py",
"chars": 9102,
"preview": "# -*- coding:utf-8 -*-\n\nimport turbo.log\nfrom bson import ObjectId\n\nimport tornado\nimport redis\nimport time\nimport threa"
},
{
"path": "animeMusic_server/anime_music/apps/app/setting.py",
"chars": 246,
"preview": "#-*- coding:utf-8 -*-\n\n# sub app setting\n# try not to include function or class \n\nimport os\nSERVER_DIR = os.path.dirname"
},
{
"path": "animeMusic_server/anime_music/apps/settings.py",
"chars": 78,
"preview": "# -*- coding:utf-8 -*-\n\n# installed app list \nINSTALLED_APPS = (\n 'app', \n)"
},
{
"path": "animeMusic_server/anime_music/daemon.sh",
"chars": 1427,
"preview": "#!/bin/bash\n\nusage=\"Usage: $0 [start | stop]\"\n\nPORT_RANGE=\"12040 12043\"\nservice=\"anime-music-server\"\nLOG_DIR=\"/tmp/jijid"
},
{
"path": "animeMusic_server/anime_music/main.py",
"chars": 418,
"preview": "#-*- coding:utf-8 -*-\n\nfrom tornado.options import define, options\nimport tornado.options\n\nimport setting\nimport turbo.r"
},
{
"path": "animeMusic_server/anime_music/nginx/anime-music.jijidown.com.conf",
"chars": 1563,
"preview": "upstream anime_music_jijidown_com_server {\n server localhost:12040;\n server localhost:12041;\n server localhost:"
},
{
"path": "animeMusic_server/anime_music/restart.sh",
"chars": 114,
"preview": "#!/usr/bin/env bash\n\nROOTDIR=$(pwd)/$(dirname $0)\n\n$ROOTDIR/daemon.sh stop && sleep 1 && $ROOTDIR/daemon.sh start\n"
},
{
"path": "animeMusic_server/anime_music/script/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "animeMusic_server/anime_music/script/mongoIndex.py",
"chars": 571,
"preview": "# coding=utf-8\nfrom __future__ import absolute_import\nimport realpath\n\nfrom models.anime_music import model\n\ntb_anime_li"
},
{
"path": "animeMusic_server/anime_music/script/realpath.py",
"chars": 303,
"preview": "#-*- coding:utf-8 -*-\nimport os\nimport sys\n\n# load app path into sys.path\ndef app_path_load(dir_level_num=3):\n app_ro"
},
{
"path": "animeMusic_server/anime_music/script/savetoImage.py",
"chars": 1846,
"preview": "# coding=utf-8\nfrom __future__ import absolute_import\nimport realpath\nimport requests\nimport os\n\nfrom models.anime_music"
},
{
"path": "animeMusic_server/anime_music/setting.py",
"chars": 1088,
"preview": "import os\nimport sys\nfrom tornado.util import ObjectDict\n\n# server name\nSERVER_NAME = 'anime_music-server'\n\n# server dir"
},
{
"path": "animeMusic_server/anime_music/static/css/layui.css",
"chars": 69450,
"preview": "/** layui-v2.4.2 MIT License By https://www.layui.com */\n .layui-inline,img{display:inline-block;vertical-align:middle}h"
},
{
"path": "animeMusic_server/anime_music/static/css/layui.mobile.css",
"chars": 9885,
"preview": "/** layui-v2.4.2 MIT License By https://www.layui.com */\n blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,inp"
},
{
"path": "animeMusic_server/anime_music/static/css/modules/code.css",
"chars": 1063,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n html #layuicss-skincodecss{display:none;position:absolute;widt"
},
{
"path": "animeMusic_server/anime_music/static/css/modules/laydate/default/laydate.css",
"chars": 7537,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate"
},
{
"path": "animeMusic_server/anime_music/static/css/modules/layer/default/layer.css",
"chars": 14425,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n .layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .la"
},
{
"path": "animeMusic_server/anime_music/static/god/anime.html",
"chars": 15467,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <title>Anime</title>\n <meta name=\"renderer\" content=\"web"
},
{
"path": "animeMusic_server/anime_music/static/god/music.html",
"chars": 11354,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <title>Music</title>\n <meta name=\"renderer\" content=\"web"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/carousel.js",
"chars": 3839,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var i=layui.$,"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/code.js",
"chars": 1177,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var a=layui.$,"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/element.js",
"chars": 7457,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define(\"jquery\",function(i){\"use strict\";var t=layui.$,"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/flow.js",
"chars": 1996,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var l=layui.$,"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/form.js",
"chars": 7673,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define(\"layer\",function(e){\"use strict\";var i=layui.$,t"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/jquery.js",
"chars": 97648,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;!function(e,t){\"object\"==typeof module&&\"object\"==typeof modu"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/laydate.js",
"chars": 27013,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;!function(){\"use strict\";var e=window.layui&&layui.define,t={"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/layedit.js",
"chars": 12200,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define([\"layer\",\"form\"],function(t){\"use strict\";var e="
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/layer.js",
"chars": 22089,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;!function(e,t){\"use strict\";var i,n,a=e.layui&&layui.define,o"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/laypage.js",
"chars": 4311,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define(function(e){\"use strict\";var a=document,t=\"getEl"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/laytpl.js",
"chars": 1834,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define(function(e){\"use strict\";var r={open:\"{{\",close:"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/mobile.js",
"chars": 33700,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define(function(i){i(\"layui.mobile\",layui.v)});layui.de"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/table.js",
"chars": 20502,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define([\"laytpl\",\"laypage\",\"layer\",\"form\"],function(e){"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/tree.js",
"chars": 3042,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var o=layui.$,"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/upload.js",
"chars": 6566,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define(\"layer\",function(e){\"use strict\";var i=layui.$,t"
},
{
"path": "animeMusic_server/anime_music/static/lay/modules/util.js",
"chars": 2429,
"preview": "/** layui-v2.2.45 MIT License By http://www.layui.com */\n ;layui.define(\"jquery\",function(e){\"use strict\";var t=layui.$,"
},
{
"path": "animeMusic_server/anime_music/static/layui.all.js",
"chars": 259020,
"preview": "/** layui-v2.4.2 MIT License By https://www.layui.com */\n ;!function(e){\"use strict\";var t=document,o={modules:{},status"
},
{
"path": "animeMusic_server/anime_music/static/layui.js",
"chars": 6650,
"preview": "/** layui-v2.4.2 MIT License By https://www.layui.com */\n ;!function(e){\"use strict\";var t=document,o={modules:{},status"
},
{
"path": "animeMusic_server/anime_music/templates/app/god/index.html",
"chars": 4454,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-"
},
{
"path": "animeMusic_server/db/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "animeMusic_server/db/conn.py",
"chars": 205,
"preview": "# -*- coding:utf-8 -*-\n\nimport os\n\nfrom pymongo import (\n MongoReplicaSetClient,\n MongoClient,\n read_preference"
},
{
"path": "animeMusic_server/db/setting.py",
"chars": 23,
"preview": "# -*- coding:utf-8 -*-\n"
},
{
"path": "animeMusic_server/helper/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "animeMusic_server/helper/app.py",
"chars": 3062,
"preview": "# -*- coding:utf-8 -*-\nfrom .import realpath\nfrom .import setting\nimport random\nfrom bson import ObjectId\nimport redis\ni"
},
{
"path": "animeMusic_server/helper/c_python.py",
"chars": 8740,
"preview": "# -*- coding:utf-8 -*-\nimport sys\nimport urllib.request\n\nimport datetime\nimport requests\nimport re\nimport time\nimport ty"
},
{
"path": "animeMusic_server/helper/file_server.py",
"chars": 2111,
"preview": "# -*- coding:utf-8 -*-\nimport os\nimport urllib\nimport time\nimport traceback\nfrom .import realpath\nfrom .import setting\nf"
},
{
"path": "animeMusic_server/helper/ftp.py",
"chars": 1078,
"preview": "# -*- coding:utf-8 -*-\nimport ftplib\nimport traceback\nfrom .import setting\n\n# setting参数说明\n# FTPDIR: FTP上传文件目录, 使用/开头\n# F"
},
{
"path": "animeMusic_server/helper/image.py",
"chars": 2403,
"preview": "# -*- coding:utf-8 -*-\n# 图片处理代码基于http://fc-lamp.blog.163.com/blog/static/174566687201282424018946/小幅度修改\n\nfrom PIL import"
},
{
"path": "animeMusic_server/helper/realpath.py",
"chars": 303,
"preview": "#-*- coding:utf-8 -*-\nimport os\nimport sys\n\n# load app path into sys.path\ndef app_path_load(dir_level_num=3):\n app_ro"
},
{
"path": "animeMusic_server/helper/scp.py",
"chars": 596,
"preview": "# -*- coding:utf-8 -*-\n\nimport paramiko, datetime\nfrom .import realpath\nfrom .import setting\n\n\ndef ssh_scp_put(local_fil"
},
{
"path": "animeMusic_server/helper/tietuku.py",
"chars": 1178,
"preview": "# -*- coding:utf-8 -*-\nfrom .import setting\nimport time\nimport json\nimport os\nimport requests\nfrom turbo.core.exceptions"
},
{
"path": "animeMusic_server/lib/bangumi.py",
"chars": 1123,
"preview": "# bangumi API\nimport datetime\nimport json\nfrom urllib.parse import quote\nfrom cPython import cPython as cp\n\ndefault_ua ="
},
{
"path": "animeMusic_server/models/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "animeMusic_server/models/anime_music/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "animeMusic_server/models/anime_music/base.py",
"chars": 162,
"preview": "#-*- coding:utf-8 -*-\n\nfrom models.base import *\n\n\nclass Model(BaseModel):\n def __init__(self):\n super(Model, "
},
{
"path": "animeMusic_server/models/anime_music/model.py",
"chars": 1413,
"preview": "#-*- coding:utf-8 -*-\n\nfrom .base import *\nfrom bson import ObjectId\n\n\nclass AnimeList(Model):\n name = 'anime_list'\n\n"
},
{
"path": "animeMusic_server/models/base.py",
"chars": 494,
"preview": "# -*- coding:utf-8 -*-\n\nfrom datetime import datetime\nimport time\n\nfrom bson.objectid import ObjectId\nfrom pymongo impor"
},
{
"path": "animeMusic_server/models/settings.py",
"chars": 184,
"preview": "# -*- coding:utf-8 -*-\n\nfrom db.conn import (\n anime_music as _anime_music,\n)\n\nMONGO_DB_MAPPING = {\n 'db': {\n "
},
{
"path": "anime_music_icon.css",
"chars": 2936,
"preview": "\n@font-face {font-family: \"iconfont\";\n src: url('anime_music_icon.eot?t=1535597309299'); /* IE9*/\n src: url('anime_mus"
},
{
"path": "demo.css",
"chars": 2638,
"preview": "\nbody {\n margin: 0;\n}\n\n.bg {\n position: fixed;\n height: 100%;\n width: 100%;\n background-position: center "
},
{
"path": "demo.html",
"chars": 4125,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <title>demo</title>\n <link rel=\"stylesheet\" href=\"anime_music_icon.css\"/>\n <lin"
}
]
About this extraction
This page contains the full source code of the JxiaoC/animeMusic GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 73 files (702.3 KB), approximately 236.3k tokens, and a symbol index with 300 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.