From f8ff4d304c98476cc0037c73e4b4847069f9935c Mon Sep 17 00:00:00 2001 From: ling <450044101@qq.com> Date: Sat, 7 Jan 2017 04:56:47 +0800 Subject: [PATCH 01/12] Add static version generator --- build.js | 46 +++++++++++++++++++++ package.json | 13 +++--- server.js | 46 --------------------- src/components/header.vue | 12 +++--- src/model.js | 84 ++++++--------------------------------- src/storage.js | 70 -------------------------------- 6 files changed, 72 insertions(+), 199 deletions(-) create mode 100644 build.js delete mode 100644 server.js delete mode 100644 src/storage.js diff --git a/build.js b/build.js new file mode 100644 index 0000000..7c778ba --- /dev/null +++ b/build.js @@ -0,0 +1,46 @@ +require("babel-register"); +require('colors'); +require('stripmargin').inject(); +let fetch = require('node-fetch'); +let fs = require('bluebird').promisifyAll(require('fs')); +let { owner, repo } = require('./src/const'); + +(async function () { + let posts = (await (await fetch(`https://api.github.com/repos/${owner}/${repo}/issues?filter=created&state=all`)).json()) + .filter(post => post.state !== 'close') + .map(post => { + return { + title: post.title, + state: post.state, + number: post.number, + body: post.body, + date: post.created_at, + tags: post.labels.map(label => { + return { + name: label.name, + color: label.color + }; + }) + } + }); + let code = ` + let posts = ${JSON.stringify(posts)}; + export const Post = { + | async get(no) { + | let post = posts.find(post=>post.number == no); + | if(post){ + | return post; + | }else{ + | throw new Error('Post not found'); + | } + | }, + | async all() { + | return posts; + | } + }`.stripMargin(); + await fs.writeFileAsync('./src/model.js', code, { encoding: 'utf-8' }); + require('./build/build.js'); +})() + .catch(e => { + console.error(e.toString().red); + }); diff --git a/package.json b/package.json index 2f56d2d..c20a51b 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,7 @@ "author": "ling", "private": true, "scripts": { - "dev": "node build/dev-server.js", - "build": "node build/build.js", - "serve": "node server.js" + "build": "node --harmony_async_await build.js" }, "dependencies": { "animate.css": "^3.5.2", @@ -21,8 +19,7 @@ "muse-ui": "^2.0.0-alpha.8", "roboto-fontface": "^0.6.0", "vue": "^2.1.6", - "vue-router": "^2.1.1", - "whatwg-fetch": "^2.0.1" + "vue-router": "^2.1.1" }, "devDependencies": { "autoprefixer": "^6.6.0", @@ -32,7 +29,9 @@ "babel-preset-es2015": "^6.0.0", "babel-preset-stage-2": "^6.0.0", "babel-register": "^6.0.0", + "bluebird": "^3.4.7", "chalk": "^1.1.3", + "colors": "^1.1.2", "compression": "^1.6.2", "connect-history-api-fallback": "^1.1.0", "css-loader": "^0.26.1", @@ -47,12 +46,14 @@ "less": "^2.7.1", "less-loader": "^2.2.3", "morgan": "^1.7.0", + "node-fetch": "^1.6.3", "node-sass": "^4.1.1", "opn": "^4.0.2", "ora": "^0.4.0", "sass-loader": "^4.1.1", "semver": "^5.3.0", "shelljs": "^0.7.4", + "stripmargin": "^1.0.7", "url-loader": "^0.5.7", "vue-loader": "^10.0.2", "vue-style-loader": "^1.0.0", @@ -63,7 +64,7 @@ "webpack-merge": "^2.0.0" }, "engines": { - "node": ">= 4.0.0", + "node": ">= 7.0.0", "npm": ">= 3.0.0" } } diff --git a/server.js b/server.js deleted file mode 100644 index 3f3b103..0000000 --- a/server.js +++ /dev/null @@ -1,46 +0,0 @@ -let path = require('path'); -let express = require('express'); -let http = require('http'); -let https = require('https'); -let fs = require('fs'); - -let app = express(); - -app.disable('x-powered-by'); -app.set('env', 'production'); - -app.use(require('morgan')('tiny')); -app.use(require('compression')()); -// Content-Security-Policy -app.use(function (req, res, next) { - if (req.secure && req.get('Upgrade-Insecure-Requests') == 1) { - res.set('Content-Security-Policy', 'upgrade-insecure-requests'); - } - next(); -}); - -app.use(express.static(path.join(__dirname + '/dist'), { - maxAge: 1e3 * 3600 * 24, - setHeaders: function (res, path, stat) { - console.log(path); - if (path.endsWith('index.html')) { - res.set('Cache-Control', 'private, max-age=0'); - } - } -})); - -http.createServer(app).listen(80); - -let key = path.join(__dirname, '/https', 'ssl.key'); -let cert = path.join(__dirname, '/https', 'ssl.crt'); - -if (fs.existsSync(key) && fs.existsSync(cert)) { - https.createServer({ - key: fs.readFileSync(key), - cert: fs.readFileSync(cert) - }, - app - ).listen(443); -} - - diff --git a/src/components/header.vue b/src/components/header.vue index 0726f16..b90eb9f 100644 --- a/src/components/header.vue +++ b/src/components/header.vue @@ -34,6 +34,7 @@ .tags { display: flex; flex-wrap: wrap; + justify-content: space-around; } .icon { & { @@ -69,7 +70,7 @@ -
diff --git a/package.json b/package.json index c20a51b..0850337 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,9 @@ "muse-ui": "^2.0.0-alpha.8", "roboto-fontface": "^0.6.0", "vue": "^2.1.6", - "vue-router": "^2.1.1" + "vue-duoshuo": "^1.0.2", + "vue-router": "^2.1.1", + "whatwg-fetch": "^2.0.1" }, "devDependencies": { "autoprefixer": "^6.6.0", diff --git a/src/components/post.vue b/src/components/post.vue index 65c4221..c7d670d 100644 --- a/src/components/post.vue +++ b/src/components/post.vue @@ -18,7 +18,9 @@ -
+
+ +
@@ -84,6 +86,7 @@ import { owner, repo, site_name } from '../const' import Utils from '../mixin' import { Post } from '../model' +import DuoShuo from 'vue-duoshuo' export default{ name: 'Post', @@ -100,19 +103,9 @@ export default{ message: '' } }, - mounted(){ - if(!this.locked){ - let el = document.createElement('div'); - el.setAttribute('data-thread-key', this.$route.params.number); - el.setAttribute('data-url', document.location.href); - DUOSHUO.EmbedThread(el); - let comment_el = document.querySelector('#comment-box'); - if(comment_el){ - comment_el.innerHTML = ''; - if(comment_el.append){ - comment_el.append(el); - } - } + computed:{ + thread(){ + return this.$route.params.number; } }, async created(){ @@ -133,6 +126,9 @@ export default{ close_snackbar(){ this.snackbar = false; } + }, + components: { + DuoShuo } } From 5447458feb5b9ecb843c677f32644e5886ec7f1d Mon Sep 17 00:00:00 2001 From: shyling Date: Thu, 26 Jan 2017 22:47:13 +0800 Subject: [PATCH 07/12] Add atom rss support --- build.js | 27 +++++++++++++++++++++++++-- package.json | 1 + src/const.js | 1 + src/main.js | 1 + src/mixin.js | 19 ++----------------- src/utils.js | 23 ++++++++++++++++++++++- 6 files changed, 52 insertions(+), 20 deletions(-) diff --git a/build.js b/build.js index 1691098..610d5ec 100644 --- a/build.js +++ b/build.js @@ -3,10 +3,23 @@ require('colors'); require('stripmargin').inject(); let fetch = require('node-fetch'); let fs = require('bluebird').promisifyAll(require('fs')); -let { owner, repo } = require('./src/const'); +let RSS = require('rss'); +let consts = require('./src/const'); +let shell = require('shelljs'); +let { marked } = require('./src/utils'); + + +let feed = new RSS({ + title: consts.site_name, + description: consts.site_description, + feed_url: `${consts.site_url}/atom.xml`, + site_url: consts.site_url, + image_url: `${consts.site_url}/favicon.ico`, + webMaster: 'shyling' +}); (async function () { - let posts = (await (await fetch(`https://api.github.com/repos/${owner}/${repo}/issues?creator=${owner}&state=all`)).json()) + let posts = (await (await fetch(`https://api.github.com/repos/${consts.owner}/${consts.repo}/issues?creator=${consts.owner}&state=all`)).json()) .filter(post => post.state !== 'closed') .map(post => { return { @@ -23,6 +36,14 @@ let { owner, repo } = require('./src/const'); }) } }); + posts.forEach(post => { + feed.item({ + title: post.title, + description: marked(post.body), + url: `${consts.site_url}/#/post/${post.number}`, + guid: post.number.toString(), + }); + }) let code = ` let posts = ${JSON.stringify(posts)}; export const Post = { @@ -38,8 +59,10 @@ let { owner, repo } = require('./src/const'); | return posts; | } };`.stripMargin(); + shell.rm('-rf', 'dist'); await fs.writeFileAsync('./src/model.js', code, { encoding: 'utf-8' }); require('./build/build.js'); + await fs.writeFileAsync('./dist/atom.xml', feed.xml(), { encoding: 'utf-8' }); })() .catch(e => { console.error(e.toString().red); diff --git a/package.json b/package.json index 0850337..f54ea14 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "node-sass": "^4.1.1", "opn": "^4.0.2", "ora": "^0.4.0", + "rss": "^1.2.2", "sass-loader": "^4.1.1", "semver": "^5.3.0", "shelljs": "^0.7.4", diff --git a/src/const.js b/src/const.js index 9c9cd93..fbe66b5 100644 --- a/src/const.js +++ b/src/const.js @@ -4,6 +4,7 @@ import { genLinks } from './utils' export const owner = 'lingmm'; export const repo = 'IssueBlog'; export const site_name = '泠的博客'; +export const site_url = 'http://shyling.com' export const site_description = `この光が空を越えて羽ばたいてゆく diff --git a/src/main.js b/src/main.js index bfa96dd..5e1ae73 100644 --- a/src/main.js +++ b/src/main.js @@ -10,6 +10,7 @@ import 'roboto-fontface/css/roboto/roboto-fontface.css' import 'github-markdown-css/github-markdown.css' import 'animate.css/animate.css' import 'assets/style.scss' +import 'highlight.js/styles/github.css' import consts from './const' import App from './App' diff --git a/src/mixin.js b/src/mixin.js index 6f720bb..ee78c7a 100644 --- a/src/mixin.js +++ b/src/mixin.js @@ -1,25 +1,10 @@ -import marked from 'marked' import dateutil from 'dateutil' -import highlight from 'highlight.js' -import 'highlight.js/styles/github.css' +import { marked } from './utils' -marked.setOptions({ - renderer: new marked.Renderer(), - gfm: true, - tables: true, - breaks: true, - pedantic: false, - sanitize: false, - smartLists: true, - smartypants: false, - highlight: function (code) { - return highlight.highlightAuto(code).value; - } -}); export default { methods: { - marked: v => marked(v), + marked, init: v => { v = v || ''; let i = v.indexOf(''); diff --git a/src/utils.js b/src/utils.js index c93e473..f81c517 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,3 +1,7 @@ +import markdown from 'marked' +import highlight from 'highlight.js' + + // maybe need escape export const genLinks = links => { let out = ''; -} \ No newline at end of file +} + + +markdown.setOptions({ + renderer: new markdown.Renderer(), + gfm: true, + tables: true, + breaks: true, + pedantic: false, + sanitize: false, + smartLists: true, + smartypants: false, + highlight: function (code) { + return highlight.highlightAuto(code).value; + } +}); + +export const marked = t => markdown(t) \ No newline at end of file From 27c40699c4057630f101fd2371564275c97ed51e Mon Sep 17 00:00:00 2001 From: shyling Date: Sat, 21 Jan 2017 23:59:36 +0800 Subject: [PATCH 08/12] Add link --- src/const.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/const.js b/src/const.js index fbe66b5..51660e4 100644 --- a/src/const.js +++ b/src/const.js @@ -37,6 +37,7 @@ ouzz的博客|http://ouzz.me Just4fun|https://coolrc.me 御坂網路司令塔|https://misaka.genderqueer.gq Zhustec's Blog|http://blog.zhustec.me/ +石樱灯笼的博客|http://blog.catscarlet.com/ `); let about = ` From 49f8774a0c68db1ba40dc5209ef13b57cdb4e1b1 Mon Sep 17 00:00:00 2001 From: ling Date: Tue, 24 Jan 2017 22:58:47 +0800 Subject: [PATCH 09/12] Add link --- src/const.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/const.js b/src/const.js index 51660e4..19708c0 100644 --- a/src/const.js +++ b/src/const.js @@ -38,6 +38,7 @@ Just4fun|https://coolrc.me 御坂網路司令塔|https://misaka.genderqueer.gq Zhustec's Blog|http://blog.zhustec.me/ 石樱灯笼的博客|http://blog.catscarlet.com/ +千里冰封|http://ice1000.tech/ `); let about = ` From 71e70e47ed53c23adb8cac03011c848835541bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B3=A0?= Date: Tue, 14 Mar 2017 09:23:53 +0800 Subject: [PATCH 10/12] Update Info --- src/const.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/const.js b/src/const.js index 19708c0..8180e8c 100644 --- a/src/const.js +++ b/src/const.js @@ -44,7 +44,7 @@ Zhustec's Blog|http://blog.zhustec.me/ let about = ` 博主大四(目前正在实习ORZ),目前主要是Node相关 -目前坐标北京,住在某睡城。 +目前坐标北京,住在知春里。 专业三分热度,曾很喜欢Ruby、C++、OCaml,酱油Pythonist,偶尔写写前端,客串一下运维OvO。 From b0e3943a736329fe95683fac5cded73f69b3a530 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B3=A0?= Date: Tue, 14 Mar 2017 09:58:30 +0800 Subject: [PATCH 11/12] Add link --- src/const.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/const.js b/src/const.js index 8180e8c..baeb65a 100644 --- a/src/const.js +++ b/src/const.js @@ -39,6 +39,7 @@ Just4fun|https://coolrc.me Zhustec's Blog|http://blog.zhustec.me/ 石樱灯笼的博客|http://blog.catscarlet.com/ 千里冰封|http://ice1000.tech/ +Zelda's Blog|http://itsay.tech/ `); let about = ` From f4c84d0a0cebcdf69a06a96a8075584efbda8f5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B3=A0?= Date: Tue, 14 Mar 2017 10:01:15 +0800 Subject: [PATCH 12/12] Delete unneed configuation --- .vscode/settings.json | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 88439a0..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,6 +0,0 @@ -// 将设置放入此文件中以覆盖默认值和用户设置。 -{ - "files.associations": { - "*.vue": "vue" - } -}