├── app
└── index
│ ├── controller
│ ├── BaseController.php
│ └── IndexController.php
│ ├── model
│ └── Blog.php
│ └── view
│ ├── index
│ └── index.html
│ └── user
│ └── login.html
├── boot
├── Psr4Autoloader.php
└── Router.php
├── cache
├── index
│ ├── .php
│ └── index
│ │ └── index_html.php
├── php_blog.php
└── php_user.php
├── config
├── database.php
└── namespace.php
├── index.php
├── public
└── index
│ ├── css
│ ├── .DS_Store
│ ├── boxed-group.css
│ ├── collection.css
│ ├── common.css
│ ├── iconfont.css
│ ├── iconfont.ttf
│ ├── iconfont.woff
│ ├── index.css
│ ├── mini-repo-list.css
│ ├── octicons.css
│ ├── octicons.ttf
│ ├── octicons.woff
│ ├── primer.css
│ ├── prism.css
│ ├── repo-card.css
│ ├── repo-list.css
│ ├── responsive.css
│ ├── share.min.css
│ └── user-content.min.css
│ ├── fonts
│ ├── .DS_Store
│ ├── iconfont.ttf
│ └── iconfont.woff
│ ├── images
│ ├── .DS_Store
│ ├── 1f604.png
│ └── 21.gif
│ └── js
│ ├── .DS_Store
│ └── jquery.min.js
└── vendor
└── csl
└── framework
└── src
├── Image.php
├── Model.php
├── Page.php
├── Template.php
├── Upload.php
└── VerifyCode.php
/app/index/controller/BaseController.php:
--------------------------------------------------------------------------------
1 | tplDir = $this->checkDir('app/index/view');
11 | $this->cacheDir = $this->checkDir('cache/index');
12 | // parent::__construct('cache/index','app/index/view');
13 | $this->_init();
14 | }
15 |
16 | //子类的初始化方法
17 | public function _init()
18 | {
19 |
20 | }
21 |
22 | public function display($viewFile=null,$isExtract=true)
23 | {
24 | if (empty($viewFile)) {
25 | $viewFile = $_GET['c'].'/'.$_GET['a'].'.html';
26 | }
27 | parent::display($viewFile,$isExtract);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/index/controller/IndexController.php:
--------------------------------------------------------------------------------
1 | blog = new Blog();
12 | }
13 | public function index()
14 | {
15 | echo'这是首页';
16 | }
17 |
18 | }
--------------------------------------------------------------------------------
/app/index/model/Blog.php:
--------------------------------------------------------------------------------
1 | field('bid,title,create_time')->select();
9 | }
10 | }
--------------------------------------------------------------------------------
/app/index/view/index/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 博客-首页
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | China Beijing
50 |
51 |
52 |
53 | Web development
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 | {foreach $data as $blog}
74 | -
75 |
76 |
77 |
78 |
79 | {$blog['title']}
80 |
81 |
82 | {$blog['create_time']}
83 |
84 |
85 | {/foreach}
86 |
87 |
88 |
89 |
90 |
Popular Repositories
91 |
92 |
Repositories contribute to
93 |
132 |
133 |
134 |
135 |
136 |
158 |
159 |
160 |
161 |
207 |
208 |
209 |
210 |
211 |
212 |
--------------------------------------------------------------------------------
/app/index/view/user/login.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 登录
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/boot/Psr4Autoloader.php:
--------------------------------------------------------------------------------
1 | maps = $config;
11 | }
12 | //向系统注册自己自动加载方法
13 | spl_autoload_register([$this,'loadClass']);
14 | }
15 |
16 | /**
17 | * 自动加载方法
18 | * @param [type] $className [类名(带命名空间)]
19 | * @return [type] [无]
20 | */
21 | protected function loadClass($className)
22 | {
23 | //取出类名
24 | $arr = explode('\\',$className);
25 | $realClass = array_pop($arr);
26 | //取得命名空间
27 | $namespace = join('\\',$arr);
28 | //加载映射关系
29 | $this->loadMap($namespace,$realClass);
30 | }
31 |
32 | /**
33 | * 把命名空间变成目录,加载类文件
34 | * @param [type] $namespace [命名空间]
35 | * @param [type] $realClass [类名]
36 | * @return [type] [无]
37 | */
38 | protected function loadMap($namespace,$realClass)
39 | {
40 | //如果命名空间存在在映射表中,直接取得目录
41 | if (array_key_exists($namespace, $this->maps)) {
42 | $path = $this->maps[$namespace];
43 | } else {//如果不存在,直接把命名空当做目录名
44 | $path = str_replace('\\', '/', $namespace);
45 | }
46 |
47 | //在目录后添加斜线
48 | $path = rtrim($path,'/') . '/';
49 | $path .= $realClass . '.php';
50 | if (file_exists($path)) {
51 | include $path;
52 | } else {
53 | exit($path . "文件不存在!");
54 | }
55 | }
56 |
57 |
58 | /**
59 | * 向映射表里添加命名空间和目录对照关系
60 | * @param [type] $namespace [description]
61 | * @param [type] $realPath [description]
62 | */
63 | public function addNamespace($namespace,$realPath)
64 | {
65 | // index\\controller\ \index\\controller\
66 | $namespace = trim(str_replace('/', '\\', $namespace),'\\');
67 | $realPath = trim(str_replace('\\', '/',$realPath),'/');
68 | if (array_key_exists($namespace, $this->maps)) {
69 | exit("命名空间已经存在映射表中");
70 | }
71 | $this->maps[$namespace] = $realPath;
72 | }
73 | }
--------------------------------------------------------------------------------
/boot/Router.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 博客-首页
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | China Beijing
50 |
51 |
52 |
53 | Web development
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | -
75 |
76 |
77 |
78 |
79 | =$blog['title'];?>
80 |
81 |
82 | =$blog['create_time'];?>
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
Popular Repositories
91 |
92 |
Repositories contribute to
93 |
132 |
133 |
134 |
135 |
136 |
158 |
159 |
160 |
161 |
207 |
208 |
209 |
210 |
211 |
212 |
--------------------------------------------------------------------------------
/cache/php_blog.php:
--------------------------------------------------------------------------------
1 | 'bid',
4 | 0 => 'bid',
5 | 1 => 'title',
6 | 2 => 'content',
7 | 3 => 'create_time',
8 | 4 => 'state',
9 | 5 => 'is_top',
10 | 6 => 'comment_num',
11 | 7 => 'read_num',
12 | 8 => 'nocomment',
13 | 9 => 'cid',
14 | );?>
--------------------------------------------------------------------------------
/cache/php_user.php:
--------------------------------------------------------------------------------
1 | 'uid',
4 | 0 => 'uid',
5 | 1 => 'name',
6 | 2 => 'password',
7 | 3 => 'ip',
8 | 4 => 'type',
9 | );?>
--------------------------------------------------------------------------------
/config/database.php:
--------------------------------------------------------------------------------
1 | 'localhost',
5 | 'DB_USER' => 'root',
6 | 'DB_PASSWORD' => '123456',
7 | 'DB_NAME' => 'php1707',
8 | 'DB_PREFIX' => 'php_',
9 | 'DB_CHARSET' => 'utf8',
10 | 'DB_CACHE' => './cache',
11 | ];
--------------------------------------------------------------------------------
/config/namespace.php:
--------------------------------------------------------------------------------
1 | 'app/index/controller',
4 | 'index\\model' =>'app/index/model',
5 | 'index\\view' =>'app/index/view',
6 | 'admin\\controller' => 'app/admin/controller',
7 | 'csl\\framework' =>'vendor/csl/framework/src'
8 | ];
9 |
--------------------------------------------------------------------------------
/index.php:
--------------------------------------------------------------------------------
1 | h3{background-color:#f5f5f5;margin:0;border-radius:3px 3px 0 0;border:1px solid #d8d8d8;border-bottom:0;padding:9px 10px 10px;font-size:14px;line-height:17px;display:block}.boxed-group .heading a,.boxed-group>h3 a{color:inherit}.boxed-group .heading a.boxed-group-breadcrumb,.boxed-group>h3 a.boxed-group-breadcrumb{color:#666;font-weight:400;text-decoration:none}.boxed-group .heading .avatar,.boxed-group>h3 .avatar{margin-top:-4px}.boxed-group .tabnav.heading{padding:0}.boxed-group .tabnav.heading .tabnav-tab.selected{border-top:0}.boxed-group .tabnav.heading li:first-child .selected{border-left-color:#fff;border-top-left-radius:3px}.boxed-group .tabnav-tab{border-radius:0;border-top:0}.boxed-group code.heading{font-size:12px}.boxed-group.dangerzone>h3{background-color:#df3e3e;border:1px solid #a00;color:#fff;text-shadow:0 -1px 0 #900}.boxed-group.dangerzone .boxed-group-inner{border-top:0}.boxed-group.condensed>h3{padding:6px 6px 7px;font-size:12px}.boxed-group.condensed>h3 .octicon{padding:0 6px 0 2px}.dashboard-sidebar .boxed-group,.one-half .boxed-group{margin-bottom:20px}.boxed-group .bleed-flush{width:100%;padding:0 10px;margin-left:-10px}.boxed-group .compact{margin-top:10px;margin-bottom:10px}.boxed-group-inner{padding:1px 10px;background:#fff;border:1px solid #d8d8d8;border-bottom-left-radius:3px;border-bottom-right-radius:3px;color:#666;font-size:13px}.boxed-group-inner .help,.boxed-group-inner .tabnav-tab.selected{border-top:1px solid #ddd}.boxed-group-inner .markdown-body{padding:20px 10px 10px;font-size:13px}.boxed-group-inner.markdown-body{padding-top:10px;padding-bottom:10px}.boxed-group-inner.seamless{padding:0}.boxed-group-inner h4{margin:15px 0 -5px;font-size:14px;color:#000}.boxed-group-inner .tabnav{margin-left:-10px;margin-right:-10px;padding-left:10px;padding-right:10px}.boxed-group-inner .help{clear:both;margin:1em -10px 0;padding:1em 10px 1em 35px;color:#999}.boxed-group-inner .help .octicon{margin-left:-25px;margin-right:5px}.boxed-group-inner .flash-global{margin-left:-10px;margin-right:-10px;border-top:0}.boxed-action{float:right;margin-left:10px}.boxed-group-action{float:right;margin:6px 10px 0 0;position:relative;z-index:2}.boxed-group-action.flush{margin-top:0;margin-right:0}.boxed-group-action>button{background-color:transparent;border:0;-webkit-appearance:none}.boxed-group-icon{padding:4px;color:#777}
--------------------------------------------------------------------------------
/public/index/css/collection.css:
--------------------------------------------------------------------------------
1 | .collection-head,.side-collection-image{-webkit-box-shadow:inset 0 10px 20px rgba(0,0,0,.1);text-shadow:0 1px 2px rgba(0,0,0,.3)}.collection-card-image,.collection-head,.side-collection-image{text-shadow:0 1px 2px rgba(0,0,0,.3)}.collection-head{padding:1.5rem 0;margin-top:-20px;margin-bottom:20px;background:url(/assets/images/octicons-bg.png) center #302F2F;box-shadow:inset 0 10px 20px rgba(0,0,0,.1);color:#fff}.collection-head.small{padding:.8rem 0}.collection-head.small .collection-title{padding:10px 0}.collection-head.small .collection-title h1.collection-header{font-size:30px}.collection-head a{color:#fff}.collection-head a:hover{text-decoration:none}.collection-head .collection-title{display:table-cell;padding:20px 0;vertical-align:middle}.collection-head .collection-info{margin:0}.collection-head .collection-info .meta-info{margin-right:15px}.collection-head .collection-info .avatar{background-color:rgba(255,255,255,.7);border:1px solid rgba(255,255,255,.7)}.collection-head .collection-head .container{position:relative}.collection-head .draft-tag{position:absolute;top:0;left:0}.collection-head .collection-header{margin-top:0;font-size:45px;line-height:1.5;font-weight:400}.collection-head .collection-description{position:relative;font-size:16px}.collection-page .collection-info{margin-top:10px;margin-bottom:20px;font-size:13px;color:#999}.collection-page .column.main{margin-right:260px!important}.collection-page .column.sidebar{width:240px}.collection-page .other-content{padding:20px 0 20px 20px;border-left:1px solid #f1f1f1}.collection-page .other-content .subnav-search{margin-left:0}.collection-page .other-content input.subnav-search-input{width:100%}.collection-page .other-content-title{margin-top:40px}.collection-page .other-content-title:first-child,.collection-search-result-title{margin-top:0}.side-collection-list{margin:0;list-style-type:none}.side-collection-link{display:table;width:100%;height:100px;color:#fff}.collection-card-title,.side-collection-image{height:100%;text-align:center;vertical-align:middle}.side-collection-item-title{font-size:16px;font-weight:100}.side-collection-image{background:url(/assets/images/octicons-bg.png) center #555;box-shadow:inset 0 10px 20px rgba(0,0,0,.1);color:#fff;display:table-cell;width:100%;margin-bottom:5px;border-radius:3px}.side-collection-list-item{margin-bottom:20px}.collection-tools{list-style-type:none;margin-bottom:10px;font-size:15px}.collection-tools .edit-link{color:#333}.collection-tools .edit-link:hover{color:#4183c4;cursor:pointer}.collection-tools .octicon{margin-right:5px}.collection-tools .select-menu-button{position:relative;display:inline-block;color:#333}.collection-tools .select-menu-button :hover{color:#4183c4;cursor:pointer}.collection-tool{margin-left:20px}.collection-search-results em{padding:.1em;background-color:#faffa6}.collection-search-result{margin-bottom:40px;list-style-type:none}.collection-search-page .search-results-info{line-height:33px;float:right;margin-left:10px;font-size:15px}.collection-listing{text-align:center}.collection-card{position:relative;display:inline-block;width:30%;max-width:313px;margin:0 10px 20px;list-style-type:none;background:#f7f7f7;border:1px solid #ddd;border-radius:3px;overflow:hidden}.collection-card .draft-tag{position:absolute;top:-1px;left:10px}.collection-card-title{padding:0 15px;margin:10px 0;display:table-cell;width:100%;font-size:19px;font-weight:700}.collection-card-body{padding:0 15px;margin:0 0 10px;height:3em;overflow:hidden;font-size:15px;line-height:1.5em}.collection-card-image{position:relative;display:table;width:101%;height:120px;margin:-1px -1px 15px;background:url(/assets/images/octicons-bg.png) center #555;-webkit-box-shadow:inset 0 10px 20px rgba(0,0,0,.1);box-shadow:inset 0 10px 20px rgba(0,0,0,.1);color:#fff;border-top-right-radius:3px;border-top-left-radius:3px}.collection-card-meta{padding:0 15px;margin-top:5px;margin-bottom:15px;color:#777;font-size:12px}.collection-card-meta .meta-info{margin-right:10px}.collection-card-meta .last-updated{float:right;margin-right:0}
--------------------------------------------------------------------------------
/public/index/css/common.css:
--------------------------------------------------------------------------------
1 | .site-header,.site-header-actions .select-menu{position:relative}.markdown-body,body{font-family:Arial,"Hiragino Sans GB","冬青黑","Microsoft YaHei","微软雅黑",SimSun,"宋体",Helvetica,Tahoma,Arial sans-serif;font-size:16px;line-height:30px;word-wrap:break-word;letter-spacing:.8px;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-webkit-backface-visibility:hidden}@font-face{font-family:octicons;src:font-url(../fonts/octicons.eot?#iefix) format("embedded-opentype"),font-url(../fonts/octicons.woff) format("woff"),font-url(../fonts/octicons.ttf) format("truetype"),font-url(../fonts/octicons.svg#octicons) format("svg");font-weight:400;font-style:normal}.pagination{padding:20px 0}.pagination a.active{background:#337ab7;border-color:#337ab7;z-index:2;color:#fff;cursor:default}.text-center{text-align:center}.btn-inline .btn{margin:5px}.site-header{padding-top:20px;padding-bottom:20px;margin-bottom:20px;border-bottom:1px solid #eee}.site-header .account-switcher{display:inline-block;margin-top:-2px;margin-bottom:-6px}.site-header-actions .select-menu:after,.site-header-actions .select-menu:before{display:table;content:""}.site-header ul.site-header-actions{z-index:21;float:right;margin:0}.site-header ul.site-header-actions .feed-icon{margin-top:5px}.site-header .path-divider{margin:0 .25em}.site-header h1{float:left}.site-header h1,.site-header h1 .octicon{margin-top:0;margin-bottom:0;font-size:32px;font-weight:400;line-height:28px}.context-loader,.markdown-body dl dt,.markdown-body table th,.pl-mb,.pl-mdr,.pl-mh,.pl-mh .pl-en,.pl-ms,.pl-sr .pl-cce,.site-header h1 strong{font-weight:700}.site-header h1 a{white-space:nowrap;color:#333}.site-header h1 a:hover{text-decoration:none}.site-header h1 .avatar{margin-top:-2px;margin-right:9px;margin-bottom:-2px}.site-header-actions>li{float:left;margin:0 10px 0 0;font-size:11px;color:#333;list-style-type:none}.site-header-actions>li:last-child{margin-right:0}.site-header-actions .octicon-mute{color:#c00}.site-header-actions .select-menu:after{clear:both}.site-header-actions .select-menu-modal-holder{top:100%}.context-loader{position:absolute;top:0;left:50%;z-index:20;width:154px;padding:10px 10px 10px 30px;margin-left:-75px;font-size:12px;color:#666;background:url(../images/min/octocat-spinner-16px.gif) 10px 50% no-repeat #eee;border:1px solid #ddd;border-top:1px solid #fff;border-radius:0 0 5px 5px}@media screen and (-webkit-min-device-pixel-ratio:2),screen and (max--moz-device-pixel-ratio:2){.context-loader{background:url(../images/min/octocat-spinner-32-EAF2F5.gif) 10px 50% no-repeat #eee;background-size:16px auto}}.site-header-nav{float:right;margin-bottom:-20px}.site-header-nav-item{display:inline-block;padding:6px 10px 15px;margin-left:1.25rem;font-size:1rem;color:#777}.site-footer:after,.site-footer:before{display:table;content:""}.site-header-nav-item:hover{color:#333;text-decoration:none}.site-header-nav-item.selected{color:#333;padding:6px 10px 13px;border-bottom:2px solid #d26911}.site-header-nav-item+.btn-outline{margin-top:-1px;margin-left:20px}.site-footer{position:relative;margin-top:40px;padding-top:40px;padding-bottom:40px;font-size:12px;line-height:1.5;color:#777;border-top:1px solid #eee}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.site-footer .copyright{padding-right:20px}.site-footer:after{clear:both}.site-footer .octicon-mark-github{position:absolute;top:38px;left:50%;height:24px;width:24px;margin-left:-12px;font-size:24px;color:#ccc}.site-footer .octicon-mark-github:hover{color:#bbb}.site-footer-links{margin:0;list-style:none}.site-footer-links li{display:inline-block;line-height:16px}.site-footer-links li+li{margin-left:10px}.share{margin:20px 0}.markdown-body{overflow:hidden}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{position:absolute;top:0;left:0;display:block;padding-right:6px;padding-left:30px;margin-left:-30px}.markdown-body .anchor:focus{outline:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{position:relative;margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{display:none;color:#000;vertical-align:middle}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{padding-left:8px;margin-left:-30px;text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{display:inline-block}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2.25em;line-height:1.2}.markdown-body h1 .anchor{line-height:1}.markdown-body h2{font-size:1.75em;line-height:1.225}.markdown-body h2 .anchor{line-height:1}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h3 .anchor,.markdown-body h4 .anchor{line-height:1.2}.markdown-body h4{font-size:1.25em}.markdown-body h5 .anchor,.markdown-body h6 .anchor{line-height:1.1}.markdown-body h5{font-size:1em}.markdown-body h6{font-size:1em;color:#777}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:4px;padding:0;margin:16px 0;background-color:#e7e7e7;border:0}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol.no-list,.markdown-body ul.no-list{padding:0;list-style-type:none}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.markdown-body .emoji{max-width:none}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{letter-spacing:-.2em;content:" "}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 #bbb;box-shadow:inset 0 -1px 0 #bbb}.pl-c{color:#969896}.pl-c1,.pl-s .pl-v{color:#0086b3}.pl-e,.pl-en{color:#795da3}.pl-s .pl-s1,.pl-smi{color:#333}.pl-ent{color:#63a35c}.pl-k{color:#a71d5d}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#183691}.pl-v{color:#ed6a43}.pl-id{color:#b52a1d}.pl-ii{background-color:#b52a1d;color:#f8f8f8}.pl-sr .pl-cce{color:#63a35c}.pl-ml{color:#693a17}.pl-mh,.pl-mh .pl-en,.pl-ms{color:#1d3e81}.pl-mq{color:teal}.pl-mi{color:#333;font-style:italic}.pl-mb{color:#333}.pl-md{background-color:#ffecec;color:#bd2c00}.pl-mi1{background-color:#eaffea;color:#55a532}.pl-mdr{color:#795da3}.pl-mo{color:#1d3e81}
--------------------------------------------------------------------------------
/public/index/css/iconfont.css:
--------------------------------------------------------------------------------
1 | @font-face {font-family: "iconfont";
2 | src: url('iconfont.eot'); /* IE9*/
3 | src: url('iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
4 | url('iconfont.woff') format('woff'), /* chrome、firefox */
5 | url('iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
6 | url('iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
7 | }
8 | .iconfont {
9 | font-family:"iconfont" !important;
10 | font-size:14px;
11 | font-style:normal;
12 | display:inline;
13 | height:auto;
14 | -webkit-font-smoothing: antialiased;
15 | -webkit-text-stroke-width: 0.2px;
16 | -moz-osx-font-smoothing: grayscale;
17 | vertical-align:baseline;
18 | text-decoration:inherit;
19 | }
20 | .size-M .iconfont{ font-size:14px}
21 | [class^="iconfont-"]::before, [class*=" iconfont-"]::before {
22 | display: inline-block;
23 | text-decoration: inherit;
24 | }
25 | .iconfont-daxiao:before { content: "\f0005"; }
26 | .iconfont-yunshangchuan:before { content: "\f0020"; }
27 | .iconfont-bianji:before { content: "\f0022"; }
28 | .iconfont-shangchuan:before { content: "\f0023"; }
29 | .iconfont-shangchuan1:before { content: "\f0024"; }
30 | .iconfont-liebiao:before { content: "\f0025"; }
31 | .iconfont-fasong:before { content: "\f0026"; }
32 | .iconfont-chongzhi:before { content: "\f0029"; }
33 | .iconfont-xiaofeizhebaozhang:before { content: "\f0030"; }
34 | .iconfont-xinshoushanglu:before { content: "\f0031"; }
35 | .iconfont-fukuanfangshi:before { content: "\f0032"; }
36 | .iconfont-qita:before { content: "\f0034"; }
37 | .iconfont-jiaofei:before { content: "\f0035"; }
38 | .iconfont-yinle:before { content: "\f0036"; }
39 | .iconfont-dianzishu:before { content: "\f0037"; }
40 | .iconfont-licai:before { content: "\f0038"; }
41 | .iconfont-huafei:before { content: "\f003f"; }
42 | .iconfont-wenzhang:before { content: "\f0042"; }
43 | .iconfont-tupian:before { content: "\f0044"; }
44 | .iconfont-dianpu:before { content: "\f0043"; }
45 | .iconfont-baobei:before { content: "\f0045"; }
46 | .iconfont-pinpai:before { content: "\f0046"; }
47 | .iconfont-nvren:before { content: "\f0048"; }
48 | .iconfont-beizi:before { content: "\f004e"; }
49 | .iconfont-jiangefuhao:before { content: "\f004f"; }
50 | .iconfont-yangshengqi:before { content: "\f0051"; }
51 | .iconfont-yingpan:before { content: "\f0055"; }
52 | .iconfont-dianhuaji:before { content: "\f0057"; }
53 | .iconfont-qukuanji:before { content: "\f005e"; }
54 | .iconfont-xingguang:before { content: "\f005f"; }
55 | .iconfont-biaoqian:before { content: "\f0060"; }
56 | .iconfont-qipao:before { content: "\f0062"; }
57 | .iconfont-rili:before { content: "\f0063"; }
58 | .iconfont-yinle1:before { content: "\f0064"; }
59 | .iconfont-duihuakuang:before { content: "\f0066"; }
60 | .iconfont-jieri:before { content: "\f0068"; }
61 | .iconfont-keai:before { content: "\f0069"; }
62 | .iconfont-jishiqi:before { content: "\f006a"; }
63 | .iconfont-qiandai:before { content: "\f006e"; }
64 | .iconfont-pingbandiannao:before { content: "\f0070"; }
65 | .iconfont-jiandao:before { content: "\f008a"; }
66 | .iconfont-liwu:before { content: "\f008d"; }
67 | .iconfont-xianshiqi:before { content: "\f0091"; }
68 | .iconfont-zhaoxiangji:before { content: "\f0092"; }
69 | .iconfont-danfanxiangji:before { content: "\f0096"; }
70 | .iconfont-dianshiji:before { content: "\f0099"; }
71 | .iconfont-tushu:before { content: "\f00a1"; }
72 | .iconfont-shouji:before { content: "\f00a2"; }
73 | .iconfont-bijiben:before { content: "\f00a7"; }
74 | .iconfont-dayinji:before { content: "\f00a8"; }
75 | .iconfont-youxi:before { content: "\f00aa"; }
76 | .iconfont-duihua:before { content: "\f00ae"; }
77 | .iconfont-tuijian:before { content: "\f00af"; }
78 | .iconfont-renzhengyonghu:before { content: "\f00b0"; }
79 | .iconfont-caidai:before { content: "\f00b1"; }
80 | .iconfont-zhengque:before { content: "\f00b2"; }
81 | .iconfont-cuowu:before { content: "\f00b3"; }
82 | .iconfont-jinzhi:before { content: "\f00b4"; }
83 | .iconfont-tixing:before { content: "\f00b5"; }
84 | .iconfont-tishi:before { content: "\f00b6"; }
85 | .iconfont-jinggao:before { content: "\f00b7"; }
86 | .iconfont-bangzhu:before { content: "\f00b8"; }
87 | .iconfont-wangluo:before { content: "\f00b9"; }
88 | .iconfont-chuangyi:before { content: "\f00ba"; }
89 | .iconfont-zhanghu:before { content: "\f00bb"; }
90 | .iconfont-jianqie:before { content: "\f00bc"; }
91 | .iconfont-wenjian:before { content: "\f00bd"; }
92 | .iconfont-bianjiwenjian:before { content: "\f00be"; }
93 | .iconfont-dengdaiwenjian:before { content: "\f00bf"; }
94 | .iconfont-shanchuwenjian:before { content: "\f00c0"; }
95 | .iconfont-jianqiewenjian:before { content: "\f00c1"; }
96 | .iconfont-fuzhiwenjian:before { content: "\f00c2"; }
97 | .iconfont-sousuowenjian:before { content: "\f00c3"; }
98 | .iconfont-dengdai:before { content: "\f00c4"; }
99 | .iconfont-wenjianjia:before { content: "\f00c5"; }
100 | .iconfont-xinzengwenjianjia:before { content: "\f00c6"; }
101 | .iconfont-shanchuwenjianjia:before { content: "\f00c7"; }
102 | .iconfont-weidaqiadewenjianjia:before { content: "\f00c8"; }
103 | .iconfont-suoding:before { content: "\f00c9"; }
104 | .iconfont-ziliaoku:before { content: "\f00ca"; }
105 | .iconfont-ziti:before { content: "\f00cb"; }
106 | .iconfont-wangzhanzhu:before { content: "\f00cc"; }
107 | .iconfont-bingtu:before { content: "\f00cd"; }
108 | .iconfont-shuzhuangtu:before { content: "\f00ce"; }
109 | .iconfont-quxiantu:before { content: "\f00cf"; }
110 | .iconfont-zhexiantu:before { content: "\f00d0"; }
111 | .iconfont-APIjieru:before { content: "\f00d1"; }
112 | .iconfont-dingxiang:before { content: "\f00d2"; }
113 | .iconfont-jingquedingxiang:before { content: "\f00d3"; }
114 | .iconfont-guanggaozhu:before { content: "\f00d4"; }
115 | .iconfont-shejishi:before { content: "\f00d5"; }
116 | .iconfont-nanshangjia:before { content: "\f00d6"; }
117 | .iconfont-nvshangjia:before { content: "\f00d7"; }
118 | .iconfont-tianjiashangjia:before { content: "\f00d8"; }
119 | .iconfont-xingqudingxiang:before { content: "\f00d9"; }
120 | .iconfont-jingjia:before { content: "\f00da"; }
121 | .iconfont-zhizhen:before { content: "\f00db"; }
122 | .iconfont-jihuo:before { content: "\f00dc"; }
123 | .iconfont-chajian:before { content: "\f00dd"; }
124 | .iconfont-tubiao:before { content: "\f00de"; }
125 | .iconfont-jihua:before { content: "\f00df"; }
126 | .iconfont-tianjiajihua:before { content: "\f00e0"; }
127 | .iconfont-mulu:before { content: "\f00e1"; }
128 | .iconfont-guanggaowei:before { content: "\f00e2"; }
129 | .iconfont-tianjiaguanggaowei:before { content: "\f00e3"; }
130 | .iconfont-shoujidianzhao:before { content: "\f00e5"; }
131 | .iconfont-shangjiaqun:before { content: "\f00e4"; }
132 | .iconfont-dianzhao:before { content: "\f00e6"; }
133 | .iconfont-tuwendianzhao:before { content: "\f00e7"; }
134 | .iconfont-diaojie:before { content: "\f00e8"; }
135 | .iconfont-kejian:before { content: "\f00e9"; }
136 | .iconfont-bukejian:before { content: "\f00ea"; }
137 | .iconfont-biaoshengbang:before { content: "\f00eb"; }
138 | .iconfont-guanliyuan:before { content: "\f00ec"; }
139 | .iconfont-jinbi:before { content: "\f00ed"; }
140 | .iconfont-jinbizhuanchu:before { content: "\f00ee"; }
141 | .iconfont-jinbitixian:before { content: "\f00ef"; }
142 | .iconfont-jinbizhuanru:before { content: "\f00f0"; }
143 | .iconfont-jifei:before { content: "\f00f1"; }
144 | .iconfont-yemiantuiguang:before { content: "\f00f2"; }
145 | .iconfont-guanggaozhuhuodongtuiguang:before { content: "\f00f4"; }
146 | .iconfont-yongyan:before { content: "\f00f5"; }
147 | .iconfont-xinshouxuetang:before { content: "\f00f6"; }
148 | .iconfont-shangchuansucai:before { content: "\f00f7"; }
149 | .iconfont-tongtou:before { content: "\f00f8"; }
150 | .iconfont-qudaoxiaoguo:before { content: "\f00f9"; }
151 | .iconfont-qudaoguanli:before { content: "\f00fa"; }
152 | .iconfont-tuiguangdanyuange:before { content: "\f00fc"; }
153 | .iconfont-xifen:before { content: "\f00fd"; }
154 | .iconfont-xitongtuisong:before { content: "\f00fe"; }
155 | .iconfont-tuiguangqudao:before { content: "\f00fb"; }
156 | .iconfont-jiangpai:before { content: "\f00ff"; }
157 | .iconfont-michi:before { content: "\f0102"; }
158 | .iconfont-zhifubao:before { content: "\f0103"; }
159 | .iconfont-zizhutuiguang:before { content: "\f0104"; }
160 | .iconfont-guanli:before { content: "\f0105"; }
161 | .iconfont-jihuabaobiao:before { content: "\f0106"; }
162 | .iconfont-jingjiaziyuanwei:before { content: "\f0109"; }
163 | .iconfont-dingjiaziyuanwei:before { content: "\f010a"; }
164 | .iconfont-zhanghubaobiao:before { content: "\f010b"; }
165 | .iconfont-wangzhanshezhi:before { content: "\f010d"; }
166 | .iconfont-genzongmubiaoshezhi:before { content: "\f010e"; }
167 | .iconfont-wangzhanguanli:before { content: "\f010f"; }
168 | .iconfont-genzongmubiaoguanli:before { content: "\f0110"; }
169 | .iconfont-paixu:before { content: "\f0111"; }
170 | .iconfont-xiangzuo:before { content: "\f0112"; }
171 | .iconfont-xiangyou:before { content: "\f0114"; }
172 | .iconfont-jieri1:before { content: "\f0115"; }
173 | .iconfont-biaoqian1:before { content: "\f0117"; }
174 | .iconfont-duosucai:before { content: "\f0119"; }
175 | .iconfont-yunxiazai:before { content: "\f011a"; }
176 | .iconfont-weixiao:before { content: "\f011b"; }
177 | .iconfont-chijing:before { content: "\f011c"; }
178 | .iconfont-dai:before { content: "\f011d"; }
179 | .iconfont-shuaku:before { content: "\f011e"; }
180 | .iconfont-mogui:before { content: "\f011f"; }
181 | .iconfont-ganga:before { content: "\f0120"; }
182 | .iconfont-qin:before { content: "\f0121"; }
183 | .iconfont-zhayan:before { content: "\f0123"; }
184 | .iconfont-ma:before { content: "\f0125"; }
185 | .iconfont-bishi:before { content: "\f0126"; }
186 | .iconfont-shengqi:before { content: "\f0124"; }
187 | .iconfont-nu:before { content: "\f0122"; }
188 | .iconfont-maimeng:before { content: "\f0127"; }
189 | .iconfont-jingdai:before { content: "\f0128"; }
190 | .iconfont-facebook:before { content: "\f012a"; }
191 | .iconfont-yun:before { content: "\f0129"; }
192 | .iconfont-shouye:before { content: "\f012b"; }
193 | .iconfont-sousuo:before { content: "\f012c"; }
194 | .iconfont-heimingdan:before { content: "\f012e"; }
195 | .iconfont-fenxiang:before { content: "\f012f"; }
196 | .iconfont-wenben:before { content: "\f0130"; }
197 | .iconfont-duihua1:before { content: "\f0132"; }
198 | .iconfont-baocun:before { content: "\f0131"; }
199 | .iconfont-biaoqing:before { content: "\f0133"; }
200 | .iconfont-wuliu:before { content: "\f0134"; }
201 | .iconfont-dianpu1:before { content: "\f0135"; }
202 | .iconfont-mingpian:before { content: "\f0136"; }
203 | .iconfont-zhanghumingxi:before { content: "\f0101"; }
204 | .iconfont-taobaoketuiguang:before { content: "\f0100"; }
205 | .iconfont-tuiguangguanggaowei:before { content: "\f00f3"; }
206 | .iconfont-quanwangjingjiabaobiao:before { content: "\f010c"; }
207 | .iconfont-xiangshang:before { content: "\f0113"; }
208 | .iconfont-keaide:before { content: "\f0116"; }
209 | .iconfont-yonghu:before { content: "\f012d"; }
210 | .iconfont-tupian1:before { content: "\f0137"; }
211 | .iconfont-youjian:before { content: "\f0138"; }
212 | .iconfont-xiaoliang:before { content: "\f0139"; }
213 | .iconfont-chexiao:before { content: "\f013a"; }
214 | .iconfont-zhongzuo:before { content: "\f013b"; }
215 | .iconfont-zanyang:before { content: "\f013c"; }
216 | .iconfont-piping:before { content: "\f013d"; }
217 | .iconfont-shezhi:before { content: "\f013e"; }
218 | .iconfont-shanchu:before { content: "\f013f"; }
219 | .iconfont-wangwang:before { content: "\f0140"; }
220 | .iconfont-qita1:before { content: "\f0141"; }
221 | .iconfont-bangzhu1:before { content: "\f0143"; }
222 | .iconfont-shoucang:before { content: "\f0144"; }
223 | .iconfont-tianjiayonghu:before { content: "\f014d"; }
224 | .iconfont-chazhaoyonghu:before { content: "\f014c"; }
225 | .iconfont-haoyou:before { content: "\f014b"; }
226 | .iconfont-weizhi:before { content: "\f014a"; }
227 | .iconfont-erji:before { content: "\f0149"; }
228 | .iconfont-gouwuche:before { content: "\f0148"; }
229 | .iconfont-yuyin:before { content: "\f0147"; }
230 | .iconfont-xiaozhushou:before { content: "\f0146"; }
231 | .iconfont-xiai:before { content: "\f0145"; }
232 | .iconfont-kulian:before { content: "\f014e"; }
233 | .iconfont-bianji1:before { content: "\f014f"; }
234 | .iconfont-renminbi:before { content: "\f0150"; }
235 | .iconfont-biaoqian2:before { content: "\f0152"; }
236 | .iconfont-jia:before { content: "\f0154"; }
237 | .iconfont-zhengque1:before { content: "\f0156"; }
238 | .iconfont-cuowu1:before { content: "\f0155"; }
239 | .iconfont-jian:before { content: "\f0153"; }
240 | .iconfont-zhaoxiangji1:before { content: "\f0151"; }
241 | .iconfont-nvren1:before { content: "\f0157"; }
242 | .iconfont-wenbenshuru:before { content: "\f0158"; }
243 | .iconfont-xiaosuolvetu:before { content: "\f0159"; }
244 | .iconfont-suijiyonghu:before { content: "\f015a"; }
245 | .iconfont-fujian:before { content: "\f015b"; }
246 | .iconfont-shuaxin:before { content: "\f015c"; }
247 | .iconfont-dantupailie:before { content: "\f015d"; }
248 | .iconfont-daliebiao:before { content: "\f015e"; }
249 | .iconfont-dasuolvetuliebiao:before { content: "\f015f"; }
250 | .iconfont-bianjimoban:before { content: "\f0168"; }
251 | .iconfont-zhenduan:before { content: "\f0167"; }
252 | .iconfont-tixingshezhi:before { content: "\f0166"; }
253 | .iconfont-guolv:before { content: "\f0164"; }
254 | .iconfont-xiazai:before { content: "\f0163"; }
255 | .iconfont-shipin:before { content: "\f0162"; }
256 | .iconfont-liebiao1:before { content: "\f0161"; }
257 | .iconfont-pubuliu:before { content: "\f0160"; }
258 | .iconfont-daoruchuangyi:before { content: "\f0169"; }
259 | .iconfont-zhantie:before { content: "\f016a"; }
260 | .iconfont-kaishi:before { content: "\f016b"; }
261 | .iconfont-wancheng:before { content: "\f016c"; }
262 | .iconfont-xiangyou1:before { content: "\f016d"; }
263 | .iconfont-xiangzuo1:before { content: "\f016e"; }
264 | .iconfont-xiangshang1:before { content: "\f016f"; }
265 | .iconfont-xiangxia:before { content: "\f0170"; }
266 | .iconfont-taobao:before { content: "\f0171"; }
267 | .iconfont-juhuasuan:before { content: "\f0172"; }
268 | .iconfont-tianmao:before { content: "\f0173"; }
269 | .iconfont-yingyong:before { content: "\f0174"; }
270 | .iconfont-jia1:before { content: "\f0175"; }
271 | .iconfont-jian1:before { content: "\f0176"; }
272 | .iconfont-jiangjia:before { content: "\f0177"; }
273 | .iconfont-gouwucheman:before { content: "\f0178"; }
274 | .iconfont-gouwuchekong:before { content: "\f0179"; }
275 | .iconfont-yingyongzhongxin:before { content: "\f017a"; }
276 | .iconfont-shupai:before { content: "\f0183"; }
277 | .iconfont-hengpai:before { content: "\f0182"; }
278 | .iconfont-juyou:before { content: "\f0181"; }
279 | .iconfont-juzhong:before { content: "\f0180"; }
280 | .iconfont-zanting:before { content: "\f017e"; }
281 | .iconfont-gengxin:before { content: "\f017b"; }
282 | .iconfont-yousuojin:before { content: "\f0185"; }
283 | .iconfont-chuizhisuofang:before { content: "\f0186"; }
284 | .iconfont-huangguan:before { content: "\f017d"; }
285 | .iconfont-tuichu:before { content: "\f017c"; }
286 | .iconfont-juzuo:before { content: "\f017f"; }
287 | .iconfont-zuosuojin:before { content: "\f0184"; }
288 | .iconfont-shuipingsuofang:before { content: "\f0187"; }
289 | .iconfont-xieti:before { content: "\f0188"; }
290 | .iconfont-zuixiabu:before { content: "\f018a"; }
291 | .iconfont-suoding1:before { content: "\f018b"; }
292 | .iconfont-zuishangbu:before { content: "\f0189"; }
293 | .iconfont-jinzhi1:before { content: "\f018c"; }
294 | .iconfont-jiesuo:before { content: "\f0195"; }
295 | .iconfont-dakaixinxi:before { content: "\f0194"; }
296 | .iconfont-tao:before { content: "\f0193"; }
297 | .iconfont-gaosu:before { content: "\f0192"; }
298 | .iconfont-banfen:before { content: "\f0190"; }
299 | .iconfont-jinru:before { content: "\f018f"; }
300 | .iconfont-shezhi1:before { content: "\f018d"; }
301 | .iconfont-tuige:before { content: "\f0196"; }
302 | .iconfont-yingyongzhongxin1:before { content: "\f0197"; }
303 | .iconfont-wenbenshuru1:before { content: "\f0199"; }
304 | .iconfont-luyin:before { content: "\f018e"; }
305 | .iconfont-tuwenxiangqing:before { content: "\f0198"; }
306 | .iconfont-weiju:before { content: "\f019a"; }
307 | .iconfont-zhuanwan:before { content: "\f0191"; }
308 | .iconfont-yuanjing:before { content: "\f019b"; }
309 | .iconfont-gaoqingshexiang:before { content: "\f019c"; }
310 | .iconfont-fengjing:before { content: "\f019e"; }
311 | .iconfont-renxiang:before { content: "\f019d"; }
312 | .iconfont-yejing:before { content: "\f019f"; }
313 | .iconfont-quanjing:before { content: "\f01a0"; }
314 | .iconfont-zipaimoshi:before { content: "\f01a1"; }
315 | .iconfont-zuoshang:before { content: "\f01a2"; }
316 | .iconfont-xiangshang2:before { content: "\f01a3"; }
317 | .iconfont-youshang:before { content: "\f01a4"; }
318 | .iconfont-zuoxia:before { content: "\f01a5"; }
319 | .iconfont-xiangxia1:before { content: "\f01a6"; }
320 | .iconfont-youxia:before { content: "\f01a7"; }
321 | .iconfont-xiangzuo2:before { content: "\f01a8"; }
322 | .iconfont-xiangyou2:before { content: "\f01a9"; }
323 | .iconfont-lianjie:before { content: "\f01ae"; }
324 | .iconfont-xinlangweibo:before { content: "\f01af"; }
325 | .iconfont-tengxunweibo:before { content: "\f01b0"; }
326 | .iconfont-huan:before { content: "\f01b1"; }
327 | .iconfont-hebingdanyuan:before { content: "\f01b2"; }
328 | .iconfont-suoxiao:before { content: "\f01b4"; }
329 | .iconfont-fangda:before { content: "\f01b5"; }
330 | .iconfont-yidong:before { content: "\f01b6"; }
331 | .iconfont-quanping:before { content: "\f01b7"; }
332 | .iconfont-suoxiao1:before { content: "\f01b8"; }
333 | .iconfont-fangda1:before { content: "\f01b9"; }
334 | .iconfont-xinjianchuangkou:before { content: "\f01ba"; }
335 | .iconfont-xinchuangkoudakai:before { content: "\f01bb"; }
336 | .iconfont-dingyue:before { content: "\f01bc"; }
337 | .iconfont-xinhao:before { content: "\f01bd"; }
338 | .iconfont-dingdan:before { content: "\f01be"; }
339 | .iconfont-chongdian:before { content: "\f01bf"; }
340 | .iconfont-tisheng:before { content: "\f01c0"; }
341 | .iconfont-html:before { content: "\f01c2"; }
342 | .iconfont-tongzhi:before { content: "\f01c4"; }
343 | .iconfont-css:before { content: "\f01c3"; }
344 | .iconfont-dingwei:before { content: "\f01c5"; }
345 | .iconfont-daimawenjian:before { content: "\f01c6"; }
346 | .iconfont-qq:before { content: "\f01c7"; }
347 | .iconfont-douban:before { content: "\f01c8"; }
348 | .iconfont-github:before { content: "\f01ca"; }
349 | .iconfont-anzhuo:before { content: "\f01c9"; }
350 | .iconfont-xiajiang:before { content: "\f01c1"; }
351 | .iconfont-bofang:before { content: "\f01cb"; }
352 | .iconfont-bofang1:before { content: "\f01cc"; }
353 | .iconfont-keting:before { content: "\f01cd"; }
354 | .iconfont-woshi:before { content: "\f01ce"; }
355 | .iconfont-pingfeng:before { content: "\f01cf"; }
356 | .iconfont-shumiao:before { content: "\f01d1"; }
357 | .iconfont-shu:before { content: "\f01d3"; }
358 | .iconfont-yinger:before { content: "\f01d4"; }
359 | .iconfont-pingguo:before { content: "\f01d8"; }
360 | .iconfont-rilikaishi:before { content: "\f02e5"; }
361 | .iconfont-rilijieshu:before { content: "\f02e4"; }
362 | .iconfont-rili1:before { content: "\f02e3"; }
363 | .iconfont-xinjian5:before { content: "\f02e2"; }
364 | .iconfont-xinjian4:before { content: "\f02e1"; }
365 | .iconfont-xinjian3:before { content: "\f02e0"; }
366 | .iconfont-xinjian2:before { content: "\f02df"; }
367 | .iconfont-xinjian1:before { content: "\f02de"; }
368 | .iconfont-tupian2:before { content: "\f02dd"; }
369 | .iconfont-sucai2:before { content: "\f02dc"; }
370 | .iconfont-shangchuan2:before { content: "\f02db"; }
371 | .iconfont-shanchu1:before { content: "\f02da"; }
372 | .iconfont-liuliang:before { content: "\f02d9"; }
373 | .iconfont-liebiao2:before { content: "\f02d8"; }
374 | .iconfont-lianjie1:before { content: "\f02d7"; }
375 | .iconfont-flash:before { content: "\f02d6"; }
376 | .iconfont-datu:before { content: "\f02d5"; }
377 | .iconfont-chakan:before { content: "\f02d4"; }
378 | .iconfont-caijian:before { content: "\f02d3"; }
379 | .iconfont-bianji2:before { content: "\f02d2"; }
380 | .iconfont-youxiu:before { content: "\f02d1"; }
381 | .iconfont-licheng:before { content: "\f02d0"; }
382 | .iconfont-zhanshi:before { content: "\f02c6"; }
383 | .iconfont-yongjin:before { content: "\f02c5"; }
384 | .iconfont-jinggao1:before { content: "\f02bc"; }
385 | .iconfont-yi2:before { content: "\f02bb"; }
386 | .iconfont-re2:before { content: "\f02ba"; }
387 | .iconfont-you2:before { content: "\f02b9"; }
388 | .iconfont-xing2:before { content: "\f02b8"; }
389 | .iconfont-qian2:before { content: "\f02b7"; }
390 | .iconfont-xin2:before { content: "\f02b6"; }
391 | .iconfont-tianjia:before { content: "\f02b4"; }
392 | .iconfont-pin2:before { content: "\f02b5"; }
393 | .iconfont-re:before { content: "\f02b2"; }
394 | .iconfont-xiangyou3:before { content: "\f02af"; }
395 | .iconfont-pipeifangshi:before { content: "\f02ac"; }
396 | .iconfont-xiangshang3:before { content: "\f02aa"; }
397 | .iconfont-dianji:before { content: "\f02c7"; }
398 | .iconfont-xiangxia2:before { content: "\f02a9"; }
399 | .iconfont-weixuanzhong:before { content: "\f02a8"; }
400 | .iconfont-xuanzhong:before { content: "\f02a7"; }
401 | .iconfont-shequ:before { content: "\f02a4"; }
402 | .iconfont-chucuo:before { content: "\f02a3"; }
403 | .iconfont-zhishi:before { content: "\f02a0"; }
404 | .iconfont-faxian:before { content: "\f029f"; }
405 | .iconfont-jihualiebiao:before { content: "\f029e"; }
406 | .iconfont-shouye1:before { content: "\f029d"; }
407 | .iconfont-xiugaichujia:before { content: "\f029b";
408 | .iconfont-tuiguangzhong:before { content: "\f0298"; }
409 | .iconfont-paixu1:before { content: "\f0297"; }
410 | .iconfont-riqi:before { content: "\f0296"; }
411 | .iconfont-baobei1:before { content: "\f0294"; }
412 | .iconfont-guanjianci:before { content: "\f0293"; }
413 | .iconfont-gengduo:before { content: "\f0291"; }
414 | .iconfont-yaopin:before { content: "\f002d"; }
415 | .iconfont-qushixiajiang:before { content: "\f028c"; }
416 | .iconfont-zanting1:before { content: "\f0299"; }
417 | .iconfont-shanchu2:before { content: "\f029a"; }
418 | .iconfont-chongzhi1:before { content: "\f029c"; }
419 | .iconfont-shoucang1:before { content: "\f0290"; }
420 | .iconfont-jiagequxian:before { content: "\f028e"; }
421 | .iconfont-quxianshangsheng:before { content: "\f028d"; }
422 | .iconfont-dingxiang1:before { content: "\f0295"; }
423 | .iconfont-fanhui:before { content: "\f0292"; }
424 | .iconfont-qingchu:before { content: "\f028b"; }
425 | .iconfont-jiaoyin:before { content: "\f027f"; }
426 | .iconfont-dianyingpiao:before { content: "\f027e"; }
427 | .iconfont-xinjianmokuai:before { content: "\f027c"; }
428 | .iconfont-jine:before { content: "\f0280"; }
429 | .iconfont-hongbao:before { content: "\f027d"; }
430 | .iconfont-anonymous-iconfont:before { content: "\f023e"; }
431 | .iconfont-shachen:before { content: "\f0271"; }
432 | .iconfont-dongyu:before { content: "\f0272"; }
433 | .iconfont-fuchen:before { content: "\f0273"; }
434 | .iconfont-yujiaxue:before { content: "\f0274"; }
435 | .iconfont-daxue:before { content: "\f0275"; }
436 | .iconfont-zhongxue:before { content: "\f0276"; }
437 | .iconfont-xiaoxue:before { content: "\f0277";
438 | .iconfont-dayu:before { content: "\f0278"; }
439 | .iconfont-youzhi:before { content: "\f0279"; }
440 | .iconfont-xingye:before { content: "\f027a"; }
441 | .iconfont-qianli:before { content: "\f027b"; }
442 | .iconfont-hui:before { content: "\f0222"; }
443 | .iconfont-yi:before { content: "\f0213"; }
444 | .iconfont-lieri:before { content: "\f0210"; }
445 | .iconfont-wuyun:before { content: "\f020f"; }
446 | .iconfont-wanshang:before { content: "\f020e"; }
447 | .iconfont-nongyun:before { content: "\f020d"; }
448 | .iconfont-feng:before { content: "\f020c"; }
449 | .iconfont-leidian:before { content: "\f020b"; }
450 | .iconfont-xiaoyu:before { content: "\f020a"; }
451 | .iconfont-yu:before { content: "\f0209"; }
452 | .iconfont-wuqi:before { content: "\f0208"; }
453 | .iconfont-duoyun:before { content: "\f0206"; }
454 | .iconfont-qing:before { content: "\f0205"; }
455 | .iconfont-yun1:before { content: "\f0207"; }
456 | .iconfont-guanji:before { content: "\f0204"; }
457 | .iconfont-daba:before { content: "\f0203"; }
458 | .iconfont-feiji:before { content: "\f0202"; }
459 | .iconfont-zhuantui:before { content: "\f0201"; }
460 | .iconfont-pingguo1:before { content: "\f0200"; }
461 | .iconfont-weiruan:before { content: "\f01ff"; }
462 | .iconfont-zuanshi:before { content: "\f01fe"; }
463 | .iconfont-zhitongche:before { content: "\f01fd"; }
464 | .iconfont-hudiejie:before { content: "\f01fc"; }
465 | .iconfont-xiala:before { content: "\f01fa"; }
466 | .iconfont-dianji1:before { content: "\f01f9"; }
467 | .iconfont-jinbi1:before { content: "\f01f8"; }
468 | .iconfont-dianpu2:before { content: "\f01f7"; }
469 | .iconfont-dianhua:before { content: "\f01ef"; }
470 | .iconfont-caijian1:before { content: "\f01ed"; }
471 | .iconfont-gouwu:before { content: "\f01f5"; }
472 | .iconfont-quan:before { content: "\f01f6"; }
473 | .iconfont-huangguan1:before { content: "\f01f4"; }
474 | .iconfont-xingren:before { content: "\f01f3"; }
475 | .iconfont-gongjiao:before { content: "\f01f2"; }
476 | .iconfont-chuzu:before { content: "\f01f0"; }
477 | .iconfont-html5:before { content: "\f01ee"; }
478 | .iconfont-xuanze:before { content: "\f01ec"; }
479 | .iconfont-ditu:before { content: "\f01ea"; }
480 | .iconfont-ditu1:before { content: "\f01e9"; }
481 | .iconfont-duihua2:before { content: "\f01eb"; }
482 | .iconfont-tielu:before { content: "\f01f1"; }
483 | .iconfont-yueliang:before { content: "\f01e4"; }
484 | .iconfont-shouna:before { content: "\f01e6"; }
485 | .iconfont-yizi:before { content: "\f01e1"; }
486 | .iconfont-suohui:before { content: "\f01b3"; }
487 | .iconfont-xinxi:before { content: "\f0142"; }
488 | .iconfont-qibujia:before { content: "\f0108"; }
489 | .iconfont-morenchujia:before { content: "\f0107"; }
490 | .iconfont-renwu:before { content: "\f0090"; }
491 | .iconfont-lvxing:before { content: "\f003d"; }
492 | .iconfont-baoxian:before { content: "\f003c"; }
493 | .iconfont-dianyingpiao1:before { content: "\f003a"; }
494 | .iconfont-waimai:before { content: "\f0039"; }
495 | .iconfont-caipiao:before { content: "\f003b"; }
496 | .iconfont-wangyou:before { content: "\f003e"; }
497 | .iconfont-taobaotese:before { content: "\f0033"; }
498 | .iconfont-xin:before { content: "\f0021"; }
499 | .iconfont-jiedian:before { content: "\f0004"; }
500 | .iconfont-fengbi:before { content: "\f0003"; }
501 | .iconfont-tianse:before { content: "\f0001"; }
502 | .iconfont-hebing:before { content: "\f0002"; }
--------------------------------------------------------------------------------
/public/index/css/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lmq101600/romance_mvc/1dae1e939f86ac6aa241fc6e0e530768784c1425/public/index/css/iconfont.ttf
--------------------------------------------------------------------------------
/public/index/css/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lmq101600/romance_mvc/1dae1e939f86ac6aa241fc6e0e530768784c1425/public/index/css/iconfont.woff
--------------------------------------------------------------------------------
/public/index/css/index.css:
--------------------------------------------------------------------------------
1 | .home .banner,.home .site-header{background:#4183c4;color:#fff}.home .banner .collection-head{padding:4rem 0;color:#fff;background:0 0;box-shadow:none;-webkit-box-shadow:none}.home .site-header{border-bottom:none}.home .site-header h1 a{color:#fff}.home .site-header .site-header-nav-item{color:rgba(255,255,255,.5)}.home .site-header .site-header-nav-item:hover{color:#fff}
--------------------------------------------------------------------------------
/public/index/css/mini-repo-list.css:
--------------------------------------------------------------------------------
1 | .mini-repo-list .repo-name,.mini-repo-list-item .repo{font-weight:700}.mini-repo-list{list-style:none}.mini-repo-list>li:first-child .mini-repo-list-item{border-top:0}.mini-repo-list>li:last-child .mini-repo-list-item{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.mini-repo-list .no-repo{padding:15px;color:#999;text-align:center}.mini-repo-list-item{position:relative;display:block;padding:6px 64px 6px 30px;font-size:14px;border-top:1px solid #e5e5e5}.mini-repo-list-item.nostars{padding:6px 6px 6px 30px}.mini-repo-list-item:hover{text-decoration:none}.mini-repo-list-item:hover .owner,.mini-repo-list-item:hover .repo{text-decoration:underline}.mini-repo-list-item .repo-icon{float:left;margin-top:2px;margin-left:-20px;color:#666}.mini-repo-list-item .owner,.mini-repo-list-item .owner.css-truncate-target,.mini-repo-list-item .repo-and-owner.css-truncate-target{max-width:95%}.mini-repo-list-item .stars{position:absolute;top:0;right:10px;margin-top:6px;font-size:12px;color:#888}.mini-repo-list-item .repo-description{display:block;max-width:100%;font-size:12px;color:#777;line-height:21px}
--------------------------------------------------------------------------------
/public/index/css/octicons.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'octicons';
3 | src: url('octicons.eot?#iefix') format('embedded-opentype'),
4 | url('octicons.woff') format('woff'),
5 | url('octicons.ttf') format('truetype'),
6 | url('octicons.svg#octicons') format('svg');
7 | font-weight: normal;
8 | font-style: normal;
9 | }
10 |
11 | /*
12 |
13 | .octicon is optimized for 16px.
14 | .mega-octicon is optimized for 32px but can be used larger.
15 |
16 | */
17 | .octicon, .mega-octicon {
18 | font: normal normal normal 16px/1 octicons;
19 | display: inline-block;
20 | text-decoration: none;
21 | text-rendering: auto;
22 | -webkit-font-smoothing: antialiased;
23 | -moz-osx-font-smoothing: grayscale;
24 | -webkit-user-select: none;
25 | -moz-user-select: none;
26 | -ms-user-select: none;
27 | user-select: none;
28 | }
29 | .mega-octicon { font-size: 32px; }
30 |
31 | .octicon-alert:before { content: '\f02d'} /* */
32 | .octicon-arrow-down:before { content: '\f03f'} /* */
33 | .octicon-arrow-left:before { content: '\f040'} /* */
34 | .octicon-arrow-right:before { content: '\f03e'} /* */
35 | .octicon-arrow-small-down:before { content: '\f0a0'} /* */
36 | .octicon-arrow-small-left:before { content: '\f0a1'} /* */
37 | .octicon-arrow-small-right:before { content: '\f071'} /* */
38 | .octicon-arrow-small-up:before { content: '\f09f'} /* */
39 | .octicon-arrow-up:before { content: '\f03d'} /* */
40 | .octicon-microscope:before,
41 | .octicon-beaker:before { content: '\f0dd'} /* */
42 | .octicon-bell:before { content: '\f0de'} /* */
43 | .octicon-book:before { content: '\f007'} /* */
44 | .octicon-bookmark:before { content: '\f07b'} /* */
45 | .octicon-briefcase:before { content: '\f0d3'} /* */
46 | .octicon-broadcast:before { content: '\f048'} /* */
47 | .octicon-browser:before { content: '\f0c5'} /* */
48 | .octicon-bug:before { content: '\f091'} /* */
49 | .octicon-calendar:before { content: '\f068'} /* */
50 | .octicon-check:before { content: '\f03a'} /* */
51 | .octicon-checklist:before { content: '\f076'} /* */
52 | .octicon-chevron-down:before { content: '\f0a3'} /* */
53 | .octicon-chevron-left:before { content: '\f0a4'} /* */
54 | .octicon-chevron-right:before { content: '\f078'} /* */
55 | .octicon-chevron-up:before { content: '\f0a2'} /* */
56 | .octicon-circle-slash:before { content: '\f084'} /* */
57 | .octicon-circuit-board:before { content: '\f0d6'} /* */
58 | .octicon-clippy:before { content: '\f035'} /* */
59 | .octicon-clock:before { content: '\f046'} /* */
60 | .octicon-cloud-download:before { content: '\f00b'} /* */
61 | .octicon-cloud-upload:before { content: '\f00c'} /* */
62 | .octicon-code:before { content: '\f05f'} /* */
63 | .octicon-color-mode:before { content: '\f065'} /* */
64 | .octicon-comment-add:before,
65 | .octicon-comment:before { content: '\f02b'} /* */
66 | .octicon-comment-discussion:before { content: '\f04f'} /* */
67 | .octicon-credit-card:before { content: '\f045'} /* */
68 | .octicon-dash:before { content: '\f0ca'} /* */
69 | .octicon-dashboard:before { content: '\f07d'} /* */
70 | .octicon-database:before { content: '\f096'} /* */
71 | .octicon-clone:before,
72 | .octicon-desktop-download:before { content: '\f0dc'} /* */
73 | .octicon-device-camera:before { content: '\f056'} /* */
74 | .octicon-device-camera-video:before { content: '\f057'} /* */
75 | .octicon-device-desktop:before { content: '\f27c'} /* */
76 | .octicon-device-mobile:before { content: '\f038'} /* */
77 | .octicon-diff:before { content: '\f04d'} /* */
78 | .octicon-diff-added:before { content: '\f06b'} /* */
79 | .octicon-diff-ignored:before { content: '\f099'} /* */
80 | .octicon-diff-modified:before { content: '\f06d'} /* */
81 | .octicon-diff-removed:before { content: '\f06c'} /* */
82 | .octicon-diff-renamed:before { content: '\f06e'} /* */
83 | .octicon-ellipsis:before { content: '\f09a'} /* */
84 | .octicon-eye-unwatch:before,
85 | .octicon-eye-watch:before,
86 | .octicon-eye:before { content: '\f04e'} /* */
87 | .octicon-file-binary:before { content: '\f094'} /* */
88 | .octicon-file-code:before { content: '\f010'} /* */
89 | .octicon-file-directory:before { content: '\f016'} /* */
90 | .octicon-file-media:before { content: '\f012'} /* */
91 | .octicon-file-pdf:before { content: '\f014'} /* */
92 | .octicon-file-submodule:before { content: '\f017'} /* */
93 | .octicon-file-symlink-directory:before { content: '\f0b1'} /* */
94 | .octicon-file-symlink-file:before { content: '\f0b0'} /* */
95 | .octicon-file-text:before { content: '\f011'} /* */
96 | .octicon-file-zip:before { content: '\f013'} /* */
97 | .octicon-flame:before { content: '\f0d2'} /* */
98 | .octicon-fold:before { content: '\f0cc'} /* */
99 | .octicon-gear:before { content: '\f02f'} /* */
100 | .octicon-gift:before { content: '\f042'} /* */
101 | .octicon-gist:before { content: '\f00e'} /* */
102 | .octicon-gist-secret:before { content: '\f08c'} /* */
103 | .octicon-git-branch-create:before,
104 | .octicon-git-branch-delete:before,
105 | .octicon-git-branch:before { content: '\f020'} /* */
106 | .octicon-git-commit:before { content: '\f01f'} /* */
107 | .octicon-git-compare:before { content: '\f0ac'} /* */
108 | .octicon-git-merge:before { content: '\f023'} /* */
109 | .octicon-git-pull-request-abandoned:before,
110 | .octicon-git-pull-request:before { content: '\f009'} /* */
111 | .octicon-globe:before { content: '\f0b6'} /* */
112 | .octicon-graph:before { content: '\f043'} /* */
113 | .octicon-heart:before { content: '\2665'} /* ♥ */
114 | .octicon-history:before { content: '\f07e'} /* */
115 | .octicon-home:before { content: '\f08d'} /* */
116 | .octicon-horizontal-rule:before { content: '\f070'} /* */
117 | .octicon-hubot:before { content: '\f09d'} /* */
118 | .octicon-inbox:before { content: '\f0cf'} /* */
119 | .octicon-info:before { content: '\f059'} /* */
120 | .octicon-issue-closed:before { content: '\f028'} /* */
121 | .octicon-issue-opened:before { content: '\f026'} /* */
122 | .octicon-issue-reopened:before { content: '\f027'} /* */
123 | .octicon-jersey:before { content: '\f019'} /* */
124 | .octicon-key:before { content: '\f049'} /* */
125 | .octicon-keyboard:before { content: '\f00d'} /* */
126 | .octicon-law:before { content: '\f0d8'} /* */
127 | .octicon-light-bulb:before { content: '\f000'} /* */
128 | .octicon-link:before { content: '\f05c'} /* */
129 | .octicon-link-external:before { content: '\f07f'} /* */
130 | .octicon-list-ordered:before { content: '\f062'} /* */
131 | .octicon-list-unordered:before { content: '\f061'} /* */
132 | .octicon-location:before { content: '\f060'} /* */
133 | .octicon-gist-private:before,
134 | .octicon-mirror-private:before,
135 | .octicon-git-fork-private:before,
136 | .octicon-lock:before { content: '\f06a'} /* */
137 | .octicon-logo-github:before { content: '\f092'} /* */
138 | .octicon-mail:before { content: '\f03b'} /* */
139 | .octicon-mail-read:before { content: '\f03c'} /* */
140 | .octicon-mail-reply:before { content: '\f051'} /* */
141 | .octicon-mark-github:before { content: '\f00a'} /* */
142 | .octicon-markdown:before { content: '\f0c9'} /* */
143 | .octicon-megaphone:before { content: '\f077'} /* */
144 | .octicon-mention:before { content: '\f0be'} /* */
145 | .octicon-milestone:before { content: '\f075'} /* */
146 | .octicon-mirror-public:before,
147 | .octicon-mirror:before { content: '\f024'} /* */
148 | .octicon-mortar-board:before { content: '\f0d7'} /* */
149 | .octicon-mute:before { content: '\f080'} /* */
150 | .octicon-no-newline:before { content: '\f09c'} /* */
151 | .octicon-octoface:before { content: '\f008'} /* */
152 | .octicon-organization:before { content: '\f037'} /* */
153 | .octicon-package:before { content: '\f0c4'} /* */
154 | .octicon-paintcan:before { content: '\f0d1'} /* */
155 | .octicon-pencil:before { content: '\f058'} /* */
156 | .octicon-person-add:before,
157 | .octicon-person-follow:before,
158 | .octicon-person:before { content: '\f018'} /* */
159 | .octicon-pin:before { content: '\f041'} /* */
160 | .octicon-plug:before { content: '\f0d4'} /* */
161 | .octicon-repo-create:before,
162 | .octicon-gist-new:before,
163 | .octicon-file-directory-create:before,
164 | .octicon-file-add:before,
165 | .octicon-plus:before { content: '\f05d'} /* */
166 | .octicon-primitive-dot:before { content: '\f052'} /* */
167 | .octicon-primitive-square:before { content: '\f053'} /* */
168 | .octicon-pulse:before { content: '\f085'} /* */
169 | .octicon-question:before { content: '\f02c'} /* */
170 | .octicon-quote:before { content: '\f063'} /* */
171 | .octicon-radio-tower:before { content: '\f030'} /* */
172 | .octicon-repo-delete:before,
173 | .octicon-repo:before { content: '\f001'} /* */
174 | .octicon-repo-clone:before { content: '\f04c'} /* */
175 | .octicon-repo-force-push:before { content: '\f04a'} /* */
176 | .octicon-gist-fork:before,
177 | .octicon-repo-forked:before { content: '\f002'} /* */
178 | .octicon-repo-pull:before { content: '\f006'} /* */
179 | .octicon-repo-push:before { content: '\f005'} /* */
180 | .octicon-rocket:before { content: '\f033'} /* */
181 | .octicon-rss:before { content: '\f034'} /* */
182 | .octicon-ruby:before { content: '\f047'} /* */
183 | .octicon-screen-full:before { content: '\f066'} /* */
184 | .octicon-screen-normal:before { content: '\f067'} /* */
185 | .octicon-search-save:before,
186 | .octicon-search:before { content: '\f02e'} /* */
187 | .octicon-server:before { content: '\f097'} /* */
188 | .octicon-settings:before { content: '\f07c'} /* */
189 | .octicon-shield:before { content: '\f0e1'} /* */
190 | .octicon-log-in:before,
191 | .octicon-sign-in:before { content: '\f036'} /* */
192 | .octicon-log-out:before,
193 | .octicon-sign-out:before { content: '\f032'} /* */
194 | .octicon-squirrel:before { content: '\f0b2'} /* */
195 | .octicon-star-add:before,
196 | .octicon-star-delete:before,
197 | .octicon-star:before { content: '\f02a'} /* */
198 | .octicon-stop:before { content: '\f08f'} /* */
199 | .octicon-repo-sync:before,
200 | .octicon-sync:before { content: '\f087'} /* */
201 | .octicon-tag-remove:before,
202 | .octicon-tag-add:before,
203 | .octicon-tag:before { content: '\f015'} /* */
204 | .octicon-telescope:before { content: '\f088'} /* */
205 | .octicon-terminal:before { content: '\f0c8'} /* */
206 | .octicon-three-bars:before { content: '\f05e'} /* */
207 | .octicon-thumbsdown:before { content: '\f0db'} /* */
208 | .octicon-thumbsup:before { content: '\f0da'} /* */
209 | .octicon-tools:before { content: '\f031'} /* */
210 | .octicon-trashcan:before { content: '\f0d0'} /* */
211 | .octicon-triangle-down:before { content: '\f05b'} /* */
212 | .octicon-triangle-left:before { content: '\f044'} /* */
213 | .octicon-triangle-right:before { content: '\f05a'} /* */
214 | .octicon-triangle-up:before { content: '\f0aa'} /* */
215 | .octicon-unfold:before { content: '\f039'} /* */
216 | .octicon-unmute:before { content: '\f0ba'} /* */
217 | .octicon-versions:before { content: '\f064'} /* */
218 | .octicon-watch:before { content: '\f0e0'} /* */
219 | .octicon-remove-close:before,
220 | .octicon-x:before { content: '\f081'} /* */
221 | .octicon-zap:before { content: '\26A1'} /* ⚡ */
222 |
--------------------------------------------------------------------------------
/public/index/css/octicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lmq101600/romance_mvc/1dae1e939f86ac6aa241fc6e0e530768784c1425/public/index/css/octicons.ttf
--------------------------------------------------------------------------------
/public/index/css/octicons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lmq101600/romance_mvc/1dae1e939f86ac6aa241fc6e0e530768784c1425/public/index/css/octicons.woff
--------------------------------------------------------------------------------
/public/index/css/primer.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}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;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{box-sizing:border-box}input,select,textarea,button{font:13px/1.4 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,"Segoe UI Emoji","Segoe UI Symbol"}body{font:13px/1.4 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#333;background-color:#fff}a{color:#4183c4;text-decoration:none}a:hover,a:active{text-decoration:underline}hr,.rule{height:0;margin:15px 0;overflow:hidden;background:transparent;border:0;border-bottom:1px solid #ddd}hr:before,.rule:before{display:table;content:""}hr:after,.rule:after{display:table;clear:both;content:""}h1,h2,h3,h4,h5,h6{margin-top:15px;margin-bottom:15px;line-height:1.1}h1{font-size:30px}h2{font-size:21px}h3{font-size:16px}h4{font-size:14px}h5{font-size:12px}h6{font-size:11px}small{font-size:90%}blockquote{margin:0}.lead{margin-bottom:30px;font-size:20px;font-weight:300;color:#555}.text-muted{color:#999}.text-danger{color:#bd2c00}.text-emphasized{font-weight:bold;color:#333}ul,ol{padding:0;margin-top:0;margin-bottom:0}ol ol,ul ol{list-style-type:lower-roman}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}dd{margin-left:0}tt,code{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}pre{margin-top:0;margin-bottom:0;font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace}.container{width:980px;margin-right:auto;margin-left:auto}.container:before{display:table;content:""}.container:after{display:table;clear:both;content:""}.columns{margin-right:-10px;margin-left:-10px}.columns:before{display:table;content:""}.columns:after{display:table;clear:both;content:""}.column{float:left;padding-right:10px;padding-left:10px}.one-third{width:33.333333%}.two-thirds{width:66.666667%}.one-fourth{width:25%}.one-half{width:50%}.three-fourths{width:75%}.one-fifth{width:20%}.four-fifths{width:80%}.single-column{padding-right:10px;padding-left:10px}.table-column{display:table-cell;width:1%;padding-right:10px;padding-left:10px;vertical-align:top}fieldset{padding:0;margin:0;border:0}label{font-size:13px;font-weight:bold}.form-control,input[type="text"],input[type="password"],input[type="email"],input[type="number"],input[type="tel"],input[type="url"],textarea{min-height:34px;padding:7px 8px;font-size:13px;color:#333;vertical-align:middle;background-color:#fff;background-repeat:no-repeat;background-position:right center;border:1px solid #ccc;border-radius:3px;outline:none;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075)}.form-control.focus,.form-control:focus,input[type="text"].focus,input[type="text"]:focus,input[type="password"].focus,input[type="password"]:focus,input[type="email"].focus,input[type="email"]:focus,input[type="number"].focus,input[type="number"]:focus,input[type="tel"].focus,input[type="tel"]:focus,input[type="url"].focus,input[type="url"]:focus,textarea.focus,textarea:focus{border-color:#51a7e8;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 5px rgba(81,167,232,0.5)}input.input-contrast,.input-contrast{background-color:#fafafa}input.input-contrast:focus,.input-contrast:focus{background-color:#fff}::-webkit-input-placeholder,:-moz-placeholder{color:#aaa}::-webkit-validation-bubble-message{font-size:12px;color:#fff;background:#9c2400;border:0;border-radius:3px;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.1)}input::-webkit-validation-bubble-icon{display:none}::-webkit-validation-bubble-arrow{background-color:#9c2400;border:solid 1px #9c2400;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.1)}input.input-mini{min-height:26px;padding-top:4px;padding-bottom:4px;font-size:12px}input.input-large{padding:6px 10px;font-size:16px}.input-block{display:block;width:100%}.input-monospace{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}dl.form{margin:15px 0}dl.form input[type="text"],dl.form input[type="password"],dl.form input[type="email"],dl.form input[type="url"],dl.form textarea{background-color:#fafafa}dl.form input[type="text"]:focus,dl.form input[type="password"]:focus,dl.form input[type="email"]:focus,dl.form input[type="url"]:focus,dl.form textarea:focus{background-color:#fff}dl.form>dt{margin:0 0 6px}dl.form>dt label{position:relative}dl.form.flattened>dt{float:left;margin:0;line-height:32px}dl.form.flattened>dd{line-height:32px}dl.form>dd input[type="text"],dl.form>dd input[type="password"],dl.form>dd input[type="email"],dl.form>dd input[type="url"]{width:440px;max-width:100%;margin-right:5px;background-position-x:98%}dl.form>dd input.shorter{width:130px}dl.form>dd input.short{width:250px}dl.form>dd input.long{width:100%}dl.form>dd textarea{width:100%;height:200px;min-height:200px}dl.form>dd textarea.short{height:50px;min-height:50px}dl.form>dd h4{margin:4px 0 0}dl.form>dd h4.is-error{color:#bd2c00}dl.form>dd h4.is-success{color:#6cc644}dl.form>dd h4+p.note{margin-top:0}dl.form.required>dt>label:after{padding-left:5px;color:#9f1006;content:"*"}.note{min-height:17px;margin:4px 0 2px;font-size:12px;color:#777}.note .spinner{margin-right:3px;vertical-align:middle}.form-checkbox{padding-left:20px;margin:15px 0;vertical-align:middle}.form-checkbox label em.highlight{position:relative;left:-4px;padding:2px 4px;font-style:normal;background:#fffbdc;border-radius:3px}.form-checkbox input[type=checkbox],.form-checkbox input[type=radio]{float:left;margin:2px 0 0 -20px;vertical-align:middle}.form-checkbox .note{display:block;margin:0;font-size:12px;font-weight:normal;color:#666}dl.form .success,dl.form .error,dl.form .indicator{display:none;font-size:12px;font-weight:bold}dl.form.loading{opacity:0.5}dl.form.loading .indicator{display:inline}dl.form.loading .spinner{display:inline-block;vertical-align:middle}dl.form.successful .success{display:inline;color:#390}dl.form.errored>dt label{color:#900}dl.form.errored .error{display:inline;color:#900}dl.form.errored dd.error,dl.form.errored dd.warning{display:inline-block;padding:5px;font-size:11px;color:#494620;background:#f7ea57;border:1px solid #c0b536;border-top-color:#fff;border-bottom-right-radius:3px;border-bottom-left-radius:3px}dl.form.warn .warning{display:inline;color:#900}dl.form.warn dd.warning{display:inline-block;padding:5px;font-size:11px;color:#494620;background:#f7ea57;border:1px solid #c0b536;border-top-color:#fff;border-bottom-right-radius:3px;border-bottom-left-radius:3px}dl.form .form-note{display:inline-block;padding:5px;margin-top:-1px;font-size:11px;color:#494620;background:#f7ea57;border:1px solid #c0b536;border-top-color:#fff;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.hfields{margin:15px 0}.hfields:before{display:table;content:""}.hfields:after{display:table;clear:both;content:""}.hfields dl.form{float:left;margin:0 30px 0 0}.hfields dl.form>dt label{display:inline-block;margin:5px 0 0;color:#666}.hfields dl.form>dt label img{position:relative;top:-2px}.hfields .btn{float:left;margin:28px 25px 0 -20px}.hfields select{margin-top:5px}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.input-group{display:table}.input-group input{position:relative;width:100%}.input-group input:focus{z-index:2}.input-group input[type="text"]+.btn{margin-left:0}.input-group.inline{display:inline-table}.input-group input,.input-group-button{display:table-cell}.input-group-button{width:1%;vertical-align:middle}.input-group input:first-child,.input-group-button:first-child .btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-button:first-child .btn{margin-right:-1px}.input-group input:last-child,.input-group-button:last-child .btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-button:last-child .btn{margin-left:-1px}.form-actions:before{display:table;content:""}.form-actions:after{display:table;clear:both;content:""}.form-actions .btn{float:right}.form-actions .btn+.btn{margin-right:5px}.form-warning{padding:8px 10px;margin:10px 0;font-size:14px;color:#333;background:#ffffe2;border:1px solid #e7e4c2;border-radius:4px}.form-warning p{margin:0;line-height:1.5}.form-warning strong{color:#000}.form-warning a{font-weight:bold}.status-indicator{font:normal normal 16px/1 "octicons";display:inline-block;text-decoration:none;-webkit-font-smoothing:antialiased;margin-left:5px}.status-indicator-success:before{color:#6cc644;content:"\f03a"}.status-indicator-failed:before{color:#bd2c00;content:"\f02d"}.clearfix:before{display:table;content:""}.clearfix:after{display:table;clear:both;content:""}.right{float:right}.left{float:left}.centered{display:block;float:none;margin-left:auto;margin-right:auto}.text-right{text-align:right}.text-left{text-align:left}.danger{color:#c00}.mute{color:#000}.text-diff-added{color:#55a532}.text-diff-deleted{color:#bd2c00}.text-open,.text-success{color:#6cc644}.text-closed{color:#bd2c00}.text-reverted{color:#bd2c00}.text-merged{color:#6e5494}.text-renamed{color:#fffa5d}.text-pending{color:#cea61b}.text-error,.text-failure{color:#bd2c00}.muted-link{color:#777}.muted-link:hover{color:#4183c4;text-decoration:none}.hidden{display:none}.warning{padding:0.5em;margin-bottom:0.8em;font-weight:bold;background-color:#fffccc}.error_box{padding:1em;font-weight:bold;background-color:#ffebe8;border:1px solid #dd3c10}.flash-messages{margin-top:15px;margin-bottom:15px}.flash,.flash-global{position:relative;font-size:14px;line-height:1.6;color:#246;background-color:#e2eef9;border:solid 1px #bac6d3}.flash.flash-warn,.flash-global.flash-warn{color:#4c4a42;background-color:#fff9ea;border-color:#dfd8c2}.flash.flash-error,.flash-global.flash-error{color:#911;background-color:#fcdede;border-color:#d2b2b2}.flash .flash-close,.flash-global .flash-close{float:right;padding:17px;margin-top:-15px;margin-right:-15px;margin-left:20px;color:inherit;text-decoration:none;cursor:pointer;opacity:0.6}.flash .flash-close:hover,.flash-global .flash-close:hover{opacity:1}.flash p:last-child,.flash-global p:last-child{margin-bottom:0}.flash .flash-action,.flash-global .flash-action{float:right;margin-top:-4px;margin-left:20px}.flash a,.flash-global a{font-weight:bold}.flash{padding:15px;border-radius:3px}.flash+.flash{margin-top:5px}.flash-with-icon{padding-left:40px}.flash-with-icon>.octicon{float:left;margin-top:3px;margin-left:-25px}.flash-global{padding:10px;margin-top:-1px;border-width:1px 0}.flash-global h2,.flash-global p{margin-top:0;margin-bottom:0;font-size:14px;line-height:1.4}.flash-global .flash-action{margin-top:5px}.flash-title{margin-top:0;margin-bottom:5px}.avatar{display:inline-block;overflow:hidden;line-height:1;vertical-align:middle;border-radius:3px}.avatar-small{border-radius:2px}.avatar-link{float:left;line-height:1}.avatar-group-item{display:inline-block;margin-bottom:3px}.avatar-parent-child{position:relative}.avatar-child{position:absolute;right:-15%;bottom:-9%;border-radius:2px;box-shadow:-2px -2px 0 rgba(255,255,255,0.8)}.blankslate{position:relative;padding:30px;text-align:center;background-color:#fafafa;border:1px solid #e5e5e5;border-radius:3px;box-shadow:inset 0 0 10px rgba(0,0,0,0.05)}.blankslate.clean-background{background:none;border:0;box-shadow:none}.blankslate.capped{border-radius:0 0 3px 3px}.blankslate.spacious{padding:100px 60px 120px}.blankslate.has-fixed-width{width:485px;margin:0 auto}.blankslate.large-format h3{margin:0.75em 0;font-size:20px}.blankslate.large-format p{font-size:16px}.blankslate.large-format p.has-fixed-width{width:540px;margin:0 auto;text-align:left}.blankslate.large-format .mega-octicon{width:40px;height:40px;font-size:40px;color:#aaa}.blankslate.large-format .octicon-inbox{font-size:48px;line-height:40px}.blankslate code{padding:2px 5px 3px;font-size:14px;background:#fff;border:1px solid #eee;border-radius:3px}.blankslate>.mega-octicon{color:#aaa}.blankslate .mega-octicon+.mega-octicon{margin-left:10px}.tabnav+.blankslate{margin-top:20px}.blankslate .context-loader.large-format-loader{padding-top:50px}.counter{display:inline-block;padding:2px 5px;font-size:11px;font-weight:bold;line-height:1;color:#777;background-color:#eee;border-radius:20px}.btn{position:relative;display:inline-block;padding:6px 12px;font-size:13px;font-weight:bold;line-height:20px;color:#333;white-space:nowrap;vertical-align:middle;cursor:pointer;background-color:#eee;background-image:linear-gradient(#fcfcfc, #eee);border:1px solid #d5d5d5;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none}.btn i{font-style:normal;font-weight:500;opacity:0.6}.btn .octicon{vertical-align:text-top}.btn .counter{text-shadow:none;background-color:#e5e5e5}.btn:focus{text-decoration:none;border-color:#51a7e8;outline:none;box-shadow:0 0 5px rgba(81,167,232,0.5)}.btn:focus:hover,.btn.selected:focus{border-color:#51a7e8}.btn:hover,.btn:active,.btn.zeroclipboard-is-hover,.btn.zeroclipboard-is-active{text-decoration:none;background-color:#ddd;background-image:linear-gradient(#eee, #ddd);border-color:#ccc}.btn:active,.btn.selected,.btn.zeroclipboard-is-active{background-color:#dcdcdc;background-image:none;border-color:#b5b5b5;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15)}.btn.selected:hover{background-color:#cfcfcf}.btn:disabled,.btn:disabled:hover,.btn.disabled,.btn.disabled:hover{color:rgba(102,102,102,0.5);cursor:default;background-color:rgba(229,229,229,0.5);background-image:none;border-color:rgba(197,197,197,0.5);box-shadow:none}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.15);background-color:#60b044;background-image:linear-gradient(#8add6d, #60b044);border-color:#5ca941}.btn-primary .counter{color:#60b044;background-color:#fff}.btn-primary:hover{color:#fff;background-color:#569e3d;background-image:linear-gradient(#79d858, #569e3d);border-color:#4a993e}.btn-primary:active,.btn-primary.selected{text-shadow:0 1px 0 rgba(0,0,0,0.15);background-color:#569e3d;background-image:none;border-color:#418737}.btn-primary.selected:hover{background-color:#4c8b36}.btn-primary:disabled,.btn-primary:disabled:hover,.btn-primary.disabled,.btn-primary.disabled:hover{color:#fefefe;background-color:#add39f;background-image:linear-gradient(#c3ecb4, #add39f);border-color:#b9dcac #b9dcac #a7c89b}.btn-danger{color:#900}.btn-danger:hover{color:#fff;background-color:#b33630;background-image:linear-gradient(#dc5f59, #b33630);border-color:#cd504a}.btn-danger:active,.btn-danger.selected{color:#fff;background-color:#b33630;background-image:none;border-color:#9f312c}.btn-danger.selected:hover{background-color:#9f302b}.btn-danger:disabled,.btn-danger:disabled:hover,.btn-danger.disabled,.btn-danger.disabled:hover{color:#cb7f7f;background-color:#efefef;background-image:linear-gradient(#fefefe, #efefef);border-color:#e1e1e1}.btn-danger:hover .counter,.btn-danger:active .counter,.btn-danger.selected .counter{color:#b33630;background-color:#fff}.btn-outline{color:#4183c4;background-color:#fff;background-image:none;border:1px solid #e5e5e5}.btn-outline .counter{background-color:#eee}.btn-outline:hover,.btn-outline:active,.btn-outline.selected,.btn-outline.zeroclipboard-is-hover,.btn-outline.zeroclipboard-is-active{color:#fff;background-color:#4183c4;background-image:none;border-color:#4183c4}.btn-outline:hover .counter,.btn-outline:active .counter,.btn-outline.selected .counter,.btn-outline.zeroclipboard-is-hover .counter,.btn-outline.zeroclipboard-is-active .counter{color:#4183c4;background-color:#fff}.btn-outline.selected:hover{background-color:#3876b4}.btn-outline:disabled,.btn-outline:disabled:hover,.btn-outline.disabled,.btn-outline.disabled:hover{color:#777;background-color:#fff;background-image:none;border-color:#e5e5e5}.btn-with-count{float:left;border-top-right-radius:0;border-bottom-right-radius:0}.btn-sm{padding:2px 10px}.hidden-text-expander{display:block}.hidden-text-expander.inline{position:relative;top:-1px;display:inline-block;margin-left:5px;line-height:0}.hidden-text-expander a{display:inline-block;height:12px;padding:0 5px;font-size:12px;font-weight:bold;line-height:6px;color:#555;text-decoration:none;vertical-align:middle;background:#ddd;border-radius:1px}.hidden-text-expander a:hover{text-decoration:none;background-color:#ccc}.hidden-text-expander a:active{color:#fff;background-color:#4183c4}.social-count{float:left;padding:2px 7px;font-size:11px;font-weight:bold;line-height:20px;color:#333;vertical-align:middle;background-color:#fff;border:1px solid #ddd;border-left:0;border-top-right-radius:3px;border-bottom-right-radius:3px}.social-count:hover,.social-count:active{text-decoration:none}.social-count:hover{color:#4183c4;cursor:pointer}.btn-block{display:block;width:100%;text-align:center}.btn-group{display:inline-block;vertical-align:middle}.btn-group:before{display:table;content:""}.btn-group:after{display:table;clear:both;content:""}.btn-group .btn{position:relative;float:left}.btn-group .btn:not(:first-child):not(:last-child){border-radius:0}.btn-group .btn:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group .btn:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .btn:hover,.btn-group .btn:active,.btn-group .btn.selected{z-index:2}.btn-group .btn:focus{z-index:3}.btn-group .btn+.btn{margin-left:-1px}.btn-group .btn+.button_to,.btn-group .button_to+.btn,.btn-group .button_to+.button_to{margin-left:-1px}.btn-group .button_to{float:left}.btn-group .button_to .btn{border-radius:0}.btn-group .button_to:first-child .btn{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-group .button_to:last-child .btn{border-top-right-radius:3px;border-bottom-right-radius:3px}.btn-group+.btn-group,.btn-group+.btn{margin-left:5px}.btn-link{display:inline-block;padding:0;font-size:inherit;color:#4183c4;white-space:nowrap;cursor:pointer;background-color:transparent;border:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none}.btn-link:hover,.btn-link:focus{text-decoration:underline}.btn-link:focus{outline:none}.menu{margin-bottom:15px;list-style:none;background-color:#fff;border:1px solid #d8d8d8;border-radius:3px}.menu-item{position:relative;display:block;padding:8px 10px;text-shadow:0 1px 0 #fff;border-bottom:1px solid #eee}.menu-item:first-child{border-top:0;border-top-right-radius:2px;border-top-left-radius:2px}.menu-item:first-child:before{border-top-left-radius:2px}.menu-item:last-child{border-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.menu-item:last-child:before{border-bottom-left-radius:2px}.menu-item:hover{text-decoration:none;background-color:#f9f9f9}.menu-item.selected{font-weight:bold;color:#222;cursor:default;background-color:#fff}.menu-item.selected:before{position:absolute;top:0;left:0;bottom:0;width:2px;content:"";background-color:#d26911}.menu-item .octicon{margin-right:5px;width:16px;color:#333;text-align:center}.menu-item .counter{float:right;margin-left:5px}.menu-item .menu-warning{float:right;color:#d26911}.menu-item .avatar{float:left;margin-right:5px}.menu-item.alert .counter{color:#bd2c00}.menu-heading{display:block;padding:8px 10px;margin-top:0;margin-bottom:0;font-size:13px;font-weight:bold;line-height:20px;color:#555;background-color:#f7f7f7;border-bottom:1px solid #eee}.menu-heading:hover{text-decoration:none}.menu-heading:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.menu-heading:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px;border-bottom:0}.tabnav{margin-top:0;margin-bottom:15px;border-bottom:1px solid #ddd}.tabnav .counter{margin-left:5px}.tabnav-tabs{margin-bottom:-1px}.tabnav-tab{display:inline-block;padding:8px 12px;font-size:14px;line-height:20px;color:#666;text-decoration:none;border:1px solid transparent;border-bottom:0}.tabnav-tab.selected{color:#333;background-color:#fff;border-color:#ddd;border-radius:3px 3px 0 0}.tabnav-tab:hover{text-decoration:none}.tabnav-extra{display:inline-block;padding-top:10px;margin-left:10px;font-size:12px;color:#666}.tabnav-extra>.octicon{margin-right:2px}a.tabnav-extra:hover{color:#4183c4;text-decoration:none}.tabnav-btn{margin-left:10px}.filter-list{list-style-type:none}.filter-list.small .filter-item{padding:4px 10px;margin:0 0 2px;font-size:12px}.filter-list.pjax-active .filter-item{color:#777;background-color:transparent}.filter-list.pjax-active .filter-item.pjax-active{color:#fff;background-color:#4183c4}.filter-item{position:relative;display:block;padding:8px 10px;margin-bottom:5px;overflow:hidden;font-size:14px;color:#777;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;border-radius:3px}.filter-item:hover{text-decoration:none;background-color:#eee}.filter-item.selected{color:#fff;background-color:#4183c4}.filter-item.selected .octicon-remove-close{float:right;opacity:0.8}.filter-item .count{float:right;font-weight:bold}.filter-item .bar{position:absolute;top:2px;right:0;bottom:2px;z-index:-1;display:inline-block;background-color:#f1f1f1}.state{display:inline-block;padding:4px 8px;font-weight:bold;line-height:20px;color:#fff;text-align:center;border-radius:3px;background-color:#999}.state-open,.state-proposed,.state-reopened{background-color:#6cc644}.state-merged{background-color:#6e5494}.state-closed{background-color:#bd2c00}.state-renamed{background-color:#fffa5d}.tooltipped{position:relative}.tooltipped:after{position:absolute;z-index:1000000;display:none;padding:5px 8px;font:normal normal 11px/1.5 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#fff;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:rgba(0,0,0,0.8);border-radius:3px;-webkit-font-smoothing:subpixel-antialiased}.tooltipped:before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:rgba(0,0,0,0.8);pointer-events:none;content:"";border:5px solid transparent}.tooltipped:hover:before,.tooltipped:hover:after,.tooltipped:active:before,.tooltipped:active:after,.tooltipped:focus:before,.tooltipped:focus:after{display:inline-block;text-decoration:none}.tooltipped-multiline:hover:after,.tooltipped-multiline:active:after,.tooltipped-multiline:focus:after{display:table-cell}.tooltipped-s:after,.tooltipped-se:after,.tooltipped-sw:after{top:100%;right:50%;margin-top:5px}.tooltipped-s:before,.tooltipped-se:before,.tooltipped-sw:before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,0.8)}.tooltipped-se:after{right:auto;left:50%;margin-left:-15px}.tooltipped-sw:after{margin-right:-15px}.tooltipped-n:after,.tooltipped-ne:after,.tooltipped-nw:after{right:50%;bottom:100%;margin-bottom:5px}.tooltipped-n:before,.tooltipped-ne:before,.tooltipped-nw:before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,0.8)}.tooltipped-ne:after{right:auto;left:50%;margin-left:-15px}.tooltipped-nw:after{margin-right:-15px}.tooltipped-s:after,.tooltipped-n:after{-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%)}.tooltipped-w:after{right:100%;bottom:50%;margin-right:5px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%)}.tooltipped-w:before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,0.8)}.tooltipped-e:after{bottom:50%;left:100%;margin-left:5px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%)}.tooltipped-e:before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,0.8)}.tooltipped-multiline:after{width:-moz-max-content;width:-webkit-max-content;max-width:250px;word-break:break-word;word-wrap:normal;white-space:pre-line;border-collapse:separate}.tooltipped-multiline.tooltipped-s:after,.tooltipped-multiline.tooltipped-n:after{right:auto;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.tooltipped-multiline.tooltipped-w:after,.tooltipped-multiline.tooltipped-e:after{right:100%}@media screen and (min-width: 0\0){.tooltipped-multiline:after{width:250px}}.tooltipped-sticky:before,.tooltipped-sticky:after{display:inline-block}.tooltipped-sticky.tooltipped-multiline:after{display:table-cell}.fullscreen-overlay-enabled.dark-theme .tooltipped:after{color:#000;background:rgba(255,255,255,0.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-s:before,.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-se:before,.fullscreen-overlay-enabled.dark-theme .tooltipped .tooltipped-sw:before{border-bottom-color:rgba(255,255,255,0.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-n:before,.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-ne:before,.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-nw:before{border-top-color:rgba(255,255,255,0.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-e:before{border-right-color:rgba(255,255,255,0.8)}.fullscreen-overlay-enabled.dark-theme .tooltipped.tooltipped-w:before{border-left-color:rgba(255,255,255,0.8)}.flex-table{display:table}.flex-table-item{display:table-cell;width:1%;white-space:nowrap;vertical-align:middle}.flex-table-item-primary{width:99%}.css-truncate.css-truncate-target,.css-truncate .css-truncate-target{display:inline-block;max-width:125px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}.css-truncate.expandable.zeroclipboard-is-hover .css-truncate-target,.css-truncate.expandable.zeroclipboard-is-hover.css-truncate-target,.css-truncate.expandable:hover .css-truncate-target,.css-truncate.expandable:hover.css-truncate-target{max-width:10000px !important}
--------------------------------------------------------------------------------
/public/index/css/prism.css:
--------------------------------------------------------------------------------
1 | code[class*=language-],pre[class*=language-]{color:#000;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono',monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f9f9f9}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#a67f59;background:rgba(255,255,255,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.function{color:#DD4A68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}
--------------------------------------------------------------------------------
/public/index/css/repo-card.css:
--------------------------------------------------------------------------------
1 | .repo-card{position:relative;width:100%;margin-bottom:20px;list-style-type:none;background:#f7f7f7;border-radius:3px;overflow:hidden}.repo-card:hover .repo-card-title{text-shadow:0 0 8px #fffcfc;color:transparent}.repo-card:hover .repo-card-body{opacity:1}.repo-card .draft-tag{position:absolute;top:-1px;left:10px}.repo-card:nth-child(3n+3){margin-right:0}.repo-card-title{padding:0 15px;margin:10px 0;display:table-cell;width:100%;height:100%;font-size:19px;font-weight:700;text-align:center;vertical-align:middle}.repo-card-body-wrapper{display:table}.repo-card-body{padding:10px;margin-top:0;display:table-cell;overflow:hidden;font-size:12px;line-height:1.5em;position:absolute;bottom:0;top:0;right:0;left:0;background:rgba(0,0,0,.6);opacity:0;color:#fff;text-align:center;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.repo-card-image{position:relative;display:table;width:100.5%;height:100px;margin:-1px;background:url(/assets/images/octicons-bg.png) center #555;-webkit-box-shadow:inset 0 10px 20px rgba(0,0,0,.1);box-shadow:inset 0 10px 20px rgba(0,0,0,.1);text-shadow:0 1px 2px rgba(0,0,0,.3);color:#fff;border-top-right-radius:3px;border-top-left-radius:3px}.repo-card-meta{padding:0 8px;margin-top:5px;margin-bottom:5px;color:#fff;font-size:13px}.repo-card-meta .meta-info{margin-right:10px}.repo-card-meta .last-updated{float:right;margin-right:0}
--------------------------------------------------------------------------------
/public/index/css/repo-list.css:
--------------------------------------------------------------------------------
1 | .repo-list-name,.repo-list-name .prefix,.repo-list-name .slash{font-weight:400}.repo-list{position:relative;padding-left:0}.repo-list .participation-graph{position:absolute;right:0;bottom:0;left:0;z-index:-1}.repo-list .participation-graph.disabled{display:none}.repo-list .participation-graph .bars{position:absolute;bottom:0}.repo-list-item{position:relative;padding-top:30px;padding-bottom:30px;list-style:none;border-bottom:1px solid #eee}.repo-list-name{margin:0 0 8px;font-size:20px;line-height:1.2}.repo-list-name:hover{text-decoration:none;color:#4169E1}.repo-list-name .slash{margin-right:-4px;margin-left:-4px}.repo-list-description{max-width:550px;margin-top:8px;margin-bottom:0;font-size:14px;color:#666}.repo-list-stats{margin-top:6px;float:right;font-size:12px;font-weight:700;color:#888}.repo-list-stats .repo-list-stat-item{margin-left:8px;display:inline-block;color:#888;text-decoration:none}.repo-list-stats .repo-list-stat-item:hover{color:#4183c4}.repo-list-stats .repo-list-stat-item>.octicon{font-size:14px}.repo-list-info{display:inline-block;height:100%;margin-top:0;margin-bottom:0;font-size:12px;color:#888;vertical-align:middle}.repo-list-info .octicon{margin-top:-3px;font-size:12px;vertical-align:middle}.repo-list-meta{display:block;margin-top:8px;margin-bottom:0;font-size:13px;color:#888}.repo-list-meta .avatar{margin-top:-2px}.repo-list-meta a:hover{text-decoration:none}
--------------------------------------------------------------------------------
/public/index/css/responsive.css:
--------------------------------------------------------------------------------
1 | .container{width:auto;max-width:1020px;padding-left:20px;padding-right:20px}.mobile-visible{display:none}@media (max-width:60em){.collection-card{width:45%;height:225px}}@media (max-width:35em){.collection-card{width:100%;max-width:350px;margin:10px auto}}@media (max-width:50em){.mobile-block{display:block;float:none}.mobile-hidden{display:none}.mobile-visible{display:inline-block}.mobile-md-section{padding:10px 0}.column{width:100%!important;float:none;margin-bottom:1.25rem}.home .banner .collection-head{padding:1rem!important}.collection-head h1.collection-header{font-size:2rem!important}.site-header{padding-bottom:0}.site-header h1{float:none;text-align:center;border-bottom:1px solid #eee;padding-bottom:20px;margin-bottom:20px}.site-header .site-header-nav{float:none;display:block;margin-bottom:0;text-align:center}.site-header .site-header-nav .site-header-nav-item{padding:0 .5rem;margin-left:0;font-size:1rem;height:2rem;line-height:2rem;display:inline-block}.mini-repo-list-item .owner.css-truncate-target,.mini-repo-list-item .repo-and-owner.css-truncate-target{max-width:300px}.markdown-body h1{font-size:2rem}.markdown-body h2{font-size:1.4rem}.markdown-body h3{font-size:1.2rem}.markdown-body h4{font-size:1.1em}.markdown-body h5{font-size:1em}}@media (max-width:20em){.site-header-nav .site-header-nav-item{min-width:20%}.collection-head .collection-info .meta-info{display:block;margin-top:15px}}
--------------------------------------------------------------------------------
/public/index/css/share.min.css:
--------------------------------------------------------------------------------
1 | @font-face{font-family:"iconfont";src:url("../fonts/iconfont.eot");src:url("../fonts/iconfont.eot?#iefix") format("embedded-opentype"),url("../fonts/iconfont.woff") format("woff"),url("../fonts/iconfont.ttf") format("truetype"),url("../fonts/iconfont.svg#iconfont") format("svg")}.iconfont{font-family:"iconfont" !important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:0.2px;-moz-osx-font-smoothing:grayscale}.icon-tencent:before{content:"\e607"}.icon-qq:before{content:"\e601"}.icon-weibo:before{content:"\e602"}.icon-linkedin:before{content:"\e600"}.icon-wechat:before{content:"\e603"}.icon-douban:before{content:"\e604"}.icon-qzone:before{content:"\e606"}.icon-diandian:before{content:"\e608"}.icon-facebook:before{content:"\e609"}.icon-google:before{content:"\e60b"}.icon-twitter:before{content:"\e60c"}.share-component a{position:relative;text-decoration:none;margin:3px;display:inline-block}.share-component .iconfont{position:relative;display:inline-block;width:32px;height:32px;font-size:20px;border-radius:50%;line-height:32px;border:1px solid #eee;text-align:center;transition:background 0.6s ease-out 0s}.share-component .iconfont:hover{background:#f4f4f4;color:#fff}.share-component .icon-weibo{line-height:28px;color:#E6162D;border-color:#E6162D}.share-component .icon-weibo:hover{background:#E6162D}.share-component .icon-tencent{line-height:28px;color:#56b6e7;border-color:#56b6e7}.share-component .icon-tencent:hover{background:#56b6e7}.share-component .icon-qq{line-height:28px;color:#56b6e7;border-color:#56b6e7}.share-component .icon-qq:hover{background:#56b6e7}.share-component .icon-qzone{line-height:29px;color:#ffe21f;border-color:#ffe21f}.share-component .icon-qzone:hover{background:#ffe21f}.share-component .icon-douban{line-height:28px;color:#33b045;border-color:#33b045}.share-component .icon-douban:hover{background:#33b045}.share-component .icon-linkedin{line-height:28px;color:#0077B5;border-color:#0077B5}.share-component .icon-linkedin:hover{background:#0077B5}.share-component .icon-facebook{color:#44619D;border-color:#44619D}.share-component .icon-facebook:hover{background:#44619D}.share-component .icon-google{color:#db4437;border-color:#db4437}.share-component .icon-google:hover{background:#db4437}.share-component .icon-twitter{color:#55acee;border-color:#55acee}.share-component .icon-twitter:hover{background:#55acee}.share-component .icon-diandian{color:#307DCA;border-color:#307DCA}.share-component .icon-diandian:hover{background:#307DCA}.share-component .icon-wechat{line-height:28px;position:relative;color:#7bc549;border-color:#7bc549}.share-component .icon-wechat:hover{background:#7bc549}.share-component .icon-wechat .wechat-qrcode{opacity:0;filter:alpha(opacity=0);visibility:hidden;position:absolute;z-index:9;top:-205px;left:-84px;width:200px;height:192px;color:#666;font-size:12px;text-align:center;background-color:#fff;box-shadow:0 2px 10px #aaa;transition:all 200ms;-webkit-tansition:all 350ms;-moz-transition:all 350ms}.share-component .icon-wechat .wechat-qrcode h4{font-weight:normal;height:26px;line-height:26px;font-size:12px;background-color:#f3f3f3;margin:0;padding:0;color:#777}.share-component .icon-wechat .wechat-qrcode .qrcode{width:105px;margin:10px auto}.share-component .icon-wechat .wechat-qrcode .help p{font-weight:normal;line-height:16px;padding:0;margin:0}.share-component .icon-wechat .wechat-qrcode:after{content:'';position:absolute;left:50%;margin-left:-6px;bottom:-13px;width:0;height:0;border-width:8px 6px 6px 6px;border-style:solid;border-color:#fff transparent transparent transparent}.share-component .icon-wechat:hover .wechat-qrcode{opacity:1;filter:alpha(opacity=100);visibility:visible}
2 |
--------------------------------------------------------------------------------
/public/index/css/user-content.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * GitHub User Content Stylesheets v1.2.4 (https://github.com/primer/user-content)
3 | * Copyright 2014 GitHub, Inc.
4 | * Licensed under MIT (https://github.com/primer/user-content/blob/master/LICENSE.md).
5 | */
6 |
7 | .markdown-body{overflow:hidden;font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;word-wrap:break-word}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body .absent{color:#c00}.markdown-body .anchor{position:absolute;top:0;bottom:0;left:0;display:block;padding-right:6px;padding-left:30px;margin-left:-30px}.markdown-body .anchor:focus{outline:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{position:relative;margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{display:none;color:#000;vertical-align:middle}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{height:1em;padding-left:8px;margin-left:-30px;line-height:1;text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{display:inline-block}.markdown-body h1 tt,.markdown-body h1 code,.markdown-body h2 tt,.markdown-body h2 code,.markdown-body h3 tt,.markdown-body h3 code,.markdown-body h4 tt,.markdown-body h4 code,.markdown-body h5 tt,.markdown-body h5 code,.markdown-body h6 tt,.markdown-body h6 code{font-size:inherit}.markdown-body h1{padding-bottom:.3em;font-size:2.25em;line-height:1.2;border-bottom:1px solid #eee}.markdown-body h2{padding-bottom:.3em;font-size:1.75em;line-height:1.225;border-bottom:1px solid #eee}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h4{font-size:1.25em}.markdown-body h5{font-size:1em}.markdown-body h6{font-size:1em;color:#777}.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre{margin-top:0;margin-bottom:16px}.markdown-body hr{height:4px;padding:0;margin:16px 0;background-color:#e7e7e7;border:0 none}.markdown-body ul,.markdown-body ol{padding-left:2em}.markdown-body ul.no-list,.markdown-body ol.no-list{padding:0;list-style-type:none}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:700}.markdown-body table th,.markdown-body table td{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:before,.markdown-body code:after,.markdown-body tt:before,.markdown-body tt:after{letter-spacing:-.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit;vertical-align:text-top}.markdown-body pre>code{padding:0;margin:0;font-size:100%;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0}.markdown-body pre{word-wrap:normal}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:before,.markdown-body pre code:after,.markdown-body pre tt:before,.markdown-body pre tt:after{content:normal}.highlight{background:#fff}.highlight .c{font-style:italic;color:#998}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .k{font-weight:700}.highlight .o{font-weight:700}.highlight .cm{font-style:italic;color:#998}.highlight .cp{font-weight:700;color:#999}.highlight .c1{font-style:italic;color:#998}.highlight .cs{font-style:italic;font-weight:700;color:#999}.highlight .gd{color:#000;background-color:#fdd}.highlight .gd .x{color:#000;background-color:#faa}.highlight .ge{font-style:italic}.highlight .gr{color:#a00}.highlight .gh{color:#999}.highlight .gi{color:#000;background-color:#dfd}.highlight .gi .x{color:#000;background-color:#afa}.highlight .go{color:#888}.highlight .gp{color:#555}.highlight .gs{font-weight:700}.highlight .gu{font-weight:700;color:purple}.highlight .gt{color:#a00}.highlight .kc{font-weight:700}.highlight .kd{font-weight:700}.highlight .kn{font-weight:700}.highlight .kp{font-weight:700}.highlight .kr{font-weight:700}.highlight .kt{font-weight:700;color:#458}.highlight .m{color:#099}.highlight .s{color:#d14}.highlight .n{color:#333}.highlight .na{color:teal}.highlight .nb{color:#0086b3}.highlight .nc{font-weight:700;color:#458}.highlight .no{color:teal}.highlight .ni{color:purple}.highlight .ne{font-weight:700;color:#900}.highlight .nf{font-weight:700;color:#900}.highlight .nn{color:#555}.highlight .nt{color:navy}.highlight .nv{color:teal}.highlight .ow{font-weight:700}.highlight .w{color:#bbb}.highlight .mf{color:#099}.highlight .mh{color:#099}.highlight .mi{color:#099}.highlight .mo{color:#099}.highlight .sb{color:#d14}.highlight .sc{color:#d14}.highlight .sd{color:#d14}.highlight .s2{color:#d14}.highlight .se{color:#d14}.highlight .sh{color:#d14}.highlight .si{color:#d14}.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .bp{color:#999}.highlight .vc{color:teal}.highlight .vg{color:teal}.highlight .vi{color:teal}.highlight .il{color:#099}.highlight .gc{color:#999;background-color:#eaf2f5}.type-csharp .highlight .k{color:#00f}.type-csharp .highlight .kt{color:#00f}.type-csharp .highlight .nf{font-weight:400;color:#000}.type-csharp .highlight .nc{color:#2b91af}.type-csharp .highlight .nn{color:#000}.type-csharp .highlight .s{color:#a31515}.type-csharp .highlight .sc{color:#a31515}
--------------------------------------------------------------------------------
/public/index/fonts/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lmq101600/romance_mvc/1dae1e939f86ac6aa241fc6e0e530768784c1425/public/index/fonts/.DS_Store
--------------------------------------------------------------------------------
/public/index/fonts/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lmq101600/romance_mvc/1dae1e939f86ac6aa241fc6e0e530768784c1425/public/index/fonts/iconfont.ttf
--------------------------------------------------------------------------------
/public/index/fonts/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lmq101600/romance_mvc/1dae1e939f86ac6aa241fc6e0e530768784c1425/public/index/fonts/iconfont.woff
--------------------------------------------------------------------------------
/public/index/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lmq101600/romance_mvc/1dae1e939f86ac6aa241fc6e0e530768784c1425/public/index/images/.DS_Store
--------------------------------------------------------------------------------
/public/index/images/1f604.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lmq101600/romance_mvc/1dae1e939f86ac6aa241fc6e0e530768784c1425/public/index/images/1f604.png
--------------------------------------------------------------------------------
/public/index/images/21.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lmq101600/romance_mvc/1dae1e939f86ac6aa241fc6e0e530768784c1425/public/index/images/21.gif
--------------------------------------------------------------------------------
/public/index/js/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lmq101600/romance_mvc/1dae1e939f86ac6aa241fc6e0e530768784c1425/public/index/js/.DS_Store
--------------------------------------------------------------------------------
/vendor/csl/framework/src/Image.php:
--------------------------------------------------------------------------------
1 | replaceSeperator($saveDir);
14 | $this->saveDir = $saveDir;
15 | if (!$this->checkDir($saveDir)) {
16 | exit('目录不存在或不可读写');
17 | }
18 |
19 | $this->imageType = $this->getImageType($imageType);
20 | $this->isRandFile = $isRandFile;
21 | }
22 |
23 | public function watermark(string $dest,string $source,int $pos = 5,float $alpha = 100)
24 | {
25 | // 1)、路径检测
26 | if (!file_exists($dest) || !file_exists($source)) {
27 | exit('源文件或目标文件不存在!');
28 | }
29 |
30 | // 2)、计算图片尺寸
31 | list($destWidth,$destHeight) = getimagesize($dest);
32 | list($sourceWidth,$sourceHeight) = getimagesize($source);
33 | if ($sourceWidth > $destWidth || $sourceHeight > $destHeight) {
34 | exit('水印图片比目标图片大!');
35 | }
36 |
37 | // 3)、计算水印位置
38 | $position = $this->getPosition($destWidth,$destHeight,$sourceWidth,$sourceHeight,$pos);
39 |
40 | // 4)、合并图片
41 | $destImage = $this->openImage($dest);
42 | $sourceImage = $this->openImage($source);
43 | if (!$destImage || !$sourceImage) {
44 | exit('无法打开图片文件!');
45 | }
46 | imagecopymerge($destImage, $sourceImage, $position['x'], $position['y'], 0, 0, $sourceWidth, $sourceHeight, $alpha);
47 |
48 | // 5)、保存图片
49 | $this->saveFile($destImage,$dest);
50 |
51 | // 6)、释放资源
52 | imagedestroy($sourceImage);
53 | imagedestroy($destImage);
54 | }
55 |
56 |
57 | public function zoom($imageFile,$width,$height)
58 | {
59 | // 1)、路径检测
60 | if (!file_exists($imageFile)) {
61 | exit('图片文件不存在!');
62 | }
63 |
64 | // 2)、计算缩放尺寸
65 | list($oldWidth,$oldHeight) = getimagesize($imageFile);
66 | $size = $this->computeScale($oldWidth,$oldHeight,$width,$height);
67 |
68 | // 3)、合并图片
69 | $oldImage = $this->openImage($imageFile);
70 | $destImage = imagecreatetruecolor($width, $height);
71 | $this->merageImage($destImage,$oldImage,$size,$oldWidth, $oldHeight);
72 |
73 |
74 | // 4)、保存图片
75 | $this->saveFile($destImage,$imageFile);
76 | // 5)、释放资源
77 | imagedestroy($oldImage);
78 | imagedestroy($destImage);
79 |
80 | }
81 |
82 | protected function merageImage($destImage,$oldImage,$size,$oldWidth, $oldHeight)
83 | {
84 | //获取原图片的透明色
85 | $alphaColor = imagecolortransparent($oldImage);
86 | // var_dump($alphaColor);
87 | if ($alphaColor < 0) {
88 | //指定目标图片中黑色是透明色
89 | $alphaColor = imagecolorallocate($destImage, 0, 0, 0);
90 | }
91 | // var_dump($alphaColor);
92 | imagefill($destImage, 0, 0, $alphaColor);
93 | imagecolortransparent($destImage,$alphaColor);
94 |
95 | imagecopyresampled($destImage, $oldImage, $size['x'], $size['y'], 0, 0, $size['newWidth'], $size['newHeight'], $oldWidth, $oldHeight);
96 | }
97 |
98 | protected function computeScale($oldWidth,$oldHeight,$width,$height)
99 | {
100 | $widthScale = $width / $oldWidth;
101 | $heightScale = $height / $oldHeight;
102 |
103 | $minScale = min($widthScale,$heightScale);
104 | $newWidth = $oldWidth * $minScale;
105 | $newHeight = $oldHeight * $minScale;
106 |
107 | if ($widthScale < $heightScale) {
108 | $y = ($height - $newHeight) / 2;
109 | $x = 0;
110 | } else {
111 | $y = 0;
112 | $x = ($width - $newWidth)/2;
113 | }
114 | return ['newWidth'=>$newWidth,'newHeight'=>$newHeight,'x'=>$x,'y'=>$y];
115 |
116 | }
117 | protected function saveFile($image,$originFile)
118 | {
119 | if ($this->isRandFile) {
120 | $path = $this->saveDir . uniqid() .'.'. $this->imageType;
121 | } else {
122 | $path = $this->saveDir . pathinfo($originFile)['filename'].'.'.$this->imageType;
123 | }
124 | $funcName = 'image' . $this->imageType;
125 | // var_dump($path,$funcName);die;
126 | if (function_exists($funcName)) {
127 | $funcName($image,$path);
128 | } else {
129 | exit('图片无法保存!');
130 | }
131 | }
132 |
133 | protected function openImage($imageFile)
134 | {
135 | //image
136 | $type = exif_imagetype($imageFile);
137 |
138 | $types = [0,'gif','jpeg','png','swf','psd','wbmp'];
139 |
140 | $funcName = 'imagecreatefrom'. $types[$type];
141 |
142 | if (function_exists($funcName)) {
143 | return $funcName($imageFile);
144 | }
145 | return false;
146 | }
147 | protected function getPosition($destWidth,$destHeight,$sourceWidth,$sourceHeight,$pos)
148 | {
149 | if ($pos < 1 || $pos > 9) {
150 | $x = rand(0,$destWidth-$sourceWidth);
151 | $y = rand(0,$destHeight-$sourceHeight);
152 | } else {
153 | $x = ($pos -1)%3 * ($destWidth - $sourceWidth) / 2;
154 | $y = (int)(($pos-1)/3) * ($destHeight - $sourceHeight) / 2;
155 | }
156 | return ['x' => $x,'y' => $y];
157 | }
158 |
159 | /**
160 | * 转换图片格式
161 | *
162 | * @param $imageType 用户给的图片格式
163 | */
164 | protected function getImageType($imageType)
165 | {
166 | $types = [
167 | 'jpg' => 'jpeg',
168 | 'pjpeg' => 'jpeg',
169 | 'bmp' => 'wbmp'
170 | ];
171 | if (array_key_exists($imageType, $types)) {
172 | $imageType = $types[$imageType];
173 | }
174 | return $imageType;
175 | }
176 |
177 | /**
178 | * [checkDir 检测目录]
179 | * @param [type] $dir [目录名]
180 | * @return [type] [description]
181 | */
182 | protected function checkDir($dir)
183 | {
184 | //不是目录则创建
185 | if (!is_dir($dir)) {
186 | return mkdir($dir,0777,true);
187 | }
188 | //检测目录是否具有读写权限
189 | if (!is_readable($dir) || !is_writable($dir)) {
190 | chmod($dir, 0777);
191 | }
192 | return true;
193 | }
194 |
195 | /**
196 | * [replaceSeperator 替换目录中的反斜线为正斜线]
197 | * @param [type] $dir [目录名]
198 | * @return [type] [返回替换后的目录名]
199 | */
200 | protected function replaceSeperator($dir)
201 | {
202 | // 4/demo/ 4\demo 4\demo\
203 | $dir = str_replace('\\', '/', $dir);
204 | $dir = rtrim($dir,'/') .'/';
205 | return $dir;
206 | }
207 | }
--------------------------------------------------------------------------------
/vendor/csl/framework/src/Model.php:
--------------------------------------------------------------------------------
1 | '*',
21 | 'table' => '',
22 | 'where' =>'',
23 | 'group' =>'',
24 | 'having' =>'',
25 | 'order' =>'',
26 | 'limit' =>'',
27 | 'values' =>''
28 | ];
29 |
30 | /**
31 | * 初始化方法
32 | * @param array $config [参数数组]
33 | */
34 | public function __construct(array $config=null)
35 | {
36 | $config = include('config/database.php');
37 |
38 | $this->host = $config['DB_HOST'];
39 | $this->user = $config['DB_USER'];
40 | $this->password = $config['DB_PASSWORD'];
41 | $this->charset = $config['DB_CHARSET'];
42 | $this->dbName = $config['DB_NAME'];
43 | $this->prefix = $config['DB_PREFIX'];
44 |
45 | $this->link = $this->connect();//连接数据库
46 | $this->table = $this->getTable();//获取表名
47 |
48 | //从配置文件获取缓存路径
49 | $cache = $config['DB_CACHE'];
50 | if ($this->checkDir($cache)) {
51 | $this->cacheDir = $cache;
52 | } else {
53 | exit('缓存目录不存在');
54 | }
55 | //初始化缓存目录
56 | $this->cacheField = $this->initCache();
57 |
58 | //初始化参数数组
59 | $this->options = $this->initOptions();
60 |
61 | }
62 |
63 | //初始化缓存字段
64 | protected function initCache()
65 | {
66 | //获取缓存文件
67 | $path = rtrim($this->cacheDir ,'/').'/'. $this->table . '.php';
68 | //如果缓存文件存在
69 | if (file_exists($path)) {
70 | return include $path;
71 | }
72 |
73 | //不存在,获取表结构
74 | $sql = 'desc ' . $this->table ;
75 | // $data = $this->query($sql,MYSQLI_ASSOC);
76 | $result = mysqli_query($this->link,$sql);
77 | $fields = [];
78 | //将字段添加到数组
79 | while ($row = mysqli_fetch_assoc($result))
80 | {
81 | //把主键也添加到数组
82 | if ($row['Key'] == 'PRI') {
83 | $fields['PRI'] = $row['Field'];
84 | }
85 | $fields[] = $row['Field'];
86 | }
87 |
88 | //生成字段数组语法形式
89 | $str = "";
90 | //写缓存文件
91 | file_put_contents($path, $str);
92 |
93 | return $fields;
94 | }
95 |
96 | //检测目录
97 | protected function checkDir($dir)
98 | {
99 | if (!is_dir($dir)) {
100 | return mkdir($dir,0777,true);
101 | }
102 | if (!is_readable($dir) || !is_writable($dir)) {
103 | return chmod($dir, 0777);
104 | }
105 | return true;
106 | }
107 |
108 | /**
109 | * 获取表名
110 | * @return [type] [返回表名]
111 | */
112 | protected function getTable()
113 | {
114 | //查看是否有默认值
115 | if (!empty($this->table)) {
116 | return $this->prefix . $this->table;
117 | }
118 |
119 | //从类名获得表名
120 | //获取当前对象的类名,并且转换为小写
121 | $className = strtolower(get_class($this));
122 | //使用反斜线分割类名 'app\index\model\usermodel'
123 | $className = explode('\\',$className);
124 | //获取类名
125 | $className = array_pop($className);
126 | //获取类名model前的部分,例如usermodel,得到user
127 | if (stripos($className, 'model') === false) {
128 | //类名中不包含model
129 | return $this->prefix .$className;
130 | }
131 | $className = substr($className, 0,-5);
132 |
133 | return $this->prefix .$className;
134 | }
135 |
136 | /**
137 | * 初始化参数数组
138 | * @return [type] [参数数组]
139 | */
140 | protected function initOptions()
141 | {
142 | //把$this->cacheFields变成字符串
143 | unset($this->cacheField['PRI']);
144 | $tmp = join(',',$this->cacheField);
145 | return [
146 | 'field' =>$tmp,
147 | 'table' => $this->table,
148 | 'where' =>'',
149 | 'group' =>'',
150 | 'having' =>'',
151 | 'order' =>'',
152 | 'limit' =>'',
153 | 'values' => ''
154 | ];
155 | }
156 |
157 | //数据库连接
158 | protected function connect()
159 | {
160 | $link = mysqli_connect($this->host,$this->user,$this->password);
161 | if (!$link) {
162 | exit('数据库连接失败');
163 | }
164 | if (!mysqli_select_db($link,$this->dbName)) {
165 | mysqli_close($link);
166 | exit('选择数据库失败');
167 | }
168 | if (!mysqli_set_charset($link,$this->charset)) {
169 | mysqli_close($link);
170 | exit('字符集设置失败');
171 | }
172 | return $link;
173 | }
174 |
175 | /**
176 | * 获取查询条件
177 | * @param [type] $where [查询条件]
178 | * @return [type] [返回查询条件]
179 | */
180 | public function where($where)
181 | {
182 | //'uid = 100 and password="123"'
183 | //['uid =100','password="123"']
184 | if (is_string($where)) {
185 | $this->options['where'] = " where " . $where;
186 | } else if (is_array($where)) {
187 | $this->options['where'] = " where " .join(" and ",$where);
188 | }
189 |
190 | return $this;
191 | }
192 | /**
193 | * 获取分组条件
194 | * @param [type] $group [分组条件]
195 | * @return [type] [返回分组条件]
196 | */
197 | public function group($group)
198 | {
199 | //['uid','name','password']
200 | if (is_string($group)) {
201 | $this->options['group'] = " group by " . $group;
202 | } else if (is_array($group)) {
203 | $this->options['group'] = " group by " .join(" , ",$group);
204 | }
205 | return $this;
206 | }
207 |
208 | /**
209 | * 获取分组过滤条件
210 | * @param [type] $having [分组过滤条件]
211 | * @return [type] [返回分组过滤条件]
212 | */
213 | public function having($having)
214 | {
215 | if (is_string($having)) {
216 | $this->options['having'] = " having " . $having;
217 | } else if (is_array($having)) {
218 | $this->options['having'] = " having " .join(" and ",$having);
219 | }
220 | return $this;
221 | }
222 | /**
223 | * 获取排序条件
224 | * @param [type] $order [排序条件]
225 | * @return [type] [返回排序条件]
226 | */
227 | public function order($order)
228 | {
229 | //'uid desc,name asc'
230 | //['uid desc','name asc']
231 | if (is_string($order)) {
232 | $this->options['order'] = " order by " . $order;
233 | } else if (is_array($order)) {
234 | $this->options['order'] = " order by " .join(" , ",$order);
235 | }
236 | return $this;
237 | }
238 | /**
239 | * 获取limit条件
240 | * @param [type] $limit [limit条件]
241 | * @return [type] [返回limit条件]
242 | */
243 | public function limit($limit)
244 | {
245 | if (is_string($limit)) {
246 | $this->options['limit'] = " limit " . $limit;
247 | } else if (is_array($limit)) {
248 | $this->options['limit'] = " limit " .join(" , ",$limit);
249 | }
250 | return $this;
251 | }
252 |
253 | /**
254 | * 获取字段列表
255 | * @param [type] $field [字段列表]
256 | * @return [type] [返回字段列表]
257 | */
258 | public function field($field)
259 | {
260 | $this->options['field'] = $field;
261 | return $this;
262 | }
263 |
264 | /**
265 | * 返回查询结果
266 | * @param [type] $resultType [结果类型]
267 | * @return [type] [结果数组]
268 | */
269 | public function select($resultType= MYSQLI_BOTH)
270 | {
271 | //select uid,username from bbs_user where uid<100 group by uid having uid>0 order by uid limit 5";
272 |
273 | $sql = "SELECT %FIELD% FROM %TABLE% %WHERE% %GROUP% %HAVING% %ORDER% %LIMIT%";
274 | $sql = str_replace([
275 | '%FIELD%',
276 | '%TABLE%',
277 | '%WHERE%',
278 | '%GROUP%',
279 | '%HAVING%',
280 | '%ORDER%',
281 | '%LIMIT%'
282 | ],
283 | [
284 | 'field' => $this->options['field'],
285 | 'table' => $this->options['table'],
286 | 'where' => $this->options['where'],
287 | 'group' => $this->options['group'],
288 | 'having' => $this->options['having'],
289 | 'order' => $this->options['order'],
290 | 'limit' => $this->options['limit']
291 | ], $sql);
292 |
293 | return $this->query($sql,$resultType);
294 | }
295 |
296 | /**
297 | * 查询数据
298 | * @param [type] $sql [sql语句]
299 | * @param [type] $resultType [结果类型]
300 | * @return [type] [成功范湖结果数组,失败返回false]
301 | */
302 | public function query($sql,$resultType)
303 | {
304 | //给sql赋值
305 | $this->sql = $sql;
306 | //清空参数数组
307 | $this->options = $this->initOptions();
308 | $result = mysqli_query($this->link,$sql);
309 | if ($result && mysqli_affected_rows($this->link)>0) {
310 | return mysqli_fetch_all($result,$resultType);//返回所有查询结果
311 | }
312 | return false;
313 | }
314 |
315 | /**
316 | * 更新语句
317 | * @param array $data [更新的关联数组]
318 | * @return [type] [成功返回true,失败返回false]
319 | */
320 | //['uid'=>1,'name'=>'jerry']
321 | public function update(array $data)
322 | {
323 | //给字符数据添加单引号
324 | $data = $this->addQuote($data);
325 |
326 | //过滤无效字段
327 | $data = $this->validField($data);
328 |
329 | //把关联数组变成字符串
330 | $str = $this->array2String($data);
331 | $this->options['set'] = $str;
332 |
333 | $sql = "UPDATE %TABLE% SET %SET% %WHERE% %ORDER% %LIMIT%";
334 | $sql = str_replace(
335 | [
336 | '%TABLE%',
337 | '%SET%',
338 | '%WHERE%',
339 | '%ORDER%',
340 | '%LIMIT%'
341 | ],
342 | [
343 | 'table' => $this->options['table'],
344 | 'set' => $this->options['set'],
345 | 'where' => $this->options['where'],
346 | 'order' => $this->options['order'],
347 | 'limit' => $this->options['limit']
348 | ], $sql);
349 | return $this->exec($sql,false);
350 | }
351 |
352 | /**
353 | * 关联数组转换为字符串
354 | * @param [type] $data [关联数组]
355 | * @return [type] [字符串]
356 | */
357 | protected function array2String($data)
358 | {
359 | $str = '';
360 | if (is_array($data)) {
361 | foreach ($data as $key => $value) {
362 | //uid=1,
363 | $str .= $key . ' = '.$value . ',';
364 | }
365 | }
366 | return rtrim($str,',');
367 | }
368 |
369 |
370 | /**
371 | * [insert 插入数据]
372 | * @param array $data [必须是关联数组,键是字段名]
373 | * @return [type] [成功是true,失败是false]
374 | */
375 | public function insert(array $data)
376 | {
377 | //给字符数据添加单引号
378 | $data = $this->addQuote($data);
379 |
380 | //过滤无效字段
381 | $data = $this->validField($data);
382 |
383 | //取出键拼接为字符串
384 | $this->options['field'] = join(',',array_keys($data));
385 | //取出值拼接为字符串
386 | $this->options['values'] = join(',',array_values($data));
387 |
388 | $sql = "insert into %TABLE%(%FIELD%) VALUES(%VALUES%)";
389 | $sql = str_replace([
390 | '%TABLE%',
391 | '%FIELD%',
392 | '%VALUES%'
393 | ],
394 | [
395 | 'table' => $this->options['table'],
396 | 'field' => $this->options['field'],
397 | 'values' => $this->options['values']
398 | ], $sql);
399 | return $this->exec($sql,$isInsertId = false);
400 | }
401 |
402 | /**
403 | * 执行增删改语句
404 | * @param [type] $sql [sql语句]
405 | * @param boolean $isInsertId [是否返回自增主键的值]
406 | * @return [type] [如果执行成功,isInsertId为真,返回主键值,否则返回true,失败返回false]
407 | */
408 | public function exec($sql,$isInsertId = false)
409 | {
410 | $this->sql = $sql;
411 | $this->options = $this->initOptions();
412 |
413 | $result = mysqli_query($this->link,$sql);
414 | if ($result && $isInsertId) {
415 | return mysqli_insert_id($this->link);//返回自增主键的值
416 | }
417 | return $result;
418 |
419 | }
420 |
421 | /**
422 | * 给字符串元素两边添加单引号
423 | * @param [type] $data [添加单引号后的数组]
424 | */
425 | protected function addQuote($data)
426 | {
427 | if (is_array($data)) {
428 | foreach ($data as $key => $value) {
429 | if (is_string($value)) {
430 | $data[$key] = "'$value'";
431 | }
432 | }
433 | }
434 | return $data;
435 | }
436 |
437 | /**
438 | * 过滤无效字段
439 | * @param [type] $data [字段数组]
440 | * @return [type] [返回过滤后的数组]
441 | */
442 | protected function validField($data)
443 | {
444 | //['uid'=>2,'name'=>'tom']
445 | //[0=>'uid',1=>'name']
446 | //交换缓存的键值
447 | $cacheField = array_flip($this->cacheField);
448 | $data = array_intersect_key($data,$cacheField);
449 | return $data;
450 | }
451 |
452 | /**
453 | * 魔术方法call
454 | * @param [type] $name [方法名]
455 | * @param [type] $paras [方法参数]
456 | * @return [type] [结果数组]
457 | */
458 | public function __call($name,$paras)
459 | {
460 | if (substr($name,0,5) == 'getBy') {
461 | $fieldName = substr($name, 5);
462 | return $this->getBy($fieldName,$paras);
463 | }
464 | }
465 |
466 | /**
467 | * [根据字段获取记录]
468 | * @param [type] $name [字段名]
469 | * @param [type] $value [字段值]
470 | * @return [type] [记录的关联数组]
471 | */
472 | public function getBy($name,$value)
473 | {
474 | $name = strtolower($name);
475 | if (count($value)>0) {
476 | if (is_string($value[0])) {
477 | $this->options['where'] = ' where '.$name . " = '".$value[0] ."'";
478 | } else {
479 | $this->options['where'] = ' where '.$name . ' = '.$value[0];
480 | }
481 | }
482 | return $this->select(MYSQLI_ASSOC);
483 | }
484 |
485 | /**
486 | * 获取最后执行的sql
487 | * @param [type] $name [属性名]
488 | * @return [type] [返回sql]
489 | */
490 | public function __get($name)
491 | {
492 | if ('sql' ==$name) {
493 | return $this->sql;
494 | }
495 | }
496 | }
497 |
498 |
--------------------------------------------------------------------------------
/vendor/csl/framework/src/Page.php:
--------------------------------------------------------------------------------
1 | total = $total < 1 ? $this->total :$total;
21 | $this->countOfPage = $count < 1? $this->countOfPage : $count;
22 | $this->totalPage = ceil($this->total/$this->countOfPage);
23 | $this->getPage();//获取当前页
24 |
25 | $this->url = $this->getUrl();//url不带page参数
26 | }
27 |
28 | /**
29 | * 获取首页的url
30 | *
31 | * @return ( description_of_the_return_value )
32 | */
33 | public function first()
34 | {
35 | return $this->setUrl(1);
36 | }
37 |
38 | public function last()
39 | {
40 | return $this->setUrl($this->totalPage);
41 | }
42 |
43 | public function next()
44 | {
45 | if ($this->page >= $this->totalPage) {
46 | return $this->setUrl($this->totalPage);
47 | }
48 | var_dump($this->page);
49 | return $this->setUrl($this->page + 1);
50 | }
51 |
52 | public function pre()
53 | {
54 | if ($this->page <=1) {
55 | return $this->first();
56 | }
57 | return $this->setUrl($this->page - 1);
58 | }
59 |
60 | public function limit()
61 | {
62 | $offset = ($this->page - 1) * $this->countOfPage;
63 | return ' ' . $offset . "," . $this->countOfPage;
64 | }
65 |
66 | public function allPage()
67 | {
68 | return [
69 | 'first' =>$this->first(),
70 | 'pre' =>$this->pre(),
71 | 'next' =>$this->next(),
72 | 'last' =>$this->last()
73 | ];
74 | }
75 | /**
76 | * 拼接url
77 | *
78 | * @param $page 页数
79 | *
80 | * @return ( description_of_the_return_value )
81 | */
82 | protected function setUrl($page)
83 | {
84 | //判断url中是否有?
85 | //http://localhost/1707/hight/5/Page.php?page=1
86 | if (stripos($this->url,'?')) {
87 | return $this->url . "&page=".$page;
88 | } else {
89 | return $this->url . "?page=".$page;
90 | }
91 | }
92 | protected function getUrl()
93 | {
94 | $url = $_SERVER['REQUEST_SCHEME'] .'://';//获取协议
95 | $url .= $_SERVER['HTTP_HOST']; //拼接主机地址
96 | $url .= ':' . $_SERVER['SERVER_PORT'];//拼接端口
97 | $data = parse_url($_SERVER['REQUEST_URI']);
98 | $url .= $data['path'];//拼接路径
99 | if (!empty($data['query'])) {
100 | parse_str($data['query'],$paras);//获取查询参数,然后放到$paras数组中
101 | unset($paras['page']);//销毁page元素
102 | $url .= '?' . http_build_query($paras);
103 |
104 | }
105 | $url = rtrim($url,'?');//干掉最后一个问号
106 | return $url;
107 | }
108 |
109 | /**
110 | * 获取当前页数
111 | */
112 | protected function getPage()
113 | {
114 | //如果url中没有page
115 | if (empty($_GET['page'])) {
116 | $this->page = 1;
117 | }else{
118 | $page = $_GET['page'];
119 | if($page < 2){
120 | $this->page = 1;
121 | }else if($page > $this->totalPage){
122 | $this->page = $this->totalPage;
123 | }else{
124 | $this->page = $page;
125 | }
126 | }
127 | }
128 | }
129 |
130 | /*
131 | 1.写一个div,里面包含a标签:首页、前一页、后一页,尾页,要能够在项目直接使用
132 | 2 增加一个方法,跳转指定页
133 | 3 增加一个方法,生成如百度的分页格式:1 2 3 4 5
134 | */
--------------------------------------------------------------------------------
/vendor/csl/framework/src/Template.php:
--------------------------------------------------------------------------------
1 | tplDir = $this->checkDir($tplDir);
14 | $this->cacheDir = $this->checkDir($cacheDir);
15 | $this->expireTime = $expireTime;
16 | }
17 |
18 | /**
19 | * [assign 分配变量]
20 | * @param [type] $name [变量名]
21 | * @param [type] $value [变量值]
22 | * @return [type] [没有]
23 | */
24 | public function assign($name,$value)
25 | {
26 | $this->vars[$name] = $value;
27 | }
28 |
29 |
30 | /**
31 | * [display 编译模板文件,加载缓存文件,显示]
32 | * @param [type] $viewFile [模板文件名]
33 | * @param [type] $isExtract [是否还原变量]
34 | * @return [type] [无]
35 | */
36 | public function display($viewFile,$isExtract=true)
37 | {
38 | //1 拼接模板文件和缓存文件的路径
39 | $tplFile = $this->tplDir . $viewFile;
40 | $cacheFile = $this->joinCachePath($viewFile);
41 |
42 | //2 检测模板文件是否存在
43 | if (!file_exists($tplFile)) {
44 | exit('模板文件不存在!');
45 | }
46 |
47 | //3 编译模板文件
48 | //3.1模板文件不存在或者模板文件修改时间晚于缓存文件创建时间
49 | if(!file_exists($cacheFile)||
50 | filectime($cacheFile) < filemtime($tplFile)||
51 | filectime($cacheFile) + $this->expireTime < time()
52 | )
53 | {
54 | // index/index.html
55 | $this->checkDir(dirname($cacheFile));
56 | $content = $this->compile($tplFile);
57 | file_put_contents($cacheFile, $content);
58 | } else {
59 | $this->updateInclude($tplFile);
60 | }
61 |
62 |
63 | //4 分配变量。加载缓存
64 | if ($isExtract) {
65 | extract($this->vars);
66 | include $cacheFile;
67 | }
68 |
69 | }
70 |
71 | protected function updateInclude($tplFile)
72 | {
73 | //读取模板文件内容
74 | $content = file_get_contents($tplFile);
75 | $pattern = '/\{include (.+)\}/';
76 | preg_match_all($pattern, $content, $matches);
77 | foreach ($matches[1] as $key => $value) {
78 | $value = trim($value ,'\'"');
79 | $this->display($value,false);
80 | }
81 | }
82 |
83 | protected function compile($fileName)
84 | {
85 | //读文件内容
86 | $content = file_get_contents($fileName);
87 | $rule = [
88 | '{$%%}' => '=$\1;?>',
89 | '{if %%}' => '',
90 | '{/if}' => '',
91 | '{else}' => '',
92 | '{elseif %%}' => '',
93 | '{else if %%}' => '',
94 | '{foreach %%}' => '',
95 | '{/foreach}' => '',
96 | '{while %%}' => '',
97 | '{/while}' => '',
98 | '{for %%}' => '',
99 | '{/for}' => '',
100 | '{continue}' => '',
101 | '{break}' => '',
102 | '{$%%++}' => '',
103 | '{$%%--}' => '',
104 | '{/*}' => ' '*/?>',
106 | '{section}' => ' '?>',
108 | '{$%% = $%%}' => '',
109 | '{default}' => '',
110 | '{include %%}' => '',
111 | ];
112 |
113 | foreach ($rule as $key => $value) {
114 | $key = preg_quote($key,'/');
115 | $pattern = '/'.str_replace('%%', '(.+)', $key) . '/U';
116 | if (stripos($key,'include')) {
117 | $content = preg_replace_callback($pattern, [$this,'parseInclude'], $content);
118 | } else {
119 | $content = preg_replace($pattern, $value, $content);
120 | }
121 | }
122 | return $content;
123 | }
124 |
125 | protected function parseInclude($data)
126 | {
127 | $file = trim($data[1],'\'"');
128 | $this->display($file,false);//编译模板文件,不还原变量
129 | $cacheFile = $this->joinCachePath($file);//缓存文件的路径
130 | return "";
131 | }
132 |
133 | //index.html index_html.php
134 | protected function joinCachePath($viewFile)
135 | {
136 | return $this->cacheDir . str_replace('.', '_', $viewFile).'.php';
137 | }
138 | protected function checkDir($dir)
139 | {
140 | $dir = str_replace('\\','/', $dir);
141 | $dir = rtrim($dir,'/') . '/';
142 | $flag = true;
143 | if (!is_dir($dir)) {
144 | $flag = mkdir($dir,0777,true);
145 | } else if (!is_readable($dir) || !is_writable($dir)) {
146 | $flag = chmod($dir, 0777);
147 | }
148 | if (!$flag) {
149 | exit('目录不存在或不可写');
150 | }
151 | return $dir;
152 | }
153 |
154 | }
--------------------------------------------------------------------------------
/vendor/csl/framework/src/Upload.php:
--------------------------------------------------------------------------------
1 | '没有上传信息',
18 | -2=>'上传目录不存在',
19 | -3 => '上传目录不具备读写权限',
20 | -4 =>'上传超过规定',
21 | -5 => '文件后缀不符合要求',
22 | -6 => '文件MIME类型不符合规定',
23 | -7 => '不是上传文件',
24 | 0 => '上传成功',
25 | 1 =>'上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值',
26 | 2=>'上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值',
27 | 3=>'文件只有部分被上传。',
28 | 4=>'没有文件被上传。',
29 | 6=>'找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进',
30 | 7=>'文件写入失败',
31 |
32 | ];
33 | //['uploadDir'=>'./upload/2017/06/14','isRandName'=>false]
34 | public function __construct(array $config = null)
35 | {
36 | if (!empty($config)) {
37 | foreach ($config as $key => $value) {
38 | //判断是否存在该属性
39 | if (property_exists(__CLASS__, $key)) {
40 | $this->$key = $value;
41 | }
42 | }
43 | }
44 | $this->uploadDir = $this->replaceSeperator($this->uploadDir);
45 | }
46 |
47 | /**
48 | * [upload 文件上传]
49 | * @param [type] $key [表单中的input的name]
50 | * @return [type] [如果上传错误,返回false,
51 | * 如果成功,返回文件路径]
52 | */
53 | public function upload($key)
54 | {
55 | // 1)、检查上传信息
56 | if (!$this->checkUploadInfo($key)) {
57 | return false;
58 | }
59 |
60 | // 2)、检查上传目录
61 | if (!$this->checkUploadDir($this->uploadDir)) {
62 | return false;
63 | }
64 |
65 | // 3)、检查标准上传错误
66 | if (!$this->checkSystemError()) {
67 | return false;
68 | }
69 | // 4)、检查自定义的错误(大小、后缀、MIME)
70 | if (!$this->checkCustomError()) {
71 | return false;
72 | }
73 | // 5)、判断是否是上传文件
74 | if (!$this->checkUploadedFile()) {
75 | return false;
76 | }
77 | // 6)、移动上传文件到指定目录
78 | if (!$this->checkMoveFile()) {
79 | return false;
80 | }
81 | return $this->uploadedPath;
82 | }
83 |
84 | protected function checkMoveFile()
85 | {
86 | //1 拼接目录
87 | $path = $this->uploadDir;
88 | if ($this->isdateDir) {
89 | $date = date('Y/m/d');//2017/06/14
90 |
91 | //如果不存在日期目录,则创建
92 | if (!is_dir($date)) {
93 | mkdir($date,0777,true);
94 | }
95 |
96 | //在上传目录下创建日期目录
97 | $path .= $date .'/';
98 | }
99 |
100 | //2 是否是随机文件名
101 | if ($this->isRandName) {
102 | $path .= uniqid() . '.'.$this->extName($this->uploadInfo['name']);
103 | } else {
104 | $path .= $this->uploadInfo['name'];
105 | }
106 |
107 | if (!move_uploaded_file($this->uploadInfo['tmp_name'], $path)) {
108 | $this->errNo = -8;
109 | return false;
110 | }
111 | $this->uploadedPath = $path;
112 | return true;
113 |
114 | }
115 | protected function extName($file)
116 | {
117 | return pathinfo($file)['extension'];
118 | }
119 |
120 | protected function checkUploadedFile()
121 | {
122 | if (!is_uploaded_file($this->uploadInfo['tmp_name'])) {
123 | $this->errNo = -7;
124 | return false;
125 | }
126 | return true;
127 | }
128 |
129 | protected function checkCustomError()
130 | {
131 | //1 检测文件大小是否超过规定
132 | if ($this->uploadInfo['size'] > $this->maxFileSize) {
133 | $this->errNo = -4;
134 | return false;
135 | }
136 |
137 | //检测文件后缀是否在规定范围内
138 | $extension = pathinfo($this->uploadInfo['name'])['extension'];
139 | if (!in_array($extension, $this->allowedSubfix)) {
140 | $this->errNo = -5;
141 | return false;
142 | }
143 |
144 | // mime类型检测
145 | if (!in_array($this->uploadInfo['type'], $this->allowedMIME)) {
146 | $this->errNo = -6;
147 | return false;
148 | }
149 | return true;
150 | }
151 |
152 | /**
153 | * [checkSystemError 检测系统错误]
154 | * @return [type] []
155 | */
156 | protected function checkSystemError()
157 | {
158 | $this->errNo = $this->uploadInfo['error'];
159 | if ($this->errNo == 0) {
160 | return true;
161 | }
162 | return false;
163 | }
164 |
165 | /**
166 | * [checkDir 检测目录]
167 | * @param [type] $dir [目录名]
168 | * @return [type] [description]
169 | */
170 | protected function checkUploadDir($dir)
171 | {
172 | //不是目录则创建
173 | if (!is_dir($dir)) {
174 | if (!mkdir($dir,0777,true)) {
175 | $this->errNo = -2;
176 | return false;
177 | }
178 | return true;
179 | }
180 | //检测目录是否具有读写权限
181 | if (!is_readable($dir) || !is_writable($dir)) {
182 | if (!chmod($dir, 0777)) {
183 | $this->errNo = -3;
184 | return false;
185 | }
186 | }
187 | return true;
188 | }
189 |
190 | protected function checkUploadInfo($key)
191 | {
192 | //1 检测有没有上传信息
193 | if ($_FILES[$key]['error']) {
194 | $this->errNo = -1;
195 | return false;
196 | }
197 | //2 保存上传信息
198 | $this->uploadInfo = $_FILES[$key];
199 | return true;
200 | }
201 |
202 | /**
203 | * [replaceSeperator 替换目录中的反斜线为正斜线]
204 | * @param [type] $dir [目录名]
205 | * @return [type] [返回替换后的目录名]
206 | */
207 | protected function replaceSeperator($dir)
208 | {
209 | // 4/demo/ 4\demo 4\demo\
210 | $dir = str_replace('\\', '/', $dir);
211 | $dir = rtrim($dir,'/') .'/';
212 | return $dir;
213 | }
214 | }
--------------------------------------------------------------------------------
/vendor/csl/framework/src/VerifyCode.php:
--------------------------------------------------------------------------------
1 | width = $width <= 0?$this->width:$width;
16 | $this->height = $height <= 0?$this->height : $height;
17 | $this->imageType = $this->getImageType($imageType);
18 | $this->len = ($len < 3 || $len >6)?$this->len : $len;
19 | }
20 |
21 | /**
22 | * 获取验证码字符串
23 | *
24 | * @return The code.
25 | */
26 | public function getCode()
27 | {
28 | return $this->code;
29 | }
30 | /**
31 | * 产生验证码
32 | */
33 | public function outputImage()
34 | {
35 | //- 1)、创建画布
36 | $this->createImage();
37 |
38 | // - 2)、生成验证码字符串
39 | $this->generateCodeString();
40 |
41 | // - 3)、将验证码字符串画到画布上
42 | $this->drawCode();
43 | // - 4)、画干扰元素
44 | $this->drawDisturb();
45 | // - 5)、发送验证码
46 | $this->sendCode();
47 |
48 | // - 6)、释放资源
49 | $this->destory();
50 | }
51 |
52 | /**
53 | * 销毁画布
54 | */
55 | protected function destory()
56 | {
57 | imagedestroy($this->canvas);
58 | }
59 | /**
60 | * 画干扰元素
61 | */
62 | protected function drawDisturb()
63 | {
64 | for ($i=0; $i < 200; $i++) {
65 | $x = rand(1,$this->width-1);
66 | $y = rand(1,$this->height - 1);
67 | imagesetpixel($this->canvas, $x, $y, $this->randColor(0,100));
68 | }
69 | }
70 |
71 | /**
72 | * 画字符
73 | */
74 | protected function drawCode()
75 | {
76 | for ($i=0; $i <$this->len ; $i++) {
77 | $x = 5 + $i * (int)(($this->width-5)/$this->len);
78 | $y = rand(5,$this->height - 15);
79 | imagechar($this->canvas, 5, $x, $y, $this->code[$i], $this->randColor(0,127));
80 | }
81 | }
82 | /**
83 | * { function_description }生成验证码字符串
84 | */
85 | protected function generateCodeString()
86 | {
87 | $str = '';
88 | for ($i=0; $i < $this->len; $i++) {
89 | $str .= rand(0,9);
90 | }
91 |
92 | $this->code = $str;
93 | }
94 |
95 | /**
96 | * 输出验证码
97 | */
98 | protected function sendCode()
99 | {
100 | header("content-type:image/" . $this->imageType);
101 | //imagepng imagejpeg imagewbmp
102 | $funcName = 'image' . $this->imageType;
103 | if (function_exists($funcName)) {
104 | $funcName($this->canvas);
105 | } else {
106 | exit('不支持的图片类型!');
107 | }
108 |
109 | }
110 |
111 | /**
112 | * 产生画布
113 | */
114 | protected function createImage()
115 | {
116 | $this->canvas = imagecreatetruecolor($this->width, $this->height);
117 | $color = $this->randColor(127,254);
118 | imagefill($this->canvas, 0, 0, $color);
119 | }
120 |
121 | /**
122 | * 产生随机颜色
123 | *
124 | * @param $low 颜色下界
125 | * @param $hight 颜色上界
126 | *
127 | * @return ( description_of_the_return_value )
128 | */
129 | protected function randColor($low,$hight)
130 | {
131 | return imagecolorallocate($this->canvas, rand($low,$hight), rand($low,$hight), rand($low,$hight));
132 | }
133 |
134 | /**
135 | * 转换图片格式
136 | *
137 | * @param $imageType 用户给的图片格式
138 | */
139 | protected function getImageType($imageType)
140 | {
141 | $types = [
142 | 'jpg' => 'jpeg',
143 | 'pjpeg' => 'jpeg',
144 | 'bmp' => 'wbmp'
145 | ];
146 | if (array_key_exists($imageType, $types)) {
147 | $imageType = $types[$imageType];
148 | }
149 | return $imageType;
150 | }
151 | }
--------------------------------------------------------------------------------