├── 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 | 68 | 69 |
70 |
71 |
72 |
    73 | {foreach $data as $blog} 74 |
  1. 75 |

    76 | 77 |

    78 |

    79 | {$blog['title']} 80 |

    81 |

    82 | {$blog['create_time']} 83 |

    84 |
  2. 85 | {/foreach} 86 | 87 |
88 |
89 | 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 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |

后台管理中心

25 |
26 |
27 |
28 | 29 | 30 |
31 |
32 |
33 |
34 | 35 | 36 |
37 |
38 |
39 |
40 | 41 | 42 | 43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
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 | 68 | 69 |
70 |
71 |
72 |
    73 | 74 |
  1. 75 |

    76 | 77 |

    78 |

    79 | 80 |

    81 |

    82 | 83 |

    84 |
  2. 85 | 86 | 87 |
88 |
89 | 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 | '{$%%}' => '', 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 | } --------------------------------------------------------------------------------