├── 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 | 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 | 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 |
40 | 发布于 {this.props.timeFormat(this.props.data.create_at)} 41 | 作者 {this.props.data.author?this.props.data.author.loginname:''} 42 | {this.props.data.visit_count} 次浏览 43 | 来自 {tabsTitle[this.props.data.tab]} 44 | 45 |
46 |
47 |
48 |
49 |
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 |
94 | {_this.author.loginname} 95 | {index+1}楼 • {this.props.timeFormat(_this.create_at)} 96 |
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 | 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 | 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 | 5 | 11 | 18 | 25 | 28 | 36 | 42 | 45 | 54 | 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 | 4 | 5 | Created by FontForge 20120731 at Fri Dec 2 12:37:31 2016 6 | By admin 7 | 8 | 9 | 10 | 24 | 26 | 28 | 30 | 32 | 34 | 38 | 43 | 46 | 47 | 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
48 |
49 |
50 | 51 |
52 | 53 | 54 | 55 |
56 |
57 |
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 |
39 |
已读信息
40 | 41 |
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
52 |
53 |
54 | 57 |
58 |
59 | 60 |
61 | 62 |
63 |
64 | 选择板块: 65 | 71 |
72 |
73 | 74 |
75 |
76 | 77 |
78 |
79 | 80 | 81 |
82 |
83 |
84 |
85 |
86 |
87 |
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 |
61 | 62 |
63 |
64 | 65 |
66 | {this.state.data.loginname} 67 |
68 | 72 |
73 |

注册时间 {this.timeFormat(this.state.data.create_at)}

74 |
75 |
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 | --------------------------------------------------------------------------------