├── README.md ├── config.php ├── control ├── controlbase.php ├── index.php └── user.php ├── data └── view │ ├── default_footer.tpl.php │ ├── default_header.tpl.php │ ├── default_index.tpl.php │ ├── default_login.tpl.php │ ├── default_register.tpl.php │ └── default_space.tpl.php ├── html ├── index.htm ├── index2.htm ├── login.htm ├── register.htm ├── space.htm └── static │ ├── css │ ├── bootstrap-admin-theme.css │ ├── bootstrap-dialog.css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.min.css │ ├── bootstrap.css │ ├── bootstrap.min.css │ └── mybase.css │ ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff │ └── js │ ├── bootstrap-dialog.js │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── holder.min.js │ └── jquery.min.js ├── index.php ├── lib ├── cache.class.php ├── encoding │ ├── big5-gb.table │ ├── big5-unicode.table │ ├── gb-big5.table │ ├── gb-unicode.table │ └── pinyin.dat ├── global.func.php ├── iconv.func.php ├── simple_html_dom.php ├── template.func.php └── zip.class.php ├── model ├── setting.class.php ├── user.class.php └── weibo.class.php ├── session ├── s1.php └── s2.php ├── static ├── css │ ├── bootstrap-admin-theme.css │ ├── bootstrap-dialog.css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.min.css │ ├── bootstrap.css │ ├── bootstrap.min.css │ └── mybase.css ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff ├── img │ ├── ajax-loader.gif │ ├── android.png │ ├── banner_1.png │ ├── code.png │ ├── diy.png │ ├── iconv.png │ ├── ios.png │ ├── jiaoyou.png │ ├── logo.gif │ ├── news.png │ ├── page.png │ ├── phone.png │ ├── preview.png │ └── xiaohua.png └── js │ ├── bootstrap-dialog.js │ ├── bootstrap.js │ ├── bootstrap.min.js │ ├── holder.min.js │ └── jquery.min.js ├── view └── default │ ├── footer.html │ ├── header.html │ ├── index.html │ ├── login.html │ ├── register.html │ └── space.html ├── 微博html.zip └── 微博数据存储.png /README.md: -------------------------------------------------------------------------------- 1 | php_redis_weibo 2 | =============== 3 | 4 | 基于redis的微博demo 5 | 6 | redis存储结构参考"微博数据存储.png" 7 | 静态页面模版参考 “微博html.zip” 8 | -------------------------------------------------------------------------------- /config.php: -------------------------------------------------------------------------------- 1 | 'default', 16 | 'cookie_pre'=>'t_', 17 | 'cookie_domain'=>'', 18 | 'time_friendly'=>1, 19 | 'date_format'=>'Y-m-d', 20 | 'time_format'=>'H:i', 21 | 'time_offset'=> 0, 22 | 'time_diff'=> 0, 23 | ); 24 | -------------------------------------------------------------------------------- /control/controlbase.php: -------------------------------------------------------------------------------- 1 | time = time(); 18 | $this->ip = getip(); 19 | $this->get = $get; 20 | $this->post = $post; 21 | $this->init_db(); 22 | //$this->init_cache(); 23 | $this->init_user(); 24 | } 25 | 26 | /* 27 | $eventlist=$this('event')->findAll(); 28 | 本特性只在PHP 5.3.0 及以上版本有效。 29 | */ 30 | function __invoke($modelname, $base = NULL) { 31 | $base = $base ? $base : $this; 32 | if (empty($_ENV[$modelname])) { 33 | $modelfile= APP_ROOT.'/model/'.$modelname.'.class.php'; 34 | //动态创建model类,一般的通用model无需再创建。 35 | if(false===@include($modelfile)) { 36 | // echo $modelname; 37 | eval('class '.$modelname.'model {}'); 38 | } 39 | eval('$_ENV[$modelname] = new ' . $modelname . 'model($base);'); 40 | } 41 | return $_ENV[$modelname]; 42 | } 43 | 44 | function init_db() { 45 | try { 46 | $redis = new Redis(); 47 | $redis->connect( REDIS_HOST, REDIS_PORT ); //php客户端设置的ip及端口 48 | $redis->select( REDIS_INDEX ); 49 | $this->redis = $redis ; 50 | } catch(RedisException $e) { 51 | exit("Redis连接失败,请检查服务是否正常!"); 52 | } 53 | } 54 | 55 | 56 | 57 | /* 一旦setting的缓存文件读取失败,则更新所有cache */ 58 | 59 | function init_cache() { 60 | global $setting; 61 | $this->cache = new cache($this->db); 62 | $setting = $this->setting = $this->cache->load('setting'); 63 | } 64 | 65 | function init_user() { 66 | @$auth = tcookie('auth'); 67 | $user = array('uid'=>0); 68 | @list($uid, $password) = empty($auth) ? array(0, 0) : taddslashes(explode("\t", strcode($auth, AUTH_KEY, 'DECODE')), 1); 69 | if ($uid && $password) { 70 | $finduser = $this('user')->findById($uid); 71 | $finduser && ($password == $finduser['password']) && $user = $finduser; 72 | } 73 | $user['ip'] = $this->ip; 74 | $this->user = $user; 75 | } 76 | 77 | /* 权限检测 */ 78 | function checkable($regular) { 79 | return 1; 80 | } 81 | 82 | 83 | /*中转提示页面 84 | $ishtml=1 表示是跳转到静态网页 85 | */ 86 | function message($message, $url = '') { 87 | $url= $url ? $url : SITE_URL ; 88 | header('location:'.$url); 89 | exit; 90 | } 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | } -------------------------------------------------------------------------------- /control/index.php: -------------------------------------------------------------------------------- 1 | getTimeLine($this->user['uid']); 9 | include template('index'); 10 | } 11 | 12 | function onindex() { 13 | $this->ondefault(); 14 | } 15 | 16 | function onpost() { 17 | $title='发微博'; 18 | $content=htmlspecialchars($this->post['content']); 19 | $this('weibo')->add($content); 20 | $this->message('发微博成功!', '?c=index'); 21 | } 22 | 23 | 24 | 25 | /*function oneveryday() { 26 | $title='每日一题'; 27 | include template('everyday'); 28 | }*/ 29 | 30 | 31 | 32 | 33 | 34 | 35 | } -------------------------------------------------------------------------------- /control/user.php: -------------------------------------------------------------------------------- 1 | post['submit'])) { 11 | $username = $user['username']=trim($this->post['username']); 12 | $user['email']=trim($this->post['email']); 13 | 14 | $finduser=$this('user')->findByUsername($username); 15 | if($finduser) $this->message("用户名 $username 已经注册!", 'c=user&a=register'); 16 | 17 | $user['posts'] = 0; //微博数为 0 18 | $user['fans'] = 0; //粉丝数为 0 19 | $user['regip'] = $this->ip; 20 | $user['regtime'] = $this->time; 21 | $user['password'] = md5($this->post['password']); 22 | $user['uid'] = $this('user')->getNextUid(); 23 | 24 | $this('user')->insert($user); 25 | $this('user')->refresh($user); 26 | 27 | header('location:?c=index'); 28 | 29 | } else { 30 | include template('register'); 31 | } 32 | } 33 | 34 | function onlogin() { 35 | $title = '登录'; 36 | $forward = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : SITE_URL; 37 | if (isset($this->post['submit'])) { 38 | $username=$this->post['username']; 39 | $password=md5($this->post['password']); 40 | 41 | $user=$this('user')->findByUsername($username); 42 | 43 | if(is_array($user)&&($password==$user['password'])){ 44 | $this('user')->refresh($user); 45 | $this->message('登录成功!', '?c=index'); 46 | }else{ 47 | $this->message('登录失败!', '?c=user&a=login'); 48 | } 49 | } 50 | include template('login'); 51 | } 52 | 53 | 54 | 55 | 56 | /* 退出系统 */ 57 | function onlogout() { 58 | $title = '登出系统'; 59 | $forward = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : SITE_URL; 60 | $this('user')->logout(); 61 | header('location:?c=index'); 62 | } 63 | 64 | 65 | 66 | /* 用户空间 */ 67 | function onspace() { 68 | $title = '用户空间'; 69 | $uid=$this->get['uid']; 70 | $userInfo=$this('user')->findById($uid); 71 | $postList = $this('weibo')->getUserPosts($uid); 72 | include template('space'); 73 | } 74 | 75 | /* 关注 */ 76 | function onfollow() { 77 | $title = '关注用户'; 78 | $uid=$this->get['uid']; 79 | $targetUser=$this('user')->findById($uid); 80 | if( 0 != $this->user['uid']){ 81 | $this('user')->follow($targetUser,$this->user); 82 | } 83 | $this->message('关注成功!', '?c=user&a=space&uid='.$targetUser['uid']); 84 | } 85 | 86 | /* 取消关注 */ 87 | function onunfollow() { 88 | $title = '取消关注'; 89 | $uid=$this->get['uid']; 90 | $targetUser=$this('user')->findById($uid); 91 | if( 0 != $this->user['uid']){ 92 | $this('user')->unfollow($targetUser,$this->user); 93 | } 94 | $this->message('取消关注成功!', '?c=user&a=space&uid='.$targetUser['uid']); 95 | } 96 | 97 | 98 | 99 | /* 修改密码 */ 100 | function onuppass() { 101 | 102 | } 103 | 104 | /* 修改头像 */ 105 | function onupimg() { 106 | 107 | } 108 | 109 | } -------------------------------------------------------------------------------- /data/view/default_footer.tpl.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /data/view/default_header.tpl.php: -------------------------------------------------------------------------------- 1 | 2 | user; ?> 3 | 4 | 5 | 6 | 7 | 8 | <?=$title?>-基于Redis实现的简单微博系统 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /data/view/default_index.tpl.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |

欢迎 退出

登录 4 | 注册
5 |
6 |

简单微博系统

7 |
8 | 9 | 10 | 11 |

12 | 13 | 14 | 15 |
16 | 17 | 64x64 18 | 19 |
20 |

21 |

22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | 30 | 31 | 32 | 33 |
34 | 35 | -------------------------------------------------------------------------------- /data/view/default_login.tpl.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 | 返回首页 7 |
8 |
9 | 登录 10 | 注册 11 |
12 | 13 |
14 | 15 |
16 |
17 | 18 |
19 | 20 | 29 | 30 |
31 |

32 | 还没有帐号?注册 33 |

34 | 35 |
36 | 37 | 38 |

39 | 忘记密码? 40 |

41 | 42 |
43 | 44 | -------------------------------------------------------------------------------- /data/view/default_register.tpl.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 7 |
8 |
9 |
10 | 32 |
33 |

已有账号,登录

34 |
35 |
36 | 37 | -------------------------------------------------------------------------------- /data/view/default_space.tpl.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 登录 5 | 注册 6 |
7 | 10 | 11 | 12 |
13 |
14 | 15 | 16 | 17 |
18 |
19 |

20 |

微博:

21 |

粉丝:

22 |

关注 取消

23 |
24 |
25 | 26 |
27 | 28 | 29 | 30 | 31 |
32 | 33 | 64x64 34 | 35 |
36 |

37 |

38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | 46 |
47 | 48 | 49 | -------------------------------------------------------------------------------- /html/index.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 基于Redis实现的简单微博系统 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 | 25 | 26 |
27 |
28 | 登录 29 | 注册 30 |
31 |
32 |

简单微博系统

33 |
34 | 35 | 36 |
37 | 38 |
39 | 40 | 64x64 41 | 42 |
43 |

张三丰

44 |

今天下午有部分媒体报道称,网易CEO丁磊今天上午亲自带领警方抓捕了创业的3名前员工。对此,网易方面回应称丁磊本人一直在杭州,而该创业公司在广州,该事件并不属

45 |
46 |
13分钟前
47 |
48 |
49 |
50 |
51 |
52 | 53 | 54 |
55 |
56 | 59 | 60 | 61 |
62 | -------------------------------------------------------------------------------- /html/index2.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 基于Redis实现的简单微博系统 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 | 25 | 26 |
27 |
28 |

欢迎 Andy退出

29 |
30 |
31 |

简单微博系统

32 |
33 | 34 | 35 |
36 | 37 | 38 | 39 |
40 | 41 |
42 | 43 |
44 | 45 | 64x64 46 | 47 |
48 |

张三丰

49 |

今天下午有部分媒体报道称,网易CEO丁磊今天上午亲自带领警方抓捕了创业的3名前员工。对此,网易方面回应称丁磊本人一直在杭州,而该创业公司在广州,该事件并不属

50 |
51 |
13分钟前
52 |
53 |
54 |
55 |
56 |
57 | 58 | 59 |
60 |
61 | 64 | 65 | 66 |
67 | -------------------------------------------------------------------------------- /html/login.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 登录-简单微博系统 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 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 | 54 | 55 |
56 |

57 | 还没有帐号?注册 58 |

59 | 60 |
61 | 62 | 63 |

64 | 忘记密码? 65 |

66 | 67 |
68 | 69 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /html/register.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 注册-简单微博系统 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 |
27 |
28 | 29 | 30 |
31 |
32 |
33 |
34 | 56 |
57 |

已有账号,登录

58 |
59 |
60 | 75 |
76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /html/space.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 查看用户-基于Redis实现的简单微博系统 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 | 25 | 26 |
27 |
28 | 登录 29 | 注册 30 |
31 |
32 |

简单微博系统

33 |
34 | 35 | 36 |
37 |
38 | 39 | 40 | 41 |
42 |
43 |

张三丰

44 |

微博:12322

45 |

粉丝:12322

46 |

关注 取消

47 |
48 |
49 | 50 |
51 | 52 |
53 | 54 | 64x64 55 | 56 |
57 |

张三丰

58 |

今天下午有部分媒体报道称,网易CEO丁磊今天上午亲自带领警方抓捕了创业的3名前员工。对此,网易方面回应称丁磊本人一直在杭州,而该创业公司在广州,该事件并不属

