├── .gitignore
├── README.md
├── auto_deploy.sh
├── build
├── asset-manifest.json
├── favicon.ico
├── index.html
├── manifest.json
├── oauth.html
├── service-worker.js
└── static
│ ├── css
│ ├── index.971f281d.css
│ ├── index.971f281d.css.map
│ ├── oauth.02c39b1d.css
│ └── oauth.02c39b1d.css.map
│ └── js
│ ├── index.13f45f17.js
│ ├── index.13f45f17.js.map
│ ├── oauth.b873a604.js
│ └── oauth.b873a604.js.map
├── config
├── env.js
├── jest
│ ├── cssTransform.js
│ └── fileTransform.js
├── paths.js
├── polyfills.js
├── webpack.config.dev.js
├── webpack.config.prod.js
└── webpackDevServer.config.js
├── package.json
├── public
├── favicon.ico
├── index.html
└── manifest.json
├── scripts
├── build.js
├── start.js
└── test.js
└── src
├── index.css
├── index.js
├── js
├── atricle
│ ├── atricle.css
│ └── index.js
├── component
│ ├── atircleMessage
│ │ ├── atircleMessage.css
│ │ └── index.js
│ ├── atricleItem
│ │ ├── atricleItem.css
│ │ └── index.js
│ ├── header
│ │ ├── header.css
│ │ ├── index.js
│ │ └── svg.js
│ ├── message
│ │ ├── index.js
│ │ └── message.css
│ ├── progress
│ │ ├── index.js
│ │ └── progress.css
│ ├── snackbar
│ │ └── index.js
│ └── svg.js
├── home
│ ├── home.css
│ └── index.js
├── login
│ ├── index.js
│ └── login.css
├── me
│ ├── index.js
│ └── me.css
├── notice
│ ├── index.js
│ └── notice.css
├── oauth
│ ├── index.js
│ └── oauth.css
├── read
│ ├── index.js
│ └── read.css
├── route.js
└── write
│ ├── index.js
│ └── write.css
├── oauth.js
└── registerServiceWorker.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 |
6 | # testing
7 | /coverage
8 |
9 | # misc
10 | .DS_Store
11 | .env.local
12 | .env.development.local
13 | .env.test.local
14 | .env.production.local
15 |
16 | npm-debug.log*
17 | yarn-debug.log*
18 | yarn-error.log*
19 |
20 | # testing
21 | # /build
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Visual Studio Code 中文社区
2 |
3 | 访问地址 https://vscode.liangtongzhuo.com
4 |
5 | 前端 GitHub 仓库 https://github.com/liangtongzhuo/vscodechina
6 |
7 | 后端 GitHub 仓库 https://github.com/liangtongzhuo/vscodechina_server
8 |
9 | 作者 Blog http://liangtongzhuo.com
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/auto_deploy.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # 目录下执行下列语句,后台启动 shell,日志输出到 auto_deploy.log
3 | # nohup ./auto_deploy.sh > auto_deploy.log 2>&1 &
4 | # ps auxf | grep 'auto_deploy' 查看后台运行的脚步的 id,
5 | # kill id 杀死脚本
6 |
7 | while true
8 | do
9 | git remote update
10 | LOCAL=$(git rev-parse @)
11 | REMOTE=$(git rev-parse "origin/master")
12 | if [ $LOCAL = $REMOTE ];then
13 | echo "up-to-date"
14 | else
15 | git checkout master
16 | # 拉取代码服务器编译 git pull && npm install && npm run build
17 | # 本地编译自动拉取代码
18 | git pull
19 | fi
20 | sleep 30 #每 30 秒循环一次
21 | done
22 |
23 |
--------------------------------------------------------------------------------
/build/asset-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "index.css": "static/css/index.971f281d.css",
3 | "index.css.map": "static/css/index.971f281d.css.map",
4 | "index.js": "static/js/index.13f45f17.js",
5 | "index.js.map": "static/js/index.13f45f17.js.map",
6 | "oauth.css": "static/css/oauth.02c39b1d.css",
7 | "oauth.css.map": "static/css/oauth.02c39b1d.css.map",
8 | "oauth.js": "static/js/oauth.b873a604.js",
9 | "oauth.js.map": "static/js/oauth.b873a604.js.map"
10 | }
--------------------------------------------------------------------------------
/build/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/liangtongzhuo/vscodechina/180598eb680db575d4cea029a0b03896b174aa86/build/favicon.ico
--------------------------------------------------------------------------------
/build/index.html:
--------------------------------------------------------------------------------
1 |
vscodechina
--------------------------------------------------------------------------------
/build/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | }
10 | ],
11 | "start_url": "./index.html",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/build/oauth.html:
--------------------------------------------------------------------------------
1 | vscodechina
--------------------------------------------------------------------------------
/build/service-worker.js:
--------------------------------------------------------------------------------
1 | "use strict";function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}var precacheConfig=[["./index.html","f3095842b5373801bec1dea09f75abd1"],["./oauth.html","b17edc1560dc76ad880990a199e4cee5"],["./static/css/index.971f281d.css","0b210c94b8dfff9777f1318e2d90a978"],["./static/css/oauth.02c39b1d.css","dc0a2926c8be7e98969b737a9672a72d"],["./static/js/index.13f45f17.js","ddc35da17dfa6cd6cf667d16f8d02550"],["./static/js/oauth.b873a604.js","c70f0595b926e5e298f0b05a3c1704ed"]],cacheName="sw-precache-v3-sw-precache-webpack-plugin-"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){if(!e.redirected)return Promise.resolve(e);return("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})})},createCacheKey=function(e,t,n,r){var a=new URL(e);return r&&a.pathname.match(r)||(a.search+=(a.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),a.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.hash="",n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],r=new URL(t,self.location),a=createCacheKey(r,hashParamName,n,/\.\w{8}\./);return[r.toString(),a]}));self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var r=new Request(n,{credentials:"same-origin"});return fetch(r).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching),r="index.html";(t=urlsToCacheKeys.has(n))||(n=addDirectoryIndex(n,r),t=urlsToCacheKeys.has(n));var a="./index.html";!t&&"navigate"===e.request.mode&&isPathWhitelisted(["^(?!\\/__).*"],e.request.url)&&(n=new URL(a,self.location).toString(),t=urlsToCacheKeys.has(n)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}});
--------------------------------------------------------------------------------
/build/static/css/index.971f281d.css:
--------------------------------------------------------------------------------
1 | .LinearProgress{position:fixed!important;top:0;left:0;width:100%;background-color:#b8d1ff;z-index:10}.LinearProgress>div{background:#0f88eb}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,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) format("woff")}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#6a737d}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#005cc5}.markdown-body .pl-e,.markdown-body .pl-en{color:#6f42c1}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#24292e}.markdown-body .pl-ent{color:#22863a}.markdown-body .pl-k{color:#d73a49}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#032f62}.markdown-body .pl-smw,.markdown-body .pl-v{color:#e36209}.markdown-body .pl-bu{color:#b31d28}.markdown-body .pl-ii{color:#fafbfc;background-color:#b31d28}.markdown-body .pl-c2{color:#fafbfc;background-color:#d73a49}.markdown-body .pl-c2:before{content:"^M"}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#22863a}.markdown-body .pl-ml{color:#735c0f}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#005cc5}.markdown-body .pl-mi{font-style:italic;color:#24292e}.markdown-body .pl-mb{font-weight:700;color:#24292e}.markdown-body .pl-md{color:#b31d28;background-color:#ffeef0}.markdown-body .pl-mi1{color:#22863a;background-color:#f0fff4}.markdown-body .pl-mc{color:#e36209;background-color:#ffebda}.markdown-body .pl-mi2{color:#f6f8fa;background-color:#005cc5}.markdown-body .pl-mdr{font-weight:700;color:#6f42c1}.markdown-body .pl-ba{color:#586069}.markdown-body .pl-sg{color:#959da5}.markdown-body .pl-corl{text-decoration:underline;color:#032f62}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit;font-weight:bolder}.markdown-body h1{margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:monospace,monospace;font-size:1em}.markdown-body hr{-webkit-box-sizing:content-box;box-sizing:content-box;overflow:visible}.markdown-body input{font:inherit;margin:0;overflow:visible}.markdown-body [type=checkbox]{padding:0}.markdown-body *,.markdown-body [type=checkbox]{-webkit-box-sizing:border-box;box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#0366d6;text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border-bottom:1px solid #dfe2e5}.markdown-body hr:after,.markdown-body hr:before{display:table;content:""}.markdown-body hr:after{clear:both}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code,.markdown-body pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px}.markdown-body pre{margin-top:0;margin-bottom:0}.markdown-body .octicon{vertical-align:text-bottom}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:4px!important}.markdown-body .pl-2{padding-left:8px!important}.markdown-body .pl-3{padding-left:16px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:32px!important}.markdown-body .pl-6{padding-left:40px!important}.markdown-body:after,.markdown-body:before{display:table;content:""}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{font-size:11px;border:1px solid #c6cbd1;border-bottom-color:#959da5;-webkit-box-shadow:inset 0 -1px 0 #959da5;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{font-size:2em}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eaecef}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#6a737d}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body img{max-width:100%;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body code{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}.markdown-body code:after,.markdown-body code:before{letter-spacing:-.2em;content:"\A0"}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}.markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:1px solid #d1d5da;border-bottom-color:#c6cbd1;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 #c6cbd1;box-shadow:inset 0 -1px 0 #c6cbd1}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.atricleItem{margin-bottom:10px;padding:10px 20px 15px;border-radius:2px;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.atricleItem .span{font-size:15px;color:#8590a6}.atricleItem .user{margin-top:10px;-ms-flex-pack:justify;justify-content:space-between}.atricleItem .user,.atricleItem .user .left{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.atricleItem .user .headimg{width:24px;height:24px;border-radius:10%}.atricleItem .user .name{margin-left:10px;font-weight:700;font-size:15px;color:#262626;text-decoration:none}.atricleItem .user .github{margin-left:10px;font-size:12px;color:#8590a6}.atricleItem .user .time{text-align:left;color:#8590a6;font-size:15px;width:100px;text-align:right}.atricleItem .h1{font-size:18px}.atricleItem>.content{display:-ms-flexbox;display:flex;cursor:pointer}.atricleItem .content .img{width:190px;height:105px;border-radius:4px;background-position:50%;background-size:cover;background-repeat:no-repeat;margin-right:10px}.atricleItem .content .info{-ms-flex:1 1;flex:1 1;font-size:15px;line-height:1.6em;color:#262626;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif}.atricleItem .content .info:hover{color:#8590a6}.atricleItem .tool{margin-top:10px;display:-ms-flexbox;display:flex}.atricleItem .tool .right-button{display:-ms-flexbox;display:flex;-ms-flex:1 1;flex:1 1;-ms-flex-pack:end;justify-content:flex-end}.atricleItem .tool .right-button .button .button-transform{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.atricleItem .button{min-width:0;margin-right:3px;line-height:1em;min-height:0;color:#8590a6}.atricleItem .buttonBlue{background-color:#0f88eb!important;color:#fff}.atricleItem .button-border{background-color:rgba(0,0,0,.12)}.atricleItem .read{padding:3px 2px}@media (max-width:1024px){.atricleItem>.content{-ms-flex-wrap:wrap;flex-wrap:wrap}.atricleItem .content .img{width:100%;height:150px;margin:1px}.atricleItem .content .info{margin-top:15px}.atricleItem .read{margin-left:-10px}.atricleItem .button{margin-right:10px;padding:8px 5px 8px 10px}.atricleItem .tool .reply-butoon{display:none}}.messagesList{border:1px solid #e7eaf2;border-radius:4px;margin-top:12px}.messagesList .messagesCount{font-size:15px;font-weight:600;color:#1e1e1e;padding:10px 15px;border-bottom:1px solid #e7eaf2}.messagesList .messages{font-size:15px}.messagesList .messages .head{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:10px 15px 0}.messagesList .messages .head .headimg{width:24px;height:24px;border-radius:10%}.messagesList .messages .head a{margin-left:10px}.messagesList .messages .head span{display:-ms-flexbox;display:flex;-ms-flex:1 1;flex:1 1;-ms-flex-pack:end;justify-content:flex-end;margin-left:10px;color:#8590a6;font-size:15px}.messagesList .messages .content{padding:15px;overflow:hidden}.messagesList .messages .messagetool{padding-left:10px;padding-bottom:7px;border-bottom:1px solid #e7eaf2}.messagesList .messages .messagetool button{padding:7px 8px}.messagesList .messages .messagetool .buttonColor{background-color:#0f88eb;color:#fff}.messagesList .messages .replyMessage{display:-ms-flexbox;display:flex;-ms-flex-align:end;align-items:flex-end;-ms-flex-pack:justify;justify-content:space-between}.messagesList .messages .replyMessage textarea{-ms-flex:1 1;flex:1 1;height:35px;margin:10px;padding:7px;border:1px solid #e7eaf1;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:2px;font-size:15px}.messagesList .messages .replyMessage button{margin:10px 10px 10px 0;min-width:0;height:30px;background:#0f88eb;color:#fff}.header{position:fixed;top:0;width:100%;-webkit-box-shadow:0 1px 3px 0 rgba(0,34,77,.1);box-shadow:0 1px 3px 0 rgba(0,34,77,.1);background:#fff;z-index:1}.header .container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap}.header .logo{font-size:20px;line-height:50px;text-decoration:none;font-weight:800;color:#000}.header nav{margin-left:15px;display:inline-block}.header nav .button{padding:0;min-width:0;min-height:0}.header nav .a{text-decoration:none;font-size:15px;padding:3px 15px}.header nav .selected{color:#333}.header .right{-ms-flex:1 1;flex:1 1;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;-ms-flex-align:center;align-items:center}.header .right .bell .tag{position:absolute;font-size:12px;top:7px;left:7px;width:18px;height:18px;border-radius:50%;line-height:18px;background:#0f88eb;color:#fff}.header .right .button{background:#0f88eb;color:#fff;padding:3px;min-width:0;min-height:35px;width:80px}.header .right .a{text-decoration:none;font-size:15px;color:#fff;padding:7px}.header .right .bell{margin:0 20px}.header .right .headimg{width:32px;height:32px;border-radius:10%;cursor:pointer}#menuList{margin-top:43px}@media (max-width:1024px){.header .logo{width:100%;display:block}.header .container .left{width:100%;text-align:center}.header .container .right{width:100%;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.header .right .buttonw{display:none}.header .right .button{width:100%;padding:6px}.header .right .bell{margin:0 20px 0 0}.header .right .login{margin:8px}}.home{padding-top:60px}.home .left{display:inline-block;width:70%}.home .right{display:inline-block;position:fixed;width:300px}.home .right .card{margin-left:10px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);background:#fff;padding:10px;color:#8590a6;font-size:14px;line-height:25px}.home .footer{margin-left:13px;margin-top:5px}.home .footer .footer-dot{font-size:13px;line-height:2;color:#8590a6}.home .footer .footer-dot:after{margin:0 5px;content:"\B7"}.home .footer .footer-item{text-decoration:none;display:inline-block;font-size:13px;color:#8590a6}.home .moblie{display:none}@media (max-width:1024px){.home{padding-top:135px}.home .left{width:100%}.home .right{display:none}.home .moblie{display:block}}.write .head{height:50px;-webkit-box-shadow:0 1px 3px 0 rgba(0,34,77,.1);box-shadow:0 1px 3px 0 rgba(0,34,77,.1);background:#fff;padding:0 20px;display:-ms-flexbox;display:flex;overflow:hidden}.write .head input{font-size:20px;outline:none;border:none;font-weight:700;color:#000;-ms-flex:1 1;flex:1 1}.write .head>div,.write .head input{display:-ms-flexbox;display:flex;margin:0;padding:0}.write .head>div{-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-align:center;align-items:center;-ms-flex:1 1;flex:1 1}.write .head div .button{margin:0 10px;padding:10px 20px;min-width:0;height:30px;background:#0f88eb;color:#fff}.write .head div .upfile{position:relative;margin:0 10px;padding:10px 20px;width:70px;height:30px;line-height:30px;background:#f3f3f3;cursor:pointer}.write .head div .upfile input{position:absolute;right:0;top:0;height:50px;width:110px;opacity:0;cursor:pointer}.write .head div .menu{margin-right:10px;background:#f3f3f3;cursor:pointer}.write .content{display:-ms-flexbox;display:flex;position:absolute;height:calc(100% - 50px);width:100%}.write .content .wr{display:-ms-flexbox;display:flex;-ms-flex:1 1;flex:1 1;-webkit-box-sizing:border-box;box-sizing:border-box}.write .content .wr textarea{width:100%;height:100%;font-size:15px;line-height:25px;resize:none;outline:none;border:none;background:#f3f3f3}.write .content .show,.write .content .wr textarea{padding:20px;-webkit-box-sizing:border-box;box-sizing:border-box}.write .content .show{overflow:hidden;display:inline-block;-ms-flex:1 1;flex:1 1;overflow-y:auto}.login{position:absolute;width:100%;height:100%;-ms-flex-pack:center;justify-content:center}.login,.login .box{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.login .box{padding:50px 0;max-height:700px;max-width:400px;width:80%;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(26,26,26,.1);box-shadow:0 1px 3px rgba(26,26,26,.1);background:#fff;-ms-flex-direction:column;flex-direction:column}.login .box h1{margin:0;text-align:center;cursor:pointer}.login .box .item{width:80%;margin-top:20px}.login .box .itemButton{display:-ms-flexbox;display:flex;width:80%;margin-top:30px;-ms-flex-pack:justify;justify-content:space-between}.login .box .itemButton .button{padding:0;width:45%}.login .box .itemButton .blue{color:#fff;background:#0f88eb}.login .box .buttonGithub,.login .box .buttonGithub-blue{margin-top:30px;padding:0;width:80%}.login .box .buttonGithub-blue{color:#fff;background:#0f88eb}.login .box .findPsw{margin-top:30px;padding:0;width:80%}.me .content{margin-top:60px;padding:20px 5% 55px;background-color:#fff;border-radius:2px;-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.05);box-shadow:0 1px 2px 0 rgba(0,0,0,.05);width:70%;-webkit-box-sizing:border-box;box-sizing:border-box}.me .content .cell{display:-ms-flexbox;display:flex;-ms-flex-align:end;align-items:flex-end;margin-top:35px;-ms-flex:1 1;flex:1 1;-ms-flex-pack:justify;justify-content:space-between}.me .content .cell .item{width:100%}.me .content .button{color:#fff;background:#0f88eb;margin-top:10px}.me .content .cell .divb{display:-ms-flexbox;display:flex;margin-left:5%}.me .content .b{margin-top:10px}@media (max-width:1024px){.me .content{width:100%;margin-top:135px}.me .content .cell{-ms-flex-wrap:wrap;flex-wrap:wrap}.me .content .cell .divb{margin:0;-ms-flex:1 1;flex:1 1;margin-top:20px;-ms-flex-pack:center;justify-content:center}.me .content .cell .button{width:100%}}.read{padding-top:60px}.atircleMessage{padding:10px 20px;line-height:22px;font-size:14px}.atircleMessage .color{color:#000}.atircleMessage a{text-decoration:underline;cursor:pointer}.atricle{padding-top:60px;display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-wrap:wrap;flex-wrap:wrap}.atricle .acontent{width:100%;height:420px;padding:0;background-color:#fff;border-radius:2px;-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.05);box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.atricle .acontent .head .usercover-image{background-image:url(http://ac-u4d6tl1h.clouddn.com/1e770fcdeee681ab919d.jpg);background-position:50%;background-size:cover;background-repeat:no-repeat;width:100%;height:250px}.atricle .acontent .head .info{display:-ms-flexbox;display:flex}.atricle .acontent .head .info .div-user-image{display:-ms-inline-flexbox;display:inline-flex;padding:1px;background:#fff;border:4px solid #fff;border-radius:8px;position:relative;top:-30px;left:20px;overflow:hidden}.atricle .acontent .head .info .div-user-image img{width:100%;height:100%;border-radius:4px}.atricle .acontent .head .info .name{margin-left:50px;font-size:26px;font-weight:600}.atricle .acontent .head .info .name a{font-size:12px;color:#8590a6;margin-left:10px;line-height:20px}.atricle .acontent .head .info .name .bio{font-weight:400;margin-top:10px;font-size:17px}.atricle .left{width:70%;padding-top:10px}.atricle .left,.atricle .right{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box}.atricle .right{padding:10px 0 0 10px;width:300px}.atricle .atriclecart{border-radius:2px;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);padding-bottom:20px}.atricle .right .atriclecart .right-title{font-weight:600;color:#646464;font-size:15px;padding:20px;border-bottom:1px solid #f6f6f6}.atricle .right .atriclecart .right-item{padding:20px 20px 0;color:#646464;font-size:15px}@media (max-width:1024px){.atricle{padding-top:135px}.atricle .left{width:100%}.atricle .right{width:100%;padding:10px 0 0}.atricle .acontent .head .info .div-user-image{display:-ms-inline-flexbox;display:inline-flex;padding:1px;border:4px solid #fff;border-radius:4px;width:100px;height:100px}}.notice .content{margin-top:60px;padding:20px 5% 55px;background-color:#fff;border-radius:2px;-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.05);box-shadow:0 1px 2px 0 rgba(0,0,0,.05);width:70%;-webkit-box-sizing:border-box;box-sizing:border-box}@media (max-width:1024px){.notice .content{margin-top:135px;width:100%}}body{margin:0;padding:0;overflow-y:scroll;background:#f3f3f3;word-break:break-word}.g-container{max-width:1000px;margin:0 auto}.g-color-gray{color:#8590a6}.g-color-gray-fill{fill:#9fadc7}.g-color-white-fill{fill:#fff}
2 | /*# sourceMappingURL=index.971f281d.css.map*/
--------------------------------------------------------------------------------
/build/static/css/oauth.02c39b1d.css:
--------------------------------------------------------------------------------
1 | .LinearProgress{position:fixed!important;top:0;left:0;width:100%;background-color:#b8d1ff;z-index:10}.LinearProgress>div{background:#0f88eb}body{margin:0;padding:0;overflow-y:scroll;background:#f3f3f3;word-break:break-word}.oauth{position:absolute;width:100%;height:100%;-ms-flex-pack:center;justify-content:center}.oauth,.oauth .box{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.oauth .box{padding:50px 0;max-height:700px;max-width:400px;width:80%;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(26,26,26,.1);box-shadow:0 1px 3px rgba(26,26,26,.1);background:#fff;-ms-flex-direction:column;flex-direction:column}.oauth .box .button{background:#0f88eb;color:#fff;padding:10px;width:80%;min-width:0;min-height:0}
2 | /*# sourceMappingURL=oauth.02c39b1d.css.map*/
--------------------------------------------------------------------------------
/build/static/css/oauth.02c39b1d.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["js/component/progress/progress.css","js/oauth/oauth.css"],"names":[],"mappings":"AAAA,gBACI,yBACA,MACA,OACA,WACA,yBACA,UAAY,CAGhB,oBACI,kBAAoB,CCVxB,KACI,SACA,UACA,kBACA,mBACA,qBAAuB,CAG3B,OACI,kBAGA,WACA,YACA,qBACI,sBAAwB,CAKhC,mBAVI,oBACA,aAKA,sBACI,kBAAoB,CAoB3B,YAhBG,eACA,iBACA,gBACA,UAGA,8BACQ,sBACR,kBACA,+CACQ,uCACR,gBAGA,0BACI,qBAAuB,CAG/B,oBACI,mBACA,WACA,aACA,UACA,YACA,YAAc","file":"static/css/oauth.02c39b1d.css","sourcesContent":[".LinearProgress {\n position: fixed !important;\n top: 0;\n left: 0;\n width: 100%;\n background-color: #b8d1ff;\n z-index: 10;\n}\n\n.LinearProgress > div{\n background: #0f88eb;;\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/component/progress/progress.css","body {\n margin: 0;\n padding: 0;\n overflow-y: scroll; \n background: #f3f3f3;\n word-break: break-word;\n}\n\n.oauth {\n position: absolute;\n display: -ms-flexbox;\n display: flex;\n width: 100%;\n height: 100%;\n -ms-flex-pack: center;\n justify-content: center;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.oauth .box{\n padding: 50px 0;\n max-height: 700px;\n max-width: 400px;\n width: 80%;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n border-radius: 2px;\n -webkit-box-shadow: 0 1px 3px rgba(26,26,26,.1);\n box-shadow: 0 1px 3px rgba(26,26,26,.1);\n background: #fff;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n.oauth .box .button{\n background: #0f88eb;\n color: #ffffff;\n padding: 10px;\n width: 80%;\n min-width: 0;\n min-height: 0;\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/oauth/oauth.css"],"sourceRoot":""}
--------------------------------------------------------------------------------
/config/env.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const fs = require('fs');
4 | const path = require('path');
5 | const paths = require('./paths');
6 |
7 | // Make sure that including paths.js after env.js will read .env variables.
8 | delete require.cache[require.resolve('./paths')];
9 |
10 | const NODE_ENV = process.env.NODE_ENV;
11 | if (!NODE_ENV) {
12 | throw new Error(
13 | 'The NODE_ENV environment variable is required but was not specified.'
14 | );
15 | }
16 |
17 | // https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use
18 | var dotenvFiles = [
19 | `${paths.dotenv}.${NODE_ENV}.local`,
20 | `${paths.dotenv}.${NODE_ENV}`,
21 | // Don't include `.env.local` for `test` environment
22 | // since normally you expect tests to produce the same
23 | // results for everyone
24 | NODE_ENV !== 'test' && `${paths.dotenv}.local`,
25 | paths.dotenv,
26 | ].filter(Boolean);
27 |
28 | // Load environment variables from .env* files. Suppress warnings using silent
29 | // if this file is missing. dotenv will never modify any environment variables
30 | // that have already been set.
31 | // https://github.com/motdotla/dotenv
32 | dotenvFiles.forEach(dotenvFile => {
33 | if (fs.existsSync(dotenvFile)) {
34 | require('dotenv').config({
35 | path: dotenvFile,
36 | });
37 | }
38 | });
39 |
40 | // We support resolving modules according to `NODE_PATH`.
41 | // This lets you use absolute paths in imports inside large monorepos:
42 | // https://github.com/facebookincubator/create-react-app/issues/253.
43 | // It works similar to `NODE_PATH` in Node itself:
44 | // https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
45 | // Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored.
46 | // Otherwise, we risk importing Node.js core modules into an app instead of Webpack shims.
47 | // https://github.com/facebookincubator/create-react-app/issues/1023#issuecomment-265344421
48 | // We also resolve them to make sure all tools using them work consistently.
49 | const appDirectory = fs.realpathSync(process.cwd());
50 | process.env.NODE_PATH = (process.env.NODE_PATH || '')
51 | .split(path.delimiter)
52 | .filter(folder => folder && !path.isAbsolute(folder))
53 | .map(folder => path.resolve(appDirectory, folder))
54 | .join(path.delimiter);
55 |
56 | // Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be
57 | // injected into the application via DefinePlugin in Webpack configuration.
58 | const REACT_APP = /^REACT_APP_/i;
59 |
60 | function getClientEnvironment(publicUrl) {
61 | const raw = Object.keys(process.env)
62 | .filter(key => REACT_APP.test(key))
63 | .reduce(
64 | (env, key) => {
65 | env[key] = process.env[key];
66 | return env;
67 | },
68 | {
69 | // Useful for determining whether we’re running in production mode.
70 | // Most importantly, it switches React into the correct mode.
71 | NODE_ENV: process.env.NODE_ENV || 'development',
72 | // Useful for resolving the correct path to static assets in `public`.
73 | // For example,
.
74 | // This should only be used as an escape hatch. Normally you would put
75 | // images into the `src` and `import` them in code to get their paths.
76 | PUBLIC_URL: publicUrl,
77 | }
78 | );
79 | // Stringify all values so we can feed into Webpack DefinePlugin
80 | const stringified = {
81 | 'process.env': Object.keys(raw).reduce((env, key) => {
82 | env[key] = JSON.stringify(raw[key]);
83 | return env;
84 | }, {}),
85 | };
86 |
87 | return { raw, stringified };
88 | }
89 |
90 | module.exports = getClientEnvironment;
91 |
--------------------------------------------------------------------------------
/config/jest/cssTransform.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | // This is a custom Jest transformer turning style imports into empty objects.
4 | // http://facebook.github.io/jest/docs/tutorial-webpack.html
5 |
6 | module.exports = {
7 | process() {
8 | return 'module.exports = {};';
9 | },
10 | getCacheKey() {
11 | // The output is always the same.
12 | return 'cssTransform';
13 | },
14 | };
15 |
--------------------------------------------------------------------------------
/config/jest/fileTransform.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 |
5 | // This is a custom Jest transformer turning file imports into filenames.
6 | // http://facebook.github.io/jest/docs/tutorial-webpack.html
7 |
8 | module.exports = {
9 | process(src, filename) {
10 | return `module.exports = ${JSON.stringify(path.basename(filename))};`;
11 | },
12 | };
13 |
--------------------------------------------------------------------------------
/config/paths.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 | const fs = require('fs');
5 | const url = require('url');
6 |
7 | // Make sure any symlinks in the project folder are resolved:
8 | // https://github.com/facebookincubator/create-react-app/issues/637
9 | const appDirectory = fs.realpathSync(process.cwd());
10 | const resolveApp = relativePath => path.resolve(appDirectory, relativePath);
11 |
12 | const envPublicUrl = process.env.PUBLIC_URL;
13 |
14 | function ensureSlash(path, needsSlash) {
15 | const hasSlash = path.endsWith('/');
16 | if (hasSlash && !needsSlash) {
17 | return path.substr(path, path.length - 1);
18 | } else if (!hasSlash && needsSlash) {
19 | return `${path}/`;
20 | } else {
21 | return path;
22 | }
23 | }
24 |
25 | const getPublicUrl = appPackageJson =>
26 | envPublicUrl || require(appPackageJson).homepage;
27 |
28 | // We use `PUBLIC_URL` environment variable or "homepage" field to infer
29 | // "public path" at which the app is served.
30 | // Webpack needs to know it to put the right