├── README.md
├── component
├── detail
│ ├── author.js
│ ├── authorAboutTopics.js
│ ├── detailHeader.js
│ ├── reply.js
│ └── replyTopic.js
├── index
│ ├── cells.js
│ ├── login.js
│ ├── pagination.js
│ └── tab.js
└── public
│ ├── Breadcrumbs.js
│ ├── header.js
│ ├── load.js
│ └── messages.js
├── css
├── iconfont.css
├── img
│ └── cnodejs_light.svg
├── main.scss
├── reset.min.css
└── sweetalert.css
├── dist
├── .DS_Store
├── main.js
└── package.css
├── fonts
├── iconfont.svg
└── iconfont.ttf
├── index.html
├── js
├── detail.js
├── index.js
├── main.js
├── message.js
├── reportTopic.js
└── user.js
├── package.json
└── webpack.config.js
/README.md:
--------------------------------------------------------------------------------
1 | # CNode-By-React
2 |
项目相关
3 |
4 | - 学习react时自己搭建的cnode,断断续续在写,基本能看了。
5 | - 各种新东西,所以兼容性你懂的
6 | - 项目预览地址
7 |
8 | 相关技术链
9 |
17 |
--------------------------------------------------------------------------------
/component/detail/author.js:
--------------------------------------------------------------------------------
1 | //detail-author
2 | import React from 'react';
3 | import { Link } from 'react-router';
4 |
5 | const Author=React.createClass({
6 | getInitialState(){
7 | return {authorData: '', score:''};
8 | },
9 | componentWillMount(){
10 | if(!this.props.isAuthor && localStorage.getItem('loginname')){
11 | this.sendRequest('https://cnodejs.org/api/v1/user/'+localStorage.getItem('loginname'),this.setData);
12 | }
13 | },
14 | componentWillReceiveProps(newProps){
15 | if(this.props.isAuthor==='true' && newProps.url){
16 | this.sendRequest('https://cnodejs.org/api/v1/user/'+newProps.url,this.setData);
17 | }else if(this.props.isAuthor==='false' && localStorage.getItem('loginname')){
18 | this.sendRequest('https://cnodejs.org/api/v1/user/'+localStorage.getItem('loginname'),this.setData);
19 | }
20 | },
21 | setData(resultData){
22 | this.setState({
23 | authorData: resultData,
24 | score: resultData.score
25 | });
26 | },
27 | sendRequest(url,callback){
28 | fetch(url,{method: 'get',
29 | }).then((result)=>{
30 | return result.json().then((data)=>{
31 | const resultData=data.data;
32 | if(resultData){
33 | callback(resultData);
34 | }
35 | })
36 | });
37 | },
38 | render(){
39 | return
40 |
41 | {this.props.isAuthor==='true'?'ta的信息':'个人信息'}
42 |
43 |
44 |
45 |
46 |
47 |

48 |
49 |
50 | {this.state.authorData.loginname}
51 |
52 |
53 | 积分: {this.state.score}
54 |
55 |
56 | "斯人若彩虹,遇上方知有"
57 |
58 |
59 |
60 |
61 |
62 | }
63 | });
64 | module.exports=Author;
--------------------------------------------------------------------------------
/component/detail/authorAboutTopics.js:
--------------------------------------------------------------------------------
1 | //abthor-about-topics
2 | import React from 'react';
3 | import { Link } from 'react-router';
4 |
5 | const AboutTopics=React.createClass({
6 | getInitialState(){
7 | return {authorData: []};
8 | },
9 | componentWillReceiveProps(newProps){
10 | if(newProps.url && this.props.url!=newProps.url){
11 | this.sendRequest('https://cnodejs.org/api/v1/user/'+newProps.url);
12 | }
13 | },
14 | showTopics(event){
15 | Array.from(document.querySelector('.unstyled').querySelectorAll('li')).forEach((_this,index)=>{
16 | _this.setAttribute('class',_this.getAttribute('class').replace('display-none'),'');
17 | })
18 | event.target.style.display='none';
19 | },
20 | sendRequest(url){
21 | fetch(url,{
22 | method: 'get',
23 | }).then((result)=>{
24 | return result.json().then((data)=>{
25 | const resultData=data.data;
26 | if(resultData){
27 | this.setState({
28 | authorData: resultData.recent_topics,
29 | });
30 | }
31 | })
32 | })
33 | },
34 | render(){
35 | return
36 |
37 |
38 | 作者相关话题
39 |
40 |
41 |
42 |
43 | {
44 | this.state.authorData.map((_this,index)=>{
45 | return - 4?"display-none":''}>
46 |
47 | {_this.title}
48 |
49 |
50 | })
51 | }
52 | - 5?'more':'display-none'} onClick={this.showTopics}>
53 |
54 |
55 |
56 | }
57 | });
58 | module.exports=AboutTopics;
--------------------------------------------------------------------------------
/component/detail/detailHeader.js:
--------------------------------------------------------------------------------
1 | //detail-content
2 | import React from 'react';
3 |
4 | const tabsTitle={'ask':'问答','share':'分享','good':'精华','job':'招聘'};
5 | const DetailHeader=React.createClass({
6 | getInitialState(){
7 | return {is_collect: this.props.is_collect};
8 | },
9 | isCollect(event){
10 | if(this.props.loginTips('收藏')){
11 | let is_collect='';
12 | event.target.innerText==='收藏'?is_collect='collect':is_collect='de_collect';
13 | this.sendRequest(is_collect,localStorage.getItem('userToken'),this.props.data.id);
14 | }
15 | },
16 | componentWillReceiveProps(newProps){
17 | //console.log(newProps);
18 | },
19 | sendRequest(is_collect,token,id){
20 | fetch('https://cnodejs.org/api/v1/topic_collect/'+is_collect,{
21 | method: 'post',
22 | headers: {
23 | "Content-Type": "application/x-www-form-urlencoded"
24 | },
25 | body: 'accesstoken='+token+'&topic_id='+id
26 | }).then((result)=>{
27 | return result.json().then((data)=>{
28 | if(data.success){
29 | const btn=document.querySelector('.collect');
30 | btn.innerText==="收藏"?btn.innerText='取消收藏':btn.innerText='收藏'
31 | }
32 | })
33 | })
34 | },
35 | render(){
36 | return
37 |
38 |
{this.props.data.title}
39 |
46 |
47 |
50 |
51 | }
52 | });
53 | module.exports=DetailHeader;
--------------------------------------------------------------------------------
/component/detail/reply.js:
--------------------------------------------------------------------------------
1 | //detail-reply
2 | import React from 'react';
3 | import swal from 'sweetalert';
4 |
5 | const Reply=React.createClass({
6 | getInitialState(){
7 | return {node: '',agree_count: '',reply_id:''};
8 | },
9 | //回复
10 | sendReply(){
11 | if(this.props.loginTips('回复')){
12 | const token=localStorage.getItem('userToken');
13 | const content=document.querySelector('.content_area').value;
14 | let format;
15 | content.indexOf('@')!=-1?format='accesstoken='+token+'&content='+content+'&reply_id='+this.state.reply_id:
16 | format='accesstoken='+token+'&content='+content;
17 | this.sendRequest('https://cnodejs.org/api/v1/topic/'+this.props.topicID+'/replies',
18 | format,this.replyCallBack);
19 | }
20 | },
21 | //回复某人
22 | replyThis(event){
23 | document.querySelector('.content_area').value='@'+event.target.getAttribute('name')+' ';
24 | this.toBottom();
25 | document.querySelector('.content_area').focus();
26 | this.setState({
27 | reply_id: event.target.getAttribute('id')
28 | })
29 | },
30 | replyCallBack(data){
31 | if(data.success===true){
32 | swal({
33 | title: "回复成功",
34 | type: "success",
35 | }, function(){
36 | window.location.reload();
37 | });
38 | }else{
39 | swal(data.error_msg+'','','error');
40 | }
41 | },
42 | toBottom(){
43 | document.querySelector('BODY').scrollTop=document.querySelector('BODY').scrollHeight;
44 | },
45 | //点赞或者取消点赞
46 | clickAgree(event){
47 | if(this.props.loginTips('点赞')){
48 | this.setState({
49 | node: event.target
50 | })
51 | this.sendRequest('https://cnodejs.org/api/v1/reply/'+event.target.getAttribute('id')+'/ups',
52 | 'accesstoken='+localStorage.getItem('userToken'),
53 | this.agreeCallBack);
54 | }
55 | },
56 | agreeCallBack(data){
57 | let agree_num=Number(this.state.node.nextSibling.innerText);
58 | if(data.success){
59 | this.state.node.setAttribute('class','already_agree iconfont');
60 | data.action==='up'?agree_num++:agree_num--;
61 | this.state.node.nextSibling.innerText=agree_num;
62 | }else{
63 | swal(data.error_msg+',你咋这么自恋捏','','error');
64 | }
65 | },
66 | sendRequest(url,format,callback){
67 | fetch(url,{
68 | method: 'post',
69 | headers: {
70 | "Content-Type": "application/x-www-form-urlencoded"
71 | },
72 | body: format
73 | }).then((result)=>{
74 | return result.json().then((data)=>{
75 | callback(data);
76 | })
77 | })
78 | },
79 | render(){
80 | return
81 |
82 |
83 | {this.props.data.length} 回复
84 |
85 | {
86 | this.props.data.map((_this,index)=>{
87 | return
88 |
89 |
90 |
91 |
92 |
93 |
97 |
98 |
99 |
100 | {_this.ups.length?_this.ups.length:''}
101 |
102 |
103 |
104 |
105 |
106 |
107 | })
108 | }
109 |
110 |
111 |
112 |
113 |
114 | 添加回复
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 | }
124 | });
125 | module.exports=Reply;
--------------------------------------------------------------------------------
/component/detail/replyTopic.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const ReplyTopic=React.createClass({
4 | sendReply(){
5 | this.sendRequest('https://cnodejs.org/api/v1/topic/'+this.props.topicID+'/replies',
6 | localStorage.getItem('userToken'),
7 | document.querySelector('.content_area').value,
8 | 'accesstoken='+token+'&content='+content,this.replyCallBack);
9 | },
10 | replyCallBack(data){
11 | if(data.success){
12 | window.location.reload();
13 | }
14 | },
15 | sendRequest(url,token,content,format,callback){
16 | fetch(url,{
17 | method: 'post',
18 | headers: {
19 | "Content-Type": "application/x-www-form-urlencoded"
20 | },
21 | body: format
22 | }).then((result)=>{
23 | return result.json().then((data)=>{
24 | callback();
25 | })
26 | })
27 | },
28 | render(){
29 | return
30 |
31 |
32 | 添加回复
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | },
41 | });
42 | module.exports=ReplyTopic;
--------------------------------------------------------------------------------
/component/index/cells.js:
--------------------------------------------------------------------------------
1 | //cell
2 | import React from 'react';
3 | import { Link } from 'react-router'
4 |
5 | const Cells=React.createClass({
6 | getInitialState(){
7 | return {data: [],tabTitle: {'ask':'问答','share':'分享','good':'精华','job':'招聘'}};
8 | },
9 | componentWillReceiveProps(newProps){
10 | if(newProps.data){
11 | this.setState({
12 | data:newProps.data
13 | });
14 | }
15 | },
16 | timeFormat(time){
17 | const timeDiff=(new Date().getTime()-new Date(time).getTime())/3600000;
18 | if(timeDiff/24 >=1){
19 | return Math.floor(timeDiff/24)+' 天前';
20 | }else if(timeDiff >1){
21 | return Math.floor(timeDiff)+' 小时前';
22 | }else if(timeDiff < 1){
23 | return Math.ceil(timeDiff*60)+' 分钟前';
24 | }
25 | },
26 | render(){
27 | return (
28 |
29 | {
30 | this.state.data.map((cell,index)=>{
31 | return (
32 |
33 |
34 |

35 |
36 |
=0?'count-reply-visit':'display-none'}>
37 | {cell.reply_count}
38 | /
39 | {cell.visit_count}
40 |
41 |
42 | {this.timeFormat(cell.last_reply_at)}
43 |
44 |
45 | {cell.good?this.state.tabTitle['good']:this.state.tabTitle[cell.tab]}
46 | {cell.title}
47 |
48 |
49 | )
50 | })
51 | }
52 |
53 | )
54 | }
55 | })
56 | module.exports=Cells;
--------------------------------------------------------------------------------
/component/index/login.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Author from '../detail/author.js';
3 | import { Link } from 'react-router';
4 | import swal from 'sweetalert';
5 |
6 | const Login=React.createClass({
7 | getInitialState(){
8 | return {success: false,data: {}};
9 | },
10 | componentWillMount(){
11 | if(localStorage.getItem("userToken")){
12 | this.sendRequest(localStorage.getItem("userToken"));
13 | }
14 | },
15 | getUserInfo(){
16 | const token=document.querySelector('.accesstoken-input').value;
17 | if(!token){
18 | swal('accessToken不能为空','','error');
19 | return ;
20 | }
21 | this.sendRequest(token);
22 | },
23 | sendRequest(token){
24 | fetch('https://cnodejs.org/api/v1/accesstoken',{
25 | method: 'post',
26 | headers: {
27 | "Content-Type": "application/x-www-form-urlencoded"
28 | },
29 | body: 'accesstoken='+token
30 | }).then((result)=>{
31 | return result.json().then((data)=>{
32 | if(data.success){
33 | this.setState({
34 | success: true,
35 | data: data
36 | });
37 | localStorage.setItem("userToken",token);
38 | localStorage.setItem("loginname",this.state.data.loginname);
39 | this.props.loginStatus(true);
40 | }else{
41 | swal(data.error_msg,'','error');
42 | }
43 | })
44 | })
45 | },
46 | render(){
47 | return
66 | }
67 | });
68 | module.exports=Login;
--------------------------------------------------------------------------------
/component/index/pagination.js:
--------------------------------------------------------------------------------
1 | //pagination
2 | import React from 'react';
3 |
4 | const str='... « »';
5 | const paginationDataArr=['«','1','2','3','4','5','...','»'];
6 | const Pagination=React.createClass({
7 | getInitialState(){
8 | return {paginationData: paginationDataArr};
9 | },
10 | getCurrentPage(event){
11 | const thisPage=event.target.innerText;
12 | if(str.indexOf(thisPage)===-1){
13 | //is-repeat-request?
14 | if(thisPage!=this.state.pageNum){
15 | this.setPaginationNum(Number(thisPage));
16 | this.setPaginationStyle(event.target);
17 | this.props.sendRequest('https://cnodejs.org/api/v1/topics?page='+Number(thisPage)+'&tab='+this.props.tab+'&limit='+20);
18 | }
19 | }
20 | },
21 | //reset-pagination
22 | componentWillReceiveProps(newProps){
23 | if(newProps.tab!=this.props.tab){
24 | this.setState({
25 | paginationData: paginationDataArr
26 | });
27 | Array.from(document.querySelector('.pagination').querySelectorAll('a')).forEach((_this,index)=>{
28 | _this.setAttribute('class','');
29 | });
30 | this.refs.firstLi.setAttribute('class','active');
31 | }
32 | },
33 | //set-active-li
34 | setPaginationStyle(page){
35 | Array.from(document.querySelector('.pagination').querySelectorAll('a')).forEach((_this,index)=>{
36 | if(Number(page.innerText)<=3){
37 | page.setAttribute('class','active');
38 | _this.setAttribute('class','');
39 | }
40 | else{
41 | index===4?_this.setAttribute('class','active'):_this.setAttribute('class','');
42 | }
43 | });
44 | },
45 | //update-pagination-num
46 | setPaginationNum(page){
47 | if(page >3){
48 | this.setState({
49 | paginationData: ['«','...',page-2,page-1,page,page+1,page+2,'...','»']
50 | })
51 | }else{
52 | this.setState({
53 | paginationData: paginationDataArr
54 | })
55 | }
56 | },
57 | render(){
58 | return
59 |
60 | {
61 | this.state.paginationData.map((page,index)=>{
62 | return - {page}
63 | })
64 | }
65 |
66 |
67 | }
68 | })
69 | module.exports=Pagination;
--------------------------------------------------------------------------------
/component/index/tab.js:
--------------------------------------------------------------------------------
1 | //tab
2 | import React from 'react';
3 |
4 | const tabsTitle={'问答':'ask','分享':'share','精华':'good','招聘':'job'};
5 | const Tab=React.createClass({
6 | getInitialState(){
7 | return {tab:''};
8 | },
9 | //tab切换
10 | getTabs(event){
11 | Array.from(document.querySelectorAll('.tabOne')).forEach((_this)=>{_this.setAttribute('class','tabOne')});
12 | event.target.setAttribute('class','tabOne active');
13 | const thisTab=event.target.getAttribute('title');
14 | if(this.state.tab!=thisTab){
15 | this.setState({
16 | tab: thisTab
17 | });
18 | this.props.sendRequest('https://cnodejs.org/api/v1/topics?page='+1+'&tab='+thisTab+'&limit='+20,thisTab);
19 | }
20 | },
21 | render(){
22 | return
23 | {
24 | Object.keys(tabsTitle).map((tab,index)=>{
25 | return
{tab}
26 | })
27 | }
28 |
29 | }
30 |
31 | });
32 | module.exports=Tab;
33 |
--------------------------------------------------------------------------------
/component/public/Breadcrumbs.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Link } from 'react-router';
3 |
4 | const Breadcrumbs=React.createClass({
5 | render(){
6 | return
7 |
8 | - 主页/
9 | - {this.props.active}
10 |
11 |
12 | }
13 | });
14 | module.exports=Breadcrumbs;
--------------------------------------------------------------------------------
/component/public/header.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Link } from 'react-router';
3 |
4 | const Header=React.createClass({
5 | getInitialState(){
6 | return {messages_count: 0,};
7 | },
8 | componentWillMount(){
9 | const token=localStorage.getItem('userToken');
10 | if(token){
11 | this.sendRequest('https://cnodejs.org/api/v1/message/count?accesstoken='+token);
12 | }
13 | },
14 | sendRequest(url){
15 | fetch(url,{method: 'get',
16 | }).then((result)=>{
17 | return result.json().then((data)=>{
18 | const resultData=data.data;
19 | if(resultData){
20 | this.setState({
21 | messages_count:resultData
22 | });
23 | }
24 | })
25 | });
26 | },
27 | logOut(){
28 | localStorage.removeItem('userToken');
29 | localStorage.removeItem('loginname');
30 | window.location.reload();
31 | },
32 | render(){
33 | return
34 |
35 |
36 |
43 |
44 |
45 | }
46 | });
47 | module.exports=Header;
--------------------------------------------------------------------------------
/component/public/load.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Loader from 'halogen/RingLoader';
3 |
4 | const Load=React.createClass({
5 | render(){
6 | return
7 |
8 |
9 | }
10 | });
11 | module.exports=Load;
--------------------------------------------------------------------------------
/component/public/messages.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Link } from 'react-router';
3 |
4 | const Messages=React.createClass({
5 | getInitialState(){
6 | return {data: []}
7 | },
8 | componentWillReceiveProps(newProps){
9 | if(newProps.data){
10 | this.setState({
11 | data:newProps.data
12 | })
13 | }
14 | },
15 | render(){
16 | return
17 |
暂无消息
18 | {
19 | this.state.data.map((_this)=>{
20 | return
21 |
{_this.author.loginname} {_this.type==='at'?'在话题 ':'回复了你的话题'}
{_this.topic.title} {_this.type==='at'?'中@了你':''}
22 |
23 | })
24 | }
25 |
26 | }
27 | });
28 | module.exports=Messages;
--------------------------------------------------------------------------------
/css/iconfont.css:
--------------------------------------------------------------------------------
1 |
2 | @font-face {font-family: "iconfont";
3 | src: url('../fonts/iconfont.ttf') format('truetype'),
4 | url('../fonts/iconfont.svg') format('svg');
5 | }
6 |
7 | .iconfont {
8 | font-family:"iconfont" !important;
9 | font-size:14px;
10 | font-style:normal;
11 | -webkit-font-smoothing: antialiased;
12 | -webkit-text-stroke-width: 0.2px;
13 | -moz-osx-font-smoothing: grayscale;
14 | cursor: pointer;
15 | color: #999;
16 | }
17 |
18 | .icon-agree:before { content: "\e708"; }
19 |
20 | .icon-reply:before { content: "\e709"; }
21 |
22 |
--------------------------------------------------------------------------------
/css/img/cnodejs_light.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
55 |
--------------------------------------------------------------------------------
/css/main.scss:
--------------------------------------------------------------------------------
1 | html{
2 | height: 100%;
3 | overflow-x: hidden;
4 | }
5 | body{
6 | background-color: #e1e1e1;
7 | height: 100%;
8 | }
9 | a{
10 | cursor: pointer;
11 | }
12 | .display-none{
13 | display: none;
14 | }
15 | .more{
16 | text-align: center;
17 | a{
18 | color: #08c!important;
19 | display: block;
20 | &:hover{
21 | color: #444!important;
22 | }
23 | }
24 | }
25 | header{
26 | padding: 10px;
27 | width: 100%;
28 | background: #444;
29 | .header_wrap{
30 | text-align: left;
31 | max-width: 90%;
32 | margin: auto;
33 | .logo{
34 | background-image: url(./img/cnodejs_light.svg);
35 | background-repeat: no-repeat;
36 | display: inline-block;
37 | width: 120px;
38 | height: 30px;
39 | margin: auto;
40 | a{
41 | display: block;
42 | height: 100%;
43 | }
44 | }
45 | .navbar{
46 | float: right;
47 | ul{
48 | display: block;
49 | li{
50 | float: left;
51 | line-height: 36px;
52 | a{
53 | color: #ccc;
54 | font-size: 12px;
55 | text-decoration: none;
56 | display: block;
57 | padding: 0 20px;
58 | &:hover{
59 | color: #fff;
60 | }
61 | .messages_count{
62 | border-radius: 8px;
63 | padding: 0 5px;
64 | background-color: #80bd01;
65 | color: #fff;
66 | margin-right: .5em;
67 | font-size: 13px;
68 | font-family: Microsoft Yahei;
69 | }
70 | }
71 | }
72 | }
73 | }
74 | }
75 | }
76 | #content{
77 | .panel-header{
78 | padding: 10px;
79 | background-color: #f6f6f6;
80 | border-radius: 3px 3px 0 0;
81 | a{
82 | color: #80bd01;
83 | text-decoration: none;
84 | margin-right: 20px;
85 | display: inline-block;
86 | font-size: 14px;
87 | &:hover{
88 | color: #005580;
89 | }
90 | }
91 | .active{
92 | background-color: #80bd01;
93 | color: #fff;
94 | padding: 4px 4px;
95 | border-radius: 5px;
96 | &:hover{
97 | color: #fff;
98 | }
99 | }
100 | }
101 | #cell_list{
102 | height: auto;
103 | .cell{
104 | padding: 10px;
105 | background: #fff;
106 | overflow: hidden;
107 | font-size: 14px;
108 | border-top: 1px solid #f0f0f0;
109 | &:hover{
110 | background: #f6f6f6;
111 | }
112 | &:first-child{
113 | border-top: none;
114 | }
115 | .user-img{
116 | width: 30px;
117 | height: 30px;
118 | float: left;
119 | }
120 | .count-reply-visit{
121 | float: left;
122 | font-size: 12px;
123 | margin: 6px;
124 | width: 60px;
125 | .count-of-reply{
126 | color: #9e78c0;
127 | }
128 | .character{
129 | margin: 0 1px;
130 | }
131 | .count-of-visit{
132 | color: #b4b4b4;
133 | }
134 | }
135 | .topic-wrapper{
136 | overflow: hidden;
137 | .cell-tab{
138 | float: left;
139 | font-size: 12px;
140 | margin-top: 5px;
141 | background-color: #80bd01;
142 | color: #fff;
143 | padding: 2px;
144 | border-radius: 5px;
145 | }
146 | .cell-topic-title{
147 | font-size: 16px;
148 | margin: 4px 10px;
149 | display: inline-block;
150 | letter-spacing: .5px;
151 | max-width: 70%;
152 | white-space: nowrap;
153 | display: inline-block;
154 | vertical-align: middle;
155 | overflow: hidden;
156 | text-overflow: ellipsis;
157 | color: #444;
158 | text-decoration: none;
159 | &:hover{
160 | text-decoration: underline;
161 | }
162 | }
163 | }
164 | .pull-right{
165 | float: right;
166 | font-size: 12px;
167 | .last-reply-time{
168 | color: #778087;
169 | margin-top: 6px;
170 | display: inline-block;
171 | }
172 | }
173 | }
174 | }
175 | }
176 | //分页
177 | .pagination{
178 | text-align: left;
179 | padding: 10px;
180 | background: #fff;
181 | border-radius: 0 0 3px 3px;
182 | ul{
183 | box-shadow: none;
184 | display: inline-block;
185 | li{
186 | line-height: 2em;
187 | display: inline;
188 | &:first-child{
189 | a{
190 | border-top-left-radius: 4px;
191 | border-bottom-left-radius: 4px;
192 | border-left-width: 1px;
193 | }
194 | }
195 | &:last-child{
196 | a{
197 | border-top-right-radius: 4px;
198 | border-bottom-right-radius: 4px;
199 | }
200 | }
201 | a{
202 | color: #778087;
203 | float: left;
204 | padding: 4px 12px;
205 | line-height: 20px;
206 | text-decoration: none;
207 | background-color: #fff;
208 | border: 1px solid #ddd;
209 | border-left-width: 0;
210 | &:hover{
211 | background-color: #f5f5f5;
212 | }
213 | }
214 | .active{
215 | color: #80bd01;
216 | &:hover{
217 | color: #778087;
218 | cursor: default;
219 | background: #fff;
220 | }
221 | }
222 | .disabled{
223 | &:hover{
224 | color: #999;
225 | cursor: default;
226 | background-color: transparent;
227 | }
228 | }
229 | }
230 | }
231 | }
232 | //论坛详情页
233 | .panel{
234 | margin-bottom: 13px;
235 | .header{
236 | padding: 10px;
237 | background-color: #f6f6f6;
238 | border-radius: 3px 3px 0 0;
239 | font-size: 14px;
240 | }
241 | .markdown-text{
242 | &:first-child{
243 | margin-top: 0;
244 | }
245 | img{
246 | max-width: 100%;
247 | }
248 | .prettyprint{
249 | font-size: 14px;
250 | border-radius: 0;
251 | padding: 0 15px;
252 | border: none;
253 | margin: 20px 0;
254 | border-width: 1px 0;
255 | background: #f7f7f7;
256 | code{
257 | color: inherit;
258 | font-family: Monaco,Menlo,Consolas,"Courier New",monospace;
259 | font-size: 12px;
260 | white-space: pre-wrap;
261 | background-color: transparent;
262 | }
263 | }
264 | }
265 | .topic_header{
266 | background: #fff;
267 | }
268 | .inner{
269 | line-height: 2em;
270 | background: #fff;
271 | border-radius: 0 0 3px 3px;
272 | padding: 10px;
273 | .content_area{
274 | width: 100%;
275 | height: 190px;
276 | resize: none;
277 | outline: none;
278 | }
279 | .reply_btn{
280 | background-color: #08c;
281 | &:hover{
282 | background: #05c;
283 | }
284 | }
285 | .user_big_avatar{
286 | float: left;
287 | margin-right: 10px;
288 | .user_avatar{
289 | width: 40px;
290 | height: 40px;
291 | display: inline-block;
292 | }
293 | }
294 | .user_profile{
295 | clear: left;
296 | }
297 | .col_fade{
298 | color: #ababab;
299 | font-size: 14px;
300 | }
301 | }
302 | .message_inner{
303 | padding: 0;
304 | }
305 | .topic{
306 | padding: 10px;
307 | border-top: 1px solid #e5e5e5;
308 | }
309 | .cell{
310 | padding-right: 10px;
311 | background: #fff;
312 | border-top: 1px solid #f0f0f0;
313 | position: relative;
314 | padding: 10px 0 10px 10px;
315 | font-size: 14px;
316 | .author_content{
317 | a{
318 | float: left;
319 | img{
320 | width: 30px;
321 | height: 30px;
322 | border-radius: 3px;
323 | max-width: 100%;
324 | vertical-align: middle;
325 | border: 0;
326 | }
327 | }
328 | .user_info{
329 | margin-left: 10px;
330 | display: inline-block;
331 | font-size: 12px;
332 | .reply_time{
333 | margin-left: 5px;
334 | }
335 | }
336 | .agree{
337 | vertical-align: text-top;
338 | display: none;
339 | font-size: 16px;
340 | }
341 | .already_agree{
342 | color: #000;
343 | font-size: 16px;
344 | display: inline-block!important;
345 | }
346 | .agree_count{
347 | font-size: 16px;
348 | margin: 0 10px 0 5px;
349 | vertical-align: text-top;
350 | }
351 | }
352 | .reply_content{
353 | padding-left: 50px;
354 | color: #333;
355 | p{
356 | font-size: 15px;
357 | line-height: 1.7em;
358 | overflow: auto;
359 | margin-bottom: 1em;
360 | white-space: pre-wrap;
361 | }
362 | }
363 | }
364 | .reply_item{
365 | &:hover{
366 | .agree{
367 | display: inline-block;
368 | }
369 | }
370 | }
371 | a{
372 | color: #08c;
373 | text-decoration: none;
374 | display: inline;
375 | }
376 | .unstyled{
377 | margin-left: 0;
378 | li{
379 | line-height: 2em;
380 | a{
381 | max-width: 270px;
382 | font-size: 14px;
383 | color: #778087;
384 | text-overflow: ellipsis;
385 | overflow: hidden;
386 | white-space: nowrap;
387 | display: inline-block;
388 | }
389 | }
390 | }
391 | .dark{
392 | color: #666;
393 | }
394 | .author_link{
395 | display: inline;
396 | }
397 | .floor{
398 | font-size: 14px;
399 | }
400 | .common-btn{
401 | border: none;
402 | padding: 3px 10px;
403 | font-size: 14px;
404 | transition: all .2s ease-in-out;
405 | letter-spacing: 2px;
406 | box-shadow: none;
407 | line-height: 2em;
408 | color: #fff;
409 | border-radius: 3px;
410 | outline: none;
411 | }
412 | .collect,.report{
413 | float: right;
414 | margin-top: -25px;
415 | background-color: #80bd01;
416 | padding: 0 7px;
417 | &:hover{
418 | background-color: #6ba44e;
419 | }
420 | a{
421 | color: #fff;
422 | }
423 | }
424 | .report{
425 | float: none;
426 | }
427 | .icons{
428 | float: right;
429 | margin-right: 10px;
430 | }
431 | .breadcrumb{
432 | display: block;
433 | overflow: hidden;
434 | li{
435 | float: left;
436 | a{
437 | color: #80bd01;
438 | &:hover{
439 | color: #08c;
440 | }
441 | }
442 | .divider{
443 | padding: 0 5px;
444 | color: #ccc;
445 | }
446 | }
447 | .active{
448 | color: #999;
449 | }
450 | }
451 | }
452 |
453 | #main{
454 | width: 90%;
455 | max-width: 1400px;
456 | min-width: 960px;
457 | margin: 15px auto;
458 | min-height: 400px;
459 | font-family: "Helvetica Neue","Luxi Sans","DejaVu Sans",Tahoma,"Hiragino Sans GB",STHeiti,sans-serif!important;
460 | #sidebar{
461 | width: 290px;
462 | font-size: 14px;
463 | float: right;
464 | margin-bottom: 20px;
465 | .panel{
466 | margin-bottom: 13px;
467 | font-size: 13px;
468 | .header{
469 | color: #51585c;
470 | border-radius: 3px 3px 0 0;
471 | padding: 10px;
472 | background-color: #f6f6f6;
473 | .col_fade{
474 | color: #444;
475 | }
476 | }
477 | .inner{
478 | padding: 10px;
479 | border-radius: 0 0 3px 3px;
480 | background-color: #fff;
481 | line-height: 2em;
482 | .user_card{
483 | a{
484 | color: #778087;
485 | }
486 | .user_avatar{
487 | vertical-align: middle;
488 | margin-right: .5em;
489 | display: inline-block;
490 | img{
491 | width: 48px;
492 | height: 48px;
493 | }
494 | }
495 | .user_name{
496 | font-size: 16px;
497 | a{
498 | color: #778087;
499 | }
500 | }
501 | }
502 | .login_button{
503 | display: inline-block;
504 | padding: 3px 10px;
505 | border: none;
506 | font-size: 14px;
507 | transition: all .2s ease-in-out;
508 | cursor: pointer;
509 | letter-spacing: 1px;
510 | box-shadow: none;
511 | border-radius: 3px;
512 | line-height: 2em;
513 | vertical-align: middle;
514 | color: #fff;
515 | background-color: #5bc0de;
516 | outline: none;
517 | &:hover{
518 | background: #2f96b4;
519 | }
520 | }
521 | .accesstoken-input{
522 | border: 1px solid #eee;
523 | border-radius: 3px;
524 | margin: 10px 0;
525 | width: 174px;
526 | padding-left: 10px;
527 | }
528 | .failed{
529 | color: red;
530 | }
531 | .success{
532 | color: #319f81;
533 | }
534 | .signature{
535 | font-style: italic;
536 | }
537 | }
538 | }
539 | }
540 | #content{
541 | padding: 0;
542 | margin-right: 305px;
543 | .topic_full_title{
544 | font-size: 22px;
545 | font-weight: 700;
546 | margin: 8px 0;
547 | display: inline-block;
548 | vertical-align: bottom;
549 | width: 75%;
550 | line-height: 130%;
551 | }
552 | .changes{
553 | font-size: 12px;
554 | color: #838383;
555 | span{
556 | &:before{
557 | content: "•";
558 | margin: 0 5px;
559 | }
560 | a{
561 | color: inherit;
562 | text-decoration: none;
563 | }
564 | }
565 | }
566 | .topic_content{
567 | margin: 0 10px;
568 | blockquote{
569 | padding: 0 0 0 15px;
570 | margin: 0 0 20px;
571 | border-left: 5px solid #eee;
572 | &:before{
573 | content: "";
574 | }
575 | &:after{
576 | content: "";
577 | }
578 | }
579 | p{
580 | font-size: 15px;
581 | line-height: 1.7em;
582 | overflow: auto;
583 | margin: 1em 0;
584 | white-space: pre-wrap;
585 | }
586 | table{
587 | padding: 0;
588 | border-collapse: collapse;
589 | border-spacing: 0;
590 | font: inherit;
591 | max-width: 100%;
592 | tr{
593 | border-top: 1px solid #ccc;
594 | background-color: #fff;
595 | margin: 0;
596 | padding: 0;
597 | th,td{
598 | border: 1px solid #ccc;
599 | text-align: left;
600 | margin: 0;
601 | padding: 6px 13px;
602 | }
603 | }
604 | }
605 | ol{
606 | padding-left: 20px;
607 | }
608 | }
609 | }
610 | }
611 | .reportTopic{
612 | select{
613 | display: inline-block;
614 | padding: 4px 6px;
615 | font-size: 14px;
616 | color: #555;
617 | vertical-align: middle;
618 | -webkit-border-radius: 4px;
619 | -moz-border-radius: 4px;
620 | border-radius: 4px;
621 | border: 1px solid #ccc;
622 | width: 220px;
623 | margin-left: 10px;
624 | outline: none;
625 | }
626 | input{
627 | border: 1px solid #ccc;
628 | width: 100%;
629 | resize: none;
630 | height: 30px;
631 | margin-top: 10px;
632 | border-radius: 5px;
633 | padding-left: 10px;
634 | font-size: 14px;
635 | outline: none;
636 | }
637 | textarea{
638 | width: 100%;
639 | margin-top: 10px;
640 | border-radius: 5px;
641 | height: 450px;
642 | padding-left: 10px;
643 | outline: none;
644 | resize: none;
645 | border-bottom: 1px solid #eee;
646 | }
647 | button{
648 | margin-top: 20px;
649 | }
650 | }
651 | .load_wrap{
652 | position: fixed;
653 | left: 0;
654 | right: 0;
655 | top: 0;
656 | bottom: 0;
657 | background: rgba(0,0,0,0.1);
658 | .loader{
659 | position: fixed;
660 | top: 50%;
661 | left: 50%;
662 | margin: -25px 0 0 -25px;
663 | div{
664 | opacity: 1!important;
665 | }
666 | }
667 | }
668 |
669 |
670 |
--------------------------------------------------------------------------------
/css/reset.min.css:
--------------------------------------------------------------------------------
1 | html{box-sizing:border-box;-webkit-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}:after,:before{text-decoration:inherit;vertical-align:inherit}*{background-repeat:no-repeat;padding:0;margin:0}audio:not([controls]){display:none;height:0}hr{overflow:visible}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}summary{display:list-item}small{font-size:80%}[hidden],template{display:none}abbr[title]{border-bottom:1px dotted;text-decoration:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}code,kbd,pre,samp{font-family:monospace,monospace}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}input{border-radius:0}[type=button],[type=reset],[type=submit] [role=button],button{cursor:pointer}[disabled]{cursor:default}[type=number]{width:auto}[type=search]{-webkit-appearance:textfield}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;resize:vertical}button,input,optgroup,select,textarea{font:inherit}optgroup{font-weight:700}button{overflow:visible}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:0;padding:0}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button:-moz-focusring{outline:1px dotted ButtonText}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}button,select{text-transform:none}button,input,select,textarea{background-color:transparent;border-style:none;color:inherit}select::-ms-expand{display:none}select::-ms-value{color:currentColor}legend{border:0;color:inherit;display:table;max-width:100%;white-space:normal}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}img{border-style:none}progress{vertical-align:baseline}svg:not(:root){overflow:hidden}audio,canvas,progress,video{display:inline-block}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){position:absolute!important;clip:rect(0 0 0 0)!important}}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled]{cursor:default}::-moz-selection{background-color:#b3d4fc;color:#000;text-shadow:none}::selection{background-color:#b3d4fc;color:#000;text-shadow:none}ul li{list-style: none!important;}
2 |
--------------------------------------------------------------------------------
/css/sweetalert.css:
--------------------------------------------------------------------------------
1 | body.stop-scrolling {
2 | height: 100%;
3 | /*本人修改,保证体验的处理*/
4 | /*overflow: hidden;*/
5 | }
6 |
7 | .sweet-overlay {
8 | background-color: black;
9 | /* IE8 */
10 | -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
11 | /* IE8 */
12 | background-color: rgba(0, 0, 0, 0.4);
13 | position: fixed;
14 | left: 0;
15 | right: 0;
16 | top: 0;
17 | bottom: 0;
18 | display: none;
19 | z-index: 10000; }
20 |
21 | .sweet-alert {
22 | background-color: white;
23 | font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
24 | width: 478px;
25 | padding: 17px;
26 | border-radius: 5px;
27 | text-align: center;
28 | position: fixed;
29 | left: 50%;
30 | top: 50%;
31 | margin-left: -256px;
32 | margin-top: -200px;
33 | overflow: hidden;
34 | display: none;
35 | z-index: 99999; }
36 | @media all and (max-width: 540px) {
37 | .sweet-alert {
38 | width: auto;
39 | margin-left: 0;
40 | margin-right: 0;
41 | left: 15px;
42 | right: 15px; } }
43 | .sweet-alert h2 {
44 | color: #575757;
45 | font-size: 30px;
46 | text-align: center;
47 | font-weight: 600;
48 | text-transform: none;
49 | position: relative;
50 | margin: 25px 0;
51 | padding: 0;
52 | line-height: 40px;
53 | display: block; }
54 | .sweet-alert p {
55 | color: #797979;
56 | font-size: 16px;
57 | text-align: center;
58 | font-weight: 300;
59 | position: relative;
60 | text-align: inherit;
61 | float: none;
62 | margin: 0;
63 | padding: 0;
64 | line-height: normal; }
65 | .sweet-alert fieldset {
66 | border: none;
67 | position: relative; }
68 | .sweet-alert .sa-error-container {
69 | background-color: #f1f1f1;
70 | margin-left: -17px;
71 | margin-right: -17px;
72 | overflow: hidden;
73 | padding: 0 10px;
74 | max-height: 0;
75 | webkit-transition: padding 0.15s, max-height 0.15s;
76 | transition: padding 0.15s, max-height 0.15s; }
77 | .sweet-alert .sa-error-container.show {
78 | padding: 10px 0;
79 | max-height: 100px;
80 | webkit-transition: padding 0.2s, max-height 0.2s;
81 | transition: padding 0.25s, max-height 0.25s; }
82 | .sweet-alert .sa-error-container .icon {
83 | display: inline-block;
84 | width: 24px;
85 | height: 24px;
86 | border-radius: 50%;
87 | background-color: #ea7d7d;
88 | color: white;
89 | line-height: 24px;
90 | text-align: center;
91 | margin-right: 3px; }
92 | .sweet-alert .sa-error-container p {
93 | display: inline-block; }
94 | .sweet-alert .sa-input-error {
95 | position: absolute;
96 | top: 29px;
97 | right: 26px;
98 | width: 20px;
99 | height: 20px;
100 | opacity: 0;
101 | -webkit-transform: scale(0.5);
102 | transform: scale(0.5);
103 | -webkit-transform-origin: 50% 50%;
104 | transform-origin: 50% 50%;
105 | -webkit-transition: all 0.1s;
106 | transition: all 0.1s; }
107 | .sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after {
108 | content: "";
109 | width: 20px;
110 | height: 6px;
111 | background-color: #f06e57;
112 | border-radius: 3px;
113 | position: absolute;
114 | top: 50%;
115 | margin-top: -4px;
116 | left: 50%;
117 | margin-left: -9px; }
118 | .sweet-alert .sa-input-error::before {
119 | -webkit-transform: rotate(-45deg);
120 | transform: rotate(-45deg); }
121 | .sweet-alert .sa-input-error::after {
122 | -webkit-transform: rotate(45deg);
123 | transform: rotate(45deg); }
124 | .sweet-alert .sa-input-error.show {
125 | opacity: 1;
126 | -webkit-transform: scale(1);
127 | transform: scale(1); }
128 | .sweet-alert input {
129 | width: 100%;
130 | box-sizing: border-box;
131 | border-radius: 3px;
132 | border: 1px solid #d7d7d7;
133 | height: 43px;
134 | margin-top: 10px;
135 | margin-bottom: 17px;
136 | font-size: 18px;
137 | box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06);
138 | padding: 0 12px;
139 | display: none;
140 | -webkit-transition: all 0.3s;
141 | transition: all 0.3s; }
142 | .sweet-alert input:focus {
143 | outline: none;
144 | box-shadow: 0px 0px 3px #c4e6f5;
145 | border: 1px solid #b4dbed; }
146 | .sweet-alert input:focus::-moz-placeholder {
147 | transition: opacity 0.3s 0.03s ease;
148 | opacity: 0.5; }
149 | .sweet-alert input:focus:-ms-input-placeholder {
150 | transition: opacity 0.3s 0.03s ease;
151 | opacity: 0.5; }
152 | .sweet-alert input:focus::-webkit-input-placeholder {
153 | transition: opacity 0.3s 0.03s ease;
154 | opacity: 0.5; }
155 | .sweet-alert input::-moz-placeholder {
156 | color: #bdbdbd; }
157 | .sweet-alert input:-ms-input-placeholder {
158 | color: #bdbdbd; }
159 | .sweet-alert input::-webkit-input-placeholder {
160 | color: #bdbdbd; }
161 | .sweet-alert.show-input input {
162 | display: block; }
163 | .sweet-alert .sa-confirm-button-container {
164 | display: inline-block;
165 | position: relative; }
166 | .sweet-alert .la-ball-fall {
167 | position: absolute;
168 | left: 50%;
169 | top: 50%;
170 | margin-left: -27px;
171 | margin-top: 4px;
172 | opacity: 0;
173 | visibility: hidden; }
174 | .sweet-alert button {
175 | background-color: #8CD4F5;
176 | color: white;
177 | border: none;
178 | box-shadow: none;
179 | font-size: 17px;
180 | font-weight: 500;
181 | -webkit-border-radius: 4px;
182 | border-radius: 5px;
183 | padding: 10px 32px;
184 | margin: 26px 5px 0 5px;
185 | cursor: pointer; }
186 | .sweet-alert button:focus {
187 | outline: none;
188 | box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05); }
189 | .sweet-alert button:hover {
190 | background-color: #7ecff4; }
191 | .sweet-alert button:active {
192 | background-color: #5dc2f1; }
193 | .sweet-alert button.cancel {
194 | background-color: #C1C1C1; }
195 | .sweet-alert button.cancel:hover {
196 | background-color: #b9b9b9; }
197 | .sweet-alert button.cancel:active {
198 | background-color: #a8a8a8; }
199 | .sweet-alert button.cancel:focus {
200 | box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important; }
201 | .sweet-alert button[disabled] {
202 | opacity: .6;
203 | cursor: default; }
204 | .sweet-alert button.confirm[disabled] {
205 | color: transparent; }
206 | .sweet-alert button.confirm[disabled] ~ .la-ball-fall {
207 | opacity: 1;
208 | visibility: visible;
209 | transition-delay: 0s; }
210 | .sweet-alert button::-moz-focus-inner {
211 | border: 0; }
212 | .sweet-alert[data-has-cancel-button=false] button {
213 | box-shadow: none !important; }
214 | .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] {
215 | padding-bottom: 40px; }
216 | .sweet-alert .sa-icon {
217 | width: 80px;
218 | height: 80px;
219 | border: 4px solid gray;
220 | -webkit-border-radius: 40px;
221 | border-radius: 40px;
222 | border-radius: 50%;
223 | margin: 20px auto;
224 | padding: 0;
225 | position: relative;
226 | box-sizing: content-box; }
227 | .sweet-alert .sa-icon.sa-error {
228 | border-color: #F27474; }
229 | .sweet-alert .sa-icon.sa-error .sa-x-mark {
230 | position: relative;
231 | display: block; }
232 | .sweet-alert .sa-icon.sa-error .sa-line {
233 | position: absolute;
234 | height: 5px;
235 | width: 47px;
236 | background-color: #F27474;
237 | display: block;
238 | top: 37px;
239 | border-radius: 2px; }
240 | .sweet-alert .sa-icon.sa-error .sa-line.sa-left {
241 | -webkit-transform: rotate(45deg);
242 | transform: rotate(45deg);
243 | left: 17px; }
244 | .sweet-alert .sa-icon.sa-error .sa-line.sa-right {
245 | -webkit-transform: rotate(-45deg);
246 | transform: rotate(-45deg);
247 | right: 16px; }
248 | .sweet-alert .sa-icon.sa-warning {
249 | border-color: #F8BB86; }
250 | .sweet-alert .sa-icon.sa-warning .sa-body {
251 | position: absolute;
252 | width: 5px;
253 | height: 47px;
254 | left: 50%;
255 | top: 10px;
256 | -webkit-border-radius: 2px;
257 | border-radius: 2px;
258 | margin-left: -2px;
259 | background-color: #F8BB86; }
260 | .sweet-alert .sa-icon.sa-warning .sa-dot {
261 | position: absolute;
262 | width: 7px;
263 | height: 7px;
264 | -webkit-border-radius: 50%;
265 | border-radius: 50%;
266 | margin-left: -3px;
267 | left: 50%;
268 | bottom: 10px;
269 | background-color: #F8BB86; }
270 | .sweet-alert .sa-icon.sa-info {
271 | border-color: #C9DAE1; }
272 | .sweet-alert .sa-icon.sa-info::before {
273 | content: "";
274 | position: absolute;
275 | width: 5px;
276 | height: 29px;
277 | left: 50%;
278 | bottom: 17px;
279 | border-radius: 2px;
280 | margin-left: -2px;
281 | background-color: #C9DAE1; }
282 | .sweet-alert .sa-icon.sa-info::after {
283 | content: "";
284 | position: absolute;
285 | width: 7px;
286 | height: 7px;
287 | border-radius: 50%;
288 | margin-left: -3px;
289 | top: 19px;
290 | background-color: #C9DAE1;
291 | left: 50%; }
292 | .sweet-alert .sa-icon.sa-success {
293 | border-color: #A5DC86; }
294 | .sweet-alert .sa-icon.sa-success::before, .sweet-alert .sa-icon.sa-success::after {
295 | content: '';
296 | -webkit-border-radius: 40px;
297 | border-radius: 40px;
298 | border-radius: 50%;
299 | position: absolute;
300 | width: 60px;
301 | height: 120px;
302 | background: white;
303 | -webkit-transform: rotate(45deg);
304 | transform: rotate(45deg); }
305 | .sweet-alert .sa-icon.sa-success::before {
306 | -webkit-border-radius: 120px 0 0 120px;
307 | border-radius: 120px 0 0 120px;
308 | top: -7px;
309 | left: -33px;
310 | -webkit-transform: rotate(-45deg);
311 | transform: rotate(-45deg);
312 | -webkit-transform-origin: 60px 60px;
313 | transform-origin: 60px 60px; }
314 | .sweet-alert .sa-icon.sa-success::after {
315 | -webkit-border-radius: 0 120px 120px 0;
316 | border-radius: 0 120px 120px 0;
317 | top: -11px;
318 | left: 30px;
319 | -webkit-transform: rotate(-45deg);
320 | transform: rotate(-45deg);
321 | -webkit-transform-origin: 0px 60px;
322 | transform-origin: 0px 60px; }
323 | .sweet-alert .sa-icon.sa-success .sa-placeholder {
324 | width: 80px;
325 | height: 80px;
326 | border: 4px solid rgba(165, 220, 134, 0.2);
327 | -webkit-border-radius: 40px;
328 | border-radius: 40px;
329 | border-radius: 50%;
330 | box-sizing: content-box;
331 | position: absolute;
332 | left: -4px;
333 | top: -4px;
334 | z-index: 2; }
335 | .sweet-alert .sa-icon.sa-success .sa-fix {
336 | width: 5px;
337 | height: 90px;
338 | background-color: white;
339 | position: absolute;
340 | left: 28px;
341 | top: 8px;
342 | z-index: 1;
343 | -webkit-transform: rotate(-45deg);
344 | transform: rotate(-45deg); }
345 | .sweet-alert .sa-icon.sa-success .sa-line {
346 | height: 5px;
347 | background-color: #A5DC86;
348 | display: block;
349 | border-radius: 2px;
350 | position: absolute;
351 | z-index: 2; }
352 | .sweet-alert .sa-icon.sa-success .sa-line.sa-tip {
353 | width: 25px;
354 | left: 14px;
355 | top: 46px;
356 | -webkit-transform: rotate(45deg);
357 | transform: rotate(45deg); }
358 | .sweet-alert .sa-icon.sa-success .sa-line.sa-long {
359 | width: 47px;
360 | right: 8px;
361 | top: 38px;
362 | -webkit-transform: rotate(-45deg);
363 | transform: rotate(-45deg); }
364 | .sweet-alert .sa-icon.sa-custom {
365 | background-size: contain;
366 | border-radius: 0;
367 | border: none;
368 | background-position: center center;
369 | background-repeat: no-repeat; }
370 |
371 | /*
372 | * Animations
373 | */
374 | @-webkit-keyframes showSweetAlert {
375 | 0% {
376 | transform: scale(0.7);
377 | -webkit-transform: scale(0.7); }
378 | 45% {
379 | transform: scale(1.05);
380 | -webkit-transform: scale(1.05); }
381 | 80% {
382 | transform: scale(0.95);
383 | -webkit-transform: scale(0.95); }
384 | 100% {
385 | transform: scale(1);
386 | -webkit-transform: scale(1); } }
387 |
388 | @keyframes showSweetAlert {
389 | 0% {
390 | transform: scale(0.7);
391 | -webkit-transform: scale(0.7); }
392 | 45% {
393 | transform: scale(1.05);
394 | -webkit-transform: scale(1.05); }
395 | 80% {
396 | transform: scale(0.95);
397 | -webkit-transform: scale(0.95); }
398 | 100% {
399 | transform: scale(1);
400 | -webkit-transform: scale(1); } }
401 |
402 | @-webkit-keyframes hideSweetAlert {
403 | 0% {
404 | transform: scale(1);
405 | -webkit-transform: scale(1); }
406 | 100% {
407 | transform: scale(0.5);
408 | -webkit-transform: scale(0.5); } }
409 |
410 | @keyframes hideSweetAlert {
411 | 0% {
412 | transform: scale(1);
413 | -webkit-transform: scale(1); }
414 | 100% {
415 | transform: scale(0.5);
416 | -webkit-transform: scale(0.5); } }
417 |
418 | @-webkit-keyframes slideFromTop {
419 | 0% {
420 | top: 0%; }
421 | 100% {
422 | top: 50%; } }
423 |
424 | @keyframes slideFromTop {
425 | 0% {
426 | top: 0%; }
427 | 100% {
428 | top: 50%; } }
429 |
430 | @-webkit-keyframes slideToTop {
431 | 0% {
432 | top: 50%; }
433 | 100% {
434 | top: 0%; } }
435 |
436 | @keyframes slideToTop {
437 | 0% {
438 | top: 50%; }
439 | 100% {
440 | top: 0%; } }
441 |
442 | @-webkit-keyframes slideFromBottom {
443 | 0% {
444 | top: 70%; }
445 | 100% {
446 | top: 50%; } }
447 |
448 | @keyframes slideFromBottom {
449 | 0% {
450 | top: 70%; }
451 | 100% {
452 | top: 50%; } }
453 |
454 | @-webkit-keyframes slideToBottom {
455 | 0% {
456 | top: 50%; }
457 | 100% {
458 | top: 70%; } }
459 |
460 | @keyframes slideToBottom {
461 | 0% {
462 | top: 50%; }
463 | 100% {
464 | top: 70%; } }
465 |
466 | .showSweetAlert[data-animation=pop] {
467 | -webkit-animation: showSweetAlert 0.3s;
468 | animation: showSweetAlert 0.3s; }
469 |
470 | .showSweetAlert[data-animation=none] {
471 | -webkit-animation: none;
472 | animation: none; }
473 |
474 | .showSweetAlert[data-animation=slide-from-top] {
475 | -webkit-animation: slideFromTop 0.3s;
476 | animation: slideFromTop 0.3s; }
477 |
478 | .showSweetAlert[data-animation=slide-from-bottom] {
479 | -webkit-animation: slideFromBottom 0.3s;
480 | animation: slideFromBottom 0.3s; }
481 |
482 | .hideSweetAlert[data-animation=pop] {
483 | -webkit-animation: hideSweetAlert 0.2s;
484 | animation: hideSweetAlert 0.2s; }
485 |
486 | .hideSweetAlert[data-animation=none] {
487 | -webkit-animation: none;
488 | animation: none; }
489 |
490 | .hideSweetAlert[data-animation=slide-from-top] {
491 | -webkit-animation: slideToTop 0.4s;
492 | animation: slideToTop 0.4s; }
493 |
494 | .hideSweetAlert[data-animation=slide-from-bottom] {
495 | -webkit-animation: slideToBottom 0.3s;
496 | animation: slideToBottom 0.3s; }
497 |
498 | @-webkit-keyframes animateSuccessTip {
499 | 0% {
500 | width: 0;
501 | left: 1px;
502 | top: 19px; }
503 | 54% {
504 | width: 0;
505 | left: 1px;
506 | top: 19px; }
507 | 70% {
508 | width: 50px;
509 | left: -8px;
510 | top: 37px; }
511 | 84% {
512 | width: 17px;
513 | left: 21px;
514 | top: 48px; }
515 | 100% {
516 | width: 25px;
517 | left: 14px;
518 | top: 45px; } }
519 |
520 | @keyframes animateSuccessTip {
521 | 0% {
522 | width: 0;
523 | left: 1px;
524 | top: 19px; }
525 | 54% {
526 | width: 0;
527 | left: 1px;
528 | top: 19px; }
529 | 70% {
530 | width: 50px;
531 | left: -8px;
532 | top: 37px; }
533 | 84% {
534 | width: 17px;
535 | left: 21px;
536 | top: 48px; }
537 | 100% {
538 | width: 25px;
539 | left: 14px;
540 | top: 45px; } }
541 |
542 | @-webkit-keyframes animateSuccessLong {
543 | 0% {
544 | width: 0;
545 | right: 46px;
546 | top: 54px; }
547 | 65% {
548 | width: 0;
549 | right: 46px;
550 | top: 54px; }
551 | 84% {
552 | width: 55px;
553 | right: 0px;
554 | top: 35px; }
555 | 100% {
556 | width: 47px;
557 | right: 8px;
558 | top: 38px; } }
559 |
560 | @keyframes animateSuccessLong {
561 | 0% {
562 | width: 0;
563 | right: 46px;
564 | top: 54px; }
565 | 65% {
566 | width: 0;
567 | right: 46px;
568 | top: 54px; }
569 | 84% {
570 | width: 55px;
571 | right: 0px;
572 | top: 35px; }
573 | 100% {
574 | width: 47px;
575 | right: 8px;
576 | top: 38px; } }
577 |
578 | @-webkit-keyframes rotatePlaceholder {
579 | 0% {
580 | transform: rotate(-45deg);
581 | -webkit-transform: rotate(-45deg); }
582 | 5% {
583 | transform: rotate(-45deg);
584 | -webkit-transform: rotate(-45deg); }
585 | 12% {
586 | transform: rotate(-405deg);
587 | -webkit-transform: rotate(-405deg); }
588 | 100% {
589 | transform: rotate(-405deg);
590 | -webkit-transform: rotate(-405deg); } }
591 |
592 | @keyframes rotatePlaceholder {
593 | 0% {
594 | transform: rotate(-45deg);
595 | -webkit-transform: rotate(-45deg); }
596 | 5% {
597 | transform: rotate(-45deg);
598 | -webkit-transform: rotate(-45deg); }
599 | 12% {
600 | transform: rotate(-405deg);
601 | -webkit-transform: rotate(-405deg); }
602 | 100% {
603 | transform: rotate(-405deg);
604 | -webkit-transform: rotate(-405deg); } }
605 |
606 | .animateSuccessTip {
607 | -webkit-animation: animateSuccessTip 0.75s;
608 | animation: animateSuccessTip 0.75s; }
609 |
610 | .animateSuccessLong {
611 | -webkit-animation: animateSuccessLong 0.75s;
612 | animation: animateSuccessLong 0.75s; }
613 |
614 | .sa-icon.sa-success.animate::after {
615 | -webkit-animation: rotatePlaceholder 4.25s ease-in;
616 | animation: rotatePlaceholder 4.25s ease-in; }
617 |
618 | @-webkit-keyframes animateErrorIcon {
619 | 0% {
620 | transform: rotateX(100deg);
621 | -webkit-transform: rotateX(100deg);
622 | opacity: 0; }
623 | 100% {
624 | transform: rotateX(0deg);
625 | -webkit-transform: rotateX(0deg);
626 | opacity: 1; } }
627 |
628 | @keyframes animateErrorIcon {
629 | 0% {
630 | transform: rotateX(100deg);
631 | -webkit-transform: rotateX(100deg);
632 | opacity: 0; }
633 | 100% {
634 | transform: rotateX(0deg);
635 | -webkit-transform: rotateX(0deg);
636 | opacity: 1; } }
637 |
638 | .animateErrorIcon {
639 | -webkit-animation: animateErrorIcon 0.5s;
640 | animation: animateErrorIcon 0.5s; }
641 |
642 | @-webkit-keyframes animateXMark {
643 | 0% {
644 | transform: scale(0.4);
645 | -webkit-transform: scale(0.4);
646 | margin-top: 26px;
647 | opacity: 0; }
648 | 50% {
649 | transform: scale(0.4);
650 | -webkit-transform: scale(0.4);
651 | margin-top: 26px;
652 | opacity: 0; }
653 | 80% {
654 | transform: scale(1.15);
655 | -webkit-transform: scale(1.15);
656 | margin-top: -6px; }
657 | 100% {
658 | transform: scale(1);
659 | -webkit-transform: scale(1);
660 | margin-top: 0;
661 | opacity: 1; } }
662 |
663 | @keyframes animateXMark {
664 | 0% {
665 | transform: scale(0.4);
666 | -webkit-transform: scale(0.4);
667 | margin-top: 26px;
668 | opacity: 0; }
669 | 50% {
670 | transform: scale(0.4);
671 | -webkit-transform: scale(0.4);
672 | margin-top: 26px;
673 | opacity: 0; }
674 | 80% {
675 | transform: scale(1.15);
676 | -webkit-transform: scale(1.15);
677 | margin-top: -6px; }
678 | 100% {
679 | transform: scale(1);
680 | -webkit-transform: scale(1);
681 | margin-top: 0;
682 | opacity: 1; } }
683 |
684 | .animateXMark {
685 | -webkit-animation: animateXMark 0.5s;
686 | animation: animateXMark 0.5s; }
687 |
688 | @-webkit-keyframes pulseWarning {
689 | 0% {
690 | border-color: #F8D486; }
691 | 100% {
692 | border-color: #F8BB86; } }
693 |
694 | @keyframes pulseWarning {
695 | 0% {
696 | border-color: #F8D486; }
697 | 100% {
698 | border-color: #F8BB86; } }
699 |
700 | .pulseWarning {
701 | -webkit-animation: pulseWarning 0.75s infinite alternate;
702 | animation: pulseWarning 0.75s infinite alternate; }
703 |
704 | @-webkit-keyframes pulseWarningIns {
705 | 0% {
706 | background-color: #F8D486; }
707 | 100% {
708 | background-color: #F8BB86; } }
709 |
710 | @keyframes pulseWarningIns {
711 | 0% {
712 | background-color: #F8D486; }
713 | 100% {
714 | background-color: #F8BB86; } }
715 |
716 | .pulseWarningIns {
717 | -webkit-animation: pulseWarningIns 0.75s infinite alternate;
718 | animation: pulseWarningIns 0.75s infinite alternate; }
719 |
720 | @-webkit-keyframes rotate-loading {
721 | 0% {
722 | transform: rotate(0deg); }
723 | 100% {
724 | transform: rotate(360deg); } }
725 |
726 | @keyframes rotate-loading {
727 | 0% {
728 | transform: rotate(0deg); }
729 | 100% {
730 | transform: rotate(360deg); } }
731 |
732 | /* Internet Explorer 9 has some special quirks that are fixed here */
733 | /* The icons are not animated. */
734 | /* This file is automatically merged into sweet-alert.min.js through Gulp */
735 | /* Error icon */
736 | .sweet-alert .sa-icon.sa-error .sa-line.sa-left {
737 | -ms-transform: rotate(45deg) \9; }
738 |
739 | .sweet-alert .sa-icon.sa-error .sa-line.sa-right {
740 | -ms-transform: rotate(-45deg) \9; }
741 |
742 | /* Success icon */
743 | .sweet-alert .sa-icon.sa-success {
744 | border-color: transparent\9; }
745 |
746 | .sweet-alert .sa-icon.sa-success .sa-line.sa-tip {
747 | -ms-transform: rotate(45deg) \9; }
748 |
749 | .sweet-alert .sa-icon.sa-success .sa-line.sa-long {
750 | -ms-transform: rotate(-45deg) \9; }
751 |
752 | /*!
753 | * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)
754 | * Copyright 2015 Daniel Cardoso <@DanielCardoso>
755 | * Licensed under MIT
756 | */
757 | .la-ball-fall,
758 | .la-ball-fall > div {
759 | position: relative;
760 | -webkit-box-sizing: border-box;
761 | -moz-box-sizing: border-box;
762 | box-sizing: border-box; }
763 |
764 | .la-ball-fall {
765 | display: block;
766 | font-size: 0;
767 | color: #fff; }
768 |
769 | .la-ball-fall.la-dark {
770 | color: #333; }
771 |
772 | .la-ball-fall > div {
773 | display: inline-block;
774 | float: none;
775 | background-color: currentColor;
776 | border: 0 solid currentColor; }
777 |
778 | .la-ball-fall {
779 | width: 54px;
780 | height: 18px; }
781 |
782 | .la-ball-fall > div {
783 | width: 10px;
784 | height: 10px;
785 | margin: 4px;
786 | border-radius: 100%;
787 | opacity: 0;
788 | -webkit-animation: ball-fall 1s ease-in-out infinite;
789 | -moz-animation: ball-fall 1s ease-in-out infinite;
790 | -o-animation: ball-fall 1s ease-in-out infinite;
791 | animation: ball-fall 1s ease-in-out infinite; }
792 |
793 | .la-ball-fall > div:nth-child(1) {
794 | -webkit-animation-delay: -200ms;
795 | -moz-animation-delay: -200ms;
796 | -o-animation-delay: -200ms;
797 | animation-delay: -200ms; }
798 |
799 | .la-ball-fall > div:nth-child(2) {
800 | -webkit-animation-delay: -100ms;
801 | -moz-animation-delay: -100ms;
802 | -o-animation-delay: -100ms;
803 | animation-delay: -100ms; }
804 |
805 | .la-ball-fall > div:nth-child(3) {
806 | -webkit-animation-delay: 0ms;
807 | -moz-animation-delay: 0ms;
808 | -o-animation-delay: 0ms;
809 | animation-delay: 0ms; }
810 |
811 | .la-ball-fall.la-sm {
812 | width: 26px;
813 | height: 8px; }
814 |
815 | .la-ball-fall.la-sm > div {
816 | width: 4px;
817 | height: 4px;
818 | margin: 2px; }
819 |
820 | .la-ball-fall.la-2x {
821 | width: 108px;
822 | height: 36px; }
823 |
824 | .la-ball-fall.la-2x > div {
825 | width: 20px;
826 | height: 20px;
827 | margin: 8px; }
828 |
829 | .la-ball-fall.la-3x {
830 | width: 162px;
831 | height: 54px; }
832 |
833 | .la-ball-fall.la-3x > div {
834 | width: 30px;
835 | height: 30px;
836 | margin: 12px; }
837 |
838 | /*
839 | * Animation
840 | */
841 | @-webkit-keyframes ball-fall {
842 | 0% {
843 | opacity: 0;
844 | -webkit-transform: translateY(-145%);
845 | transform: translateY(-145%); }
846 | 10% {
847 | opacity: .5; }
848 | 20% {
849 | opacity: 1;
850 | -webkit-transform: translateY(0);
851 | transform: translateY(0); }
852 | 80% {
853 | opacity: 1;
854 | -webkit-transform: translateY(0);
855 | transform: translateY(0); }
856 | 90% {
857 | opacity: .5; }
858 | 100% {
859 | opacity: 0;
860 | -webkit-transform: translateY(145%);
861 | transform: translateY(145%); } }
862 |
863 | @-moz-keyframes ball-fall {
864 | 0% {
865 | opacity: 0;
866 | -moz-transform: translateY(-145%);
867 | transform: translateY(-145%); }
868 | 10% {
869 | opacity: .5; }
870 | 20% {
871 | opacity: 1;
872 | -moz-transform: translateY(0);
873 | transform: translateY(0); }
874 | 80% {
875 | opacity: 1;
876 | -moz-transform: translateY(0);
877 | transform: translateY(0); }
878 | 90% {
879 | opacity: .5; }
880 | 100% {
881 | opacity: 0;
882 | -moz-transform: translateY(145%);
883 | transform: translateY(145%); } }
884 |
885 | @-o-keyframes ball-fall {
886 | 0% {
887 | opacity: 0;
888 | -o-transform: translateY(-145%);
889 | transform: translateY(-145%); }
890 | 10% {
891 | opacity: .5; }
892 | 20% {
893 | opacity: 1;
894 | -o-transform: translateY(0);
895 | transform: translateY(0); }
896 | 80% {
897 | opacity: 1;
898 | -o-transform: translateY(0);
899 | transform: translateY(0); }
900 | 90% {
901 | opacity: .5; }
902 | 100% {
903 | opacity: 0;
904 | -o-transform: translateY(145%);
905 | transform: translateY(145%); } }
906 |
907 | @keyframes ball-fall {
908 | 0% {
909 | opacity: 0;
910 | -webkit-transform: translateY(-145%);
911 | -moz-transform: translateY(-145%);
912 | -o-transform: translateY(-145%);
913 | transform: translateY(-145%); }
914 | 10% {
915 | opacity: .5; }
916 | 20% {
917 | opacity: 1;
918 | -webkit-transform: translateY(0);
919 | -moz-transform: translateY(0);
920 | -o-transform: translateY(0);
921 | transform: translateY(0); }
922 | 80% {
923 | opacity: 1;
924 | -webkit-transform: translateY(0);
925 | -moz-transform: translateY(0);
926 | -o-transform: translateY(0);
927 | transform: translateY(0); }
928 | 90% {
929 | opacity: .5; }
930 | 100% {
931 | opacity: 0;
932 | -webkit-transform: translateY(145%);
933 | -moz-transform: translateY(145%);
934 | -o-transform: translateY(145%);
935 | transform: translateY(145%); } }
--------------------------------------------------------------------------------
/dist/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireswork/CNode-By-React/9852162eb06dc16c4293291987b46ab538b22899/dist/.DS_Store
--------------------------------------------------------------------------------
/dist/package.css:
--------------------------------------------------------------------------------
1 | html{box-sizing:border-box;-webkit-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}:after,:before{text-decoration:inherit;vertical-align:inherit}*{background-repeat:no-repeat;padding:0;margin:0}audio:not([controls]){display:none;height:0}hr{overflow:visible}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}summary{display:list-item}small{font-size:80%}[hidden],template{display:none}abbr[title]{border-bottom:1px dotted;text-decoration:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}code,kbd,pre,samp{font-family:monospace,monospace}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}input{border-radius:0}[type=button],[type=reset],[type=submit] [role=button],button{cursor:pointer}[disabled]{cursor:default}[type=number]{width:auto}[type=search]{-webkit-appearance:textfield}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;resize:vertical}button,input,optgroup,select,textarea{font:inherit}optgroup{font-weight:700}button{overflow:visible}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:0;padding:0}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button:-moz-focusring{outline:1px dotted ButtonText}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}button,select{text-transform:none}button,input,select,textarea{background-color:transparent;border-style:none;color:inherit}select::-ms-expand{display:none}select::-ms-value{color:currentColor}legend{border:0;color:inherit;display:table;max-width:100%;white-space:normal}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}img{border-style:none}progress{vertical-align:baseline}svg:not(:root){overflow:hidden}audio,canvas,progress,video{display:inline-block}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){position:absolute!important;clip:rect(0 0 0 0)!important}}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled]{cursor:default}::-moz-selection{background-color:#b3d4fc;color:#000;text-shadow:none}::selection{background-color:#b3d4fc;color:#000;text-shadow:none}ul li{list-style:none!important}html{overflow-x:hidden}body,html{height:100%}body{background-color:#e1e1e1}a{cursor:pointer}.display-none{display:none}.more{text-align:center}.more a{color:#08c!important;display:block}.more a:hover{color:#444!important}header{padding:10px;width:100%;background:#444}header .header_wrap{text-align:left;max-width:90%;margin:auto}header .header_wrap .logo{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IuWbvuWxgl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQyNy4zIDEwMC40IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA0MjcuMyAxMDAuNCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjZmZmIiBkPSJNMTI3Ljk4Nyw1Mi45OTRjMC0xLjA4NC0wLjU3LTIuMDgtMS41MDYtMi42MTdsLTI0LjkzNy0xNC4zNTIKICBjLTAuNDIyLTAuMjQ4LTAuODk1LTAuMzc3LTEuMzczLTAuMzk2aC0wLjI1OGMtMC40NzcsMC4wMTktMC45NDksMC4xNDgtMS4zNzcsMC4zOTZMNzMuNTk4LDUwLjM3NwogIGMtMC45MjksMC41MzctMS41MDgsMS41MzMtMS41MDgsMi42MTdsMC4wNTUsMzguNjQ0YzAsMC41MzgsMC4yNzksMS4wMzgsMC43NTIsMS4zMDFjMC40NjMsMC4yNzgsMS4wMzUsMC4yNzgsMS40OTYsMGwxNC44MjEtOC40ODUKICBjMC45MzctMC41NTgsMS41MDctMS41MzksMS41MDctMi42MTNWNjMuNzg0YzAtMS4wNzYsMC41NzEtMi4wNzEsMS41MDQtMi42MDZsNi4zMTEtMy42MzZjMC40Ny0wLjI3MSwwLjk4NC0wLjQwNCwxLjUxLTAuNDA0CiAgYzAuNTEzLDAsMS4wNDEsMC4xMzMsMS40OTgsMC40MDRsNi4zMDgsMy42MzZjMC45MzQsMC41MzUsMS41MDYsMS41MywxLjUwNiwyLjYwNlY4MS44NGMwLDEuMDc0LDAuNTc4LDIuMDYyLDEuNTEsMi42MTMKICBsMTQuODE2LDguNDg1YzAuNDY1LDAuMjc4LDEuMDQ1LDAuMjc4LDEuNTA2LDBjMC40NTktMC4yNjMsMC43NDgtMC43NjMsMC43NDgtMS4zMDFMMTI3Ljk4Nyw1Mi45OTR6Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjZmZmIiBkPSJNMjYxLjE0Ny0wLjEyOWMtMC40NjctMC4yNi0xLjAzNy0wLjI1NC0xLjQ5OCwwLjAxNgogIGMtMC40NiwwLjI3MS0wLjc0MywwLjc2NS0wLjc0MywxLjI5OXYzOC4yNzFjMCwwLjM3Ni0wLjIwMSwwLjcyNC0wLjUyNSwwLjkxM2MtMC4zMjYsMC4xODgtMC43MjksMC4xODgtMS4wNTYsMGwtNi4yNDYtMy41OTkKICBjLTAuOTMyLTAuNTM3LTIuMDc3LTAuNTM2LTMuMDEsMC4wMDFMMjIzLjEyMiw1MS4xN2MtMC45MzMsMC41MzctMS41MDYsMS41MzItMS41MDYsMi42MDd2MjguODAxYzAsMS4wNzYsMC41NzMsMi4wNywxLjUwNSwyLjYwOQogIGwyNC45NDYsMTQuNDA4YzAuOTM0LDAuNTM5LDIuMDgxLDAuNTM5LDMuMDE0LDBsMjQuOTUtMTQuNDA4YzAuOTMzLTAuNTM5LDEuNTA2LTEuNTMzLDEuNTA2LTIuNjA5VjEwLjc4NgogIGMwLTEuMDkyLTAuNTkxLTIuMDk5LTEuNTQ1LTIuNjMxTDI2MS4xNDctMC4xMjl6IE0yNTguODMzLDczLjExNWMwLDAuMjctMC4xNDUsMC41MTktMC4zNzgsMC42NTFsLTguNTY0LDQuOTM4CiAgYy0wLjIzMywwLjEzNS0wLjUyMSwwLjEzNS0wLjc1MiwwbC04LjU2Ni00LjkzOGMtMC4yMzItMC4xMzMtMC4zNzctMC4zODItMC4zNzctMC42NTF2LTkuODkxYzAtMC4yNjksMC4xNDUtMC41MTcsMC4zNzYtMC42NTEKICBsOC41NjYtNC45NDdjMC4yMzItMC4xMzUsMC41Mi0wLjEzNSwwLjc1NCwwbDguNTY0LDQuOTQ3YzAuMjMyLDAuMTM1LDAuMzc3LDAuMzgzLDAuMzc3LDAuNjUxVjczLjExNXoiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiNmZmYiIGQ9Ik0zNTAuNCw2Mi45NjZjMC45MjgtMC41MzksMS40OTktMS41MzEsMS40OTktMi42MDR2LTYuOTc5CiAgYzAtMS4wNzMtMC41NzEtMi4wNjYtMS41LTIuNjA1bC0yNC43ODctMTQuMzkyYy0wLjkzNC0wLjU0Mi0yLjA4NC0wLjU0My0zLjAyLTAuMDA0bC0yNC45MzgsMTQuMzk3CiAgYy0wLjkzMywwLjUzOS0xLjUwNiwxLjUzMy0xLjUwNiwyLjYwOXYyOC43OTNjMCwxLjA4MywwLjU4LDIuMDgxLDEuNTIxLDIuNjE2bDI0Ljc4MywxNC4xMjJjMC45MTQsMC41MjIsMi4wMzQsMC41MjcsMi45NTQsMC4wMTgKICBsMTQuOTg5LTguMzMyYzAuNDc3LTAuMjY2LDAuNzcyLTAuNzY1LDAuNzc0LTEuMzA4YzAuMDA0LTAuNTQzLTAuMjg1LTEuMDQ2LTAuNzU1LTEuMzE1TDMxNS4zMiw3My41NzYKICBjLTAuNDctMC4yNjgtMC43NTgtMC43NjctMC43NTgtMS4zMDZ2LTkuMDI0YzAtMC41MzgsMC4yODctMS4wMzYsMC43NTUtMS4zMDRsNy44MTEtNC41MDRjMC40NjQtMC4yNjgsMS4wMzktMC4yNjgsMS41MDMsMAogIGw3LjgxNSw0LjUwNGMwLjQ2NywwLjI2OCwwLjc1NCwwLjc2NiwwLjc1NCwxLjMwNHY3LjEwMWMwLDAuNTM4LDAuMjg4LDEuMDM2LDAuNzU1LDEuMzA2YzAuNDY3LDAuMjY5LDEuMDQyLDAuMjY3LDEuNTA4LTAuMDAzCiAgTDM1MC40LDYyLjk2NnoiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiM4MGJkMDEiIGQ9Ik0xNzMuMzUsMzYuMjNjMC45MzItMC41MzgsMi4wOC0wLjUzOCwzLjAxMiwwbDI0Ljk0MywxNC4zOTUKICBjMC45MzQsMC41MzcsMS41MDgsMS41MzIsMS41MDgsMi42MDl2MjguODExYzAsMS4wNzctMC41NzQsMi4wNzEtMS41MDYsMi42MWwtMjQuOTQ0LDE0LjQwNWMtMC45MzMsMC41MzgtMi4wODEsMC41MzgtMy4wMTQsMAogIGwtMjQuOTM4LTE0LjQwNWMtMC45MzItMC41MzktMS41MDYtMS41MzMtMS41MDYtMi42MVY1My4yMzNjMC0xLjA3NiwwLjU3NC0yLjA3MSwxLjUwNy0yLjYwOEwxNzMuMzUsMzYuMjN6Ii8+CjxwYXRoIGZpbGw9IiM4MGJkMDEiIGQ9Ik0zOTguODMzLDk5LjQ3MmMtMC44NTksMC0xLjcxNi0wLjIyNS0yLjQ2OC0wLjY2bC03Ljg1My00LjY0NmMtMS4xNzItMC42NTYtMC42MDEtMC44ODgtMC4yMTMtMS4wMjMKICBjMS41NjMtMC41NDMsMS44ODEtMC42NjgsMy41NTEtMS42MTRjMC4xNzMtMC4wOTksMC40MDQtMC4wNjIsMC41ODQsMC4wNDVsNi4wMzMsMy41ODJjMC4yMTksMC4xMjEsMC41MjYsMC4xMjEsMC43MjgsMAogIGwyMy41MjItMTMuNTc3YzAuMjE5LTAuMTI1LDAuMzU4LTAuMzc2LDAuMzU4LTAuNjM2VjUzLjc5NmMwLTAuMjY1LTAuMTQtMC41MTMtMC4zNjQtMC42NDdsLTIzLjUxMy0xMy41NjUKICBjLTAuMjE3LTAuMTI3LTAuNTA2LTAuMTI3LTAuNzI0LDBMMzc0Ljk3LDUzLjE1MmMtMC4yMjksMC4xMzEtMC4zNzMsMC4zODYtMC4zNzMsMC42NDR2MjcuMTQ2YzAsMC4yNiwwLjE0NCwwLjUwNiwwLjM3MSwwLjYyOQogIGw2LjQ0MiwzLjcyMmMzLjQ5NiwxLjc0OCw1LjYzOC0wLjMxLDUuNjM4LTIuMzc5di0yNi44YzAtMC4zNzksMC4zMDUtMC42NzgsMC42ODMtMC42NzhoMi45ODNjMC4zNzMsMCwwLjY4MiwwLjI5OSwwLjY4MiwwLjY3OAogIHYyNi44YzAsNC42NjYtMi41NDEsNy4zNDItNi45NjUsNy4zNDJjLTEuMzYsMC0yLjQzLDAtNS40MTgtMS40NzJsLTYuMTY4LTMuNTUxYy0xLjUyNC0wLjg4Mi0yLjQ2Ny0yLjUyOC0yLjQ2Ny00LjI5MVY1My43OTYKICBjMC0xLjc2MywwLjk0Mi0zLjQxLDIuNDY3LTQuMjg3bDIzLjUyMS0xMy41OTJjMS40ODktMC44NDEsMy40NjgtMC44NDEsNC45NDQsMGwyMy41MTksMTMuNTkyYzEuNTI0LDAuODgyLDIuNDcyLDIuNTI0LDIuNDcyLDQuMjg3CiAgdjI3LjE0NmMwLDEuNzYzLTAuOTQ3LDMuNDAzLTIuNDcyLDQuMjkxTDQwMS4zMSw5OC44MTJDNDAwLjU1OCw5OS4yNDcsMzk5LjcwMyw5OS40NzIsMzk4LjgzMyw5OS40NzIiLz4KPHBhdGggZmlsbD0iIzgwYmQwMSIgZD0iTTQwNi4wOTksODAuNzcxYy0xMC4yOTQsMC0xMi40NDktNC43MjUtMTIuNDQ5LTguNjg3YzAtMC4zNzcsMC4zMDMtMC42NzgsMC42OC0wLjY3OGgzLjA0MQogIGMwLjMzOSwwLDAuNjIzLDAuMjQzLDAuNjc1LDAuNTc1YzAuNDU5LDMuMDk3LDEuODI4LDQuNjU4LDguMDU0LDQuNjU4YzQuOTU0LDAsNy4wNjQtMS4xMjEsNy4wNjQtMy43NQogIGMwLTEuNTE1LTAuNTk4LTIuNjQtOC4yOTktMy4zOTRjLTYuNDM3LTAuNjM4LTEwLjQxNi0yLjA2LTEwLjQxNi03LjIwOGMwLTQuNzQ1LDQtNy41NzYsMTAuNzA3LTcuNTc2CiAgYzcuNTM1LDAsMTEuMjYzLDIuNjE1LDExLjczNiw4LjIyN2MwLjAxOCwwLjE5My0wLjA1MiwwLjM3OS0wLjE4MSwwLjUyM2MtMC4xMjksMC4xMzUtMC4zMDgsMC4yMTctMC40OTgsMC4yMTdoLTMuMDUyCiAgYy0wLjMxNywwLTAuNTk2LTAuMjI1LTAuNjYxLTAuNTMxYy0wLjczMS0zLjI1OC0yLjUxMy00LjI5OS03LjM0NS00LjI5OWMtNS40MSwwLTYuMDM5LDEuODg1LTYuMDM5LDMuMjk3CiAgYzAsMS43MTEsMC43NDIsMi4yMDksOC4wNDcsMy4xNzZjNy4yMjksMC45NTUsMTAuNjYyLDIuMzA5LDEwLjY2Miw3LjM5QzQxNy44MjUsNzcuODM2LDQxMy41NTEsODAuNzcxLDQwNi4wOTksODAuNzcxIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjODBiZDAxIiBkPSJNMzIzLjczNSw2MS42MThjMC4xNzktMC4xMDQsMC4zOTgtMC4xMDQsMC41NzcsMGw0Ljc4NywyLjc2MgogIGMwLjE4LDAuMTAzLDAuMjg5LDAuMjk0LDAuMjg5LDAuNXY1LjUyN2MwLDAuMjA3LTAuMTA5LDAuMzk3LTAuMjg5LDAuNTAxbC00Ljc4NywyLjc2M2MtMC4xNzksMC4xMDMtMC4zOTgsMC4xMDMtMC41NzcsMAogIGwtNC43ODMtMi43NjNjLTAuMTgtMC4xMDQtMC4yODktMC4yOTQtMC4yODktMC41MDFWNjQuODhjMC0wLjIwNiwwLjEwOS0wLjM5NywwLjI4OS0wLjVMMzIzLjczNSw2MS42MTh6Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjZmZmIiBkPSJNMzYuMjgsNjEuODdjMS4wOTgsMC42NSwxLjM1OCwwLjI1NSwxLjc0MiwwLjAzNQogIGMwLjM4NS0wLjIyMSwxNC42OTUtOC40MTEsMTUuNjA2LTguODU3YzAuOTEyLTAuNDQ2LDEuMzE1LTEuOTE1LDAuMTE0LTIuNjFjLTEuMjAxLTAuNjk3LTI1LjQxLTE0LjcyMS0yNC4yNDEtMTQuMTIKICBjMS4yNTksMC42NDYtMS4yMDItMC44MjktMi42MjYtMC4xNzVDMjUuNDUsMzYuNzk3LDMuNjQ0LDQ5LjMzNSwyLjA5OCw1MC4yMThjLTEuNTQ1LDAuODgzLTIuMDMyLDEuNzMxLTIuMDI3LDIuOTA3CiAgYzAuMDA0LDEuMTc2LTAuMDc4LDI3LjI1MywwLDI4LjgwMWMwLjA3OCwxLjU0OCwwLjY5LDIuMDUyLDEuNTA2LDIuNjA5YzAuODE2LDAuNTU4LDIyLjkwMSwxMy41MDUsMjQuNTcyLDE0LjQxCiAgYzEuNjcxLDAuOTA3LDIuNzY4LDAuNTk3LDMuODUzLTAuMDRjMS4wODUtMC42MzksMjIuNzI3LTEzLjAwMywyMy41OTMtMTMuNTU0YzAuODY2LTAuNTUxLDEuNjUzLTEuOTY5LTAuMTU3LTIuOTkyCiAgYy0xLjgxMS0xLjAyMi0xNC43NzktOC42OTMtMTUuMjc5LTguOTQzcy0wLjc5Ni0wLjI1NS0xLjUyLDAuMTUxYy0wLjcyNCwwLjQwOC03LjIyMiw0LjA2Mi04LjAxMyw0LjUyNHMtMC45MDQsMC4yNTQtMS4yODMsMC4wMzMKICBjLTAuMzc4LTAuMjIyLTcuMDg1LTQuMTM1LTcuODU5LTQuNTcxcy0wLjg2Ni0wLjY1Ni0wLjg2OC0xLjI1Yy0wLjAwMS0wLjU5My0wLjAxOC04LjEyMSwwLjAyMy04Ljk5OAogIGMwLjA0LTAuODc3LDAuMTY1LTEuMDc0LDAuOTYyLTEuNTQ4YzAuNzk3LTAuNDc0LDYuNjk1LTMuOTc4LDcuMTY2LTQuMjkzYzAuNDctMC4zMTUsMS40NTktMC4zNDUsMi4yMzEsMC4xMDgKICBDMjkuNzcsNTguMDI0LDM1LjE4Miw2MS4yMTksMzYuMjgsNjEuODciLz4KPC9zdmc+Cg==);background-repeat:no-repeat;display:inline-block;width:120px;height:30px;margin:auto}header .header_wrap .logo a{display:block;height:100%}header .header_wrap .navbar{float:right}header .header_wrap .navbar ul{display:block}header .header_wrap .navbar ul li{float:left;line-height:36px}header .header_wrap .navbar ul li a{color:#ccc;font-size:12px;text-decoration:none;display:block;padding:0 20px}header .header_wrap .navbar ul li a:hover{color:#fff}header .header_wrap .navbar ul li a .messages_count{border-radius:20px;background-color:#80bd01;color:#fff;margin-right:.5em;font-size:13px;font-family:Microsoft Yahei;width:20px;height:20px;display:inline-block;text-align:center;line-height:20px}#content .panel-header{padding:10px;background-color:#f6f6f6;border-radius:3px 3px 0 0}#content .panel-header a{color:#80bd01;text-decoration:none;margin-right:20px;display:inline-block;font-size:14px}#content .panel-header a:hover{color:#005580}#content .panel-header .active{background-color:#80bd01;color:#fff;padding:4px;border-radius:5px}#content .panel-header .active:hover{color:#fff}#content #cell_list{height:auto}#content #cell_list .cell{padding:10px;background:#fff;overflow:hidden;font-size:14px;border-top:1px solid #f0f0f0}#content #cell_list .cell:hover{background:#f6f6f6}#content #cell_list .cell:first-child{border-top:none}#content #cell_list .cell .user-img{width:30px;height:30px;float:left}#content #cell_list .cell .count-reply-visit{float:left;font-size:12px;margin:6px;width:60px}#content #cell_list .cell .count-reply-visit .count-of-reply{color:#9e78c0}#content #cell_list .cell .count-reply-visit .character{margin:0 1px}#content #cell_list .cell .count-reply-visit .count-of-visit{color:#b4b4b4}#content #cell_list .cell .topic-wrapper{overflow:hidden}#content #cell_list .cell .topic-wrapper .cell-tab{float:left;font-size:12px;margin-top:5px;background-color:#80bd01;color:#fff;padding:2px;border-radius:5px}#content #cell_list .cell .topic-wrapper .cell-topic-title{font-size:16px;margin:4px 10px;letter-spacing:.5px;max-width:70%;white-space:nowrap;display:inline-block;vertical-align:middle;overflow:hidden;text-overflow:ellipsis;color:#444;text-decoration:none}#content #cell_list .cell .topic-wrapper .cell-topic-title:hover{text-decoration:underline}#content #cell_list .cell .pull-right{float:right;font-size:12px}#content #cell_list .cell .pull-right .last-reply-time{color:#778087;margin-top:6px;display:inline-block}.pagination{text-align:left;padding:10px;background:#fff;border-radius:0 0 3px 3px}.pagination ul{box-shadow:none;display:inline-block}.pagination ul li{line-height:2em;display:inline}.pagination ul li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px;border-left-width:1px}.pagination ul li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination ul li a{color:#778087;float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul li a:hover{background-color:#f5f5f5}.pagination ul li .active{color:#80bd01}.pagination ul li .active:hover{color:#778087;cursor:default;background:#fff}.pagination ul li .disabled:hover{color:#999;cursor:default;background-color:transparent}.panel{margin-bottom:13px}.panel .header{padding:10px;background-color:#f6f6f6;border-radius:3px 3px 0 0;font-size:14px}.panel .markdown-text:first-child{margin-top:0}.panel .markdown-text img{max-width:100%}.panel .markdown-text .prettyprint{font-size:14px;border-radius:0;padding:0 15px;border:none;margin:20px 0;border-width:1px 0;background:#f7f7f7}.panel .markdown-text .prettyprint code{color:inherit;font-family:Monaco,Menlo,Consolas,Courier New,monospace;font-size:12px;white-space:pre-wrap;background-color:transparent}.panel .inner,.panel .topic_header{background:#fff}.panel .inner{line-height:2em;border-radius:0 0 3px 3px;padding:10px}.panel .inner .content_area{width:100%;height:190px;resize:none;outline:none}.panel .inner .reply_btn{background-color:#08c}.panel .inner .reply_btn:hover{background:#05c}.panel .inner .user_big_avatar{float:left;margin-right:10px}.panel .inner .user_big_avatar .user_avatar{width:40px;height:40px;display:inline-block}.panel .inner .user_profile{clear:left}.panel .inner .col_fade{color:#ababab;font-size:14px}.panel .message_inner{padding:0}.panel .topic{padding:10px;border-top:1px solid #e5e5e5}.panel .cell{padding-right:10px;background:#fff;border-top:1px solid #f0f0f0;position:relative;padding:10px 0 10px 10px;font-size:14px}.panel .cell .author_content a{float:left}.panel .cell .author_content a img{width:30px;height:30px;border-radius:3px;max-width:100%;vertical-align:middle;border:0}.panel .cell .author_content .user_info{margin-left:10px;display:inline-block;font-size:12px}.panel .cell .author_content .user_info .reply_time{margin-left:5px}.panel .cell .author_content .agree{vertical-align:text-top;display:none;font-size:16px}.panel .cell .author_content .already_agree{color:#000;font-size:16px;display:inline-block!important}.panel .cell .author_content .agree_count{font-size:16px;margin:0 10px 0 5px;vertical-align:text-top}.panel .cell .reply_content{padding-left:50px;color:#333}.panel .cell .reply_content p{font-size:15px;line-height:1.7em;overflow:auto;margin-bottom:1em;white-space:pre-wrap}.panel .reply_item:hover .agree{display:inline-block}.panel a{color:#08c;text-decoration:none;display:inline}.panel .unstyled{margin-left:0}.panel .unstyled li{line-height:2em}.panel .unstyled li a{max-width:270px;font-size:14px;color:#778087;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;display:inline-block}.panel .dark{color:#666}.panel .author_link{display:inline}.panel .floor{font-size:14px}.panel .common-btn{border:none;padding:3px 10px;font-size:14px;transition:all .2s ease-in-out;letter-spacing:2px;box-shadow:none;line-height:2em;color:#fff;border-radius:3px;outline:none}.panel .collect,.panel .report{float:right;margin-top:-25px;background-color:#80bd01;padding:0 7px}.panel .collect:hover,.panel .report:hover{background-color:#6ba44e}.panel .collect a,.panel .report a{color:#fff}.panel .report{float:none}.panel .icons{float:right;margin-right:10px}.panel .breadcrumb{display:block;overflow:hidden}.panel .breadcrumb li{float:left}.panel .breadcrumb li a{color:#80bd01}.panel .breadcrumb li a:hover{color:#08c}.panel .breadcrumb li .divider{padding:0 5px;color:#ccc}.panel .breadcrumb .active{color:#999}#main{width:90%;max-width:1400px;min-width:960px;margin:15px auto;min-height:400px;font-family:Helvetica Neue,Luxi Sans,DejaVu Sans,Tahoma,Hiragino Sans GB,STHeiti,sans-serif!important}#main #sidebar{width:290px;font-size:14px;float:right;margin-bottom:20px}#main #sidebar .panel{margin-bottom:13px;font-size:13px}#main #sidebar .panel .header{color:#51585c;border-radius:3px 3px 0 0;padding:10px;background-color:#f6f6f6}#main #sidebar .panel .header .col_fade{color:#444}#main #sidebar .panel .inner{padding:10px;border-radius:0 0 3px 3px;background-color:#fff;line-height:2em}#main #sidebar .panel .inner .user_card a{color:#778087}#main #sidebar .panel .inner .user_card .user_avatar{vertical-align:middle;margin-right:.5em;display:inline-block}#main #sidebar .panel .inner .user_card .user_avatar img{width:48px;height:48px}#main #sidebar .panel .inner .user_card .user_name{font-size:16px}#main #sidebar .panel .inner .user_card .user_name a{color:#778087}#main #sidebar .panel .inner .login_button{display:inline-block;padding:3px 10px;border:none;font-size:14px;transition:all .2s ease-in-out;cursor:pointer;letter-spacing:1px;box-shadow:none;border-radius:3px;line-height:2em;vertical-align:middle;color:#fff;background-color:#5bc0de;outline:none}#main #sidebar .panel .inner .login_button:hover{background:#2f96b4}#main #sidebar .panel .inner .accesstoken-input{border:1px solid #eee;border-radius:3px;margin:10px 0;width:174px;padding-left:10px}#main #sidebar .panel .inner .failed{color:red}#main #sidebar .panel .inner .success{color:#319f81}#main #sidebar .panel .inner .signature{font-style:italic}#main #content{padding:0;margin-right:305px}#main #content .topic_full_title{font-size:22px;font-weight:700;margin:8px 0;display:inline-block;vertical-align:bottom;width:75%;line-height:130%}#main #content .changes{font-size:12px;color:#838383}#main #content .changes span:before{content:"\2022";margin:0 5px}#main #content .changes span a{color:inherit;text-decoration:none}#main #content .topic_content{margin:0 10px}#main #content .topic_content blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}#main #content .topic_content blockquote:after,#main #content .topic_content blockquote:before{content:""}#main #content .topic_content p{font-size:15px;line-height:1.7em;overflow:auto;margin:1em 0;white-space:pre-wrap}#main #content .topic_content table{padding:0;border-collapse:collapse;border-spacing:0;font:inherit;max-width:100%}#main #content .topic_content table tr{border-top:1px solid #ccc;background-color:#fff;margin:0;padding:0}#main #content .topic_content table tr td,#main #content .topic_content table tr th{border:1px solid #ccc;text-align:left;margin:0;padding:6px 13px}#main #content .topic_content ol{padding-left:20px}.reportTopic select{display:inline-block;padding:4px 6px;font-size:14px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:1px solid #ccc;width:220px;margin-left:10px;outline:none}.reportTopic input{border:1px solid #ccc;height:30px;border-radius:5px;font-size:14px}.reportTopic input,.reportTopic textarea{width:100%;resize:none;margin-top:10px;padding-left:10px;outline:none}.reportTopic textarea{border-radius:5px;height:450px;border-bottom:1px solid #eee}.reportTopic button{margin-top:20px}.load_wrap{position:fixed;left:0;right:0;top:0;bottom:0;background:rgba(0,0,0,.1)}.load_wrap .loader{position:fixed;top:50%;left:50%;margin:-25px 0 0 -25px}.load_wrap .loader div{opacity:1!important}@font-face{font-family:iconfont;src:url(data:application/x-font-ttf;base64,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) format("truetype"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+CkNyZWF0ZWQgYnkgRm9udEZvcmdlIDIwMTIwNzMxIGF0IEZyaSBEZWMgIDIgMTI6Mzc6MzEgMjAxNgogQnkgYWRtaW4KPC9tZXRhZGF0YT4KPGRlZnM+Cjxmb250IGlkPSJpY29uZm9udCIgaG9yaXotYWR2LXg9IjEwMjQiID4KICA8Zm9udC1mYWNlIAogICAgZm9udC1mYW1pbHk9Imljb25mb250IgogICAgZm9udC13ZWlnaHQ9IjUwMCIKICAgIGZvbnQtc3RyZXRjaD0ibm9ybWFsIgogICAgdW5pdHMtcGVyLWVtPSIxMDI0IgogICAgcGFub3NlLTE9IjIgMCA2IDMgMCAwIDAgMCAwIDAiCiAgICBhc2NlbnQ9Ijg5NiIKICAgIGRlc2NlbnQ9Ii0xMjgiCiAgICB4LWhlaWdodD0iNzkyIgogICAgYmJveD0iMCAtMTMzIDEwMjQgODQxIgogICAgdW5kZXJsaW5lLXRoaWNrbmVzcz0iMCIKICAgIHVuZGVybGluZS1wb3NpdGlvbj0iMCIKICAgIHVuaWNvZGUtcmFuZ2U9IlUrMDA3OC1FNzA5IgogIC8+CjxtaXNzaW5nLWdseXBoIAogLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSIubm90ZGVmIiAKIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iLm5vdGRlZiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Ii5udWxsIiBob3Jpei1hZHYteD0iMCIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Im5vbm1hcmtpbmdyZXR1cm4iIGhvcml6LWFkdi14PSIzNDEiIAogLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ4IiB1bmljb2RlPSJ4IiBob3Jpei1hZHYteD0iMTAwMSIgCmQ9Ik0yODEgNTQzcS0yNyAtMSAtNTMgLTFoLTgzcS0xOCAwIC0zNi41IC02dC0zMi41IC0xOC41dC0yMyAtMzJ0LTkgLTQ1LjV2LTc2aDkxMnY0MXEwIDE2IC0wLjUgMzB0LTAuNSAxOHEwIDEzIC01IDI5dC0xNyAyOS41dC0zMS41IDIyLjV0LTQ5LjUgOWgtMTMzdi05N2gtNDM4djk3ek05NTUgMzEwdi01MnEwIC0yMyAwLjUgLTUydDAuNSAtNTh0LTEwLjUgLTQ3LjV0LTI2IC0zMHQtMzMgLTE2dC0zMS41IC00LjVxLTE0IC0xIC0yOS41IC0wLjUKdC0yOS41IDAuNWgtMzJsLTQ1IDEyOGgtNDM5bC00NCAtMTI4aC0yOWgtMzRxLTIwIDAgLTQ1IDFxLTI1IDAgLTQxIDkuNXQtMjUuNSAyM3QtMTMuNSAyOS41dC00IDMwdjE2N2g5MTF6TTE2MyAyNDdxLTEyIDAgLTIxIC04LjV0LTkgLTIxLjV0OSAtMjEuNXQyMSAtOC41cTEzIDAgMjIgOC41dDkgMjEuNXQtOSAyMS41dC0yMiA4LjV6TTMxNiAxMjNxLTggLTI2IC0xNCAtNDhxLTUgLTE5IC0xMC41IC0zN3QtNy41IC0yNXQtMyAtMTV0MSAtMTQuNQp0OS41IC0xMC41dDIxLjUgLTRoMzdoNjdoODFoODBoNjRoMzZxMjMgMCAzNCAxMnQyIDM4cS01IDEzIC05LjUgMzAuNXQtOS41IDM0LjVxLTUgMTkgLTExIDM5aC0zNjh6TTMzNiA0OTh2MjI4cTAgMTEgMi41IDIzdDEwIDIxLjV0MjAuNSAxNS41dDM0IDZoMTg4cTMxIDAgNTEuNSAtMTQuNXQyMC41IC01Mi41di0yMjdoLTMyN3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYWdyZWUiIHVuaWNvZGU9IiYjeGU3MDg7IiAKZD0iTTgyOSA0MzJoLTE4NnEyMiA2MiAyMiAxMjdxMCAzNCAtNSA2OHEtNSAzMCAtMTUgNDlxLTI1IDQ1IC03NiA1NXEtMjggNSAtNTUuNSAtNC41dC00NS41IC0zMC41cS0xOCAtMjAgLTI0IC00NnEtMyAtMTAgLTMuNSAtMzB0LTAuNSAtMjVxLTcgLTU5IC00MiAtMTA4cS0zMCAtNDIgLTc2IC02NnEtMjMgLTEyIC00OCAtMTlxLTEyIC0zIC0yNCAtNXEtMiAtMSAtNiAtMS41dC03IC0xdC01IC0wLjVoLTEwOWgtNi41aC03dC02LjUgLTAuNQp0LTcgLTFsLTYgLTEuNXQtNiAtMi41dC01IC00dC01IC01LjVxLTggLTEwIC04IC0yOHYtMjE5di0yMTlxMCAtMjAgNyAtMzBxMTEgLTE2IDM2IC0xNmg2MDJxNTAgMCA5NCAyNHQ3MSA2NXExNiAyNCAyNiA2OXE0OCAyMTQgNTIgMjMxcTEzIDc0IC0xMSAxMjBxLTMwIDU2IC0xMTQgNTZ2MHpNMTQxIDMxOWg3NXEwIC0xNyAwLjUgLTEyNnQwLjUgLTE2N3QtMSAtODNoLTc1djM3NnYwek04MzYgNzNxLTI2IC05MyAtOTUgLTEyMQpxLTM2IC0xNCAtNjcgLTEwbC0zODMgMXYwdjM4NWwxNSA0cTEzIDQgMjYgMTBxMjUgMTAgNDcgMjVxNDUgMjkgNzggNzNxMzQgNDYgNDkgMTAycTcgMjggOSA2M3EwIDEgMC41IDcuNXQwLjUgOHQwLjUgNi41dDIgNy41dDMgNnQ0IDYuNXQ2LjUgNXExMSA3IDI0IDV0MjEgLTEycTcgLTcgMTEgLTM0cTkgLTYzIC00IC0xMjJxLTggLTMwIC0yMSAtNjBxLTEgLTEgLTQgLTcuNXQtMy41IC04LjV0LTIuNSAtNy41dC0yIC05dDAuNSAtOHQyLjUgLTkuNQpxMTAgLTIyIDQzIC0yMnEyMjcgMCAyMzIgLTFxNDQgLTQgNTEgLTQzcTQgLTIyIC00IC02MXEtMjQgLTEyMiAtNDAgLTE3OXYwdjB6TTgzNiA3M3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icmVwbHkiIHVuaWNvZGU9IiYjeGU3MDk7IiBob3Jpei1hZHYteD0iMTAyNSIgCmQ9Ik05OTQgNDI4cS05MyAyMzAgLTUwMCAyMzBoLTEyOHYxNDdxMCAxNCAtMTEgMjV0LTI2IDExdC0yNiAtMTFsLTI5MiAtMjkycS0xMSAtMTEgLTExIC0yNnQxMSAtMjZsMjkyIC0yOTJxMTEgLTExIDI2IC0xMXQyNiAxMXQxMSAyNXYxNDdoMTI4cTU2IDAgMTAwIC0zLjV0ODggLTEyLjV0NzYgLTI0LjV0NjAgLTM5LjV0NDYgLTU3LjV0MjggLTc5LjV0MTAgLTEwM3EwIC0zMiAtMyAtNzFxMCAtMyAtMS41IC0xM3QtMS41IC0xNQpxMCAtOSA1IC0xNC41dDEzIC01LjVxOSAwIDE2IDEwcTQgNSA4IDEycTMgOCA3IDE3cTUgMTEgNiAxNHE3MyAxNjMgNzMgMjU4cTAgMTEzIC0zMCAxOTB6IiAvPgogIDwvZm9udD4KPC9kZWZzPjwvc3ZnPgo=) format("svg")}.iconfont{font-family:iconfont!important;font-size:14px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale;cursor:pointer;color:#999}.icon-agree:before{content:"\E708"}.icon-reply:before{content:"\E709"}body.stop-scrolling{height:100%}.sweet-overlay{background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";background-color:rgba(0,0,0,.4);position:fixed;left:0;right:0;top:0;bottom:0;display:none;z-index:10000}.sweet-alert{background-color:#fff;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;width:478px;padding:17px;border-radius:5px;text-align:center;position:fixed;left:50%;top:50%;margin-left:-256px;margin-top:-200px;overflow:hidden;display:none;z-index:99999}@media (max-width:540px){.sweet-alert{width:auto;margin-left:0;margin-right:0;left:15px;right:15px}}.sweet-alert h2{color:#575757;font-size:30px;font-weight:600;text-transform:none;margin:25px 0;line-height:40px;display:block}.sweet-alert h2,.sweet-alert p{text-align:center;position:relative;padding:0}.sweet-alert p{color:#797979;font-size:16px;font-weight:300;text-align:inherit;float:none;margin:0;line-height:normal}.sweet-alert fieldset{border:none;position:relative}.sweet-alert .sa-error-container{background-color:#f1f1f1;margin-left:-17px;margin-right:-17px;overflow:hidden;padding:0 10px;max-height:0;webkit-transition:padding .15s,max-height .15s;transition:padding .15s,max-height .15s}.sweet-alert .sa-error-container.show{padding:10px 0;max-height:100px;webkit-transition:padding .2s,max-height .2s;transition:padding .25s,max-height .25s}.sweet-alert .sa-error-container .icon{display:inline-block;width:24px;height:24px;border-radius:50%;background-color:#ea7d7d;color:#fff;line-height:24px;text-align:center;margin-right:3px}.sweet-alert .sa-error-container p{display:inline-block}.sweet-alert .sa-input-error{position:absolute;top:29px;right:26px;width:20px;height:20px;opacity:0;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transition:all .1s;transition:all .1s}.sweet-alert .sa-input-error:after,.sweet-alert .sa-input-error:before{content:"";width:20px;height:6px;background-color:#f06e57;border-radius:3px;position:absolute;top:50%;margin-top:-4px;left:50%;margin-left:-9px}.sweet-alert .sa-input-error:before{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.sweet-alert .sa-input-error:after{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.sweet-alert .sa-input-error.show{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.sweet-alert input{width:100%;box-sizing:border-box;border-radius:3px;border:1px solid #d7d7d7;height:43px;margin-top:10px;margin-bottom:17px;font-size:18px;box-shadow:inset 0 1px 1px rgba(0,0,0,.06);padding:0 12px;display:none;-webkit-transition:all .3s;transition:all .3s}.sweet-alert input:focus{outline:none;box-shadow:0 0 3px #c4e6f5;border:1px solid #b4dbed}.sweet-alert input:focus::-moz-placeholder{transition:opacity .3s ease .03s;opacity:.5}.sweet-alert input:focus:-ms-input-placeholder{transition:opacity .3s ease .03s;opacity:.5}.sweet-alert input:focus::-webkit-input-placeholder{transition:opacity .3s ease .03s;opacity:.5}.sweet-alert input::-moz-placeholder{color:#bdbdbd}.sweet-alert input:-ms-input-placeholder{color:#bdbdbd}.sweet-alert input::-webkit-input-placeholder{color:#bdbdbd}.sweet-alert.show-input input{display:block}.sweet-alert .sa-confirm-button-container{display:inline-block;position:relative}.sweet-alert .la-ball-fall{position:absolute;left:50%;top:50%;margin-left:-27px;margin-top:4px;opacity:0;visibility:hidden}.sweet-alert button{background-color:#8cd4f5;color:#fff;border:none;box-shadow:none;font-size:17px;font-weight:500;-webkit-border-radius:4px;border-radius:5px;padding:10px 32px;margin:26px 5px 0;cursor:pointer}.sweet-alert button:focus{outline:none;box-shadow:0 0 2px rgba(128,179,235,.5),inset 0 0 0 1px rgba(0,0,0,.05)}.sweet-alert button:hover{background-color:#7ecff4}.sweet-alert button:active{background-color:#5dc2f1}.sweet-alert button.cancel{background-color:#c1c1c1}.sweet-alert button.cancel:hover{background-color:#b9b9b9}.sweet-alert button.cancel:active{background-color:#a8a8a8}.sweet-alert button.cancel:focus{box-shadow:0 0 2px rgba(197,205,211,.8),inset 0 0 0 1px rgba(0,0,0,.0470588)!important}.sweet-alert button[disabled]{opacity:.6;cursor:default}.sweet-alert button.confirm[disabled]{color:transparent}.sweet-alert button.confirm[disabled]~.la-ball-fall{opacity:1;visibility:visible;transition-delay:0s}.sweet-alert button::-moz-focus-inner{border:0}.sweet-alert[data-has-cancel-button=false] button{box-shadow:none!important}.sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false]{padding-bottom:40px}.sweet-alert .sa-icon{width:80px;height:80px;border:4px solid gray;-webkit-border-radius:40px;border-radius:40px;border-radius:50%;margin:20px auto;padding:0;position:relative;box-sizing:content-box}.sweet-alert .sa-icon.sa-error{border-color:#f27474}.sweet-alert .sa-icon.sa-error .sa-x-mark{position:relative;display:block}.sweet-alert .sa-icon.sa-error .sa-line{position:absolute;height:5px;width:47px;background-color:#f27474;display:block;top:37px;border-radius:2px}.sweet-alert .sa-icon.sa-error .sa-line.sa-left{-webkit-transform:rotate(45deg);transform:rotate(45deg);left:17px}.sweet-alert .sa-icon.sa-error .sa-line.sa-right{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);right:16px}.sweet-alert .sa-icon.sa-warning{border-color:#f8bb86}.sweet-alert .sa-icon.sa-warning .sa-body{position:absolute;width:5px;height:47px;left:50%;top:10px;-webkit-border-radius:2px;border-radius:2px;margin-left:-2px;background-color:#f8bb86}.sweet-alert .sa-icon.sa-warning .sa-dot{position:absolute;width:7px;height:7px;-webkit-border-radius:50%;border-radius:50%;margin-left:-3px;left:50%;bottom:10px;background-color:#f8bb86}.sweet-alert .sa-icon.sa-info{border-color:#c9dae1}.sweet-alert .sa-icon.sa-info:before{content:"";position:absolute;width:5px;height:29px;left:50%;bottom:17px;border-radius:2px;margin-left:-2px;background-color:#c9dae1}.sweet-alert .sa-icon.sa-info:after{content:"";position:absolute;width:7px;height:7px;border-radius:50%;margin-left:-3px;top:19px;background-color:#c9dae1;left:50%}.sweet-alert .sa-icon.sa-success{border-color:#a5dc86}.sweet-alert .sa-icon.sa-success:after,.sweet-alert .sa-icon.sa-success:before{content:"";-webkit-border-radius:40px;border-radius:40px;border-radius:50%;position:absolute;width:60px;height:120px;background:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.sweet-alert .sa-icon.sa-success:before{-webkit-border-radius:120px 0 0 120px;border-radius:120px 0 0 120px;top:-7px;left:-33px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:60px 60px;transform-origin:60px 60px}.sweet-alert .sa-icon.sa-success:after{-webkit-border-radius:0 120px 120px 0;border-radius:0 120px 120px 0;top:-11px;left:30px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-transform-origin:0 60px;transform-origin:0 60px}.sweet-alert .sa-icon.sa-success .sa-placeholder{width:80px;height:80px;border:4px solid hsla(98,55%,69%,.2);-webkit-border-radius:40px;border-radius:40px;border-radius:50%;box-sizing:content-box;position:absolute;left:-4px;top:-4px;z-index:2}.sweet-alert .sa-icon.sa-success .sa-fix{width:5px;height:90px;background-color:#fff;position:absolute;left:28px;top:8px;z-index:1;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.sweet-alert .sa-icon.sa-success .sa-line{height:5px;background-color:#a5dc86;display:block;border-radius:2px;position:absolute;z-index:2}.sweet-alert .sa-icon.sa-success .sa-line.sa-tip{width:25px;left:14px;top:46px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.sweet-alert .sa-icon.sa-success .sa-line.sa-long{width:47px;right:8px;top:38px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.sweet-alert .sa-icon.sa-custom{background-size:contain;border-radius:0;border:none;background-position:50%;background-repeat:no-repeat}@-webkit-keyframes showSweetAlert{0%{transform:scale(.7);-webkit-transform:scale(.7)}45%{transform:scale(1.05);-webkit-transform:scale(1.05)}80%{transform:scale(.95);-webkit-transform:scale(.95)}to{transform:scale(1);-webkit-transform:scale(1)}}@keyframes showSweetAlert{0%{transform:scale(.7);-webkit-transform:scale(.7)}45%{transform:scale(1.05);-webkit-transform:scale(1.05)}80%{transform:scale(.95);-webkit-transform:scale(.95)}to{transform:scale(1);-webkit-transform:scale(1)}}@-webkit-keyframes hideSweetAlert{0%{transform:scale(1);-webkit-transform:scale(1)}to{transform:scale(.5);-webkit-transform:scale(.5)}}@keyframes hideSweetAlert{0%{transform:scale(1);-webkit-transform:scale(1)}to{transform:scale(.5);-webkit-transform:scale(.5)}}@-webkit-keyframes slideFromTop{0%{top:0}to{top:50%}}@keyframes slideFromTop{0%{top:0}to{top:50%}}@-webkit-keyframes slideToTop{0%{top:50%}to{top:0}}@keyframes slideToTop{0%{top:50%}to{top:0}}@-webkit-keyframes slideFromBottom{0%{top:70%}to{top:50%}}@keyframes slideFromBottom{0%{top:70%}to{top:50%}}@-webkit-keyframes slideToBottom{0%{top:50%}to{top:70%}}@keyframes slideToBottom{0%{top:50%}to{top:70%}}.showSweetAlert[data-animation=pop]{-webkit-animation:showSweetAlert .3s;animation:showSweetAlert .3s}.showSweetAlert[data-animation=none]{-webkit-animation:none;animation:none}.showSweetAlert[data-animation=slide-from-top]{-webkit-animation:slideFromTop .3s;animation:slideFromTop .3s}.showSweetAlert[data-animation=slide-from-bottom]{-webkit-animation:slideFromBottom .3s;animation:slideFromBottom .3s}.hideSweetAlert[data-animation=pop]{-webkit-animation:hideSweetAlert .2s;animation:hideSweetAlert .2s}.hideSweetAlert[data-animation=none]{-webkit-animation:none;animation:none}.hideSweetAlert[data-animation=slide-from-top]{-webkit-animation:slideToTop .4s;animation:slideToTop .4s}.hideSweetAlert[data-animation=slide-from-bottom]{-webkit-animation:slideToBottom .3s;animation:slideToBottom .3s}@-webkit-keyframes animateSuccessTip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}to{width:25px;left:14px;top:45px}}@keyframes animateSuccessTip{0%{width:0;left:1px;top:19px}54%{width:0;left:1px;top:19px}70%{width:50px;left:-8px;top:37px}84%{width:17px;left:21px;top:48px}to{width:25px;left:14px;top:45px}}@-webkit-keyframes animateSuccessLong{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}to{width:47px;right:8px;top:38px}}@keyframes animateSuccessLong{0%{width:0;right:46px;top:54px}65%{width:0;right:46px;top:54px}84%{width:55px;right:0;top:35px}to{width:47px;right:8px;top:38px}}@-webkit-keyframes rotatePlaceholder{0%{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}5%{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}12%{transform:rotate(-405deg);-webkit-transform:rotate(-405deg)}to{transform:rotate(-405deg);-webkit-transform:rotate(-405deg)}}@keyframes rotatePlaceholder{0%{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}5%{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}12%{transform:rotate(-405deg);-webkit-transform:rotate(-405deg)}to{transform:rotate(-405deg);-webkit-transform:rotate(-405deg)}}.animateSuccessTip{-webkit-animation:animateSuccessTip .75s;animation:animateSuccessTip .75s}.animateSuccessLong{-webkit-animation:animateSuccessLong .75s;animation:animateSuccessLong .75s}.sa-icon.sa-success.animate:after{-webkit-animation:rotatePlaceholder 4.25s ease-in;animation:rotatePlaceholder 4.25s ease-in}@-webkit-keyframes animateErrorIcon{0%{transform:rotateX(100deg);-webkit-transform:rotateX(100deg);opacity:0}to{transform:rotateX(0deg);-webkit-transform:rotateX(0deg);opacity:1}}@keyframes animateErrorIcon{0%{transform:rotateX(100deg);-webkit-transform:rotateX(100deg);opacity:0}to{transform:rotateX(0deg);-webkit-transform:rotateX(0deg);opacity:1}}.animateErrorIcon{-webkit-animation:animateErrorIcon .5s;animation:animateErrorIcon .5s}@-webkit-keyframes animateXMark{0%{transform:scale(.4);-webkit-transform:scale(.4);margin-top:26px;opacity:0}50%{transform:scale(.4);-webkit-transform:scale(.4);margin-top:26px;opacity:0}80%{transform:scale(1.15);-webkit-transform:scale(1.15);margin-top:-6px}to{transform:scale(1);-webkit-transform:scale(1);margin-top:0;opacity:1}}@keyframes animateXMark{0%{transform:scale(.4);-webkit-transform:scale(.4);margin-top:26px;opacity:0}50%{transform:scale(.4);-webkit-transform:scale(.4);margin-top:26px;opacity:0}80%{transform:scale(1.15);-webkit-transform:scale(1.15);margin-top:-6px}to{transform:scale(1);-webkit-transform:scale(1);margin-top:0;opacity:1}}.animateXMark{-webkit-animation:animateXMark .5s;animation:animateXMark .5s}@-webkit-keyframes pulseWarning{0%{border-color:#f8d486}to{border-color:#f8bb86}}@keyframes pulseWarning{0%{border-color:#f8d486}to{border-color:#f8bb86}}.pulseWarning{-webkit-animation:pulseWarning .75s infinite alternate;animation:pulseWarning .75s infinite alternate}@-webkit-keyframes pulseWarningIns{0%{background-color:#f8d486}to{background-color:#f8bb86}}@keyframes pulseWarningIns{0%{background-color:#f8d486}to{background-color:#f8bb86}}.pulseWarningIns{-webkit-animation:pulseWarningIns .75s infinite alternate;animation:pulseWarningIns .75s infinite alternate}@-webkit-keyframes rotate-loading{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes rotate-loading{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.sweet-alert .sa-icon.sa-error .sa-line.sa-left{-ms-transform:rotate(45deg)\9}.sweet-alert .sa-icon.sa-error .sa-line.sa-right{-ms-transform:rotate(-45deg)\9}.sweet-alert .sa-icon.sa-success{border-color:transparent\9}.sweet-alert .sa-icon.sa-success .sa-line.sa-tip{-ms-transform:rotate(45deg)\9}.sweet-alert .sa-icon.sa-success .sa-line.sa-long{-ms-transform:rotate(-45deg)\9}/*!
2 | * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)
3 | * Copyright 2015 Daniel Cardoso <@DanielCardoso>
4 | * Licensed under MIT
5 | */.la-ball-fall,.la-ball-fall>div{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.la-ball-fall{display:block;font-size:0;color:#fff}.la-ball-fall.la-dark{color:#333}.la-ball-fall>div{display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor}.la-ball-fall{width:54px;height:18px}.la-ball-fall>div{width:10px;height:10px;margin:4px;border-radius:100%;opacity:0;-webkit-animation:ball-fall 1s ease-in-out infinite;-moz-animation:ball-fall 1s ease-in-out infinite;-o-animation:ball-fall 1s ease-in-out infinite;animation:ball-fall 1s ease-in-out infinite}.la-ball-fall>div:nth-child(1){-webkit-animation-delay:-.2s;-moz-animation-delay:-.2s;-o-animation-delay:-.2s;animation-delay:-.2s}.la-ball-fall>div:nth-child(2){-webkit-animation-delay:-.1s;-moz-animation-delay:-.1s;-o-animation-delay:-.1s;animation-delay:-.1s}.la-ball-fall>div:nth-child(3){-webkit-animation-delay:0ms;-moz-animation-delay:0ms;-o-animation-delay:0ms;animation-delay:0ms}.la-ball-fall.la-sm{width:26px;height:8px}.la-ball-fall.la-sm>div{width:4px;height:4px;margin:2px}.la-ball-fall.la-2x{width:108px;height:36px}.la-ball-fall.la-2x>div{width:20px;height:20px;margin:8px}.la-ball-fall.la-3x{width:162px;height:54px}.la-ball-fall.la-3x>div{width:30px;height:30px;margin:12px}@-webkit-keyframes ball-fall{0%{opacity:0;-webkit-transform:translateY(-145%);transform:translateY(-145%)}10%{opacity:.5}20%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}80%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}90%{opacity:.5}to{opacity:0;-webkit-transform:translateY(145%);transform:translateY(145%)}}@-moz-keyframes ball-fall{0%{opacity:0;-moz-transform:translateY(-145%);transform:translateY(-145%)}10%{opacity:.5}20%{opacity:1;-moz-transform:translateY(0);transform:translateY(0)}80%{opacity:1;-moz-transform:translateY(0);transform:translateY(0)}90%{opacity:.5}to{opacity:0;-moz-transform:translateY(145%);transform:translateY(145%)}}@-o-keyframes ball-fall{0%{opacity:0;-o-transform:translateY(-145%);transform:translateY(-145%)}10%{opacity:.5}20%{opacity:1;-o-transform:translateY(0);transform:translateY(0)}80%{opacity:1;-o-transform:translateY(0);transform:translateY(0)}90%{opacity:.5}to{opacity:0;-o-transform:translateY(145%);transform:translateY(145%)}}@keyframes ball-fall{0%{opacity:0;-webkit-transform:translateY(-145%);-moz-transform:translateY(-145%);-o-transform:translateY(-145%);transform:translateY(-145%)}10%{opacity:.5}20%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}80%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}90%{opacity:.5}to{opacity:0;-webkit-transform:translateY(145%);-moz-transform:translateY(145%);-o-transform:translateY(145%);transform:translateY(145%)}}
--------------------------------------------------------------------------------
/fonts/iconfont.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
48 |
--------------------------------------------------------------------------------
/fonts/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireswork/CNode-By-React/9852162eb06dc16c4293291987b46ab538b22899/fonts/iconfont.ttf
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CNode-By-React
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/js/detail.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Header from '../component/public/header.js';
3 | import DetailHeader from '../component/detail/detailHeader.js';
4 | import Reply from '../component/detail/reply.js';
5 | import Author from '../component/detail/author.js';
6 | import AboutTopics from '../component/detail/authorAboutTopics.js';
7 | import swal from 'sweetalert';
8 |
9 | //top
10 | const Detail=React.createClass({
11 | getInitialState(){
12 | return {data: [],loginname: '',is_collect: false,isLogin: localStorage.getItem('userToken')?true:false};
13 | },
14 | componentDidMount(){
15 | this.sendRequest('https://cnodejs.org/api/v1/topic/'+window.location.href.split('/detail/')[1],this.setData);
16 | },
17 | reload(){
18 | window.location.reload();
19 | },
20 | loginTips(tips){
21 | if(!localStorage.getItem('userToken')){
22 | swal('登录后才能'+tips,'','error');
23 | return false;
24 | }else{
25 | return true;
26 | }
27 | },
28 | timeFormat(time){
29 | const timeDiff=(new Date().getTime()-new Date(time).getTime())/3600000;
30 | if(timeDiff/24 >=1){
31 | return Math.floor(timeDiff/24)+' 天前';
32 | }else if(timeDiff >1){
33 | return Math.floor(timeDiff)+' 小时前';
34 | }else if(timeDiff < 1){
35 | return Math.ceil(timeDiff*60)+' 分钟前';
36 | }
37 | },
38 | //是否收藏
39 | is_collect(){
40 | const loginname=localStorage.getItem('loginname');
41 | if(loginname) this.sendRequest('https://cnodejs.org/api/v1/topic_collect/'+loginname,this.setCollect);
42 | },
43 | setData(data){
44 | this.setState({
45 | data: data,
46 | loginname: data.author.loginname
47 | });
48 | this.is_collect();
49 | },
50 | setCollect(data){
51 | data.map((_this)=>{
52 | if(_this.id===this.state.data.id){
53 | this.setState({
54 | is_collect: true
55 | })
56 | }
57 | })
58 | },
59 | sendRequest(url,callback){
60 | fetch(url,{
61 | method: 'get',
62 | }).then((result)=>{
63 | return result.json().then((data)=>{
64 | const resultData=data.data;
65 | if(resultData){
66 | callback(resultData);
67 | }
68 | })
69 | })
70 | },
71 | render(){
72 | return
73 |
74 |
75 |
76 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 | }
88 | });
89 | module.exports=Detail;
90 |
91 |
92 |
--------------------------------------------------------------------------------
/js/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Header from '../component/public/header.js';
3 | import Cell from '../component/index/cells.js';
4 | import Tab from '../component/index/tab.js';
5 | import Pagination from '../component/index/pagination.js';
6 | import Login from '../component/index/login.js';
7 | import { Link } from 'react-router';
8 |
9 | //top
10 | const Content=React.createClass({
11 | getInitialState(){
12 | return {tabTitle: 'ask',isLogin: localStorage.getItem('userToken')?true:false,data: ''};
13 | },
14 | loginStatus(status){
15 | this.setState({
16 | isLogin: status
17 | })
18 | },
19 | componentWillMount(){
20 | this.sendRequest('https://cnodejs.org/api/v1/topics?page='+1+'&tab='+this.state.tabTitle+'&limit='+20);
21 | },
22 | componentWillUpdate(){
23 | //this.loadStatus('show');
24 | },
25 |
26 | sendRequest(url,tab){
27 | if(tab){
28 | this.setState({
29 | tabTitle: tab
30 | });
31 | }
32 | fetch(url,{
33 | method: 'get',
34 | }).then((result)=>{
35 | return result.json().then((data)=>{
36 | const resultData=data.data;
37 | if(resultData){
38 | this.setState({
39 | data:resultData
40 | });
41 | //this.loadStatus('hide');
42 | }
43 | })
44 | })
45 | },
46 | render(){
47 | return
58 | }
59 | });
60 | module.exports=Content;
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/js/main.js:
--------------------------------------------------------------------------------
1 | require("../css/reset.min.css");
2 | require("../css/main.scss");
3 | require("../css/iconfont.css");
4 | require("../css/sweetalert.css");
5 | import React from 'react';
6 | import ReactDOM from 'react-dom';
7 | import { Router, Route, hashHistory, IndexRoute } from 'react-router';
8 | //import Load from '../component/public/load.js';
9 | import Index from './index.js';
10 | import Detail from './detail.js';
11 | import Message from './message.js';
12 | import User from './user.js';
13 | import ReportTopic from './reportTopic.js';
14 |
15 | //top
16 | const Main=React.createClass({
17 | render(){
18 | return
19 | {this.props.children}
20 |
21 | }
22 | });
23 | ReactDOM.render(
24 | (
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | ),document.querySelector('body')
35 | );
36 |
--------------------------------------------------------------------------------
/js/message.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Header from '../component/public/header.js';
3 | import Breadcrumbs from '../component/public/Breadcrumbs.js';
4 | import Messages from '../component/public/messages.js';
5 | import Author from '../component/detail/author.js';
6 |
7 | const Message=React.createClass({
8 | getInitialState(){
9 | return {isLogin: localStorage.getItem('userToken')?true:false,data: {}};
10 | },
11 | componentDidMount(){
12 | this.sendRequest(' https://cnodejs.org/api/v1/messages?accesstoken='+localStorage.getItem('userToken'));
13 | },
14 | sendRequest(url){
15 | fetch(url,{method: 'get',}).then((result)=>{
16 | return result.json().then((data)=>{
17 | const resultData=data.data;
18 | if(resultData){
19 | this.setState({
20 | data: resultData,
21 | });
22 | }
23 | })
24 | });
25 | },
26 | render(){
27 | return
28 |
29 |
30 |
33 |
34 |
35 |
36 |
37 |
38 |
42 |
43 |
44 |
45 | }
46 | });
47 | module.exports=Message;
--------------------------------------------------------------------------------
/js/reportTopic.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Header from '../component/public/header.js';
3 | import Breadcrumbs from '../component/public/Breadcrumbs.js';
4 | import Author from '../component/detail/author.js';
5 | import swal from 'sweetalert';
6 | import { Link } from 'react-router';
7 |
8 | const ReportTopic=React.createClass({
9 | getInitialState(){
10 | return {isLogin: localStorage.getItem('userToken')?true:false,data: '',collect_topic:''};
11 | },
12 | check(){
13 | const tab=document.querySelector('[name=tab]').value;
14 | const title=document.querySelector('[name=title]').value;
15 | const content=document.querySelector('[name=content]').value;
16 | const token=localStorage.getItem('userToken');
17 | if(tab==='0'){
18 | swal('请先选择板块', '', 'error');
19 | }else if(!title || title.length<10){
20 | swal('标题字数十字以上','','error');
21 | }else if(!content){
22 | swal('内容不能为空','','error');
23 | }else{
24 | const format='accesstoken='+token+'&tab='+tab+'&title='+title+'&content='+content;
25 | this.sendRequest(format);
26 | }
27 | },
28 | sendRequest(format){
29 | fetch('https://cnodejs.org/api/v1/topics/',{
30 | method: 'post',
31 | headers: {
32 | "Content-Type": "application/x-www-form-urlencoded"
33 | },
34 | body: format
35 | }).then((result)=>{
36 | return result.json().then((data)=>{
37 | if(data.success){
38 | swal({
39 | title: "发布话题成功",
40 | type: "success",
41 | }, function(){
42 | document.querySelector('.link-to-detail').click();
43 | });
44 | }else{
45 | swal(data.error_msg,'','error');
46 | }
47 | })
48 | })
49 | },
50 | render(){
51 | return
88 | }
89 | });
90 | module.exports=ReportTopic;
--------------------------------------------------------------------------------
/js/user.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Header from '../component/public/header.js';
3 | import Breadcrumbs from '../component/public/Breadcrumbs.js';
4 | import Author from '../component/detail/author.js';
5 | import Cell from '../component/index/cells.js';
6 |
7 | const User=React.createClass({
8 | getInitialState(){
9 | return {isLogin: localStorage.getItem('userToken')?true:false,data: '',collect_topic:''};
10 | },
11 | componentWillMount(){
12 | const name=window.location.href.split('/user/')[1];
13 | this.sendRequest('https://cnodejs.org/api/v1/user/'+name,this.setUserInfo);
14 | this.sendRequest('https://cnodejs.org/api/v1/topic_collect/'+name,this.getTopicCollect);
15 | },
16 | setUserInfo(data){
17 | this.setState({
18 | data:data
19 | });
20 | },
21 | getTopicCollect(data){
22 | this.setState({
23 | collect_topic:data
24 | });
25 | },
26 | timeFormat(time){
27 | const timeDiff=(new Date().getTime()-new Date(time).getTime())/3600000;
28 | if(timeDiff/(24*30*12) >=1){
29 | return Math.floor(timeDiff/(24*30*12) >=1)+' 年前';
30 | }else if(timeDiff/(24*30) >=1){
31 | return Math.floor(timeDiff/(24*30) >=1)+' 月前';
32 | }else if(timeDiff/24 >=1){
33 | return Math.floor(timeDiff/24)+' 天前';
34 | }else if(timeDiff >1){
35 | return Math.floor(timeDiff)+' 小时前';
36 | }else if(timeDiff < 1){
37 | return Math.ceil(timeDiff*60)+' 分钟前';
38 | }
39 | },
40 | sendRequest(url,callback){
41 | fetch(url,{
42 | method: 'get',
43 | }).then((result)=>{
44 | return result.json().then((data)=>{
45 | const resultData=data.data;
46 | if(resultData){
47 | callback(resultData);
48 | }
49 | })
50 | })
51 | },
52 | render(){
53 | return
54 |
55 |
56 |
59 |
60 |
76 |
77 |
78 | 最近创建的话题
79 |
80 |
81 | |
82 |
83 |
84 | 最近参与的话题
85 |
86 |
87 | |
88 |
89 |
90 |
91 | }
92 | });
93 | module.exports=User;
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "CNode-By-React",
3 | "version": "1.0.0",
4 | "description": "page for react",
5 | "main": "./js/main.js",
6 | "scripts": {
7 | "build": "webpack",
8 | "dev": "webpack-dev-server --devtool eval --progress --colors --content-base ./dist",
9 | "start": "webpack-dev-server --inline --hot",
10 | "deploy": "NODE_ENV=production webpack -p --config webpack.config.js"
11 | },
12 | "author": "link",
13 | "license": "ISC",
14 | "dependencies": {
15 | "babel": "^6.5.2",
16 | "babel-cli": "^6.18.0",
17 | "babel-core": "^6.21.0",
18 | "babel-eslint": "^7.1.1",
19 | "babel-loader": "^6.2.8",
20 | "babel-preset-es2015": "^6.18.0",
21 | "babel-preset-react": "^6.16.0",
22 | "css-loader": "^0.26.1",
23 | "eslint": "^3.10.2",
24 | "eslint-loader": "^1.6.1",
25 | "eslint-plugin-react": "^6.7.1",
26 | "extract-text-webpack-plugin": "^1.0.1",
27 | "file-loader": "^0.9.0",
28 | "halogen": "^0.2.0",
29 | "highlight": "^0.2.4",
30 | "highlight.js": "^9.9.0",
31 | "image-webpack-loader": "^3.0.0",
32 | "jquery": "^3.1.1",
33 | "jsx-loader": "^0.13.2",
34 | "node-sass": "^3.13.1",
35 | "path": "^0.12.7",
36 | "react": "^15.4.1",
37 | "react-dom": "^15.4.1",
38 | "react-router": "^3.0.0",
39 | "sass-loader": "^4.1.1",
40 | "style-loader": "^0.13.1",
41 | "sweetalert": "^1.1.3",
42 | "url-loader": "^0.5.7",
43 | "webpack": "^1.14.0",
44 | "webpack-dev-server": "^1.16.2"
45 | },
46 | "devDependencies": {
47 | "babel-preset-es2015": "^6.18.0"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var webpack = require('webpack');
3 | var ExtractTextPlugin = require('extract-text-webpack-plugin');
4 |
5 | module.exports = {
6 | entry: [
7 | "webpack/hot/only-dev-server",
8 | "./js/main.js",
9 | ],
10 | output: {
11 | path: path.resolve(__dirname, './dist'),
12 | filename: "main.js"
13 | },
14 | devServer:{
15 | hot: false,
16 | inline: true
17 | },
18 | eslint: {
19 | configFile :'/.eslintrc'
20 | },
21 | plugins: [
22 | new webpack.optimize.UglifyJsPlugin({
23 | compressor: {
24 | warnings: false
25 | }
26 | }),
27 | new webpack.DefinePlugin({
28 | "process.env": {
29 | NODE_ENV: JSON.stringify("production")
30 | }
31 | }),
32 | new ExtractTextPlugin("package.css"),
33 | new webpack.HotModuleReplacementPlugin()
34 | ],
35 | module: {
36 | loaders: [
37 | {test: /\.jsx?$/,exclude: /(node_modules|bower_components)/,loader: 'babel-loader',query: {presets: ["es2015", "react"]}},
38 | {test: /\.(scss|css)$/,loader: ExtractTextPlugin.extract("style-loader", "css-loader!sass-loader")},
39 | {test: /\.(gif|jpg|png|woff|svg|eot|ttf|otf|JPG)$/, loader: "url?limit=10000"},
40 | {test: '/\.js$/',exclude: /node_modules/,loader: ['babel-loader', 'eslint-loader']}
41 | ]
42 | },
43 | resolve: {
44 | extensions: ['', '.js']
45 | }
46 | }
47 |
--------------------------------------------------------------------------------