59 |
60 |
13分钟前
61 |
62 |
63 |
64 |
65 |
66 | 67 | 68 |
69 |
70 | 73 | 74 | 75 |
76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /html/static/css/bootstrap-admin-theme.css: -------------------------------------------------------------------------------- 1 | /* 2 | Created on : 2013-09-30, 14:48:31 3 | Author : Krzysztof Niziol 4 | */ 5 | 6 | /** The vertical centered content **/ 7 | html.bootstrap-admin-vertical-centered { 8 | height: 100%; 9 | overflow: hidden; 10 | min-height: 100%; 11 | min-width: 100%; 12 | width: 100%; 13 | } 14 | html.bootstrap-admin-vertical-centered body{ 15 | height: 100%; 16 | margin: 0; 17 | padding: 0; 18 | width: 100%; 19 | } 20 | html.bootstrap-admin-vertical-centered .container{ 21 | display: table; 22 | height: 100%; 23 | padding: 0; 24 | width: 100%; 25 | } 26 | html.bootstrap-admin-vertical-centered .container .row{ 27 | display: table-cell; 28 | height: 100%; 29 | vertical-align: middle; 30 | } 31 | 32 | /** Body **/ 33 | body{ 34 | background-color: rgba(245, 245, 245, 0.5); 35 | padding-top: 70px; /* Required, because main menu / navbar has "navbar-fixed-top" class and is sticked to the top */ 36 | } 37 | body.bootstrap-admin-body{ 38 | padding-top: 70px; 39 | } 40 | 41 | body.bootstrap-admin-body .row{ 42 | margin-left: 0px; 43 | margin-right: 0px; 44 | } 45 | 46 | /** Main container **/ 47 | #content { 48 | margin-left: 0px; 49 | } 50 | 51 | /** Forms */ 52 | .form-group label.control-label{ 53 | line-height: normal; 54 | } 55 | .form-group label{ 56 | line-height: 25px; 57 | } 58 | 59 | /** Title of container for lists, some content etc. **/ 60 | .bootstrap-admin-box-title{ 61 | display: inline; 62 | } 63 | 64 | /** Title of the content */ 65 | .bootstrap-admin-content-title h1{ 66 | display: inline-block; 67 | margin-top: 0; 68 | } 69 | .bootstrap-admin-content-title .action{ 70 | float: right; 71 | margin-right: 10px; 72 | position: relative; 73 | top: 5px; 74 | } 75 | .bootstrap-admin-content-title .action:first-of-type{ 76 | margin-right: 0; 77 | } 78 | .bootstrap-admin-content-title .action.btn{ 79 | padding-left: 0; 80 | padding-right: 0; 81 | } 82 | 83 | /** Button which is an action */ 84 | .btn.action:active{ 85 | box-shadow: none; 86 | } 87 | 88 | /** Content of the panel **/ 89 | .bootstrap-admin-panel-content{ 90 | padding: 15px; 91 | } 92 | .bootstrap-admin-panel-content table{ 93 | margin-bottom: 0; 94 | } 95 | .bootstrap-admin-panel-content dl{ 96 | margin-bottom: 0; 97 | margin-top: 0; 98 | } 99 | 100 | /** Panel with no-table content **/ 101 | .bootstrap-admin-no-table-panel, 102 | .bootstrap-admin-no-table-panel-content{ 103 | float: left; 104 | width: 100%; 105 | } 106 | 107 | /** Left, the first, column **/ 108 | .bootstrap-admin-col-left{ 109 | padding-left: 15px; 110 | } 111 | 112 | /** Horizontal navbars */ 113 | .bootstrap-admin-navbar-sm{ 114 | background-image: none; 115 | border: 0; 116 | box-shadow: initial; 117 | margin-bottom: 0; 118 | min-height: initial; 119 | z-index: 1030; 120 | } 121 | .bootstrap-admin-navbar-sm .navbar-collapse .navbar-nav:first-child{ 122 | margin-left: -15px; 123 | } 124 | .bootstrap-admin-navbar-sm .navbar-collapse .navbar-nav li a{ 125 | font-size: 13px; 126 | padding: 3px 8px; 127 | } 128 | .bootstrap-admin-navbar-under-small{ 129 | top: 0px; 130 | z-index: 1020; 131 | } 132 | 133 | /** Side Bar **/ 134 | .bootstrap-admin-navbar-side { 135 | background-color: #fff; 136 | max-height: none; 137 | max-width: 228px; 138 | padding: 0; 139 | -webkit-border-radius: 6px; 140 | -moz-border-radius: 6px; 141 | border-radius: 6px; 142 | -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.065); 143 | -moz-box-shadow: 0 1px 4px rgba(0,0,0,.065); 144 | box-shadow: 0 1px 4px rgba(0,0,0,.065); 145 | } 146 | .bootstrap-admin-navbar-side > li > a { 147 | display: block; 148 | width: 190px\9; 149 | margin: 0 0 -1px; 150 | padding: 8px 14px; 151 | border: 1px solid #e5e5e5; 152 | } 153 | .bootstrap-admin-navbar-side > li:first-child > a { 154 | -webkit-border-radius: 6px 6px 0 0; 155 | -moz-border-radius: 6px 6px 0 0; 156 | border-radius: 6px 6px 0 0; 157 | } 158 | .bootstrap-admin-navbar-side > li:last-child > a { 159 | -webkit-border-radius: 0 0 6px 6px; 160 | -moz-border-radius: 0 0 6px 6px; 161 | border-radius: 0 0 6px 6px; 162 | } 163 | .bootstrap-admin-navbar-side > .active > a, 164 | .bootstrap-admin-navbar-side .active a:hover{ 165 | background-color: #08C; 166 | color: #fff; 167 | } 168 | .bootstrap-admin-navbar-side > .active > a { 169 | position: relative; 170 | z-index: 2; 171 | padding: 9px 15px; 172 | border: 0; 173 | text-shadow: 0 1px 0 rgba(0,0,0,.15); 174 | -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); 175 | -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); 176 | box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); 177 | } 178 | 179 | /** Side Bar - Chevrons **/ 180 | .bootstrap-admin-navbar-side .glyphicon-chevron-right { 181 | float: right; 182 | margin-top: 2px; 183 | margin-right: -6px; 184 | opacity: .25; 185 | } 186 | .bootstrap-admin-navbar-side > li > a:hover { 187 | background-color: #f5f5f5; 188 | } 189 | .bootstrap-admin-navbar-side a:hover .glyphicon-chevron-right { 190 | opacity: .5; 191 | } 192 | .bootstrap-admin-navbar-side .active .glyphicon-chevron-right, 193 | .bootstrap-admin-navbar-side .active a:hover .glyphicon-chevron-right { 194 | opacity: 1; 195 | } 196 | .bootstrap-admin-navbar-side.affix { 197 | top: 40px; 198 | } 199 | .bootstrap-admin-navbar-side.affix-bottom { 200 | position: absolute; 201 | top: auto; 202 | bottom: 270px; 203 | } 204 | 205 | /** Thin navbar, e.g. for the breadcrumbs **/ 206 | .bootstrap-admin-navbar-thin{ 207 | min-height: 0; 208 | } 209 | 210 | /** Breadcrumbs **/ 211 | .bootstrap-admin-breadcrumb{ 212 | background: none; 213 | margin: 8px 15px; 214 | padding: 0; 215 | } 216 | 217 | /** Alert **/ 218 | .bootstrap-admin-alert{ 219 | padding: 10px 15px; 220 | } 221 | .bootstrap-admin-alert h4{ 222 | margin-bottom: 3px; 223 | } 224 | 225 | /** Skip padding of elements on the edge **/ 226 | .bootstrap-admin-no-edges-padding > div:first-child{ 227 | padding-left: 0; 228 | } 229 | .bootstrap-admin-no-edges-padding > div:last-child{ 230 | padding-right: 0; 231 | } 232 | 233 | /** Light, small paddings **/ 234 | .bootstrap-admin-light-padding-bottom{ 235 | padding-bottom: 10px; 236 | } 237 | .bootstrap-admin-light-padding-top{ 238 | padding-top: 10px; 239 | } 240 | 241 | /** Footer **/ 242 | footer p{ 243 | text-align: center; 244 | } 245 | 246 | /** Bootstrap 3 Typeahead plugin **/ 247 | .typeahead{ 248 | z-index: 1051; 249 | } 250 | 251 | /** Disabling padding **/ 252 | .bootstrap-admin-without-padding{ 253 | padding: 0; 254 | } 255 | 256 | /** Login form **/ 257 | .bootstrap-admin-login-form{ 258 | max-width: 400px; 259 | padding: 30px; 260 | margin: 0 auto; 261 | background-color: #FFF; 262 | border: 1px solid #E5E5E5; 263 | -webkit-border-radius: 5px; 264 | -moz-border-radius: 5px; 265 | border-radius: 5px; 266 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 267 | -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.05); 268 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 269 | } 270 | .bootstrap-admin-login-form h1{ 271 | margin-bottom: 25px; 272 | margin-top: 0; 273 | } 274 | .bootstrap-admin-login-form .form-group{ 275 | margin-bottom: 20px; 276 | } 277 | .bootstrap-admin-login-form label{ 278 | font-size: 15px; 279 | } 280 | .bootstrap-admin-login-form input[type="text"], 281 | .bootstrap-admin-login-form input[type="password"]{ 282 | font-size: 16px; 283 | height: auto; 284 | padding: 7px 9px; 285 | } 286 | .bootstrap-admin-login-form input[type="checkbox"]{ 287 | margin-right: 5px; 288 | } -------------------------------------------------------------------------------- /html/static/css/bootstrap-dialog.css: -------------------------------------------------------------------------------- 1 | .bootstrap-dialog { 2 | 3 | } 4 | .bootstrap-dialog .modal-header { 5 | border-top-left-radius: 4px; 6 | border-top-right-radius: 4px; 7 | } 8 | .bootstrap-dialog .bootstrap-dialog-title { 9 | color: #fff; 10 | display: inline-block; 11 | } 12 | .bootstrap-dialog.type-default .bootstrap-dialog-title { 13 | color: #333; 14 | } 15 | .bootstrap-dialog.size-normal .bootstrap-dialog-title { 16 | font-size: 16px; 17 | } 18 | .bootstrap-dialog.size-large .bootstrap-dialog-title { 19 | font-size: 24px; 20 | } 21 | .bootstrap-dialog .bootstrap-dialog-close-button { 22 | float: right; 23 | filter:alpha(opacity=90); 24 | -moz-opacity:0.9; 25 | -khtml-opacity: 0.9; 26 | opacity: 0.9; 27 | } 28 | .bootstrap-dialog.size-normal .bootstrap-dialog-close-button { 29 | font-size: 20px; 30 | } 31 | .bootstrap-dialog.size-large .bootstrap-dialog-close-button { 32 | font-size: 30px; 33 | } 34 | .bootstrap-dialog .bootstrap-dialog-close-button:hover { 35 | cursor: pointer; 36 | filter: alpha(opacity=100); 37 | -moz-opacity: 1; 38 | -khtml-opacity: 1; 39 | opacity: 1; 40 | } 41 | .bootstrap-dialog.size-normal .bootstrap-dialog-message { 42 | font-size: 14px; 43 | } 44 | .bootstrap-dialog.size-large .bootstrap-dialog-message { 45 | font-size: 18px; 46 | } 47 | .bootstrap-dialog.type-default .modal-header { 48 | background-color: #fff; 49 | } 50 | .bootstrap-dialog.type-info .modal-header { 51 | background-color: #5bc0de; 52 | } 53 | .bootstrap-dialog.type-primary .modal-header { 54 | background-color: #428bca; 55 | } 56 | .bootstrap-dialog.type-success .modal-header { 57 | background-color: #5cb85c; 58 | } 59 | .bootstrap-dialog.type-warning .modal-header { 60 | background-color: #f0ad4e; 61 | } 62 | .bootstrap-dialog.type-danger .modal-header { 63 | background-color: #d9534f; 64 | } 65 | .bootstrap-dialog .bootstrap-dialog-button-icon { 66 | margin-right: 3px; 67 | } 68 | 69 | /** 70 | * Icon animation 71 | * Copied from font-awesome: http://fontawesome.io/ 72 | **/ 73 | .icon-spin { 74 | display: inline-block; 75 | -moz-animation: spin 2s infinite linear; 76 | -o-animation: spin 2s infinite linear; 77 | -webkit-animation: spin 2s infinite linear; 78 | animation: spin 2s infinite linear; 79 | } 80 | @-moz-keyframes spin { 81 | 0% { 82 | -moz-transform: rotate(0deg); 83 | } 84 | 100% { 85 | -moz-transform: rotate(359deg); 86 | } 87 | } 88 | @-webkit-keyframes spin { 89 | 0% { 90 | -webkit-transform: rotate(0deg); 91 | } 92 | 100% { 93 | -webkit-transform: rotate(359deg); 94 | } 95 | } 96 | @-o-keyframes spin { 97 | 0% { 98 | -o-transform: rotate(0deg); 99 | } 100 | 100% { 101 | -o-transform: rotate(359deg); 102 | } 103 | } 104 | @-ms-keyframes spin { 105 | 0% { 106 | -ms-transform: rotate(0deg); 107 | } 108 | 100% { 109 | -ms-transform: rotate(359deg); 110 | } 111 | } 112 | @keyframes spin { 113 | 0% { 114 | transform: rotate(0deg); 115 | } 116 | 100% { 117 | transform: rotate(359deg); 118 | } 119 | } 120 | /** End of icon animation **/ -------------------------------------------------------------------------------- /html/static/css/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.1.0 (http://getbootstrap.com) 3 | * Copyright 2013 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | .btn-default, 8 | .btn-primary, 9 | .btn-success, 10 | .btn-info, 11 | .btn-warning, 12 | .btn-danger { 13 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); 14 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 15 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 16 | } 17 | .btn-default:active, 18 | .btn-primary:active, 19 | .btn-success:active, 20 | .btn-info:active, 21 | .btn-warning:active, 22 | .btn-danger:active, 23 | .btn-default.active, 24 | .btn-primary.active, 25 | .btn-success.active, 26 | .btn-info.active, 27 | .btn-warning.active, 28 | .btn-danger.active { 29 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 30 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 31 | } 32 | .btn:active, 33 | .btn.active { 34 | background-image: none; 35 | } 36 | .btn-default { 37 | text-shadow: 0 1px 0 #fff; 38 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); 39 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); 40 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); 41 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 42 | background-repeat: repeat-x; 43 | border-color: #dbdbdb; 44 | border-color: #ccc; 45 | } 46 | .btn-default:hover, 47 | .btn-default:focus { 48 | background-color: #e0e0e0; 49 | background-position: 0 -15px; 50 | } 51 | .btn-default:active, 52 | .btn-default.active { 53 | background-color: #e0e0e0; 54 | border-color: #dbdbdb; 55 | } 56 | .btn-primary { 57 | background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); 58 | background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); 59 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); 60 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 61 | background-repeat: repeat-x; 62 | border-color: #2b669a; 63 | } 64 | .btn-primary:hover, 65 | .btn-primary:focus { 66 | background-color: #2d6ca2; 67 | background-position: 0 -15px; 68 | } 69 | .btn-primary:active, 70 | .btn-primary.active { 71 | background-color: #2d6ca2; 72 | border-color: #2b669a; 73 | } 74 | .btn-success { 75 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); 76 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); 77 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); 78 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 79 | background-repeat: repeat-x; 80 | border-color: #3e8f3e; 81 | } 82 | .btn-success:hover, 83 | .btn-success:focus { 84 | background-color: #419641; 85 | background-position: 0 -15px; 86 | } 87 | .btn-success:active, 88 | .btn-success.active { 89 | background-color: #419641; 90 | border-color: #3e8f3e; 91 | } 92 | .btn-warning { 93 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 94 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); 95 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); 96 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 97 | background-repeat: repeat-x; 98 | border-color: #e38d13; 99 | } 100 | .btn-warning:hover, 101 | .btn-warning:focus { 102 | background-color: #eb9316; 103 | background-position: 0 -15px; 104 | } 105 | .btn-warning:active, 106 | .btn-warning.active { 107 | background-color: #eb9316; 108 | border-color: #e38d13; 109 | } 110 | .btn-danger { 111 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 112 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); 113 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); 114 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 115 | background-repeat: repeat-x; 116 | border-color: #b92c28; 117 | } 118 | .btn-danger:hover, 119 | .btn-danger:focus { 120 | background-color: #c12e2a; 121 | background-position: 0 -15px; 122 | } 123 | .btn-danger:active, 124 | .btn-danger.active { 125 | background-color: #c12e2a; 126 | border-color: #b92c28; 127 | } 128 | .btn-info { 129 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 130 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); 131 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); 132 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 133 | background-repeat: repeat-x; 134 | border-color: #28a4c9; 135 | } 136 | .btn-info:hover, 137 | .btn-info:focus { 138 | background-color: #2aabd2; 139 | background-position: 0 -15px; 140 | } 141 | .btn-info:active, 142 | .btn-info.active { 143 | background-color: #2aabd2; 144 | border-color: #28a4c9; 145 | } 146 | .thumbnail, 147 | .img-thumbnail { 148 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 149 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 150 | } 151 | .dropdown-menu > li > a:hover, 152 | .dropdown-menu > li > a:focus { 153 | background-color: #e8e8e8; 154 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 155 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 156 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 157 | background-repeat: repeat-x; 158 | } 159 | .dropdown-menu > .active > a, 160 | .dropdown-menu > .active > a:hover, 161 | .dropdown-menu > .active > a:focus { 162 | background-color: #357ebd; 163 | background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); 164 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); 165 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); 166 | background-repeat: repeat-x; 167 | } 168 | .navbar-default { 169 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); 170 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); 171 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); 172 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 173 | background-repeat: repeat-x; 174 | border-radius: 4px; 175 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 176 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 177 | } 178 | .navbar-default .navbar-nav > .active > a { 179 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); 180 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); 181 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); 182 | background-repeat: repeat-x; 183 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 184 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 185 | } 186 | .navbar-brand, 187 | .navbar-nav > li > a { 188 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25); 189 | } 190 | .navbar-inverse { 191 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); 192 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); 193 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 194 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 195 | background-repeat: repeat-x; 196 | } 197 | .navbar-inverse .navbar-nav > .active > a { 198 | background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); 199 | background-image: linear-gradient(to bottom, #222 0%, #282828 100%); 200 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); 201 | background-repeat: repeat-x; 202 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 203 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 204 | } 205 | .navbar-inverse .navbar-brand, 206 | .navbar-inverse .navbar-nav > li > a { 207 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); 208 | } 209 | .navbar-static-top, 210 | .navbar-fixed-top, 211 | .navbar-fixed-bottom { 212 | border-radius: 0; 213 | } 214 | .alert { 215 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2); 216 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 217 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 218 | } 219 | .alert-success { 220 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 221 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 222 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 223 | background-repeat: repeat-x; 224 | border-color: #b2dba1; 225 | } 226 | .alert-info { 227 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 228 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 229 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 230 | background-repeat: repeat-x; 231 | border-color: #9acfea; 232 | } 233 | .alert-warning { 234 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 235 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 236 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 237 | background-repeat: repeat-x; 238 | border-color: #f5e79e; 239 | } 240 | .alert-danger { 241 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 242 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 243 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 244 | background-repeat: repeat-x; 245 | border-color: #dca7a7; 246 | } 247 | .progress { 248 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 249 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 250 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 251 | background-repeat: repeat-x; 252 | } 253 | .progress-bar { 254 | background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); 255 | background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); 256 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); 257 | background-repeat: repeat-x; 258 | } 259 | .progress-bar-success { 260 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); 261 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 262 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 263 | background-repeat: repeat-x; 264 | } 265 | .progress-bar-info { 266 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 267 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 268 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 269 | background-repeat: repeat-x; 270 | } 271 | .progress-bar-warning { 272 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 273 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 274 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 275 | background-repeat: repeat-x; 276 | } 277 | .progress-bar-danger { 278 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); 279 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 280 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 281 | background-repeat: repeat-x; 282 | } 283 | .list-group { 284 | border-radius: 4px; 285 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 286 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 287 | } 288 | .list-group-item.active, 289 | .list-group-item.active:hover, 290 | .list-group-item.active:focus { 291 | text-shadow: 0 -1px 0 #3071a9; 292 | background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); 293 | background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); 294 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); 295 | background-repeat: repeat-x; 296 | border-color: #3278b3; 297 | } 298 | .panel { 299 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 300 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 301 | } 302 | .panel-default > .panel-heading { 303 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 304 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 305 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 306 | background-repeat: repeat-x; 307 | } 308 | .panel-primary > .panel-heading { 309 | background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); 310 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); 311 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); 312 | background-repeat: repeat-x; 313 | } 314 | .panel-success > .panel-heading { 315 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 316 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 317 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 318 | background-repeat: repeat-x; 319 | } 320 | .panel-info > .panel-heading { 321 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 322 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 323 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 324 | background-repeat: repeat-x; 325 | } 326 | .panel-warning > .panel-heading { 327 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 328 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 329 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 330 | background-repeat: repeat-x; 331 | } 332 | .panel-danger > .panel-heading { 333 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 334 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 335 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 336 | background-repeat: repeat-x; 337 | } 338 | .well { 339 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 340 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 341 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 342 | background-repeat: repeat-x; 343 | border-color: #dcdcdc; 344 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 345 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 346 | } 347 | /*# sourceMappingURL=bootstrap-theme.css.map */ 348 | -------------------------------------------------------------------------------- /html/static/css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.1.0 (http://getbootstrap.com) 3 | * Copyright 2013 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | .btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-color:#357ebd}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} -------------------------------------------------------------------------------- /html/static/css/mybase.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 10px; 3 | padding-bottom: 40px; 4 | } 5 | 6 | /* Custom container */ 7 | .container, .container-narrow{ 8 | margin: 0 auto; 9 | max-width: 1000px; 10 | } 11 | 12 | .container-narrow > hr { 13 | margin: 3px 0; 14 | } 15 | 16 | .container-narrow li { 17 | margin-right: 20px; 18 | } 19 | 20 | .container-narrow .masthead a { 21 | color: #000; 22 | font-size: 15px; 23 | font-family: "微软雅黑"; 24 | } 25 | .masthead{ 26 | 27 | } 28 | 29 | .user_nav a{ 30 | margin-left: 10px; 31 | padding: 3px 5px; 32 | } 33 | .user_nav li{ 34 | list-style: none; 35 | } 36 | .nav{ 37 | } 38 | /* Main marketing message and sign up button */ 39 | .banner { 40 | text-align: center; 41 | } 42 | .banner a{ 43 | top: -145px; 44 | left: 45px; 45 | display: inline-block; 46 | width: 150px; 47 | height: 55px; 48 | position: relative; 49 | z-index: 10; 50 | } 51 | .footer-panel{ 52 | border-top: 1px solid #eee; 53 | } 54 | .header{ 55 | padding-bottom: 60px; 56 | } 57 | .footer{ 58 | padding-top: 60px; 59 | } 60 | .aboutlinks{ 61 | width: 50%; 62 | padding-top: 5px; 63 | list-style: none; 64 | } 65 | .icplinks{ 66 | width: 40%; 67 | list-style: none; 68 | padding-top: 5px; 69 | } 70 | .user_nav{ 71 | margin-top:20px; 72 | } 73 | .footer li, .user_nav li{ 74 | display: inline-block; 75 | } 76 | .user_nav li,.user_nav li a{ 77 | margin-left: 0px; 78 | margin-right: 0px; 79 | } 80 | /* Supporting marketing content */ 81 | .marketing { 82 | margin: 60px 0; 83 | } 84 | .marketing p + h4 { 85 | margin-top: 28px; 86 | } 87 | 88 | .high{ 89 | padding-top: 80px; 90 | padding-bottom: 80px; 91 | } 92 | 93 | .form-signin { 94 | max-width: 330px; 95 | padding: 15px; 96 | margin: 0 auto; 97 | } 98 | .form-signin .form-signin-heading, 99 | .form-signin .checkbox { 100 | margin-bottom: 10px; 101 | } 102 | .form-signin .checkbox { 103 | font-weight: normal; 104 | } 105 | .form-signin .form-control { 106 | position: relative; 107 | font-size: 16px; 108 | height: auto; 109 | padding: 10px; 110 | -webkit-box-sizing: border-box; 111 | -moz-box-sizing: border-box; 112 | box-sizing: border-box; 113 | } 114 | .form-signin .form-control:focus { 115 | z-index: 2; 116 | } 117 | .form-signin input[type="text"] { 118 | margin-bottom: -1px; 119 | border-bottom-left-radius: 0; 120 | border-bottom-right-radius: 0; 121 | } 122 | .form-signin input[type="password"] { 123 | margin-bottom: 10px; 124 | border-top-left-radius: 0; 125 | border-top-right-radius: 0; 126 | } 127 | .noaccount{ 128 | width: 32%; 129 | } 130 | .noaccount p{ 131 | line-height: 20px; 132 | } 133 | #myinfo{ 134 | padding-top: 10px; 135 | padding-bottom: 10px; 136 | } 137 | #userleft{ 138 | height: 400px; 139 | } 140 | 141 | 142 | .graynormal{ 143 | color: gray; 144 | font-weight: normal; 145 | } 146 | .bg-label { 147 | background-color: #EEE6E6; 148 | line-height:30px; 149 | } 150 | .img-rounded{ 151 | width: 170px; 152 | } 153 | 154 | .phone,iframe { 155 | width: 295px; 156 | height: 395px; 157 | margin-top: 60px; 158 | padding: 0; 159 | position: relative; 160 | border: 0; 161 | background: transparent; 162 | -webkit-border-radius: 4px; 163 | -moz-border-radius: 4px; 164 | border-radius: 4px; 165 | z-index: 40; 166 | } 167 | 168 | .phone { 169 | width: 350px; 170 | height: 549px; 171 | padding: 0; 172 | margin: 0 auto; 173 | position: relative; 174 | text-align: center; 175 | background: url('../img/phone.png') center center no-repeat; 176 | background-size: 350px Auto; 177 | border: 0; 178 | -webkit-border-radius: 0; 179 | -moz-border-radius: 0; 180 | border-radius: 0; 181 | -webkit-box-shadow: none; 182 | -moz-box-shadow: none; 183 | box-shadow: none; 184 | } 185 | 186 | label{ 187 | font-weight: normal; 188 | } 189 | 190 | .icon{ 191 | width: 80px; 192 | } 193 | #applist .list-group{ 194 | margin-bottom: 5px; 195 | } 196 | #applist .thumbnail{ 197 | margin-left: 5px; 198 | width: 32% 199 | } -------------------------------------------------------------------------------- /html/static/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/html/static/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /html/static/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/html/static/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /html/static/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/html/static/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /html/static/js/holder.min.js: -------------------------------------------------------------------------------- 1 | var Holder=Holder||{};!function(a,b){function f(a,b){var c="complete",d="readystatechange",e=!1,f=e,g=!0,h=a.document,i=h.documentElement,j=h.addEventListener?"addEventListener":"attachEvent",k=h.addEventListener?"removeEventListener":"detachEvent",l=h.addEventListener?"":"on",m=function(g){(g.type!=d||h.readyState==c)&&(("load"==g.type?a:h)[k](l+g.type,m,e),!f&&(f=!0)&&b.call(a,null))},n=function(){try{i.doScroll("left")}catch(a){return setTimeout(n,50),void 0}m("poll")};if(h.readyState==c)b.call(a,"lazy");else{if(h.createEventObject&&i.doScroll){try{g=!a.frameElement}catch(o){}g&&n()}h[j](l+"DOMContentLoaded",m,e),h[j](l+d,m,e),a[j](l+"load",m,e)}}function g(a){a=a.match(/^(\W)?(.*)/);var b=document["getElement"+(a[1]?"#"==a[1]?"ById":"sByClassName":"sByTagName")](a[2]),c=[];return null!=b&&(c=b.length?b:0==b.length?b:[b]),c}function h(a,b){var c={};for(var d in a)c[d]=a[d];for(var e in b)c[e]=b[e];return c}function k(a,b,c){b=parseInt(b,10),a=parseInt(a,10);var d=Math.max(b,a),e=Math.min(b,a),f=1/12,g=Math.min(.75*e,.75*d*f);return{height:Math.round(Math.max(c.size,g))}}function l(a,b,c,d){var f=k(b.width,b.height,c),g=f.height,h=b.width*d,i=b.height*d,j=c.font?c.font:"sans-serif";e.width=h,e.height=i,a.textAlign="center",a.textBaseline="middle",a.fillStyle=c.background,a.fillRect(0,0,h,i),a.fillStyle=c.foreground,a.font="bold "+g+"px "+j;var l=c.text?c.text:Math.floor(b.width)+"x"+Math.floor(b.height),m=a.measureText(l).width;return m/h>=.75&&(g=Math.floor(.75*g*(h/m))),a.font="bold "+g*d+"px "+j,a.fillText(l,h/2,i/2,h),e.toDataURL("image/png")}function m(a,b,c,e){var f=c.dimensions,g=c.theme,i=c.text?decodeURIComponent(c.text):c.text,j=f.width+"x"+f.height;g=i?h(g,{text:i}):g,g=c.font?h(g,{font:c.font}):g,"image"==a?(b.setAttribute("data-src",e),b.setAttribute("alt",i?i:g.text?g.text+" ["+j+"]":j),(d||!c.auto)&&(b.style.width=f.width+"px",b.style.height=f.height+"px"),d?b.style.backgroundColor=g.background:b.setAttribute("src",l(p,f,g,s))):"background"==a?d||(b.style.backgroundImage="url("+l(p,f,g,s)+")",b.style.backgroundSize=f.width+"px "+f.height+"px"):"fluid"==a&&(b.setAttribute("data-src",e),b.setAttribute("alt",i?i:g.text?g.text+" ["+j+"]":j),b.style.height="%"==f.height.substr(-1)?f.height:f.height+"px",b.style.width="%"==f.width.substr(-1)?f.width:f.width+"px",("inline"==b.style.display||""==b.style.display)&&(b.style.display="block"),d?b.style.backgroundColor=g.background:(b.holderData=c,t.push(b),n(b)))}function n(a){var b;b=null==a.nodeType?t:[a];for(i in b){var c=b[i];if(c.holderData){var d=c.holderData;c.setAttribute("src",l(p,{height:c.clientHeight,width:c.clientWidth},d.theme,s))}}}function o(b,c){var d={theme:u.themes.gray},e=!1;for(sl=b.length,j=0;sl>j;j++){var f=b[j];a.flags.dimensions.match(f)?(e=!0,d.dimensions=a.flags.dimensions.output(f)):a.flags.fluid.match(f)?(e=!0,d.dimensions=a.flags.fluid.output(f),d.fluid=!0):a.flags.colors.match(f)?d.theme=a.flags.colors.output(f):c.themes[f]?d.theme=c.themes[f]:a.flags.text.match(f)?d.text=a.flags.text.output(f):a.flags.font.match(f)?d.font=a.flags.font.output(f):a.flags.auto.match(f)&&(d.auto=!0)}return e?d:!1}var c=!1,d=!1,e=document.createElement("canvas");if(document.getElementsByClassName||(document.getElementsByClassName=function(a){var c,d,e,b=document,f=[];if(b.querySelectorAll)return b.querySelectorAll("."+a);if(b.evaluate)for(d=".//*[contains(concat(' ', @class, ' '), ' "+a+" ')]",c=b.evaluate(d,b,null,0,null);e=c.iterateNext();)f.push(e);else for(c=b.getElementsByTagName("*"),d=new RegExp("(^|\\s)"+a+"(\\s|$)"),e=0;ee;e++){var h=document.createElement("img");h.setAttribute("data-src",b),d[e].appendChild(h)}return a},a.run=function(b){var d=h(u,b),e=[],f=[],i=[];for("string"==typeof d.images?f=g(d.images):window.NodeList&&d.images instanceof window.NodeList?f=d.images:window.Node&&d.images instanceof window.Node&&(f=[d.images]),"string"==typeof d.bgnodes?i=g(d.bgnodes):window.NodeList&&d.elements instanceof window.NodeList?i=d.bgnodes:window.Node&&d.bgnodes instanceof window.Node&&(i=[d.bgnodes]),c=!0,n=0,l=f.length;l>n;n++)e.push(f[n]);var j=document.getElementById("holderjs-style");j||(j=document.createElement("style"),j.setAttribute("id","holderjs-style"),j.type="text/css",document.getElementsByTagName("head")[0].appendChild(j)),d.nocss||(j.styleSheet?j.styleSheet.cssText+=d.stylesheet:j.appendChild(document.createTextNode(d.stylesheet)));for(var k=new RegExp(d.domain+'/(.*?)"?\\)'),l=i.length,n=0;l>n;n++){var p=window.getComputedStyle(i[n],null).getPropertyValue("background-image"),q=p.match(k),r=i[n].getAttribute("data-background-src");if(q){var s=o(q[1].split("/"),d);s&&m("background",i[n],s,p)}else if(null!=r){var s=o(r.substr(r.lastIndexOf(d.domain)+d.domain.length+1).split("/"),d);s&&m("background",i[n],s,p)}}for(l=e.length,n=0;l>n;n++){var t=attr_data_src=p=null;try{t=e[n].getAttribute("src"),attr_datasrc=e[n].getAttribute("data-src")}catch(v){}if(null==attr_datasrc&&t&&t.indexOf(d.domain)>=0?p=t:attr_datasrc&&attr_datasrc.indexOf(d.domain)>=0&&(p=attr_datasrc),p){var s=o(p.substr(p.lastIndexOf(d.domain)+d.domain.length+1).split("/"),d);s&&(s.fluid?m("fluid",e[n],s,p):m("image",e[n],s,p))}}return a},f(b,function(){window.addEventListener?(window.addEventListener("resize",n,!1),window.addEventListener("orientationchange",n,!1)):window.attachEvent("onresize",n),c||a.run()}),"function"==typeof define&&define.amd&&define("Holder",[],function(){return a})}(Holder,window); -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | checkable(REGULAR) || $isajax) { 47 | $control->$method(); 48 | }else { 49 | $querystring=strcode($_SERVER["QUERY_STRING"], '', 'ENCODE'); 50 | tcookie('querystring', $querystring, 86400); 51 | $control->message('您无权进行当前操作,原因如下:
您所在的用户组('.$control->user['title'].')无法进行此操作。','c=user&a=login'); 52 | } 53 | }else { 54 | notfound('control "'.$controlname.'" method "'.$method.'" not found!'); 55 | } 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /lib/cache.class.php: -------------------------------------------------------------------------------- 1 | db=$db; 11 | } 12 | 13 | function getfile($cachename) { 14 | $this->cachefile=APP_ROOT.'/data/cache/'.$cachename.'.php'; 15 | } 16 | 17 | function isvalid($cachename,$cachetime) { 18 | if(0==$cachetime) { 19 | return true; 20 | } 21 | $this->getfile($cachename); 22 | if(!is_readable($this->cachefile)||$cachetime<0) { 23 | return false; 24 | } 25 | clearstatcache(); 26 | return (time()-filemtime($this->cachefile))<$cachetime; 27 | } 28 | 29 | function read($cachename,$cachetime=0) { 30 | $this->getfile($cachename); 31 | if($this->isvalid($cachename,$cachetime)) { 32 | return @include $this->cachefile; 33 | } 34 | return false; 35 | } 36 | 37 | function write($cachename, $arraydata) { 38 | $this->getfile($cachename); 39 | if(!is_array($arraydata)) return false; 40 | $strdata = ""; 41 | $bytes = writetofile($this->cachefile, $strdata); 42 | return $bytes; 43 | } 44 | 45 | function remove($cachename) { 46 | $this->getfile($cachename); 47 | if(file_exists($this->cachefile)) { 48 | unlink($this->cachefile); 49 | } 50 | } 51 | 52 | function load($cachename,$id='id') { 53 | $arraydata=$this->read($cachename); 54 | if(!$arraydata) { 55 | $cursor = $this->db->selectCollection($cachename)->find(); 56 | foreach($cursor as $item) { 57 | if( isset($item['k']) ) { 58 | $arraydata[$item['k']]=$item['v']; 59 | }else { 60 | $arraydata[$item[$id]]=$item; 61 | } 62 | } 63 | $this->write($cachename,$arraydata); 64 | } 65 | return $arraydata; 66 | } 67 | 68 | } 69 | 70 | ?> -------------------------------------------------------------------------------- /lib/encoding/big5-gb.table: -------------------------------------------------------------------------------- 1 | ,、。.·;∶?!:┅¨,、.·;:?!丨ˉ│— _  ()⌒ {}  []  【】  《》  〈〉∧∨「」  『』  (){}〔〕‘’“” "`′#&*※§〃○●△▲◎☆★◇◆□■    ˉ         #&*+-×÷± <>=≤≥≠∞ ≡~∩∪⊥∠    ∫∮∵∴♀♂ ⊙↑↓←→    ‖|/\  $¥ ¢£%@℃           °                        ┼┴┬┤├ ̄─│ ┌┐└┘               0123456789ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ        文十 卅ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ√`                                                               一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久厶也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允内六兮公冗凶分切刈匀勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿吊引心戈户手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉册冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦术本未末札正母民氐永汁汀泛犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丢乒乓乩亘交亦亥仿伉伙伊 伍伐休伏仲件任仰仳份企 光凶兆先全共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁寸各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗污江池汐汕污汛 泛灰牟牝百竹米纟缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住伫佗佞伴佛何估佐佑伽伺伸佃占似但佣作你伯低伶余佝布佚兑克免兵冶冷别判利删刨劫助努劬匣即卵吝吭吞吾否尺吧呆呃吴呈吕君吩告吹吻吸吮吵呐吠吼呀吱含吟听囱困囤囫坊坑址坍均坎圾坐坏圻壮夹妆妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑 改攻攸旱更束李杏材村杜杖杞杉杆杠杓 步每求汞沙沁沈沉沅沛汪决沐汰沌汨冲没汽沃汲汾汴沆汶冱沔 沂灶灼灾灸牢牡它狄狂玖甬甫男甸皂盯矣私秀秃究系罕肖肓肝肘肛肚育良芒芋芍见角言谷豆豕贝赤走足身车辛辰迂迩迅迄巡邑邢邪邦那酉采里防阮阱阪坑并乖乳事些亚享京佯依侍佳使佬供例来侃佰并侈佩佻仑佾侏侑 兔儿兕两具其典冽函刻券刷刺到刮制剁劾 卒协卓卑卦卷卸恤取叔受味呵咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姗始姓姊妯奶姒 孟孤季宗定官宜宙宛尚屈居届岷冈岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征佛彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔抛拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊升服朋杭枋枕东果杳杷枇枝林杯杰板枉松析杵枚 杼杪杲欣武歧殁氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油况沮泗泅泱沿治泡泛泊 泯 泖泠炕炎炒炊炙爬争爸版牧物状狎狙狗狐玩珏玟玫 圳疝疙疚的盂盲直知矽社祀祁秉籼空穹竺纠罔羌芈者肺肥肢肱股肫肩肴肪肯卧臾舍芳芝芙芭芽芟芹花芬芥芯芸 芰芾芷虎虱初表轧迎返近邵邸邱邶采金长门阜陀阿阻附陂隹雨青非亟亭亮信侵侯便侠俑俏保促侣俘俟俊俗侮俐俄系俚俎俞局兖冒胄冠刹剃削前剌克则勇勉勃劲匍南却厚叛咬哀咨哎哉咸咦咳哇哂咽咪品哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奂姜姘姿姣姨娃姥侄姚奸威姻孩宣宦室客宥封屎屏尸屋峙峒巷帝帅 幽庠度建弈弭彦很待徊律徇後徉怒思怠急怎怨恍恰恨恢恒恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷拯括拾拴挑挂政故斫施既春昭映昧是星昨昱 曷柿染柱柔某柬架枯栅柩柯柄柑拐柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗活洽派汹洛泵洹洧  泄洵洎洫炫为炳炬炯炭炸炮照爰牲牯抵狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥 疣癸皆皇皈盈盆杯盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈只禹禺科秒秋穿突竿竽籽纣红纪纫纥约纡缸美羿耄耐耍撰耶胖胥胚胃 背胡胛胎胞胤胝致舢苎范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要浸计订讣贞负赴赳趴军轨述迦迢迪迥迭迫迤迨郊郎郁 酋酊重闩限陋陌降面革韦韭音页风飞食首香乘亳倌倍仿俯倦倥俸倩幸俩值借倚倒们俺伥倔倨俱倡个候倘俳修倭倪俾伦仓兼冤冥冢冻凌准凋剖剜剔刚剥匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭员唉哮哪哦唧唇哽唏圃岳哽埔埋埃 夏套奘奚娑娘娜娟娱娓姬娠娣娩娥娌娉孙 宰害家宴宫宵容宸射屑展屐峭峡峻峪峨峰岛 岘差席师库庭座弱徒径徐恙恣耻恐恕恭恩息悄悟悚悍悔悌悦悖扇拳挈拿捎挟振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅时晋晏晃晒晌 晁书朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓 桁殊殉殷气氧氨氦氤泰浪涕消泾浦浸海浙涓里涉浮浚浴浩涌 浃涅 涔烊烘烤烙烈乌爹特狼狭狈狸狷 班琉沛珠 珞畔亩畜畚留疾病症疲疳疽疼疹痂疸皋疱益盍盎眩真眠眨矩砰砧砸砝破砷砥砭咀砟炮秘祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉纺纱纹紊素索纯纽纰级纭纳纸纷缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰胁胭胴脆胸胳脉能脊胼胯臭臬舀舐航舫舨般刍茫荒荔荆茸荐草茵茴荏兹茹茶茗荀茱茨荃虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽只记讦讨讧讪讯托训讫  岂豺豹财贡起躬轩轫 辱送逆迷退乃回逃追逅迸邕郡郝郢酒配酌钉针钊釜钋闪院阵陡陛陕除陉升苹饥马骨高斗鬲鬼乾咱伪停假偃偌做伟健偶偎偕侦侧偷偏倏  兜冕凰剪副勒务勘动匐匏匙匿区匾参曼商啪啦啄哑啡啃啊唱啖问啕唯啤念售啜唬衔唳啁啖圈国圉域坚垩堆埠埤基堂堵执培够奢娶娄婉妇婪婀娼婢婚婆婊孰寇寅寄寂宿密尉专将屠屉 崇崆崎崛崖峥昆崩崔仑崤崧岗巢常带帐帷康庸庶庵庾张强彗彬彩雕得徙从徘御徕徜恿患悉悠您惋悴惦凄情悻怅惜悼惘惕惆惟悸惚 戚戛扈掠控卷掖探接捷捧掘措捱掩掉扫挂扪推抡授挣采掬排掏掀捻捩舍捺敝敖救教败启敏叙敕 斜斛斩族旋旌旎昼晚晤晨晦 曹勖望梁梯梢梓梵杆桶阃梧梗械梃弃梭梆梅栀条梨枭  欲杀毫逑氢涎凉淳淙液淡淌淤添浅清淇淋涯淑涮淞淹涸混渊淅凄渚涵泪淫淘沦深淮净淆淄涪淬涿淦烹焉焊烽烯爽牵犁猜猛猖猓狰率琅琊球理现璃瓠瓶瓷甜产略畦毕异疏痔痕疵痊痍皎盔盒盛眷众眼眶眸眺硫朱硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕绊弦统扎绍绋绌细绅组累终绁绂钵羞羚翌翎习耜聊聆脯脖唇脱修  舂舵舷舶船莎莞莘荸荚茎莽莫莒庄莓莉莠荷荻荼莆苋处彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉术衮袈被袒袖袍袋觅规访讶诀讷许设讼讹欣豉豚贩责贯货贪贫赧赦趾趺轭软这逍通逗连速逝逐迳逞造透逢逖逛途部郭都酗野钗扣钓钏 钒闭陪陵陈陆阴陴陶陷陬雀雪雩章竟顶顷鱼鸟卤鹿麦麻家傍傅备杰傀伧伞艾最凯割剀创剩劳胜勋博厥啻喀喧啼喊喝喘喂喜丧喔喇喋喃喳单喟唾哟唤喻乔喱啾喉吃喙围尧堪场堤堰报堡埚堠壹壶奠婷媚婿媒媛娲孳孱寒富寓寐尊寻就嵌岚崴嵇巽幅帽帧帏几廊厕厢厩弼彭复循徨惑恶悲闷惠惬愣惺愕惰恻惴慨恼愎惶愉愀憩戟扉掣掌描拣揩揉揆揍插揣提握揖揭挥捶援揪换摒扬撼敞敦敢散斑斐斯普晰晴晶景璁智晾晷曾替期朝棺棕棠棘枣椅栋棵森栈棹棒栖棣棋棍植椒椎棉棚楮 款欺钦残殖壳毯氮氯氩港游湔渡渲涌凑渠渥渣减湛湘渤湖湮渭涡汤渴湍渺测湃渝浑滋溉涣湎 湄  湟焙焚焦焰无然煮 牌犄犀犹猥猴猩珐琪琳琢琥琵琶琴 琛琦琨甥苏画番痢痛痣痉痘痞 登发皖皓皴盗困短硝硬砚稍秆程税稀窘窗窖童竣等策笔筐筒答笋筋筏诛粟粥绞结绒绝紫絮丝络给绚 绛善翔翕耋聒肃腕腔腋腑肾胀腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁华菱庵著莱菰萌菌菽菲菊萸萎萄菜苌菔菟虚蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃视注咏评词证诂诏诅诈诋诉诊诃 象貂贮贴贰贻贲费贺贵买贬贸贷越超趁跎距跋跚跑跌跛跆轲轴轶辜逮逵周逸进逶鄂邮乡郾酣酥量钞钮钙钠钧钝钤 钣闵闰开闲间闲闳队阶隋阳隅隆隍陲堤雁雅雄集雇雯云韧项顺须飧饪饭饨饮饬冯驭黄黍黑乱佣债傲传仅倾催伤傻偬 剿淫剽募剿勤势绩汇嗟嗨嗓嗦吗嗜啬嗑嗣嗤嗯呜嗡嗅呛嗥嗉园圆塞塑塘涂冢塔填塌 块坞埘茔奥嫁嫉嫌媾妈媪媳嫂媲嵩嵯幌干廉厦弑汇彷微愚意慈感想爱惹愁愈慎慌栗愠忾怆愧愍愆恺戡戢搓榨搞搪搭搽搬搏搜搔损抢摇捣构敬斟新暗晖暇晕暖暄  会榔业楚楷楠楔极椰概杨桢楫楞枫楹榆楝楣 歇岁毁殿毓毽溢溯滓溶滂源沟滇灭溥溘湿溺温滑准溜沧滔溪溧溴煎烟烦煤炼照煜炀煦煌焕煞煅煨暖爷牒猷狮猿猾琅瑚瑕瑟瑞瑁珲瑙瑛瑜当畸瘀痰瘁 痱痹痿痴淋盏盟睛睫睦睐督睹睾睬睁睥睨睢矮碎碰碗碘碌碉硼碑碓 祺禄禁万禽棱稚稠稔禀稞窟窠筷节筠筮笕粱粳粤经绢捆绑绥绦置罩罪署义羡群圣聘肆肄腱腰肠腥腮脚肿腹腺脑舅艇蒂荤落萱葵苇葫叶葬葛萼莴葡董葩葭葆虞虏号蛹蜓蜈蜇蜀蛾蜕蜂蜃蚬蜊衙裟裔裙补裘装里袅裕裒眺解诧该详试诗诘夸诙诣诚话诛诡询诠诟詹 訾 豢貊貉贼资贾贿赀赁赂赅迹跟跨路跳跺跪跤踬躲较载轼轾辟农运游道遂达逼违遐遇遏过遍遑逾遁邹 酬酪酩釉钴钳钹钸钾铀铅炮钩铂铃铉铋钜铍钿铆闸隘隔陨雍隽雉 雷电雹零靖靴靶预顽顿顼颁颂饲饴饱饰驰驮驯髡鸠麂鼎鼓鼠僧僮侥僖僭僚仆像侨雇撰 兢凳划劂匮厌嗾嘀嘛尝嗽呕叹嘉喽嘎嗷啧嘟嘈 哔团图尘塾境墓垫堑墅 寿夥梦夤夺奁嫡嫦嫩妪嫖嫘嫣孵寞宁寡寥实寨寝寤察对屡崭岖幛币幕帼幔廓廖弊别彰彻殷愿态慷慢惯恸惭惨慵截撇摘摔撤摸搂摺掴摧搴摭掺敲斡旗旖畅暨暝榜榨榕槁荣杠构榛榷榻榫榴槐枪榭槌干盘 歉歌氲漳演滚漓滴漩漾漠渍漏漂汉满滞漆漱渐涨涟漕漫漯澈漪沪渔渗涤卤熔熙煽熊熄荧尔犒荦狱獐瑶琐玛瑰瑭甄疑疟疡疯愈痪尽监瞄睽睿睡磁碟碧碳硕碣祯福祸种称洼窝竭端管箕笺筵算箝箔筝箸个箅粹粽精绽绾综绰绫绿紧缀网纲绮绸绵彩纶维绪缁绶罚翠翡翟闻聚肇腐膀膏膈膊腿膂臧台与舔舞艋蓉蒿席蓄蒙莅蒲蒜盖蒸荪蓓搜苍 蓊蜿蜜蜻蜢蜥蜴蜘蚀蜷蜩裳褂裴裹裸制裨褚志诵语诬认诫誓误说诰诲诱诳诮 豪狸貌宾赈赊赫赵赶局辅辄轻挽辣远遘逊遣遥递遢 遛鄙墉鄞酵酸酷酴铰银铜铭铢铬铨衔铵 铣阂闺闽阁阀合隙障际雌雒需靼鞅韶颇领飒台饺饼饵饷驳肮骰髦魁魂鸣鸢凤麽鼻齐亿仪僻僵价侬侩俭 凛剧劈刘剑刽勰厉唠嘻嘹嘲嘿嘴哗嘘噎噗喷嘶啸叽墀墟增坟坠堕墩  嬉娴婵妩娇娆寮宽审写层履嶝 幢帜幡废厨庙厮广厂弹影德徵庆慧虑慝慕忧戚慰怂欲憧怜悯憎憬惮愤憔怃戮摩挚摹撞扑捞撑撰拨挠撕撩撒撮播抚拈撬撙掸揿敌敷数暮暂暴昵样樟椁桩枢标槽模楼樊桨乐枞槭梁欧叹殇毅殴浆潼澄泼潦洁浇潭潜潸潮澎潺溃润涧潘滕浔  熟熬热熨牖牦奖獗莹璋璃瑾璀畿瘠瘩瘟瘤瘦疮瘢皑皱盘瞎眯瞌瞑嗔磋磅确磊碾磕码磐稿稼谷稽稷稻窑穷箭箱范箴篆篇篁棰篌糊缔练纬致缄缅缉编缘线缎缓缍缂缈缇骂罢羯翩耦膛膜膝胶肤膘蔗蔽蔚莲蔬荫蔓蔑蒋蔡卜蓬葱蓿菱螂蝴蝶蝠虾蜗虱蝙蝗蝌蝓卫冲褐复褒褓 褊谊谅谈谆诞请诸课诿谄调谁论诤谇诽谀豌竖猪赔赏赋贱账赌贤卖赐质赓赭趟趣碰践踝踢踏踩踟 踞躺辉辆辍辈辇轮辎辋辊适遮遨遭迁邻郑邓鄱醇醉醋腌锌锑销铺铐锄铝锐锉锋钡锂焊闾阅霄霆震霉靠鞍鞋巩颉俯颌刮养饿馁馀驼驻驷驶驽驾驹驸骷发髯闹魅魄鱿鲁鸩鸦 麸麾黎墨齿儒尽俦傧侪冀幂凝剂劓勋噙噫当噩噤吨噪器哝噱嗳噬噢噶壁垦坛壅奋袅嬴学寰导强宪凭憩惫懔忆憾懊懈战擅拥挡挞撼据掳择擂操捡擒担挝整历晓暹晔昙 樽朴桦橙横橘树橄椭橡桥橇樵机桡歙历氅濂淀澡浓泽浊澧澳激澹澶 渑 炽炖磷烧灯燕熹燎烫焖燃 独璜玑  璞瓢瓯甍瘴瘸瘘卢盥瞠瞒瞟瞥磨砖磬碛御积颖穆稣 窥篙蓑筑笃箬篡筛篦糕糖缢缣萦缚县缟缜缟绉罹羲翰翱翮耨膳腻膨臻兴艘舱蕊蕙蕈瞢荡蕃蕉萧芜蕞螃螟蚂萤融衡褪裤褥褫褡亲觎谛谚谏讳谋谍谐谘诺谒谓讽谕谙谌谖豫 猫赖蹄踱踊蹂踹踵辐辑输辏辨办遵遴选迟辽遗邺醒锭表锯锰错钱钢锡录铮锥锦 锟锢锱阎隧随险雕霎沾霖霍霓霏靛静腼鞘颊颈频颔头颓颐餐馆饯馄馅肴骇骈骆骸骼髻髭哄鲍鸵鸪鸯鸭 鸳默黔龙龟优偿儡储励嚎咛尝嚅吓嚏壕压壑埙婴嫔嬷孺尴屦屿岭岳嵘帮弥徽应懂恳懦懋戏戴擎击擘挤拧擦拟搁擢 敛毙曙暧檀档檄检桧栉樯 檗檐檠 殓 毡泞滨济濠蒙涛滥濯涩浚濡 湿濮潍燧营燮灿燥烛毁烩燠爵墙狞获璩环瑷璨痨疗癌荡瞳瞪瞰瞬瞧了矫磷磺磴矶礁禧禅穗窿簇篓篾篷簌筱糠糜粪 糟糙糁缩绩缪缕缧绷缝总纵缫繁纤缥襁缦  罄翳翼聱声聪联耸臆臃膺臂臀脓胆脸脍临举艰薪薄蕾薜姜蔷薯薛薇薨蓟亏蟀蟑螳蟒蟆螫蝼螺蝈蟋亵褶襄褛 觊谜谤谦讲谎谣谢誊谧豁溪豳赚赛购剩赙趋蹉蹋蹈蹊辖辗毂辕舆避遽还迈邂邀鄹醣酝丑镀镁锚键链锲锅锤锺锹锻锾 锷阔阕阑闱板隐隶虽霜霞鞠韩颗飓喂骋骏鲜鲛鲔鲑鸿鸽麋黏点黜黝黛鼾斋丛噜向圹垒婶彝懑戳扩掷扰撵摆擞撷断曜朦槟檬柜槛柠棹 台欤归殡泻渖滤渎溅瀑浏熏烬焘 犷猎璧璇瓮癖疠愈瞽瞿瞻睑础礼穑秽 窜窍箫簧簪箪篑简粮织缮绕缭绣缯翻坛翘翻职聂脐膑旧藏萨蓝藐藉薰荠薹荐蛲蝉虫蟠覆觐觞谟谨谬谪丰赘蹙蹒蹦踪迹跸躯转辙迩邃邈医酱厘熔镑锁钨镍镇镐镒镉锤枪阖闯阗阙离杂双雏鸡馏鞣秋鞭 额颜题颚颛杨馏馊馈餮馥骑髁鬃松魏魉魍鲨鲤鲫 鲧鹃鹅鹄黠冬鼬 咽坏垄坜宠庞庐惩怀懒懵攀拢旷曝橱椟榈橹瀛潇濑瀚沥濒泸爆烁牍犊兽獭玺琼瓣畴疆瘪痴蒙碍祷获稳帘簿簸签檐籀系茧绎绳绘罗缴膻羹羸腊藩艺薮藕藤药薯蚁蝇蝎蟹蟾裆襟袄襞哗谱识证谭谲讥嘻谯赠赞蹼蹲躇蹶蹬跷蹴辚轿辞边邋 醮镜镝铲镞链镗镘鏖镖镙锵镂铿錾关陇难霪雾靡韬韵类愿颠飕馒馑骛骗鲸鲳鲭鲷鹑鹉鹊鹌鹏麒丽麓麴劝咙嚷嘤严嚼壤孀娘孽宝 悬忏攘拦搀曦胧榇澜弥潋炉献珑痒症矿砺矾砾窦竞筹篮籍糯团辫缤继纂罂耀胪舰藻蔼蘑蔺芦苹苏蕴蚝蠕褴觉触议譬警译躁谵赢赡趸躁躅 醴释钟铙锈阐霰飘饶饥馨骞腾骚 鳃鳅咸面党鼯龃出龄俪罗嗫啭嚣夔属巍惧慑摄携斓曩樱栏棂歼灌烂牺镶璎癞 藤缠续羼蘖兰胡蛎蠢蠡蜡袜摆览谴护誉赃踌跃跻轰辩醺镰镭铁铛铎镯镌辟霸霹露响顾颢飨驱骠蓦骡髅魔魑鳍鳏莺鹤鹞 麝黯鼙龇龈啮俨傥呓囊棉孪巅峦弯懿摊权欢洒滩猡瓤叠瘾癣禳笼籁聋听脏袭衬 读赎赝踯踬辔郦铸鉴鉴霁霾鞑缰颤饕骄骁脏需鳖鲢鳔鳗鹧鸥鼹龉龊龚苏岩恋挛攫搅晒 瓒窃签  缨纤才 蘸萝蛊变逦逻镳铄刨靥显餍惊驿验髓体髑鳝鳞鳜鸶麟酶嘱坝揽灞瘫癫矗罐羁蚕蠹衢让谗谶艳赣酿炉雳灵霭千颦骤鬓魇鲎鹰鹭硷盐鳌龌龋厅榄湾篱箩蛮观蹑衅镶钥颅馋髋鬣黉滦瞩赞镊鞯驴骥缆谠躏酽钻銮锣鳄鲈黩艳凿鹦爨骊郁鹳鸾吁①②③④⑤⑥⑦⑧⑨⑩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽          丶丿 亠冂冖冫  卩厶夂宀巛幺 廴彐彡  疒           々      ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮⅱⅱбвгдеёжзийклмнопрстуфхцчшщъыьэюя       刂                                                  №            亻勹阝艹扌犭攵忄丬氵辶攴灬礻肀虍糸衤              乜凵匚万丌丌乇亍囗 屮彳  与 亓仂仉          无殳 气爿  仨  仡仝       夯宁宄尔尻   庀 忉钺 氕     犰  臆 伎优 仵  忪价 传  伢    冱     炕   囡囟圮圪 夼 姹      尕尥 屺    庄异    忏 捍 拖扦  叉  旯旮    机   氘汆 汜 汊汔    犴 玎  挖网草  艽艿虍 邙邗 邛 阢陀 屹    体佤 佧 佟 佘         劭 砰卣 砥   讹呔        种       坌        妗          岍 岈   岜      庋        忒忑忐忭 忮 忡忤急   忻怀  拚        扰      考旰     圬  杌杈     氙氚     沏  汩        浒      狃 狁     钏 町 疔 皂    胳 肜苄芏 芎芑 芊 芄豸   邡     厄址   佼    佶佴侉侄  侗徊      侔       冼   刳 创 掬        咂       呦      诋呤 囹坯 坭坫  坶 丘坻坳  坨       妲            孢孥宓宕     岵  岬 岣岭岢   坡    帔帙    录徂伶    怦怙   怊 恍    怍   、怀 怜戋戽舀拽钳   拊   抻            昃       朊   丫  枘 腹锨   檀    极    夭殁纰 沓 泫泮  泔沭  泐        溯   泞         炔 炅    炖         狒  猩  琊  玢     氓畀甾 肛  盱  矸        穸    耵 肮   肭   芫 芘   芮   芴芨芡芩 芤茇   虬 虮   迓  迕  邴邯邳邰 阽阼   俅    俣 俜   俯      刭锉      厍厘  咭 哏  啕    哆 钉呙  呲哞 埯  垤垌  垛堙       复   嫦  姝      侑         裙    峋               卺          庥  彖         旨 ⅱ 恂       扃    挎      拶           昶  昵    煦炳昝昴    柁   柜  柘 枷   楠枵 枳        柰           柃   殂殄 毖毗袈 氡    洼 洒  洳洄洙 洚    洁     洇      炷  炱           牮  狨     妙 珂珈                 畈    眈 眄     矧  砑砒    砉     袄 秕种 只 窀      妆    纨 罘诱     耔耷   肢 胂   胙 朐   胗 胍 舡卉  苹   苕茺苫 苴 苡  茌苻   苤苠     虼     衩  訇   迮     郅邾郇  钇钆陔                倬倜  倜      党   凄 净 剡  剞          哧哳 吣哿呗  唑含             埕埒    垸                  孬                   弪  恝恚恧恁   悒 悝悃 悛         拔救捅 捃 挹捋 挪                 旆旃旄旗 晟      桉栲栳   栖      桎桄 栝 契       咳            绒  浣        浯涑    浞 浠  浼 涂                                     狺狴  狳狻猁 珙珥  珧 珩         瓞 瓴  畛 疰  痄 痱            眙眚眢 砣砬       砩    祛 祜祓  秫   秭    窆        笄  笏笈笊    粑           纾     罡         耖  胺胲     舁舯 茳茭  荑     茜   茛 茈茼 荞  薅茯 荇 拣  茬   茧  蚨螈蚍     蚋蚧蚕蛔 蚝蚧       衄   衲  衿  衾   豇  犴  赶趵       适 逄       郏  郛郗郜 酐酎酏钌   陟隼 髟鬯  契逼     偈    踽                 剐勖 匦 啵啶唼 啐 唪 喋  唰    啥 忤     圊囵     埴堀埭埽 埸 堋埏堇     垭    坝    堍    婕婧   娅 婀  淫                        屙崞  峥岽  崃崦  岷   崮    庹 庳      哲       婪ⅱ膂惝悱   惊   挲 掊掂  碰掭   掎 掇掐据 抻捭掮 挪         夺旌晡      榔    杯       桴 梏桷  桫                   欷   殍  氪涫      洫涞   淠 淖 渌 淝 浙 淹     撑           烷烃    焐   焓      牾  牿猝猗   猊   猞      璇  含        答 痒  恫 蛔   眯眭     眦仅眵 硒   硌砦 硐 祧    夹 离秸      筇 笥  笤笳 笪 笱笫   笸   粘      绀  绸   绐    挂 羝 翊           聃  脘 胫  脬脞 脘    舸舳 舴 艴  莨  豆    荇  莩荽   莛莪      莰       宓呼    蚺蚰     蚴      炫  袢    粗瘗    袤  袍  觖               趼  趿         逋逑  逡郯  郴   郫    酚   焊   钐钕  钍   闫          馗     傣  骂   徭       历喑 亮 啷   喈喏喵喁      岩   呙  堙堞         碱        妫  婺         偷                 实寝     嵫 嵋  砀 隅嵛  崽           幄 彘          恽  忱   凿            掰揎       揠揶 揲   掾  揄       轰         斌   斫旒   暗             桠枨、耦   椐              棼 椋 碇             欹       淆  毳氰淼    沩    渫           菏浈       湫   湓              焯  焱炒       笺     犋 飙 猢猱        琮琬琰 盏琚  雕       甯 畲痧  痦  痤     睇瞧       矬 硖  硭 硪确  砗      稂 稃   竦     筌  筘筅粢粞      纩  绁 洁      绗瓶   绒 羡       腊     脆     舄     菏菹 菀            萁菝菥菘 菡  菖 绿 萏 萑萆    菇灾菪       抱   蛘   鲒      蛩  蛑 弄同夹      袼袷   裉ⅱ觇 抵觚 讵     诎  诒詈       贶 贳  趄      跖 跏   跗   轺轵      轭轸    逭 逯郓 鄄     邶    酡酤 酢 钫 钬  钛  钯   铅钭钪     钥   闶   隈陧      氛   顸 饫 黹        仙伛 偻  傺  佥         嗌   嗝 嗔嗄唢 嗒    嗖 嗲嗍     埙垲塍     确塥 冈    袅 媸 媵 愧           浸置 鲜   嵊  嵬 坞  巯 幂        彀 徭蠢 慊愫            戥戤  揪搐榜 搠扼 扛   扼   搌搦 拓摁  掏 捂捶扇搋 搛 搡  斑  暌        楦    楱椿  椹楂楗       椽楦棰楸椴           缄        歆 歃   殛   毹     溏 溟   溱溯  溽滁  溷皑  滏溲                 辉 炜    茕煲煸              犍      狲   榛  玮  瑗         瓿   畹    瘃 疴痼痹 瘐     皙    眷  睚      碇碚      碡              稗       凼 管 算厕筒筲  筱     粲  绨绠 绋     绡         罨  羟羧  锄 腠  腩      腧  脶 艉艄   贫  葶    葑      葚葙 葳   峭  葺 葸             荭药 蒎     蔫  参 葭 螓   蛱   蛸 蜉  蜍    裎   夹    觥    觜触 诓诖诩訾  诔诜            貅   趑     趔  胼 跬    跣   跫踩    辂辁   遒 遄侦     郧邬  酮酯铊 铈钰钲钶 钺铳铌 钻钽钼锄          锎            隗雎    靳   颃 颀            凫 黾僦  偾僳     僬  僭   劁    嘧 嘌  嘏唛嘁       墉    墁 堋   墒         嫜      嫫  嫠       昵  屣嶂    嵝    参    帻幕  廑   荫 廒     诉悫   悭     慑     怄  戬戗 搬    抟 抠   扯 撂摞掼     搿            望榱   槎       榧榍   桤   槔 槊    杩        ⅱⅱ  殒     荥    浒   漉  沤干     漶 滹 漭   溆                      熏   炝 榜   呆獍            疃 喑 瘌瘕 瘊 皲  瞅  瞀 睾 碲砧碴砀    碥  砣  禊               窨 窬  箜  箐 箍  篪箅 札    粼稗   绻      绲 绯  绺   綦綮      翥  馘   腽     蒗 蒡 蒺     蒹蒴蓁蓍   蓐    莳   菹蒯茜蓖            蜣蝶  蜮蜞蜡     蜾      蜒霓蜱      蜚 蛋  裱  裾 裼  裰   觋   觫    诶 悖   赇   踉   跽踊   踅       鄣  鄢       酲酹 铱   铒铑 铕 铟铫铯  铪铷铖銎 铁           铥       绊   鼗   鞴   泮 飑          絷 骱仿        鸨     儆儇  儋侥  剿刿劢   噌哓恶 啖 噘    嘬 呒                           嶙崂     峤         廛 庑  憋樽硗     惠 樽 愦        撖 撅      掸挢  搭阵驱  斫 蔫        樗      槿    墁 槲   椠     规   樘              毵 颍  涝  澍澉澌潢  潇  滩澄 潲   浩           涠  滗      熠  熵        熳  毙獒  獠      璇琏 球璁 琐      瘥瘗瘙    癫瘛颢  睽箫    确    磔   磉禚      稹 填窳 箧 箬     糅糈糌     缃缗  缌缏缑     羰  玩  翦翅  膣      铺艏      蔻      蔟   艺蔫  蔌莼  蒂   蓼         荜蒌  茑 莜蓰苁       虢 蝣蝤  玳    蠕  猸   矮猬 猿  蝮 蝥 蝻           褙   袖       诹   诼   谂               赉琛赕     踣  踮       踔          锅    递遁  鄯   郸许 醅盏      锒    铗铽锓   锊铤锆镅锇 鋈 锔鬻       铿    阆阃  颓   霈 靓       颏      糍 饽        驵   骀     髫髦 ⅱ 魃 鲂             鸨   雁  洋  鼐       睿 哒  哕  哙  圜       墼 嬗嫱 嫒   嬖        峄  险 岙   岙    廪  廨  徼憝憨     怿    擗 擐擎            暾   向           樾   橛 樨     蕊橐       撑  无    殪殚    氆  浣涩   潞   豁   浍       濉藕      煌   烨 燔             狷獬 猃狯 琼        瘭  瘳瘼瘵 瘰齄      瞢      磊  碜    碌     窭       篝 篥篚           糗      缛     绦 缒        毕   耪耩  膦     脆        蕖   芸 荛 蒇蕤荨蒉       荞  莸  芗          螗螓 螈  蚁   螅   蛳      褰袅          喧诨    谑谔   谝                    蹀   踽蹁逾       轰 绕      郐 醐醑醍  镦锩锬锖 锗铼锛 锕锞钔                          阏 阈阉 阊阌 阍   阴   鞔       喂  驳         胼 胯  髹     鲈    鲋鲐          鸲    鸱麈 麇 包    鼽       嚓哜 嚆          奶 嬲       呓 嶷帱   勤      恹蒙摈捣  擤        檩舣柽      檎    檑      敛僵  泶 弥     濞             獯   璐      甑 甏 癃废瘅痫皤 瞵         硗   磲礅               簏 箦    簋筚        篪  糨缡        繇   縻絷  罅 罾   耧膻 臌臊     艚  蕴薏     蕻薤  蓣 秽 蕺      剃    荟薅蕹   莶 蚓 螭  螬 螵       螯蛰蟊    螽  缡裢  襁    觏  觳  谡 诌     謇     谥      貔    遛 跄蹇     醚醢醛        锸 锴针铡 锶     鎏 鍪               暗哄 阒  跻隰       鼙绱             糊 饧   糇 馘             呆鲠    魈鲒 鲕     鲚        鸸  鸹 鸺             黻鼋  鼢龀龠        啮        怼       痒掷摅    撸   曛          桦  医     滢     潴泺   耀燹            甓癜疖           磊礓霹           簟  簦   箅  伞  缋         聩   艟     丛   蓣   荩   埋   薷     蟛 蟪蟥     蟓  虮           幞  裥   讴   诅呼谩   謦 啧       貘 赜贽   踯跖  踯 糟 趟 屣蹩 辘    邝     醯醪镓镰耨  锝 铠 锼 镏                隳            鞫     韪   诨    饩 骐  骒   骓  髀 鬈  阋 蜮  鲩   鲠       鹈鹁        鹆      黟              厣  呖 啖频垆   懒         攉      槠     栎  橥  橼  氇 泷潆    瀣          熬        罂 频     礴  礞祢 颓          缲 缳    瓮 幂罴     膘舣                藜       蟮蠃蛏螳   虿  蠛蠊 袒      裣 核觑 觯 憝   谮撰谰                蹭躏  蹯           醭镛镟    镪罅镆 铩 鏊                     鞲韫  颡  帆   馐饫馍           鬃   髂     鲮鲰  鲲 鲵鲶鲻鲞     鲱                雕     鹎  鸫  貌 黼          喾         捃撄 搴    栊槐枥栌     瀵        瀹    焰   猕璺       矍   磊 礤    稆 笞      缱    聍 胭 艨 茏藿    苈蕲砖蘅   蝻蝾 蠓蠖 襦      验  毁躁          酃  醵  铴镦 镨 镡  镣镄镫 铧柜镤   铹        锲 阚         颟       馔馈 草    驺 骝骟骘  膊 缜  鲽  鳆       鳇     鹕        鹗    鹚鹜      黥 黧    龆  龅 傩攒    欢  岿  欢撺   榉 沣滠     爝  獾    砻   粝纩 缬  累   裸 蘼   菊 蘧  蔷蘩蔹   蠛    蔑缬         赆    槛 舆酆   镱 钚        锿剑闼        飙      骢骖骜             鲥鳎鳐    鹣       鹘            鹾        赍   娓 冁   娈      攒棹  氍漓    欢   弥  瘿   穰  箨   籴  垆  舻            觌  谫   审  蹰躔跹跞躐   轹 镔 镬            饔     骣 骅      鬻   鳕  鲣鳓  鲦 鳌     鹨      鸷      缜     龛和            挡攥  攒栾椤     猃蠼痈     蓠  蘼    蠲      宴雠     轳             鬟 鳟鲟  鲅       鹩  鹬    鹪鹫燕   鹇    黪    鼷  齑 咋  啮         灏漤       簖         谰躞      鑫    霍    髌 鳝鳢   脍             冬   腭囔攮         瞰 笾 粜 缵纛 脔       襻  欢蹿   镧  键  饷  鲚        鼍     栾  蠼趱躜酾   罐         谐赣      谳    颞颧   骧   鸬  戆棂     镢欢 阄         鲡鹂滟 粗    锈里墙恒妆娴                                 ⅱ -------------------------------------------------------------------------------- /lib/encoding/gb-big5.table: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/lib/encoding/gb-big5.table -------------------------------------------------------------------------------- /lib/encoding/pinyin.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/lib/encoding/pinyin.dat -------------------------------------------------------------------------------- /lib/iconv.func.php: -------------------------------------------------------------------------------- 1 | 0x80) { 58 | $thisW = substr($gbstr, 0, 2); 59 | $gbstr = substr($gbstr, 2, strlen($gbstr)); 60 | $utf8 = ''; 61 | @$utf8 = unicode_to_utf8(hexdec($CODETABLE[hexdec(bin2hex($thisW)) - 0x8080])); 62 | if($utf8 != '') { 63 | for($i = 0; $i < strlen($utf8); $i += 3) $ret .= chr(substr($utf8, $i, 3)); 64 | } 65 | } 66 | else { 67 | $ret .= substr($gbstr, 0, 1); 68 | $gbstr = substr($gbstr, 1, strlen($gbstr)); 69 | } 70 | } 71 | return $ret; 72 | } 73 | 74 | function big5_to_gbk($Text) { 75 | global $BIG5_DATA; 76 | if(empty($BIG5_DATA)) { 77 | $filename = CODETABLEDIR.'big5-gb.table'; 78 | $fp = fopen($filename, 'rb'); 79 | $BIG5_DATA = fread($fp, filesize($filename)); 80 | fclose($fp); 81 | } 82 | $max = strlen($Text)-1; 83 | for($i = 0; $i < $max; $i++) { 84 | $h = ord($Text[$i]); 85 | if($h >= 0x80) { 86 | $l = ord($Text[$i+1]); 87 | if($h==161 && $l==64) { 88 | $gbstr = ' '; 89 | } 90 | else { 91 | $p = ($h-160)*510+($l-1)*2; 92 | $gbstr = $BIG5_DATA[$p].$BIG5_DATA[$p+1]; 93 | } 94 | $Text[$i] = $gbstr[0]; 95 | $Text[$i+1] = $gbstr[1]; 96 | $i++; 97 | } 98 | } 99 | return $Text; 100 | } 101 | 102 | function gbk_to_big5($Text) { 103 | global $GB_DATA; 104 | if(empty($GB_DATA)) { 105 | $filename = CODETABLEDIR.'gb-big5.table'; 106 | $fp = fopen($filename, 'rb'); 107 | $gb = fread($fp, filesize($filename)); 108 | fclose($fp); 109 | } 110 | $max = strlen($Text)-1; 111 | for($i = 0; $i < $max; $i++) { 112 | $h = ord($Text[$i]); 113 | if($h >= 0x80) { 114 | $l = ord($Text[$i+1]); 115 | if($h==161 && $l==64) { 116 | $big = ' '; 117 | } 118 | else { 119 | $p = ($h-160)*510+($l-1)*2; 120 | $big = $GB_DATA[$p].$GB_DATA[$p+1]; 121 | } 122 | $Text[$i] = $big[0]; 123 | $Text[$i+1] = $big[1]; 124 | $i++; 125 | } 126 | } 127 | return $Text; 128 | } 129 | 130 | function unicode_to_utf8($c) { 131 | $str = ''; 132 | if($c < 0x80) { 133 | $str .= $c; 134 | } 135 | elseif($c < 0x800) { 136 | $str .= (0xC0 | $c >> 6); 137 | $str .= (0x80 | $c & 0x3F); 138 | } 139 | elseif($c < 0x10000) { 140 | $str .= (0xE0 | $c >> 12); 141 | $str .= (0x80 | $c >> 6 & 0x3F); 142 | $str .= (0x80 | $c & 0x3F); 143 | } 144 | elseif($c < 0x200000) { 145 | $str .= (0xF0 | $c >> 18); 146 | $str .= (0x80 | $c >> 12 & 0x3F); 147 | $str .= (0x80 | $c >> 6 & 0x3F); 148 | $str .= (0x80 | $c & 0x3F); 149 | } 150 | return $str; 151 | } 152 | 153 | function utf8_to_unicode($c) { 154 | switch(strlen($c)) { 155 | case 1: 156 | return ord($c); 157 | case 2: 158 | $n = (ord($c[0]) & 0x3f) << 6; 159 | $n += ord($c[1]) & 0x3f; 160 | return $n; 161 | case 3: 162 | $n = (ord($c[0]) & 0x1f) << 12; 163 | $n += (ord($c[1]) & 0x3f) << 6; 164 | $n += ord($c[2]) & 0x3f; 165 | return $n; 166 | case 4: 167 | $n = (ord($c[0]) & 0x0f) << 18; 168 | $n += (ord($c[1]) & 0x3f) << 12; 169 | $n += (ord($c[2]) & 0x3f) << 6; 170 | $n += ord($c[3]) & 0x3f; 171 | return $n; 172 | } 173 | } 174 | 175 | 176 | function asc_to_pinyin($asc,&$pyarr) { 177 | if($asc < 128)return chr($asc); 178 | elseif(isset($pyarr[$asc]))return $pyarr[$asc]; 179 | else { 180 | foreach($pyarr as $id => $p) { 181 | if($id >= $asc)return $p; 182 | } 183 | } 184 | } 185 | 186 | function gbk_to_pinyin($str,$ishead=0,$isclose=1) { 187 | global $pinyins; 188 | $restr = ''; 189 | $str = trim($str); 190 | $slen = strlen($str); 191 | if($slen<2) return $str; 192 | if(count($pinyins)==0) { 193 | $fp = fopen( CODETABLEDIR.'pinyin.dat','r'); 194 | while(!feof($fp)) { 195 | $line = trim(fgets($fp)); 196 | $pinyins[$line[0].$line[1]] = substr($line,3,strlen($line)-3); 197 | } 198 | fclose($fp); 199 | } 200 | for($i=0;$i<$slen;$i++) { 201 | if(ord($str[$i])>0x80) { 202 | @ $c = $str[$i].$str[$i+1]; 203 | $i++; 204 | if(isset($pinyins[$c])) { 205 | if($ishead==0) { 206 | $restr .= $pinyins[$c]; 207 | }else { 208 | $restr .= $pinyins[$c][0]; 209 | } 210 | }else { 211 | $restr .= "_"; 212 | } 213 | }else if( preg_match("/[a-z0-9]/i",$str[$i]) ) { 214 | $restr .= $str[$i]; 215 | }else { 216 | $restr .= "_"; 217 | } 218 | } 219 | if($isclose==0) { 220 | unset($pinyins); 221 | } 222 | return $restr; 223 | } 224 | 225 | 226 | ?> -------------------------------------------------------------------------------- /lib/template.func.php: -------------------------------------------------------------------------------- 1 | /s", "{\\1}", $template); 23 | 24 | $template = str_replace("{LF}", "", $template); 25 | 26 | $template = preg_replace("/\{(\\\$[a-zA-Z0-9_\[\]\'\"\$\.\x7f-\xff]+)\}/s", "", $template); 27 | $template = preg_replace("/$var_regexp/es", "addquote('')", $template); 28 | $template = preg_replace("/\<\?\=\<\?\=$var_regexp\?\>\?\>/es", "addquote('')", $template); 29 | 30 | 31 | //$template = preg_replace("/\{url\s+(.+?)\}/ies", "url('\\1')", $template); 32 | 33 | $template = "\n$template"; 34 | $template = preg_replace("/[\n\r\t]*\{template\s+([a-z0-9_]+)\}[\n\r\t]*/is", "\n\n", $template); 35 | $template = preg_replace("/[\n\r\t]*\{template\s+(.+?)\}[\n\r\t]*/is", "\n\n", $template); 36 | $template = preg_replace("/[\n\r\t]*\{eval\s+(.+?)\}[\n\r\t]*/ies", "stripvtags('','')", $template); 37 | $template = preg_replace("/[\n\r\t]*\{echo\s+(.+?)\}[\n\r\t]*/ies", "stripvtags('\n\n','')", $template); 38 | $template = preg_replace("/[\n\r\t]*\{elseif\s+(.+?)\}[\n\r\t]*/ies", "stripvtags('','')", $template); 39 | $template = preg_replace("/[\n\r\t]*\{else\}[\n\r\t]*/is", "", $template); 40 | 41 | for($i = 0; $i < $nest; $i++) { 42 | $template = preg_replace("/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\}[\n\r]*(.+?)[\n\r]*\{\/loop\}[\n\r\t]*/ies", "stripvtags('\n','\n\\3\n\n')", $template); 43 | $template = preg_replace("/[\n\r\t]*\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}[\n\r\t]*(.+?)[\n\r\t]*\{\/loop\}[\n\r\t]*/ies", "stripvtags('\n \\3) { ?>','\n\\4\n\n')", $template); 44 | $template = preg_replace("/[\n\r\t]*\{if\s+(.+?)\}[\n\r]*(.+?)[\n\r]*\{\/if\}[\n\r\t]*/ies", "stripvtags('','\\2')", $template); 45 | } 46 | 47 | $template = preg_replace("/\{$const_regexp\}/s", "", $template); 48 | $template = preg_replace("/ \?\>[\n\r]*\<\? /s", " ", $template); 49 | 50 | if(!@$fp = fopen($objfile, 'w')) { 51 | exit("Directory './data/view/' not found or have no access!"); 52 | } 53 | 54 | //$template = preg_replace("/\"(http)?[\w\.\/:]+\?[^\"]+?&[^\"]+?\"/e", "transamp('\\0')", $template); 55 | //$template = preg_replace("/\]*?src=\"(.+?)\".*?\>\s*\<\/script\>/ise", "stripscriptamp('\\1')", $template); 56 | $template = str_replace('$ ', "$", $template); //增加模版中$的可用性,在模版中$后面用空格 57 | 58 | flock($fp, 2); 59 | fwrite($fp, $template); 60 | fclose($fp); 61 | } 62 | 63 | function transamp($str) { 64 | $str = str_replace('&', '&', $str); 65 | $str = str_replace('&amp;', '&', $str); 66 | $str = str_replace('\"', '"', $str); 67 | return $str; 68 | } 69 | 70 | function addquote($var) { 71 | return str_replace("\\\"", "\"", preg_replace("/\[([a-zA-Z0-9_\-\.\x7f-\xff]+)\]/s", "['\\1']", $var)); 72 | } 73 | 74 | function stripvtags($expr, $statement) { 75 | $expr = str_replace("\\\"", "\"", preg_replace("/\<\?\=(\\\$.+?)\?\>/s", "\\1", $expr)); 76 | $statement = str_replace("\\\"", "\"", $statement); 77 | return $expr.$statement; 78 | } 79 | 80 | function stripscriptamp($s) { 81 | $s = str_replace('&', '&', $s); 82 | return ""; 83 | } 84 | 85 | ?> -------------------------------------------------------------------------------- /lib/zip.class.php: -------------------------------------------------------------------------------- 1 | chk_zip=false; 12 | } 13 | } 14 | function get_List($zip_name) { 15 | $zip = @fopen($zip_name, 'rb'); 16 | if(!$zip) return(0); 17 | $centd = $this->ReadCentralDir($zip,$zip_name); 18 | 19 | @rewind($zip); 20 | @fseek($zip, $centd['offset']); 21 | 22 | for ($i=0; $i<$centd['entries']; $i++) { 23 | $header = $this->ReadCentralFileHeaders($zip); 24 | $header['index'] = $i; 25 | $info['filename'] = $header['filename']; 26 | $info['stored_filename'] = $header['stored_filename']; 27 | $info['size'] = $header['size']; 28 | $info['compressed_size']=$header['compressed_size']; 29 | $info['crc'] = strtoupper(dechex( $header['crc'] )); 30 | $info['mtime'] = $header['mtime']; 31 | $info['comment'] = $header['comment']; 32 | $info['folder'] = ($header['external']==0x41FF0010||$header['external']==16)?1:0; 33 | $info['index'] = $header['index']; 34 | $info['status'] = $header['status']; 35 | $ret[]=$info; 36 | unset($header); 37 | } 38 | return $ret; 39 | } 40 | 41 | function Add($files,$compact) { 42 | if(!is_array($files[0])) $files=Array($files); 43 | 44 | for($i=0;$files[$i];$i++) { 45 | $fn = $files[$i]; 46 | if(!in_Array(dirname($fn[0]),$this->dirs)) 47 | $this->add_Dir(dirname($fn[0])); 48 | if(basename($fn[0])) 49 | $ret[basename($fn[0])]=$this->add_File($fn[1],$fn[0],$compact); 50 | } 51 | return $ret; 52 | } 53 | 54 | function get_file() { 55 | $data = implode('', $this -> datasec); 56 | $ctrldir = implode('', $this -> ctrl_dir); 57 | 58 | return $data . $ctrldir . $this -> eof_ctrl_dir . 59 | pack('v', sizeof($this -> ctrl_dir)).pack('v', sizeof($this -> ctrl_dir)). 60 | pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00"; 61 | } 62 | 63 | function add_dir($name) { 64 | $name = str_replace("\\", "/", $name); 65 | $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00"; 66 | 67 | $fr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) ); 68 | $fr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0); 69 | $this -> datasec[] = $fr; 70 | 71 | $new_offset = strlen(implode("", $this->datasec)); 72 | 73 | $cdrec = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00"; 74 | $cdrec .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) ); 75 | $cdrec .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 ); 76 | $ext = "\xff\xff\xff\xff"; 77 | $cdrec .= pack("V", 16 ).pack("V", $this -> old_offset ).$name; 78 | 79 | $this -> ctrl_dir[] = $cdrec; 80 | $this -> old_offset = $new_offset; 81 | $this -> dirs[] = $name; 82 | } 83 | 84 | function add_File($data, $name, $compact = 1) { 85 | $name = str_replace('\\', '/', $name); 86 | $dtime = dechex($this->DosTime()); 87 | if($data==''&&file_exists($name)&&!is_dir($name)) { 88 | $dfp=fopen($name,"rb"); 89 | $data=fread($dfp,filesize($name)); 90 | fclose($dfp); 91 | } 92 | $hexdtime = '\x' . $dtime[6] . $dtime[7].'\x'.$dtime[4] . $dtime[5] 93 | . '\x' . $dtime[2] . $dtime[3].'\x'.$dtime[0].$dtime[1]; 94 | eval('$hexdtime = "' . $hexdtime . '";'); 95 | 96 | if($compact) 97 | $fr = "\x50\x4b\x03\x04\x14\x00\x00\x00\x08\x00".$hexdtime; 98 | else $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00".$hexdtime; 99 | $unc_len = strlen($data); 100 | $crc = crc32($data); 101 | 102 | if($compact) { 103 | $zdata = gzcompress($data); 104 | $c_len = strlen($zdata); 105 | $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); 106 | }else { 107 | $zdata = $data; 108 | } 109 | $c_len=strlen($zdata); 110 | $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len); 111 | $fr .= pack('v', strlen($name)).pack('v', 0).$name.$zdata; 112 | 113 | $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len); 114 | 115 | $this -> datasec[] = $fr; 116 | $new_offset = strlen(implode('', $this->datasec)); 117 | if($compact) 118 | $cdrec = "\x50\x4b\x01\x02\x00\x00\x14\x00\x00\x00\x08\x00"; 119 | else $cdrec = "\x50\x4b\x01\x02\x14\x00\x0a\x00\x00\x00\x00\x00"; 120 | $cdrec .= $hexdtime.pack('V', $crc).pack('V', $c_len).pack('V', $unc_len); 121 | $cdrec .= pack('v', strlen($name) ).pack('v', 0 ).pack('v', 0 ); 122 | $cdrec .= pack('v', 0 ).pack('v', 0 ).pack('V', 32 ); 123 | $cdrec .= pack('V', $this -> old_offset ); 124 | 125 | $this -> old_offset = $new_offset; 126 | $cdrec .= $name; 127 | $this -> ctrl_dir[] = $cdrec; 128 | return true; 129 | } 130 | 131 | function DosTime() { 132 | $timearray = getdate(); 133 | if ($timearray['year'] < 1980) { 134 | $timearray['year'] = 1980; 135 | $timearray['mon'] = 1; 136 | $timearray['mday'] = 1; 137 | $timearray['hours'] = 0; 138 | $timearray['minutes'] = 0; 139 | $timearray['seconds'] = 0; 140 | } 141 | return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | 142 | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); 143 | } 144 | 145 | function Extract ( $zn, $to, $index = Array(-1) ) { 146 | $ok = 0; 147 | $zip = @fopen($zn,'rb'); 148 | if(!$zip) return(-1); 149 | $cdir = $this->ReadCentralDir($zip,$zn); 150 | $pos_entry = $cdir['offset']; 151 | if(!is_array($index)) { 152 | $index = array($index); 153 | } 154 | for($i=0; $index[$i];$i++) { 155 | if(intval($index[$i])!=$index[$i]||$index[$i]>$cdir['entries']) 156 | return(-1); 157 | } 158 | for ($i=0; $i<$cdir['entries']; $i++) { 159 | @fseek($zip, $pos_entry); 160 | $header = $this->ReadCentralFileHeaders($zip); 161 | $header['index'] = $i; 162 | $pos_entry = ftell($zip); 163 | @rewind($zip); 164 | fseek($zip, $header['offset']); 165 | if(in_array("-1",$index)||in_array($i,$index)) 166 | $stat[$header['filename']]=$this->ExtractFile($header, $to, $zip); 167 | } 168 | fclose($zip); 169 | return $stat; 170 | } 171 | 172 | 173 | 174 | function ReadFileHeader($zip) { 175 | $binary_data = fread($zip, 30); 176 | $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data); 177 | 178 | $header['filename'] = fread($zip, $data['filename_len']); 179 | if ($data['extra_len'] != 0) { 180 | $header['extra'] = fread($zip, $data['extra_len']); 181 | } 182 | else { 183 | $header['extra'] = ''; 184 | } 185 | 186 | $header['compression'] = $data['compression']; 187 | $header['size'] = $data['size']; 188 | $header['compressed_size'] = $data['compressed_size']; 189 | $header['crc'] = $data['crc']; 190 | $header['flag'] = $data['flag']; 191 | $header['mdate'] = $data['mdate']; 192 | $header['mtime'] = $data['mtime']; 193 | 194 | if ($header['mdate'] && $header['mtime']) { 195 | $hour=($header['mtime']&0xF800)>>11; 196 | $minute=($header['mtime']&0x07E0)>>5; 197 | $seconde=($header['mtime']&0x001F)*2; 198 | $year=(($header['mdate']&0xFE00)>>9)+1980; 199 | $month=($header['mdate']&0x01E0)>>5; 200 | $day=$header['mdate']&0x001F; 201 | $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year); 202 | } 203 | else { 204 | $header['mtime'] = time(); 205 | } 206 | 207 | $header['stored_filename'] = $header['filename']; 208 | $header['status'] = "ok"; 209 | return $header; 210 | } 211 | 212 | function ReadCentralFileHeaders($zip) { 213 | $binary_data = fread($zip, 46); 214 | $header = unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $binary_data); 215 | 216 | if ($header['filename_len'] != 0) 217 | $header['filename'] = fread($zip,$header['filename_len']); 218 | else $header['filename'] = ''; 219 | 220 | if ($header['extra_len'] != 0) 221 | $header['extra'] = fread($zip, $header['extra_len']); 222 | else $header['extra'] = ''; 223 | 224 | if ($header['comment_len'] != 0) 225 | $header['comment'] = fread($zip, $header['comment_len']); 226 | else $header['comment'] = ''; 227 | 228 | if ($header['mdate'] && $header['mtime']) { 229 | $hour = ($header['mtime'] & 0xF800) >> 11; 230 | $minute = ($header['mtime'] & 0x07E0) >> 5; 231 | $seconde = ($header['mtime'] & 0x001F)*2; 232 | $year = (($header['mdate'] & 0xFE00) >> 9) + 1980; 233 | $month = ($header['mdate'] & 0x01E0) >> 5; 234 | $day = $header['mdate'] & 0x001F; 235 | $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year); 236 | } 237 | else { 238 | $header['mtime'] = time(); 239 | } 240 | $header['stored_filename'] = $header['filename']; 241 | $header['status'] = 'ok'; 242 | if (substr($header['filename'], -1) == '/') 243 | $header['external'] = 0x41FF0010; 244 | return $header; 245 | } 246 | 247 | function ReadCentralDir($zip,$zip_name) { 248 | $size = filesize($zip_name); 249 | if ($size < 277) $maximum_size = $size; 250 | else $maximum_size=277; 251 | 252 | @fseek($zip, $size-$maximum_size); 253 | $pos = ftell($zip); 254 | $bytes = 0x00000000; 255 | 256 | while ($pos < $size) { 257 | $byte = @fread($zip, 1); 258 | $bytes=($bytes << 8) | ord($byte); 259 | if (($bytes & 0xFFFFFFFF) == 0x504b0506) { 260 | $pos++; 261 | break; 262 | } $pos 263 | ++; 264 | } 265 | 266 | $fdata=fread($zip,18); 267 | 268 | $data=@unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',$fdata); 269 | 270 | if ($data['comment_size'] != 0) $centd['comment'] = fread($zip, $data['comment_size']); 271 | else $centd['comment'] = ''; 272 | $centd['entries'] = $data['entries']; 273 | $centd['disk_entries'] = $data['disk_entries']; 274 | $centd['offset'] = $data['offset']; 275 | $centd['disk_start'] = $data['disk_start']; 276 | $centd['size'] = $data['size']; 277 | $centd['disk'] = $data['disk']; 278 | return $centd; 279 | } 280 | 281 | function ExtractFile($header,$to,$zip) { 282 | $header = $this->readfileheader($zip); 283 | 284 | if(substr($to,-1)!="/") $to.="/"; 285 | if($to=='./') $to = ''; 286 | $pth = explode("/",$to.$header['filename']); 287 | if('/'==substr($to,0,1)) { 288 | $pth[0]="/".$pth[0]; 289 | } 290 | $mydir = ''; 291 | for($i=0;$itotal_folders==0)) && is_dir($mydir)) ) { 295 | @chmod($mydir,0777); 296 | } 297 | } 298 | 299 | if(strrchr($header['filename'],'/')=='/') return; 300 | 301 | if (!($header['external']==0x41FF0010)&&!($header['external']==16)) { 302 | if ($header['compression']==0) { 303 | $fp = @fopen($to.$header['filename'], 'wb'); 304 | if(!$fp) return(-1); 305 | $size = $header['compressed_size']; 306 | 307 | while ($size != 0) { 308 | $read_size = ($size < 2048 ? $size : 2048); 309 | $buffer = fread($zip, $read_size); 310 | $binary_data = pack('a'.$read_size, $buffer); 311 | @fwrite($fp, $binary_data, $read_size); 312 | $size -= $read_size; 313 | } 314 | fclose($fp); 315 | touch($to.$header['filename'], $header['mtime']); 316 | } 317 | else { 318 | $fp = @fopen($to.$header['filename'].'.gz','wb'); 319 | if(!$fp) return(-1); 320 | $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']), 321 | Chr(0x00), time(), Chr(0x00), Chr(3)); 322 | 323 | fwrite($fp, $binary_data, 10); 324 | $size = $header['compressed_size']; 325 | 326 | while ($size != 0) { 327 | $read_size = ($size < 1024 ? $size : 1024); 328 | $buffer = fread($zip, $read_size); 329 | $binary_data = pack('a'.$read_size, $buffer); 330 | @fwrite($fp, $binary_data, $read_size); 331 | $size -= $read_size; 332 | } 333 | 334 | $binary_data = pack('VV', $header['crc'], $header['size']); 335 | fwrite($fp, $binary_data,8); 336 | fclose($fp); 337 | 338 | $gzp = @gzopen($to.$header['filename'].'.gz','rb'); 339 | if(!$gzp)return false; 340 | if(!$gzp) return(-2); 341 | $fp = @fopen($to.$header['filename'],'wb'); 342 | if(!$fp) return(-1); 343 | $size = $header['size']; 344 | 345 | while ($size != 0) { 346 | $read_size = ($size < 2048 ? $size : 2048); 347 | $buffer = gzread($gzp, $read_size); 348 | $binary_data = pack('a'.$read_size, $buffer); 349 | @fwrite($fp, $binary_data, $read_size); 350 | $size -= $read_size; 351 | } 352 | fclose($fp); 353 | gzclose($gzp); 354 | 355 | touch($to.$header['filename'], $header['mtime']); 356 | @unlink($to.$header['filename'].'.gz'); 357 | 358 | } 359 | } 360 | return true; 361 | } 362 | 363 | function zip_dir($dirs, $zipfilename) { 364 | if(is_array($dirs)) { 365 | foreach($dirs as $key=>$dir) { 366 | if(is_dir($dir)) { 367 | $this->dir_Tree($dir); 368 | } 369 | } 370 | }else { 371 | $this->dir_Tree($dirs); 372 | } 373 | $out = $this->get_file(); 374 | $fp = fopen($zipfilename, "wb"); 375 | fwrite($fp, $out, strlen($out)); 376 | fclose($fp); 377 | } 378 | 379 | function dir_Tree($directory,$zipdir='') { 380 | $myDir=dir($directory); 381 | while($file=$myDir->read()) { 382 | if($file=="." || $file=="..") { 383 | continue; 384 | } 385 | $pathfile=$directory.'/'.$file; 386 | $zipfile=$zipdir ? $zipdir.'/'.$file : $file; 387 | if(is_dir($pathfile)) { 388 | $this->dir_Tree($pathfile,$zipfile); 389 | }else { 390 | $filecontent = file_get_contents($pathfile); 391 | $this -> add_File($filecontent, $zipfile); 392 | } 393 | } 394 | $myDir->close(); 395 | } 396 | 397 | } 398 | ?> -------------------------------------------------------------------------------- /model/setting.class.php: -------------------------------------------------------------------------------- 1 | base=$base; 12 | $this->redis=$base->redis; 13 | } 14 | 15 | function update($setting) { 16 | foreach($setting as $key=>$value) { 17 | 18 | } 19 | $this->base->cache->remove('setting'); 20 | } 21 | 22 | /*读取view文件夹,获取模板的选项*/ 23 | function tpl_list() { 24 | $tpllist=array(); 25 | $filedir=APP_ROOT.'/view'; 26 | $handle=opendir($filedir); 27 | while($filename=readdir($handle)) { 28 | if (is_dir($filedir.'/'.$filename) && '.'!=$filename{0} && 'admin'!=$filename) { 29 | $tpllist[]=$filename; 30 | } 31 | } 32 | closedir($handle); 33 | return $tpllist; 34 | } 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /model/user.class.php: -------------------------------------------------------------------------------- 1 | base=$base; 12 | $this->redis=$base->redis; 13 | } 14 | 15 | function getNextUid(){ 16 | $this->redis->incr('next_uid'); 17 | return $this->redis->get('next_uid'); 18 | } 19 | 20 | function findById($uid){ 21 | return $this->redis->hGetAll('user:'.$uid); 22 | } 23 | 24 | function findByUsername($username){ 25 | $uid = $this->redis->get('user:'.$username); 26 | if( false === $uid ) return false; 27 | return $this->findById($uid); 28 | } 29 | 30 | function insert($user){ 31 | $hkey='user:'.$user['uid']; 32 | $this->redis->hMset($hkey,$user); 33 | $this->redis->set('user:'.$user['username'], $user['uid']); //同时存好username和uid的对应 34 | } 35 | 36 | 37 | function refresh($user) { 38 | $uid = $user['uid']; 39 | $password = $user['password']; 40 | $this->base->user = $user; 41 | $auth = strcode("$uid\t$password", AUTH_KEY , 'ENCODE'); 42 | tcookie('auth', $auth, DAY*30); 43 | } 44 | 45 | function logout() { 46 | tcookie('auth', '', 0); 47 | } 48 | 49 | //对某人进行关注 50 | function follow($targetUser,$user){ 51 | //自己关注的列表 52 | $followingKey='following:'.$user['uid']; 53 | $this->redis->sadd( $followingKey, $targetUser['uid']); 54 | //被关注者的粉丝列表 55 | $followersKey='followers:'.$targetUser['uid']; 56 | $this->redis->sadd( $followersKey, $user['uid']); 57 | $followers = $this->redis->sCard($followersKey); //获取粉丝数 58 | $this->redis->hset( 'user:'.$targetUser['uid'], 'fans', $followers); 59 | } 60 | 61 | 62 | //对某人取消关注 63 | function unfollow($targetUser,$user){ 64 | //自己关注的列表 65 | $followingKey='following:'.$user['uid']; 66 | $this->redis->sRem( $followingKey, $targetUser['uid']); 67 | //被关注者的粉丝列表 68 | $followersKey='followers:'.$targetUser['uid']; 69 | $this->redis->sRem( $followersKey, $user['uid']); 70 | $followers = $this->redis->sCard($followersKey); //获取粉丝数 71 | $this->redis->hset( 'user:'.$targetUser['uid'], 'fans', $followers); 72 | } 73 | 74 | 75 | 76 | 77 | } 78 | -------------------------------------------------------------------------------- /model/weibo.class.php: -------------------------------------------------------------------------------- 1 | base=$base; 13 | $this->redis=$base->redis; 14 | } 15 | 16 | function getNextPostId(){ 17 | $this->redis->incr('next_post_id'); 18 | return $this->redis->get('next_post_id'); 19 | } 20 | 21 | function add($content){ 22 | #创建投稿id 23 | $next_post_id = $this->getNextPostId(); 24 | $uid = $this->base->user['uid']; 25 | #保存投稿数据 26 | $this->redis->set('post:'.$next_post_id, $uid.'|'.$this->base->time.'|'.$content); 27 | 28 | #包含全部用户微博的时间线中追加投稿id 29 | $this->redis->lPush('timeline',$next_post_id); 30 | 31 | #所有粉丝的时间线中追加投稿id,包括自己 32 | $followers = $this->redis->sMembers("followers:$uid"); 33 | $followers[]= $uid; //加上自己 34 | foreach ($followers as $follower_uid) { 35 | $this->redis->lPush("timeline:$follower_uid", $next_post_id ); 36 | } 37 | 38 | #往自己的微博数据中追加投稿id 39 | $this->redis->lPush("$uid:posts", $next_post_id ); 40 | 41 | #增加发微博的条数 42 | $this->redis->hIncrBy( "user:$uid", 'posts', 1); 43 | 44 | 45 | } 46 | 47 | 48 | //获取首页的时间线微博数据 49 | function getTimeLine($uid=0){ 50 | $postList=array(); 51 | if(0==$uid){ 52 | $post_ids=$this->redis->lRange('timeline',0,-1); 53 | }else{ 54 | $post_ids=$this->redis->lRange("timeline:$uid",0,-1); 55 | } 56 | //获取微博的内容 57 | foreach ($post_ids as $post_id) { 58 | $post_line=$this->redis->get("post:$post_id"); 59 | $postList[]=$this->convert($post_line); 60 | } 61 | return $postList; 62 | } 63 | 64 | 65 | 66 | //用户自己的微博数据 67 | function getUserPosts($uid){ 68 | $postList=array(); 69 | $post_ids=$this->redis->lRange("$uid:posts",0,-1); 70 | //获取微博的内容 71 | foreach ($post_ids as $post_id) { 72 | $post_line=$this->redis->get("post:$post_id"); 73 | $postList[]=$this->convert($post_line); 74 | } 75 | return $postList; 76 | } 77 | 78 | 79 | //对于单条微博数据的获取 80 | function convert($line){ 81 | $params=explode('|',$line); 82 | $base = $this->base; 83 | $item['user'] = $base('user')->findById($params[0]); 84 | $item['format_dateline'] = tdate($params[1]); 85 | $item['content'] = implode('|',array_slice($params, 2)); //万一内容里面有这个符号,不能去掉了。 86 | return $item; 87 | } 88 | 89 | 90 | 91 | } 92 | 93 | -------------------------------------------------------------------------------- /session/s1.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/session/s1.php -------------------------------------------------------------------------------- /session/s2.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/session/s2.php -------------------------------------------------------------------------------- /static/css/bootstrap-admin-theme.css: -------------------------------------------------------------------------------- 1 | /* 2 | Created on : 2013-09-30, 14:48:31 3 | Author : Krzysztof Niziol 4 | */ 5 | 6 | /** The vertical centered content **/ 7 | html.bootstrap-admin-vertical-centered { 8 | height: 100%; 9 | overflow: hidden; 10 | min-height: 100%; 11 | min-width: 100%; 12 | width: 100%; 13 | } 14 | html.bootstrap-admin-vertical-centered body{ 15 | height: 100%; 16 | margin: 0; 17 | padding: 0; 18 | width: 100%; 19 | } 20 | html.bootstrap-admin-vertical-centered .container{ 21 | display: table; 22 | height: 100%; 23 | padding: 0; 24 | width: 100%; 25 | } 26 | html.bootstrap-admin-vertical-centered .container .row{ 27 | display: table-cell; 28 | height: 100%; 29 | vertical-align: middle; 30 | } 31 | 32 | /** Body **/ 33 | body{ 34 | background-color: rgba(245, 245, 245, 0.5); 35 | padding-top: 70px; /* Required, because main menu / navbar has "navbar-fixed-top" class and is sticked to the top */ 36 | } 37 | body.bootstrap-admin-body{ 38 | padding-top: 70px; 39 | } 40 | 41 | body.bootstrap-admin-body .row{ 42 | margin-left: 0px; 43 | margin-right: 0px; 44 | } 45 | 46 | /** Main container **/ 47 | #content { 48 | margin-left: 0px; 49 | } 50 | 51 | /** Forms */ 52 | .form-group label.control-label{ 53 | line-height: normal; 54 | } 55 | .form-group label{ 56 | line-height: 25px; 57 | } 58 | 59 | /** Title of container for lists, some content etc. **/ 60 | .bootstrap-admin-box-title{ 61 | display: inline; 62 | } 63 | 64 | /** Title of the content */ 65 | .bootstrap-admin-content-title h1{ 66 | display: inline-block; 67 | margin-top: 0; 68 | } 69 | .bootstrap-admin-content-title .action{ 70 | float: right; 71 | margin-right: 10px; 72 | position: relative; 73 | top: 5px; 74 | } 75 | .bootstrap-admin-content-title .action:first-of-type{ 76 | margin-right: 0; 77 | } 78 | .bootstrap-admin-content-title .action.btn{ 79 | padding-left: 0; 80 | padding-right: 0; 81 | } 82 | 83 | /** Button which is an action */ 84 | .btn.action:active{ 85 | box-shadow: none; 86 | } 87 | 88 | /** Content of the panel **/ 89 | .bootstrap-admin-panel-content{ 90 | padding: 15px; 91 | } 92 | .bootstrap-admin-panel-content table{ 93 | margin-bottom: 0; 94 | } 95 | .bootstrap-admin-panel-content dl{ 96 | margin-bottom: 0; 97 | margin-top: 0; 98 | } 99 | 100 | /** Panel with no-table content **/ 101 | .bootstrap-admin-no-table-panel, 102 | .bootstrap-admin-no-table-panel-content{ 103 | float: left; 104 | width: 100%; 105 | } 106 | 107 | /** Left, the first, column **/ 108 | .bootstrap-admin-col-left{ 109 | padding-left: 15px; 110 | } 111 | 112 | /** Horizontal navbars */ 113 | .bootstrap-admin-navbar-sm{ 114 | background-image: none; 115 | border: 0; 116 | box-shadow: initial; 117 | margin-bottom: 0; 118 | min-height: initial; 119 | z-index: 1030; 120 | } 121 | .bootstrap-admin-navbar-sm .navbar-collapse .navbar-nav:first-child{ 122 | margin-left: -15px; 123 | } 124 | .bootstrap-admin-navbar-sm .navbar-collapse .navbar-nav li a{ 125 | font-size: 13px; 126 | padding: 3px 8px; 127 | } 128 | .bootstrap-admin-navbar-under-small{ 129 | top: 0px; 130 | z-index: 1020; 131 | } 132 | 133 | /** Side Bar **/ 134 | .bootstrap-admin-navbar-side { 135 | background-color: #fff; 136 | max-height: none; 137 | max-width: 228px; 138 | padding: 0; 139 | -webkit-border-radius: 6px; 140 | -moz-border-radius: 6px; 141 | border-radius: 6px; 142 | -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.065); 143 | -moz-box-shadow: 0 1px 4px rgba(0,0,0,.065); 144 | box-shadow: 0 1px 4px rgba(0,0,0,.065); 145 | } 146 | .bootstrap-admin-navbar-side > li > a { 147 | display: block; 148 | width: 190px\9; 149 | margin: 0 0 -1px; 150 | padding: 8px 14px; 151 | border: 1px solid #e5e5e5; 152 | } 153 | .bootstrap-admin-navbar-side > li:first-child > a { 154 | -webkit-border-radius: 6px 6px 0 0; 155 | -moz-border-radius: 6px 6px 0 0; 156 | border-radius: 6px 6px 0 0; 157 | } 158 | .bootstrap-admin-navbar-side > li:last-child > a { 159 | -webkit-border-radius: 0 0 6px 6px; 160 | -moz-border-radius: 0 0 6px 6px; 161 | border-radius: 0 0 6px 6px; 162 | } 163 | .bootstrap-admin-navbar-side > .active > a, 164 | .bootstrap-admin-navbar-side .active a:hover{ 165 | background-color: #08C; 166 | color: #fff; 167 | } 168 | .bootstrap-admin-navbar-side > .active > a { 169 | position: relative; 170 | z-index: 2; 171 | padding: 9px 15px; 172 | border: 0; 173 | text-shadow: 0 1px 0 rgba(0,0,0,.15); 174 | -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); 175 | -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); 176 | box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); 177 | } 178 | 179 | /** Side Bar - Chevrons **/ 180 | .bootstrap-admin-navbar-side .glyphicon-chevron-right { 181 | float: right; 182 | margin-top: 2px; 183 | margin-right: -6px; 184 | opacity: .25; 185 | } 186 | .bootstrap-admin-navbar-side > li > a:hover { 187 | background-color: #f5f5f5; 188 | } 189 | .bootstrap-admin-navbar-side a:hover .glyphicon-chevron-right { 190 | opacity: .5; 191 | } 192 | .bootstrap-admin-navbar-side .active .glyphicon-chevron-right, 193 | .bootstrap-admin-navbar-side .active a:hover .glyphicon-chevron-right { 194 | opacity: 1; 195 | } 196 | .bootstrap-admin-navbar-side.affix { 197 | top: 40px; 198 | } 199 | .bootstrap-admin-navbar-side.affix-bottom { 200 | position: absolute; 201 | top: auto; 202 | bottom: 270px; 203 | } 204 | 205 | /** Thin navbar, e.g. for the breadcrumbs **/ 206 | .bootstrap-admin-navbar-thin{ 207 | min-height: 0; 208 | } 209 | 210 | /** Breadcrumbs **/ 211 | .bootstrap-admin-breadcrumb{ 212 | background: none; 213 | margin: 8px 15px; 214 | padding: 0; 215 | } 216 | 217 | /** Alert **/ 218 | .bootstrap-admin-alert{ 219 | padding: 10px 15px; 220 | } 221 | .bootstrap-admin-alert h4{ 222 | margin-bottom: 3px; 223 | } 224 | 225 | /** Skip padding of elements on the edge **/ 226 | .bootstrap-admin-no-edges-padding > div:first-child{ 227 | padding-left: 0; 228 | } 229 | .bootstrap-admin-no-edges-padding > div:last-child{ 230 | padding-right: 0; 231 | } 232 | 233 | /** Light, small paddings **/ 234 | .bootstrap-admin-light-padding-bottom{ 235 | padding-bottom: 10px; 236 | } 237 | .bootstrap-admin-light-padding-top{ 238 | padding-top: 10px; 239 | } 240 | 241 | /** Footer **/ 242 | footer p{ 243 | text-align: center; 244 | } 245 | 246 | /** Bootstrap 3 Typeahead plugin **/ 247 | .typeahead{ 248 | z-index: 1051; 249 | } 250 | 251 | /** Disabling padding **/ 252 | .bootstrap-admin-without-padding{ 253 | padding: 0; 254 | } 255 | 256 | /** Login form **/ 257 | .bootstrap-admin-login-form{ 258 | max-width: 400px; 259 | padding: 30px; 260 | margin: 0 auto; 261 | background-color: #FFF; 262 | border: 1px solid #E5E5E5; 263 | -webkit-border-radius: 5px; 264 | -moz-border-radius: 5px; 265 | border-radius: 5px; 266 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 267 | -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.05); 268 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 269 | } 270 | .bootstrap-admin-login-form h1{ 271 | margin-bottom: 25px; 272 | margin-top: 0; 273 | } 274 | .bootstrap-admin-login-form .form-group{ 275 | margin-bottom: 20px; 276 | } 277 | .bootstrap-admin-login-form label{ 278 | font-size: 15px; 279 | } 280 | .bootstrap-admin-login-form input[type="text"], 281 | .bootstrap-admin-login-form input[type="password"]{ 282 | font-size: 16px; 283 | height: auto; 284 | padding: 7px 9px; 285 | } 286 | .bootstrap-admin-login-form input[type="checkbox"]{ 287 | margin-right: 5px; 288 | } -------------------------------------------------------------------------------- /static/css/bootstrap-dialog.css: -------------------------------------------------------------------------------- 1 | .bootstrap-dialog { 2 | 3 | } 4 | .bootstrap-dialog .modal-header { 5 | border-top-left-radius: 4px; 6 | border-top-right-radius: 4px; 7 | } 8 | .bootstrap-dialog .bootstrap-dialog-title { 9 | color: #fff; 10 | display: inline-block; 11 | } 12 | .bootstrap-dialog.type-default .bootstrap-dialog-title { 13 | color: #333; 14 | } 15 | .bootstrap-dialog.size-normal .bootstrap-dialog-title { 16 | font-size: 16px; 17 | } 18 | .bootstrap-dialog.size-large .bootstrap-dialog-title { 19 | font-size: 24px; 20 | } 21 | .bootstrap-dialog .bootstrap-dialog-close-button { 22 | float: right; 23 | filter:alpha(opacity=90); 24 | -moz-opacity:0.9; 25 | -khtml-opacity: 0.9; 26 | opacity: 0.9; 27 | } 28 | .bootstrap-dialog.size-normal .bootstrap-dialog-close-button { 29 | font-size: 20px; 30 | } 31 | .bootstrap-dialog.size-large .bootstrap-dialog-close-button { 32 | font-size: 30px; 33 | } 34 | .bootstrap-dialog .bootstrap-dialog-close-button:hover { 35 | cursor: pointer; 36 | filter: alpha(opacity=100); 37 | -moz-opacity: 1; 38 | -khtml-opacity: 1; 39 | opacity: 1; 40 | } 41 | .bootstrap-dialog.size-normal .bootstrap-dialog-message { 42 | font-size: 14px; 43 | } 44 | .bootstrap-dialog.size-large .bootstrap-dialog-message { 45 | font-size: 18px; 46 | } 47 | .bootstrap-dialog.type-default .modal-header { 48 | background-color: #fff; 49 | } 50 | .bootstrap-dialog.type-info .modal-header { 51 | background-color: #5bc0de; 52 | } 53 | .bootstrap-dialog.type-primary .modal-header { 54 | background-color: #428bca; 55 | } 56 | .bootstrap-dialog.type-success .modal-header { 57 | background-color: #5cb85c; 58 | } 59 | .bootstrap-dialog.type-warning .modal-header { 60 | background-color: #f0ad4e; 61 | } 62 | .bootstrap-dialog.type-danger .modal-header { 63 | background-color: #d9534f; 64 | } 65 | .bootstrap-dialog .bootstrap-dialog-button-icon { 66 | margin-right: 3px; 67 | } 68 | 69 | /** 70 | * Icon animation 71 | * Copied from font-awesome: http://fontawesome.io/ 72 | **/ 73 | .icon-spin { 74 | display: inline-block; 75 | -moz-animation: spin 2s infinite linear; 76 | -o-animation: spin 2s infinite linear; 77 | -webkit-animation: spin 2s infinite linear; 78 | animation: spin 2s infinite linear; 79 | } 80 | @-moz-keyframes spin { 81 | 0% { 82 | -moz-transform: rotate(0deg); 83 | } 84 | 100% { 85 | -moz-transform: rotate(359deg); 86 | } 87 | } 88 | @-webkit-keyframes spin { 89 | 0% { 90 | -webkit-transform: rotate(0deg); 91 | } 92 | 100% { 93 | -webkit-transform: rotate(359deg); 94 | } 95 | } 96 | @-o-keyframes spin { 97 | 0% { 98 | -o-transform: rotate(0deg); 99 | } 100 | 100% { 101 | -o-transform: rotate(359deg); 102 | } 103 | } 104 | @-ms-keyframes spin { 105 | 0% { 106 | -ms-transform: rotate(0deg); 107 | } 108 | 100% { 109 | -ms-transform: rotate(359deg); 110 | } 111 | } 112 | @keyframes spin { 113 | 0% { 114 | transform: rotate(0deg); 115 | } 116 | 100% { 117 | transform: rotate(359deg); 118 | } 119 | } 120 | /** End of icon animation **/ -------------------------------------------------------------------------------- /static/css/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.1.0 (http://getbootstrap.com) 3 | * Copyright 2013 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | .btn-default, 8 | .btn-primary, 9 | .btn-success, 10 | .btn-info, 11 | .btn-warning, 12 | .btn-danger { 13 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); 14 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 15 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 16 | } 17 | .btn-default:active, 18 | .btn-primary:active, 19 | .btn-success:active, 20 | .btn-info:active, 21 | .btn-warning:active, 22 | .btn-danger:active, 23 | .btn-default.active, 24 | .btn-primary.active, 25 | .btn-success.active, 26 | .btn-info.active, 27 | .btn-warning.active, 28 | .btn-danger.active { 29 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 30 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 31 | } 32 | .btn:active, 33 | .btn.active { 34 | background-image: none; 35 | } 36 | .btn-default { 37 | text-shadow: 0 1px 0 #fff; 38 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); 39 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); 40 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); 41 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 42 | background-repeat: repeat-x; 43 | border-color: #dbdbdb; 44 | border-color: #ccc; 45 | } 46 | .btn-default:hover, 47 | .btn-default:focus { 48 | background-color: #e0e0e0; 49 | background-position: 0 -15px; 50 | } 51 | .btn-default:active, 52 | .btn-default.active { 53 | background-color: #e0e0e0; 54 | border-color: #dbdbdb; 55 | } 56 | .btn-primary { 57 | background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); 58 | background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); 59 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); 60 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 61 | background-repeat: repeat-x; 62 | border-color: #2b669a; 63 | } 64 | .btn-primary:hover, 65 | .btn-primary:focus { 66 | background-color: #2d6ca2; 67 | background-position: 0 -15px; 68 | } 69 | .btn-primary:active, 70 | .btn-primary.active { 71 | background-color: #2d6ca2; 72 | border-color: #2b669a; 73 | } 74 | .btn-success { 75 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); 76 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); 77 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); 78 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 79 | background-repeat: repeat-x; 80 | border-color: #3e8f3e; 81 | } 82 | .btn-success:hover, 83 | .btn-success:focus { 84 | background-color: #419641; 85 | background-position: 0 -15px; 86 | } 87 | .btn-success:active, 88 | .btn-success.active { 89 | background-color: #419641; 90 | border-color: #3e8f3e; 91 | } 92 | .btn-warning { 93 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 94 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); 95 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); 96 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 97 | background-repeat: repeat-x; 98 | border-color: #e38d13; 99 | } 100 | .btn-warning:hover, 101 | .btn-warning:focus { 102 | background-color: #eb9316; 103 | background-position: 0 -15px; 104 | } 105 | .btn-warning:active, 106 | .btn-warning.active { 107 | background-color: #eb9316; 108 | border-color: #e38d13; 109 | } 110 | .btn-danger { 111 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 112 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); 113 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); 114 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 115 | background-repeat: repeat-x; 116 | border-color: #b92c28; 117 | } 118 | .btn-danger:hover, 119 | .btn-danger:focus { 120 | background-color: #c12e2a; 121 | background-position: 0 -15px; 122 | } 123 | .btn-danger:active, 124 | .btn-danger.active { 125 | background-color: #c12e2a; 126 | border-color: #b92c28; 127 | } 128 | .btn-info { 129 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 130 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); 131 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); 132 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 133 | background-repeat: repeat-x; 134 | border-color: #28a4c9; 135 | } 136 | .btn-info:hover, 137 | .btn-info:focus { 138 | background-color: #2aabd2; 139 | background-position: 0 -15px; 140 | } 141 | .btn-info:active, 142 | .btn-info.active { 143 | background-color: #2aabd2; 144 | border-color: #28a4c9; 145 | } 146 | .thumbnail, 147 | .img-thumbnail { 148 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 149 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 150 | } 151 | .dropdown-menu > li > a:hover, 152 | .dropdown-menu > li > a:focus { 153 | background-color: #e8e8e8; 154 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 155 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 156 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 157 | background-repeat: repeat-x; 158 | } 159 | .dropdown-menu > .active > a, 160 | .dropdown-menu > .active > a:hover, 161 | .dropdown-menu > .active > a:focus { 162 | background-color: #357ebd; 163 | background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); 164 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); 165 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); 166 | background-repeat: repeat-x; 167 | } 168 | .navbar-default { 169 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); 170 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); 171 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); 172 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 173 | background-repeat: repeat-x; 174 | border-radius: 4px; 175 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 176 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 177 | } 178 | .navbar-default .navbar-nav > .active > a { 179 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); 180 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); 181 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); 182 | background-repeat: repeat-x; 183 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 184 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 185 | } 186 | .navbar-brand, 187 | .navbar-nav > li > a { 188 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25); 189 | } 190 | .navbar-inverse { 191 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); 192 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); 193 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 194 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 195 | background-repeat: repeat-x; 196 | } 197 | .navbar-inverse .navbar-nav > .active > a { 198 | background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); 199 | background-image: linear-gradient(to bottom, #222 0%, #282828 100%); 200 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); 201 | background-repeat: repeat-x; 202 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 203 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 204 | } 205 | .navbar-inverse .navbar-brand, 206 | .navbar-inverse .navbar-nav > li > a { 207 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); 208 | } 209 | .navbar-static-top, 210 | .navbar-fixed-top, 211 | .navbar-fixed-bottom { 212 | border-radius: 0; 213 | } 214 | .alert { 215 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2); 216 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 217 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 218 | } 219 | .alert-success { 220 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 221 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 222 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 223 | background-repeat: repeat-x; 224 | border-color: #b2dba1; 225 | } 226 | .alert-info { 227 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 228 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 229 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 230 | background-repeat: repeat-x; 231 | border-color: #9acfea; 232 | } 233 | .alert-warning { 234 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 235 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 236 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 237 | background-repeat: repeat-x; 238 | border-color: #f5e79e; 239 | } 240 | .alert-danger { 241 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 242 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 243 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 244 | background-repeat: repeat-x; 245 | border-color: #dca7a7; 246 | } 247 | .progress { 248 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 249 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 250 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 251 | background-repeat: repeat-x; 252 | } 253 | .progress-bar { 254 | background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); 255 | background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); 256 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); 257 | background-repeat: repeat-x; 258 | } 259 | .progress-bar-success { 260 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); 261 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 262 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 263 | background-repeat: repeat-x; 264 | } 265 | .progress-bar-info { 266 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 267 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 268 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 269 | background-repeat: repeat-x; 270 | } 271 | .progress-bar-warning { 272 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 273 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 274 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 275 | background-repeat: repeat-x; 276 | } 277 | .progress-bar-danger { 278 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); 279 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 280 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 281 | background-repeat: repeat-x; 282 | } 283 | .list-group { 284 | border-radius: 4px; 285 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 286 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 287 | } 288 | .list-group-item.active, 289 | .list-group-item.active:hover, 290 | .list-group-item.active:focus { 291 | text-shadow: 0 -1px 0 #3071a9; 292 | background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); 293 | background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); 294 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); 295 | background-repeat: repeat-x; 296 | border-color: #3278b3; 297 | } 298 | .panel { 299 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 300 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 301 | } 302 | .panel-default > .panel-heading { 303 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 304 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 305 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 306 | background-repeat: repeat-x; 307 | } 308 | .panel-primary > .panel-heading { 309 | background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); 310 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); 311 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); 312 | background-repeat: repeat-x; 313 | } 314 | .panel-success > .panel-heading { 315 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 316 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 317 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 318 | background-repeat: repeat-x; 319 | } 320 | .panel-info > .panel-heading { 321 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 322 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 323 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 324 | background-repeat: repeat-x; 325 | } 326 | .panel-warning > .panel-heading { 327 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 328 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 329 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 330 | background-repeat: repeat-x; 331 | } 332 | .panel-danger > .panel-heading { 333 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 334 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 335 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 336 | background-repeat: repeat-x; 337 | } 338 | .well { 339 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 340 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 341 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 342 | background-repeat: repeat-x; 343 | border-color: #dcdcdc; 344 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 345 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 346 | } 347 | /*# sourceMappingURL=bootstrap-theme.css.map */ 348 | -------------------------------------------------------------------------------- /static/css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.1.0 (http://getbootstrap.com) 3 | * Copyright 2013 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | .btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-color:#357ebd}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} -------------------------------------------------------------------------------- /static/css/mybase.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 10px; 3 | padding-bottom: 40px; 4 | } 5 | 6 | /* Custom container */ 7 | .container, .container-narrow{ 8 | margin: 0 auto; 9 | max-width: 1000px; 10 | } 11 | 12 | .container-narrow > hr { 13 | margin: 3px 0; 14 | } 15 | 16 | .container-narrow li { 17 | margin-right: 20px; 18 | } 19 | 20 | .container-narrow .masthead a { 21 | color: #000; 22 | font-size: 15px; 23 | font-family: "微软雅黑"; 24 | } 25 | .masthead{ 26 | 27 | } 28 | 29 | .user_nav a{ 30 | margin-left: 10px; 31 | padding: 3px 5px; 32 | } 33 | .user_nav li{ 34 | list-style: none; 35 | } 36 | .nav{ 37 | } 38 | /* Main marketing message and sign up button */ 39 | .banner { 40 | text-align: center; 41 | } 42 | .banner a{ 43 | top: -145px; 44 | left: 45px; 45 | display: inline-block; 46 | width: 150px; 47 | height: 55px; 48 | position: relative; 49 | z-index: 10; 50 | } 51 | .footer-panel{ 52 | border-top: 1px solid #eee; 53 | } 54 | .header{ 55 | padding-bottom: 60px; 56 | } 57 | .footer{ 58 | padding-top: 60px; 59 | } 60 | .aboutlinks{ 61 | width: 50%; 62 | padding-top: 5px; 63 | list-style: none; 64 | } 65 | .icplinks{ 66 | width: 40%; 67 | list-style: none; 68 | padding-top: 5px; 69 | } 70 | .user_nav{ 71 | margin-top:20px; 72 | } 73 | .footer li, .user_nav li{ 74 | display: inline-block; 75 | } 76 | .user_nav li,.user_nav li a{ 77 | margin-left: 0px; 78 | margin-right: 0px; 79 | } 80 | /* Supporting marketing content */ 81 | .marketing { 82 | margin: 60px 0; 83 | } 84 | .marketing p + h4 { 85 | margin-top: 28px; 86 | } 87 | 88 | .high{ 89 | padding-top: 80px; 90 | padding-bottom: 80px; 91 | } 92 | 93 | .form-signin { 94 | max-width: 330px; 95 | padding: 15px; 96 | margin: 0 auto; 97 | } 98 | .form-signin .form-signin-heading, 99 | .form-signin .checkbox { 100 | margin-bottom: 10px; 101 | } 102 | .form-signin .checkbox { 103 | font-weight: normal; 104 | } 105 | .form-signin .form-control { 106 | position: relative; 107 | font-size: 16px; 108 | height: auto; 109 | padding: 10px; 110 | -webkit-box-sizing: border-box; 111 | -moz-box-sizing: border-box; 112 | box-sizing: border-box; 113 | } 114 | .form-signin .form-control:focus { 115 | z-index: 2; 116 | } 117 | .form-signin input[type="text"] { 118 | margin-bottom: -1px; 119 | border-bottom-left-radius: 0; 120 | border-bottom-right-radius: 0; 121 | } 122 | .form-signin input[type="password"] { 123 | margin-bottom: 10px; 124 | border-top-left-radius: 0; 125 | border-top-right-radius: 0; 126 | } 127 | .noaccount{ 128 | width: 32%; 129 | } 130 | .noaccount p{ 131 | line-height: 20px; 132 | } 133 | #myinfo{ 134 | padding-top: 10px; 135 | padding-bottom: 10px; 136 | } 137 | #userleft{ 138 | height: 400px; 139 | } 140 | 141 | 142 | .graynormal{ 143 | color: gray; 144 | font-weight: normal; 145 | } 146 | .bg-label { 147 | background-color: #EEE6E6; 148 | line-height:30px; 149 | } 150 | .img-rounded{ 151 | width: 170px; 152 | } 153 | 154 | .phone,iframe { 155 | width: 295px; 156 | height: 395px; 157 | margin-top: 60px; 158 | padding: 0; 159 | position: relative; 160 | border: 0; 161 | background: transparent; 162 | -webkit-border-radius: 4px; 163 | -moz-border-radius: 4px; 164 | border-radius: 4px; 165 | z-index: 40; 166 | } 167 | 168 | .phone { 169 | width: 350px; 170 | height: 549px; 171 | padding: 0; 172 | margin: 0 auto; 173 | position: relative; 174 | text-align: center; 175 | background: url('../img/phone.png') center center no-repeat; 176 | background-size: 350px Auto; 177 | border: 0; 178 | -webkit-border-radius: 0; 179 | -moz-border-radius: 0; 180 | border-radius: 0; 181 | -webkit-box-shadow: none; 182 | -moz-box-shadow: none; 183 | box-shadow: none; 184 | } 185 | 186 | label{ 187 | font-weight: normal; 188 | } 189 | 190 | .icon{ 191 | width: 80px; 192 | } 193 | #applist .list-group{ 194 | margin-bottom: 5px; 195 | } 196 | #applist .thumbnail{ 197 | margin-left: 5px; 198 | width: 32% 199 | } -------------------------------------------------------------------------------- /static/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /static/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /static/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /static/img/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/ajax-loader.gif -------------------------------------------------------------------------------- /static/img/android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/android.png -------------------------------------------------------------------------------- /static/img/banner_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/banner_1.png -------------------------------------------------------------------------------- /static/img/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/code.png -------------------------------------------------------------------------------- /static/img/diy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/diy.png -------------------------------------------------------------------------------- /static/img/iconv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/iconv.png -------------------------------------------------------------------------------- /static/img/ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/ios.png -------------------------------------------------------------------------------- /static/img/jiaoyou.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/jiaoyou.png -------------------------------------------------------------------------------- /static/img/logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/logo.gif -------------------------------------------------------------------------------- /static/img/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/news.png -------------------------------------------------------------------------------- /static/img/page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/page.png -------------------------------------------------------------------------------- /static/img/phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/phone.png -------------------------------------------------------------------------------- /static/img/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/preview.png -------------------------------------------------------------------------------- /static/img/xiaohua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/static/img/xiaohua.png -------------------------------------------------------------------------------- /static/js/holder.min.js: -------------------------------------------------------------------------------- 1 | var Holder=Holder||{};!function(a,b){function f(a,b){var c="complete",d="readystatechange",e=!1,f=e,g=!0,h=a.document,i=h.documentElement,j=h.addEventListener?"addEventListener":"attachEvent",k=h.addEventListener?"removeEventListener":"detachEvent",l=h.addEventListener?"":"on",m=function(g){(g.type!=d||h.readyState==c)&&(("load"==g.type?a:h)[k](l+g.type,m,e),!f&&(f=!0)&&b.call(a,null))},n=function(){try{i.doScroll("left")}catch(a){return setTimeout(n,50),void 0}m("poll")};if(h.readyState==c)b.call(a,"lazy");else{if(h.createEventObject&&i.doScroll){try{g=!a.frameElement}catch(o){}g&&n()}h[j](l+"DOMContentLoaded",m,e),h[j](l+d,m,e),a[j](l+"load",m,e)}}function g(a){a=a.match(/^(\W)?(.*)/);var b=document["getElement"+(a[1]?"#"==a[1]?"ById":"sByClassName":"sByTagName")](a[2]),c=[];return null!=b&&(c=b.length?b:0==b.length?b:[b]),c}function h(a,b){var c={};for(var d in a)c[d]=a[d];for(var e in b)c[e]=b[e];return c}function k(a,b,c){b=parseInt(b,10),a=parseInt(a,10);var d=Math.max(b,a),e=Math.min(b,a),f=1/12,g=Math.min(.75*e,.75*d*f);return{height:Math.round(Math.max(c.size,g))}}function l(a,b,c,d){var f=k(b.width,b.height,c),g=f.height,h=b.width*d,i=b.height*d,j=c.font?c.font:"sans-serif";e.width=h,e.height=i,a.textAlign="center",a.textBaseline="middle",a.fillStyle=c.background,a.fillRect(0,0,h,i),a.fillStyle=c.foreground,a.font="bold "+g+"px "+j;var l=c.text?c.text:Math.floor(b.width)+"x"+Math.floor(b.height),m=a.measureText(l).width;return m/h>=.75&&(g=Math.floor(.75*g*(h/m))),a.font="bold "+g*d+"px "+j,a.fillText(l,h/2,i/2,h),e.toDataURL("image/png")}function m(a,b,c,e){var f=c.dimensions,g=c.theme,i=c.text?decodeURIComponent(c.text):c.text,j=f.width+"x"+f.height;g=i?h(g,{text:i}):g,g=c.font?h(g,{font:c.font}):g,"image"==a?(b.setAttribute("data-src",e),b.setAttribute("alt",i?i:g.text?g.text+" ["+j+"]":j),(d||!c.auto)&&(b.style.width=f.width+"px",b.style.height=f.height+"px"),d?b.style.backgroundColor=g.background:b.setAttribute("src",l(p,f,g,s))):"background"==a?d||(b.style.backgroundImage="url("+l(p,f,g,s)+")",b.style.backgroundSize=f.width+"px "+f.height+"px"):"fluid"==a&&(b.setAttribute("data-src",e),b.setAttribute("alt",i?i:g.text?g.text+" ["+j+"]":j),b.style.height="%"==f.height.substr(-1)?f.height:f.height+"px",b.style.width="%"==f.width.substr(-1)?f.width:f.width+"px",("inline"==b.style.display||""==b.style.display)&&(b.style.display="block"),d?b.style.backgroundColor=g.background:(b.holderData=c,t.push(b),n(b)))}function n(a){var b;b=null==a.nodeType?t:[a];for(i in b){var c=b[i];if(c.holderData){var d=c.holderData;c.setAttribute("src",l(p,{height:c.clientHeight,width:c.clientWidth},d.theme,s))}}}function o(b,c){var d={theme:u.themes.gray},e=!1;for(sl=b.length,j=0;sl>j;j++){var f=b[j];a.flags.dimensions.match(f)?(e=!0,d.dimensions=a.flags.dimensions.output(f)):a.flags.fluid.match(f)?(e=!0,d.dimensions=a.flags.fluid.output(f),d.fluid=!0):a.flags.colors.match(f)?d.theme=a.flags.colors.output(f):c.themes[f]?d.theme=c.themes[f]:a.flags.text.match(f)?d.text=a.flags.text.output(f):a.flags.font.match(f)?d.font=a.flags.font.output(f):a.flags.auto.match(f)&&(d.auto=!0)}return e?d:!1}var c=!1,d=!1,e=document.createElement("canvas");if(document.getElementsByClassName||(document.getElementsByClassName=function(a){var c,d,e,b=document,f=[];if(b.querySelectorAll)return b.querySelectorAll("."+a);if(b.evaluate)for(d=".//*[contains(concat(' ', @class, ' '), ' "+a+" ')]",c=b.evaluate(d,b,null,0,null);e=c.iterateNext();)f.push(e);else for(c=b.getElementsByTagName("*"),d=new RegExp("(^|\\s)"+a+"(\\s|$)"),e=0;ee;e++){var h=document.createElement("img");h.setAttribute("data-src",b),d[e].appendChild(h)}return a},a.run=function(b){var d=h(u,b),e=[],f=[],i=[];for("string"==typeof d.images?f=g(d.images):window.NodeList&&d.images instanceof window.NodeList?f=d.images:window.Node&&d.images instanceof window.Node&&(f=[d.images]),"string"==typeof d.bgnodes?i=g(d.bgnodes):window.NodeList&&d.elements instanceof window.NodeList?i=d.bgnodes:window.Node&&d.bgnodes instanceof window.Node&&(i=[d.bgnodes]),c=!0,n=0,l=f.length;l>n;n++)e.push(f[n]);var j=document.getElementById("holderjs-style");j||(j=document.createElement("style"),j.setAttribute("id","holderjs-style"),j.type="text/css",document.getElementsByTagName("head")[0].appendChild(j)),d.nocss||(j.styleSheet?j.styleSheet.cssText+=d.stylesheet:j.appendChild(document.createTextNode(d.stylesheet)));for(var k=new RegExp(d.domain+'/(.*?)"?\\)'),l=i.length,n=0;l>n;n++){var p=window.getComputedStyle(i[n],null).getPropertyValue("background-image"),q=p.match(k),r=i[n].getAttribute("data-background-src");if(q){var s=o(q[1].split("/"),d);s&&m("background",i[n],s,p)}else if(null!=r){var s=o(r.substr(r.lastIndexOf(d.domain)+d.domain.length+1).split("/"),d);s&&m("background",i[n],s,p)}}for(l=e.length,n=0;l>n;n++){var t=attr_data_src=p=null;try{t=e[n].getAttribute("src"),attr_datasrc=e[n].getAttribute("data-src")}catch(v){}if(null==attr_datasrc&&t&&t.indexOf(d.domain)>=0?p=t:attr_datasrc&&attr_datasrc.indexOf(d.domain)>=0&&(p=attr_datasrc),p){var s=o(p.substr(p.lastIndexOf(d.domain)+d.domain.length+1).split("/"),d);s&&(s.fluid?m("fluid",e[n],s,p):m("image",e[n],s,p))}}return a},f(b,function(){window.addEventListener?(window.addEventListener("resize",n,!1),window.addEventListener("orientationchange",n,!1)):window.attachEvent("onresize",n),c||a.run()}),"function"==typeof define&&define.amd&&define("Holder",[],function(){return a})}(Holder,window); -------------------------------------------------------------------------------- /view/default/footer.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /view/default/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {$title}-基于Redis实现的简单微博系统 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /view/default/index.html: -------------------------------------------------------------------------------- 1 | {template header} 2 |
3 |
4 | {if $user['uid']} 5 |

欢迎 $user['username']退出

6 | {else} 7 | 登录 8 | 注册 9 | {/if} 10 | 11 |
12 |
13 |

简单微博系统

14 |
15 | 16 | 17 | {if $user['uid']} 18 |
19 | 20 | 21 | 22 |
23 | {/if} 24 | 25 |
26 | 27 | 28 |
29 | 30 | 64x64 31 | 32 |
33 |

$post['user']['username']

34 |

$post['content']

35 |
36 |
$post['format_dateline']
37 |
38 |
39 |
40 |
41 |
42 | 43 | 44 | 45 | 46 | 47 |
48 | {template footer} -------------------------------------------------------------------------------- /view/default/login.html: -------------------------------------------------------------------------------- 1 | {template header} 2 | 3 |
4 | 5 |
6 |
7 | 返回首页 8 |
9 |
10 | 登录 11 | 注册 12 |
13 | 14 |
15 | 16 |
17 |
18 | 19 |
20 | 21 | 30 | 31 |
32 |

33 | 还没有帐号?注册 34 |

35 | 36 |
37 | 38 | 39 |

40 | 忘记密码? 41 |

42 | 43 |
44 | {template footer} -------------------------------------------------------------------------------- /view/default/register.html: -------------------------------------------------------------------------------- 1 | {template header} 2 |
3 | 7 |
8 |
9 |
10 | 32 |
33 |

已有账号,登录

34 |
35 |
36 | {template footer} -------------------------------------------------------------------------------- /view/default/space.html: -------------------------------------------------------------------------------- 1 | {template header} 2 | 3 |
4 |
5 | 登录 6 | 注册 7 |
8 | 11 | 12 | 13 |
14 |
15 | 16 | 17 | 18 |
19 |
20 |

$userInfo['username']

21 |

微博:$userInfo['posts']

22 |

粉丝:$userInfo['fans']

23 |

关注 取消

24 |
25 |
26 | 27 |
28 | 29 | 30 | 31 |
32 | 33 | 64x64 34 | 35 |
36 |

$post['user']['username']

37 |

$post['content']

38 |
39 |
$post['format_dateline']
40 |
41 |
42 |
43 |
44 |
45 | 46 | 47 | 48 |
49 | 50 | {template footer} -------------------------------------------------------------------------------- /微博html.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/微博html.zip -------------------------------------------------------------------------------- /微博数据存储.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phpinside/php_redis_weibo/808ff603820f6f345a7bd96bbbc281180280032c/微博数据存储.png --------------------------------------------------------------------------------