├── .babelrc ├── .editorconfig ├── .gitignore ├── README.md ├── build ├── build.js ├── check-versions.js ├── dev-client.js ├── dev-server.js ├── utils.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── index.html ├── package.json ├── server ├── dateformate.js ├── index.js └── public │ ├── blog │ ├── index.html │ └── posts │ │ ├── Vue.js、Node.js打造个人博客(新手向).md │ │ ├── Vue初体验.md │ │ ├── 使用Hexo-GitHub-Pages快速构建个人博客指南.md │ │ ├── 咕啦前端规范之CSS.md │ │ └── 移动端HTML5开发总结-By-Cloud.md │ └── static │ ├── css │ ├── app.d4655a3d6fdb40e4e92681ec67711e8b.css │ └── app.d4655a3d6fdb40e4e92681ec67711e8b.css.map │ ├── img │ ├── github-10-xxl.8f65afc.png │ └── theme10-min.d20da16.jpg │ └── js │ ├── app.88900cf6936897de38cc.js │ ├── app.88900cf6936897de38cc.js.map │ ├── manifest.8842679756f1e67b9a3e.js │ ├── manifest.8842679756f1e67b9a3e.js.map │ ├── vendor.175b3be501bf00dba45d.js │ └── vendor.175b3be501bf00dba45d.js.map ├── src ├── App.vue ├── assets │ ├── Arrowhead-Down.png │ ├── Pedalo.mp3 │ ├── Twitter-logo.png │ ├── avatar.jpg │ ├── avatar.png │ ├── blog.jpg │ ├── github-10-xxl.png │ ├── lottery.jpg │ ├── rocket.png │ ├── scrollTop.png │ ├── sina-logo.png │ ├── theme1.jpg │ ├── theme10-min.jpg │ ├── theme10.jpg │ ├── theme2.jpg │ ├── theme3.jpg │ ├── theme4.jpg │ ├── theme5.jpg │ ├── theme6.jpg │ ├── theme7.jpg │ ├── theme8.jpg │ └── theme9.jpg ├── components │ └── scrollTop.vue ├── main.js ├── router.js └── views │ ├── about.vue │ ├── gallery.vue │ ├── home.vue │ ├── post.vue │ └── posts.vue └── static └── .gitkeep /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-2"], 3 | "plugins": ["transform-runtime"], 4 | "comments": false 5 | } 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # blog 2 | 3 | > A blog powered by node.js and vue.js 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | ``` 17 | 18 | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 19 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | // https://github.com/shelljs/shelljs 2 | require('./check-versions')() 3 | require('shelljs/global') 4 | env.NODE_ENV = 'production' 5 | 6 | var path = require('path') 7 | var config = require('../config') 8 | var ora = require('ora') 9 | var webpack = require('webpack') 10 | var webpackConfig = require('./webpack.prod.conf') 11 | 12 | console.log( 13 | ' Tip:\n' + 14 | ' Built files are meant to be served over an HTTP server.\n' + 15 | ' Opening index.html over file:// won\'t work.\n' 16 | ) 17 | 18 | var spinner = ora('building for production...') 19 | spinner.start() 20 | 21 | var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory) 22 | rm('-rf', assetsPath) 23 | mkdir('-p', assetsPath) 24 | cp('-R', 'static/*', assetsPath) 25 | 26 | webpack(webpackConfig, function (err, stats) { 27 | spinner.stop() 28 | if (err) throw err 29 | process.stdout.write(stats.toString({ 30 | colors: true, 31 | modules: false, 32 | children: false, 33 | chunks: false, 34 | chunkModules: false 35 | }) + '\n') 36 | }) 37 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | var semver = require('semver') 2 | var chalk = require('chalk') 3 | var packageConfig = require('../package.json') 4 | var exec = function (cmd) { 5 | return require('child_process') 6 | .execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | { 16 | name: 'npm', 17 | currentVersion: exec('npm --version'), 18 | versionRequirement: packageConfig.engines.npm 19 | } 20 | ] 21 | 22 | module.exports = function () { 23 | var warnings = [] 24 | for (var i = 0; i < versionRequirements.length; i++) { 25 | var mod = versionRequirements[i] 26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 27 | warnings.push(mod.name + ': ' + 28 | chalk.red(mod.currentVersion) + ' should be ' + 29 | chalk.green(mod.versionRequirement) 30 | ) 31 | } 32 | } 33 | 34 | if (warnings.length) { 35 | console.log('') 36 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 37 | console.log() 38 | for (var i = 0; i < warnings.length; i++) { 39 | var warning = warnings[i] 40 | console.log(' ' + warning) 41 | } 42 | console.log() 43 | process.exit(1) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /build/dev-server.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | var config = require('../config') 3 | if (!process.env.NODE_ENV) process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) 4 | var path = require('path') 5 | var express = require('express') 6 | var webpack = require('webpack') 7 | var opn = require('opn') 8 | var proxyMiddleware = require('http-proxy-middleware') 9 | var webpackConfig = require('./webpack.dev.conf') 10 | 11 | // default port where dev server listens for incoming traffic 12 | var port = process.env.PORT || config.dev.port 13 | // Define HTTP proxies to your custom API backend 14 | // https://github.com/chimurai/http-proxy-middleware 15 | var proxyTable = config.dev.proxyTable 16 | 17 | var app = express() 18 | var compiler = webpack(webpackConfig) 19 | 20 | var devMiddleware = require('webpack-dev-middleware')(compiler, { 21 | publicPath: webpackConfig.output.publicPath, 22 | stats: { 23 | colors: true, 24 | chunks: false 25 | } 26 | }) 27 | 28 | var hotMiddleware = require('webpack-hot-middleware')(compiler) 29 | // force page reload when html-webpack-plugin template changes 30 | compiler.plugin('compilation', function (compilation) { 31 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 32 | hotMiddleware.publish({ action: 'reload' }) 33 | cb() 34 | }) 35 | }) 36 | 37 | // proxy api requests 38 | Object.keys(proxyTable).forEach(function (context) { 39 | var options = proxyTable[context] 40 | if (typeof options === 'string') { 41 | options = { target: options } 42 | } 43 | app.use(proxyMiddleware(context, options)) 44 | }) 45 | 46 | // handle fallback for HTML5 history API 47 | app.use(require('connect-history-api-fallback')()) 48 | 49 | // serve webpack bundle output 50 | app.use(devMiddleware) 51 | 52 | // enable hot-reload and state-preserving 53 | // compilation error display 54 | app.use(hotMiddleware) 55 | 56 | // serve pure static assets 57 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) 58 | app.use(staticPath, express.static('./static')) 59 | 60 | module.exports = app.listen(port, function (err) { 61 | if (err) { 62 | console.log(err) 63 | return 64 | } 65 | var uri = 'http://localhost:' + port 66 | console.log('Listening at ' + uri + '\n') 67 | 68 | // when env is testing, don't need open it 69 | if (process.env.NODE_ENV !== 'testing') { 70 | opn(uri) 71 | } 72 | }) 73 | -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 4 | 5 | exports.assetsPath = function (_path) { 6 | var assetsSubDirectory = process.env.NODE_ENV === 'production' 7 | ? config.build.assetsSubDirectory 8 | : config.dev.assetsSubDirectory 9 | return path.posix.join(assetsSubDirectory, _path) 10 | } 11 | 12 | exports.cssLoaders = function (options) { 13 | options = options || {} 14 | // generate loader string to be used with extract text plugin 15 | function generateLoaders (loaders) { 16 | var sourceLoader = loaders.map(function (loader) { 17 | var extraParamChar 18 | if (/\?/.test(loader)) { 19 | loader = loader.replace(/\?/, '-loader?') 20 | extraParamChar = '&' 21 | } else { 22 | loader = loader + '-loader' 23 | extraParamChar = '?' 24 | } 25 | return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '') 26 | }).join('!') 27 | 28 | // Extract CSS when that option is specified 29 | // (which is the case during production build) 30 | if (options.extract) { 31 | return ExtractTextPlugin.extract('vue-style-loader', sourceLoader) 32 | } else { 33 | return ['vue-style-loader', sourceLoader].join('!') 34 | } 35 | } 36 | 37 | // http://vuejs.github.io/vue-loader/en/configurations/extract-css.html 38 | return { 39 | css: generateLoaders(['css']), 40 | postcss: generateLoaders(['css']), 41 | less: generateLoaders(['css', 'less']), 42 | sass: generateLoaders(['css', 'sass?indentedSyntax']), 43 | scss: generateLoaders(['css', 'sass']), 44 | stylus: generateLoaders(['css', 'stylus']), 45 | styl: generateLoaders(['css', 'stylus']) 46 | } 47 | } 48 | 49 | // Generate loaders for standalone style files (outside of .vue) 50 | exports.styleLoaders = function (options) { 51 | var output = [] 52 | var loaders = exports.cssLoaders(options) 53 | for (var extension in loaders) { 54 | var loader = loaders[extension] 55 | output.push({ 56 | test: new RegExp('\\.' + extension + '$'), 57 | loader: loader 58 | }) 59 | } 60 | return output 61 | } 62 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var utils = require('./utils') 4 | var projectRoot = path.resolve(__dirname, '../') 5 | 6 | var env = process.env.NODE_ENV 7 | // check env & config/index.js to decide weither to enable CSS Sourcemaps for the 8 | // various preprocessor loaders added to vue-loader at the end of this file 9 | var cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap) 10 | var cssSourceMapProd = (env === 'production' && config.build.productionSourceMap) 11 | var useCssSourceMap = cssSourceMapDev || cssSourceMapProd 12 | 13 | module.exports = { 14 | entry: { 15 | app: './src/main.js' 16 | }, 17 | output: { 18 | path: config.build.assetsRoot, 19 | publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath, 20 | filename: '[name].js' 21 | }, 22 | resolve: { 23 | extensions: ['', '.js', '.vue'], 24 | fallback: [path.join(__dirname, '../node_modules')], 25 | alias: { 26 | 'vue$': 'vue/dist/vue.common.js', 27 | 'src': path.resolve(__dirname, '../src'), 28 | 'assets': path.resolve(__dirname, '../src/assets'), 29 | 'components': path.resolve(__dirname, '../src/components') 30 | } 31 | }, 32 | resolveLoader: { 33 | fallback: [path.join(__dirname, '../node_modules')] 34 | }, 35 | module: { 36 | loaders: [ 37 | { 38 | test: /\.vue$/, 39 | loader: 'vue' 40 | }, 41 | { 42 | test: /\.js$/, 43 | loader: 'babel', 44 | include: projectRoot, 45 | exclude: /node_modules/ 46 | }, 47 | { 48 | test: /\.json$/, 49 | loader: 'json' 50 | }, 51 | { 52 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 53 | loader: 'url', 54 | query: { 55 | limit: 10000, 56 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 57 | } 58 | }, 59 | { 60 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 61 | loader: 'url', 62 | query: { 63 | limit: 10000, 64 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 65 | } 66 | } 67 | ] 68 | }, 69 | vue: { 70 | loaders: utils.cssLoaders({ sourceMap: useCssSourceMap }), 71 | postcss: [ 72 | require('autoprefixer')({ 73 | browsers: ['last 2 versions'] 74 | }) 75 | ] 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var config = require('../config') 2 | var webpack = require('webpack') 3 | var merge = require('webpack-merge') 4 | var utils = require('./utils') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | 8 | // add hot-reload related code to entry chunks 9 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 10 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 11 | }) 12 | 13 | module.exports = merge(baseWebpackConfig, { 14 | module: { 15 | loaders: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 16 | }, 17 | // eval-source-map is faster for development 18 | devtool: '#eval-source-map', 19 | plugins: [ 20 | new webpack.DefinePlugin({ 21 | 'process.env': config.dev.env 22 | }), 23 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 24 | new webpack.optimize.OccurenceOrderPlugin(), 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }) 33 | ] 34 | }) 35 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var utils = require('./utils') 4 | var webpack = require('webpack') 5 | var merge = require('webpack-merge') 6 | var baseWebpackConfig = require('./webpack.base.conf') 7 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 8 | var HtmlWebpackPlugin = require('html-webpack-plugin') 9 | var env = config.build.env 10 | 11 | var webpackConfig = merge(baseWebpackConfig, { 12 | module: { 13 | loaders: utils.styleLoaders({ sourceMap: config.build.productionSourceMap, extract: true }) 14 | }, 15 | devtool: config.build.productionSourceMap ? '#source-map' : false, 16 | output: { 17 | path: config.build.assetsRoot, 18 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 19 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 20 | }, 21 | vue: { 22 | loaders: utils.cssLoaders({ 23 | sourceMap: config.build.productionSourceMap, 24 | extract: true 25 | }) 26 | }, 27 | plugins: [ 28 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 29 | new webpack.DefinePlugin({ 30 | 'process.env': env 31 | }), 32 | new webpack.optimize.UglifyJsPlugin({ 33 | compress: { 34 | warnings: false 35 | } 36 | }), 37 | new webpack.optimize.OccurrenceOrderPlugin(), 38 | // extract css into its own file 39 | new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')), 40 | // generate dist index.html with correct asset hash for caching. 41 | // you can customize output by editing /index.html 42 | // see https://github.com/ampedandwired/html-webpack-plugin 43 | new HtmlWebpackPlugin({ 44 | filename: config.build.index, 45 | template: 'index.html', 46 | inject: true, 47 | minify: { 48 | removeComments: true, 49 | collapseWhitespace: true, 50 | removeAttributeQuotes: true 51 | // more options: 52 | // https://github.com/kangax/html-minifier#options-quick-reference 53 | }, 54 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 55 | chunksSortMode: 'dependency' 56 | }), 57 | // split vendor js into its own file 58 | new webpack.optimize.CommonsChunkPlugin({ 59 | name: 'vendor', 60 | minChunks: function (module, count) { 61 | // any required modules inside node_modules are extracted to vendor 62 | return ( 63 | module.resource && 64 | /\.js$/.test(module.resource) && 65 | module.resource.indexOf( 66 | path.join(__dirname, '../node_modules') 67 | ) === 0 68 | ) 69 | } 70 | }), 71 | // extract webpack runtime and module manifest to its own file in order to 72 | // prevent vendor hash from being updated whenever app bundle is updated 73 | new webpack.optimize.CommonsChunkPlugin({ 74 | name: 'manifest', 75 | chunks: ['vendor'] 76 | }) 77 | ] 78 | }) 79 | 80 | if (config.build.productionGzip) { 81 | var CompressionWebpackPlugin = require('compression-webpack-plugin') 82 | 83 | webpackConfig.plugins.push( 84 | new CompressionWebpackPlugin({ 85 | asset: '[path].gz[query]', 86 | algorithm: 'gzip', 87 | test: new RegExp( 88 | '\\.(' + 89 | config.build.productionGzipExtensions.join('|') + 90 | ')$' 91 | ), 92 | threshold: 10240, 93 | minRatio: 0.8 94 | }) 95 | ) 96 | } 97 | 98 | module.exports = webpackConfig 99 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'] 18 | }, 19 | dev: { 20 | env: require('./dev.env'), 21 | port: 8080, 22 | assetsSubDirectory: 'static', 23 | assetsPublicPath: '/', 24 | proxyTable: {}, 25 | // CSS Sourcemaps off by default because relative paths are "buggy" 26 | // with this option, according to the CSS-Loader README 27 | // (https://github.com/webpack/css-loader#sourcemaps) 28 | // In our experience, they generally work as expected, 29 | // just be aware of this issue when enabling this option. 30 | cssSourceMap: false 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Cloud's Blog 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "blog", 3 | "version": "1.0.0", 4 | "description": "A blog powered node.js and vue.js", 5 | "author": "Cloud <595199568@qq.com>", 6 | "private": true, 7 | "scripts": { 8 | "dev": "node build/dev-server.js", 9 | "build": "node build/build.js" 10 | }, 11 | "dependencies": { 12 | "axios": "^0.15.3", 13 | "vue": "^2.1.0", 14 | "vue-resource": "^1.0.3", 15 | "vue-router": "^2.1.1", 16 | "express": "^4.14.0", 17 | "marked": "^0.3.6" 18 | }, 19 | "devDependencies": { 20 | "autoprefixer": "^6.4.0", 21 | "babel-core": "^6.0.0", 22 | "babel-loader": "^6.0.0", 23 | "babel-plugin-transform-runtime": "^6.0.0", 24 | "babel-preset-es2015": "^6.0.0", 25 | "babel-preset-stage-2": "^6.0.0", 26 | "babel-register": "^6.0.0", 27 | "chalk": "^1.1.3", 28 | "connect-history-api-fallback": "^1.1.0", 29 | "css-loader": "^0.25.0", 30 | "eventsource-polyfill": "^0.9.6", 31 | "express": "^4.13.3", 32 | "extract-text-webpack-plugin": "^1.0.1", 33 | "file-loader": "^0.9.0", 34 | "function-bind": "^1.0.2", 35 | "html-webpack-plugin": "^2.8.1", 36 | "http-proxy-middleware": "^0.17.2", 37 | "json-loader": "^0.5.4", 38 | "semver": "^5.3.0", 39 | "opn": "^4.0.2", 40 | "ora": "^0.3.0", 41 | "shelljs": "^0.7.4", 42 | "url-loader": "^0.5.7", 43 | "vue-loader": "^10.0.0", 44 | "vue-style-loader": "^1.0.0", 45 | "vue-template-compiler": "^2.1.0", 46 | "webpack": "^1.13.2", 47 | "webpack-dev-middleware": "^1.8.3", 48 | "webpack-hot-middleware": "^2.12.2", 49 | "webpack-merge": "^0.14.1" 50 | }, 51 | "engines": { 52 | "node": ">= 4.0.0", 53 | "npm": ">= 3.0.0" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /server/dateformate.js: -------------------------------------------------------------------------------- 1 | module.exports = function(timestamp){ 2 | var month = ['January','February','March','April','May','Juny','July','August','September','October','November','December']; 3 | var week = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']; 4 | var day = week[new Date(timestamp).getDay()]; 5 | var mon = month[new Date(timestamp).getMonth()]; 6 | var date =new Date(timestamp).getDate(); 7 | if (date < 10) { 8 | date = '0' + date ; 9 | } 10 | var year = new Date(timestamp).getFullYear(); 11 | return day+','+mon+' '+date+','+year 12 | } 13 | -------------------------------------------------------------------------------- /server/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var app = express(); 3 | var marked = require('marked'); 4 | var fs = require('fs'); 5 | var path = require('path'); 6 | marked.setOptions({ 7 | renderer: new marked.Renderer(), 8 | gfm: true, 9 | tables: true, 10 | breaks: true, 11 | pedantic: false, 12 | sanitize: true, 13 | smartLists: true, 14 | smartypants: false 15 | }); 16 | app.use(express.static('public',{maxAge:12*60*60*24*30})); 17 | app.all('*', function(req, res, next) { 18 | res.header("Access-Control-Allow-Origin", "*"); 19 | // res.header("Access-Control-Allow-Headers", "X-Requested-With"); 20 | // res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); 21 | // res.header("X-Powered-By",' 3.2.1') 22 | // res.header("Content-Type", "application/json;charset=utf-8"); 23 | next(); 24 | }); 25 | var formate = require('./dateformate.js');//格式化日期 26 | 27 | /********************获取文章列表********************************/ 28 | app.get('/api/blog/posts',function(req,res){ 29 | var posts = []; 30 | fs.readdir('./public/blog/posts',function(err,files){ 31 | if(err){ 32 | console.error(err); 33 | } 34 | for (var i = 0; i < files.length; i++) { 35 | posts.push({'title':path.basename(files[i],'.md'),'datetime':fs.statSync('./public/blog/posts/'+files[i]).mtime}) 36 | } 37 | posts.sort(function(a,b){ 38 | return b.datetime - a.datetime 39 | }) 40 | for (var j = 0; j < posts.length; j++){ 41 | posts[j].datetime = formate(posts[j].datetime) 42 | } 43 | res.send(posts); 44 | }) 45 | }); 46 | /********************获取文章列表********************************/ 47 | /********************获取文章详情********************************/ 48 | app.get('/api/blog/post/',function(req,res){ 49 | var post = {'Mtime':'','content':''}; 50 | fs.readFile('./public/blog/posts/'+req.query.file, 'utf-8', function (err, data) { 51 | if (err) throw err; 52 | post.content = marked(data); 53 | fs.stat('./public/blog/posts/'+req.query.file,function(err,stats){ 54 | if (err) throw err; 55 | post.Mtime = formate(stats.mtime); 56 | res.send(post); 57 | }) 58 | }); 59 | }); 60 | /********************获取文章详情********************************/ 61 | app.get('/',function(req,res){ 62 | res.sendFile('/blog/index.html',{root: __dirname + '/public/'}); 63 | }); 64 | app.listen(80); 65 | console.log('server is running at port 80'); 66 | -------------------------------------------------------------------------------- /server/public/blog/index.html: -------------------------------------------------------------------------------- 1 | Cloud's Blog
-------------------------------------------------------------------------------- /server/public/blog/posts/Vue.js、Node.js打造个人博客(新手向).md: -------------------------------------------------------------------------------- 1 | #### 前言 2 | > 做为一名立志全栈的页面仔,一直想着要独立开发一个项目,从前台到后台到数据库,从设计到开发到上线。一般说到这样的练手项目,通常得到的意见都是写个博客系统呗!刚好对之前用hexo部署在GitHub Page上的博客的傻瓜式及龟速实在忍无可忍,于是乎,就写个博客系统呗!先放上链接[Cloud's Blog](http://www.lee-Cloud.xyz) 3 | 4 | #### 方案 5 | - UI风格:主要参考[Randy's Blog](http://lutaonan.com/)的风格,并加入自己的一点想法(主要是为了偷懒)。 6 | - 前端页面:基于Vue2.0的响应式SPA,啊?你问我为什么?就如《关于》中的自我介绍:我自认为擅长Vue的SPA开发。 7 | - 后台:前端工程师通向全栈的捷径:Node.js。负责写接口及渲染静态页面。 8 | - 数据库:原计划是用MongoDB,但为了赶进度,索性数据库都不用了,第一版就先这样吧。 9 | - 文章:参考hexo用markdown语法写好文章再转成html的做法。也是在本地编辑好md格式的文章,上传到服务器,Node.js直接读取md文件并转化为html,返回给前台,这也是为什么暂时不需要数据库的原因。 10 | - 部署:AWS,一年时间免费使用哦!你问我一年后怎么办?God knows!也许一年时间已经让我经历了从入门到放弃。 11 | 12 | #### 扬帆!起航! 13 | 1. 页面布局:自己看[Cloud's Blog](http://www.lee-Cloud.xyz),简单介绍下。第一屏为一张壁纸宽高均为100%铺满整个可视区域,内容有博客名称、小标题及三个关于博主的链接;点击向下箭头滚动进入第二屏正题,分为四个Tab模块:【首页】、【文章】、【作品】、【关于】。默认为【首页】,即最新一篇文章详情,【文章】为文章列表,点击可阅读文章内容,【作品】为作品列表,这部分还没完成,【关于】为关于博主的一些介绍。PS:首屏的壁纸在Google图片里找了一上午才找到这张还算满意的,考虑到手机端壁纸是居中铺满整个可视区域,要找到一张PC端手机端效果都还行且逼格不能太低的图片真的不容易,BTW,博主还是选择困难症患者。 14 | 15 | 2. 前端开发:从Vue脚手架开始 16 | ``` 17 | # 全局安装 vue-cli 18 | $ npm install --global vue-cli 19 | # 创建一个基于 webpack 模板的新项目 20 | $ vue init webpack blog 21 | # 安装依赖,走你 22 | $ cd blog 23 | $ npm install 24 | $ npm run dev 25 | ``` 26 | 然后安装Vue-router用于SPA路由及vue-resource或axios用于Ajax。 27 | ``` 28 | $ npm install --save vue-router 29 | $ npm install --save axios 30 | # vue官方推荐的ajax库不再是vue-resource,而是axios 31 | ``` 32 | 然后就可以开始码静态页面了,根据第一步页面布局的思路写出静态页面应该不是什么难事,其中需要调用第三步中node.js提供的接口,这里就不再多说了。完成静态页面后编译 33 | ``` 34 | $ npm run build 35 | ``` 36 | 37 | 3. 后端开发:创建服务端目录结构并安装express框架及marked用于将md文件转为html 38 | ``` 39 | $ mkdir blog-server && cd blog-server 40 | $ mkdir public 41 | $ npm install --save express 42 | $ npm install --save marked 43 | ``` 44 | 写接口,目前主要有三个接口。 45 | 1. 获取文章列表接口。fs.readdir方法读取md文件所在文件夹,返回所有md文件的文件名即文章标题、创建时间、文章路径,并按创建时间排序渲染在【文章】页。 46 | 2. 文章内容接口。根据第一个接口返回的文件名及路径,用fs.readFile方法读取md文件的内容并用marked转为html并返回给客户端,渲染在文章内容页。 47 | 3. 首页内容接口。类似接口2,读取最新一篇文章并返回。记得处理跨域问题。 48 | ``` 49 | app.all('*', function(req, res, next) { 50 | res.header("Access-Control-Allow-Origin", "*"); 51 | res.header("Access-Control-Allow-Headers", "X-Requested-With"); 52 | res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); 53 | res.header("X-Powered-By",' 3.2.1') 54 | res.header("Content-Type", "application/json;charset=utf-8"); 55 | next(); 56 | }); 57 | ``` 58 | 59 | 渲染静态页面,将第二部编译出来的静态文件及md格式的文章文件拷入public文件夹,并用express内置的中间件指定public文件夹为静态资源文件的根目录并缓存。因为是单页应用,所以记得要处理好404错误。 60 | ``` 61 | # server.js 62 | var express = require('express'); 63 | var app = express(); 64 | app.use(express.static('public',{maxAge:60*60*24*30})); 65 | app.get('/',function(req,res){ 66 | res.sendFile('/index.html',{root: __dirname + '/public/'}); 67 | }); 68 | app.listen(80); 69 | ``` 70 | 4. 部署 71 | 72 | - 申请[AWS(亚马逊云主机)](https://aws.amazon.com/cn),一年免费试用,需填信用卡信息。实例一台EC2,win或Linux系统,推荐Linux。开放相应端口并安装node.js。 73 | - 安装[PM2](http://pm2.keymetrics.io/docs/usage/quick-start/),并运行第三步的server.js服务,并让PM2随系统启动。 74 | ``` 75 | $ npm install -g PM2 76 | $ pm2 start server.js 77 | $ pm2 startup 78 | ``` 79 | 此时我们的博客系统已经运行在EC2上了。 80 | - 购买域名。我是在腾讯云上购买的xyz域名,第一年8块钱。解析到该EC2的公网IP上,即可通过域名访问。比如通过 http://www.lee-cloud.xyz 可访问我的博客。 81 | 82 | #### 未来计划 83 | 1. 完成【作品】Tab页,现在虽然勉强上线了,但缺了这一块逼死强迫症啊。 84 | 2. 后台管理,功能模块暂定为 85 | - 文章上传 86 | - 作品上传 87 | - 【关于我】内容编辑 88 | - 首页定制 89 | 3. 启用MongoDB数据库 90 | 4. 界面美化、性能优化 91 | 5. 评论功能 92 | 6. seo 93 | 94 | #### 写在最后 95 | 仅此记录Cloud's Blog初版上线过程 96 | -------------------------------------------------------------------------------- /server/public/blog/posts/Vue初体验.md: -------------------------------------------------------------------------------- 1 | #### 写在最前面 2 |   之前一直是angular的拥护者,上个月angular2.0正式发布,本打算这条路走到黑,打开[angular2.0官网](https://angular.io/)准备撸撸文档,What the f**k?只有TS有中文文档?好在我英语还没还给体育老师,装个有道词典,QuickStart顺利撸完后迫不及待地想开始官方DEMO《英雄指南》,结果简直不能忍,Tutorial连份JS英文文档都没有,包括后面的ADVANCED和COOKBOOK不英文文档也不全!! 3 |   刚好Vue2.0也发布了,趁着这个机会干脆就转战Vue了。目前看来,Vue令我相当满意,原因如下: 4 | - Vue更为轻量,适用场景更广,不管是大型的SPA应用,或者一个简单的页面都能胜任。 5 | - Vue和angular的思维方式类似,从angular转VUE并不别扭。 6 | - 据说VUE性能更快,更容易上手。angular2.0水有点深啊~ 7 | - 对华人的作品有莫名亲切感 8 | 9 | 机智如我决定拿angular的DEMO开刀,废话不多说,我们开始吧。 10 | 11 | #### Vue安装 12 | - 使用npm安装,构建大型项目时推荐使用NPM安装。 13 | ``` 14 | $ npm install vue 15 | ``` 16 | - 或者直接下载并用` 33 | 34 | 35 | 36 | ``` 37 | HTML基本结构如上,我还引入了mobile.js是用来做响应式移动端适配的可以忽略,`.container`里该写什么写什么,CSS也不再赘述,都不是本次的重点,参考DEMO做出一样的静态页面对大家来说都不是什么事儿了。 38 | 39 | - **重点是app.js** 40 | 在app.js里我们直接创建一个Vue实例 41 | ``` 42 | var app = new Vue({ 43 | //el的值为一个选择器,即该Vue实例是运行在该元素及其后代元素中的。 44 | el:“.container”, 45 | //所谓‘数据’驱动中的‘数据’就是指下面‘data’里的内容。 46 | data:{ 47 | heroes:["东方不败","令狐冲","张无忌","赵敏"], 48 | new_hero:"" 49 | }, 50 | //methods里的内容为事件函数 51 | methods:{ 52 | fun1:function(){ 53 | do something. 54 | }, 55 | fun2:function(){ 56 | do something. 57 | } 58 | } 59 | }) 60 | ``` 61 | 62 | 举个例子 63 | ``` 64 |
65 |

{{ heroes }}

66 | 67 |
68 | ``` 69 | 70 | 上面的例子表示将数组heroes绑定到`

`里,通过双花括号实现。 71 | 而button上绑定一个点击事件,点击后触发fun1函数。通过`v-on:click`实现。 72 | 这些和angular是非常类似的,数据通过双花括号绑定到模型上,`v-on:click`对应angular的`ng-click`,还有之后的`v-model` `v-if` `v-for` 73 | 分别对应着angular里的`ng-model` `ng-if` `ng-repeat` 74 | 75 | #### 写在最后 76 | 上面只是我自己对VUE初次体验的一些小总结,对于之前没接触过MVVM的同学可能属于雾里看花,如果你对VUE也感兴趣,以下的资料推荐给大家。 77 | - [Vue.js官网](http://vuejs.org/),这里有最官方,最权威的第一手资料。 78 | - [Vue V2.0中文](http://vuefe.cn/),这是Vuejs2.0的中文文档翻译。 79 | - [Vuejs2.0 文档攻略](http://larabase.com/collection/2/post/108),这是LaraBase上总结的一个快速入门专辑。 -------------------------------------------------------------------------------- /server/public/blog/posts/使用Hexo-GitHub-Pages快速构建个人博客指南.md: -------------------------------------------------------------------------------- 1 | #### 写在最前面 2 |   作为一名自喻为前端工程师的页面仔,没有个人技术博客似乎就装的不太像了?今天是Cloud's Blog搭建的第一天,趁热打铁分享一下如何利用Hexo + GitHub Pages快速搭建个人博客。希望对跟我一样初次搭建博客的你有所帮助,老司机们就当看个热闹,如有错误请指正。 3 | #### 简介 4 | - [Hexo](https://hexo.io/zh-cn/) 5 | > Hexo是一个快速、高效、简洁、由Node.js驱动的博客框架。 6 | 7 | 其以生成速度快,支持MarkDown语法便于写作,一键部署到GitHub Pages、Herokud等网站,插件系统丰富便于扩展等特点而备受青睐。 8 | - [GitHub Page](https://pages.github.com/) 9 | > GitHub Pages is designed to host your personal, organization, or project pages from a GitHub repository. 10 | 11 | 其搭建简单,免费托管,自由度高,可绑定域名等特点,非常适合用户博客搭建。 12 | 13 | #### 个人搭建环境 14 | - windows 7 x64 15 | - [Node.js](https://nodejs.org/en/) v6.7.0 16 | - npm 3.10.3 (Node.js自带安装npm) 17 | - [git](https://git-scm.com/downloads/) 2.7.2 18 | 19 | #### Hexo初体验 20 | 1. 安装Hexo脚手架 21 | `$ npm install -g hexo-cli ` 22 | 国内npm下载速度慢的话可用[淘宝npm镜像cnpm](https://npm.taobao.org/) 代替 23 | 2. Hexo初始化、安装依赖 24 | ``` 25 | $ hexo init 26 | $ cd 27 | $ npm install 28 | ``` 29 | 3. 本地启动Hexo服务 30 | ` $ hexo server ` 31 | 若成功启动服务,打开浏览器,地址栏输入` http://localhost:4000 ` 则出现了默认的博客界面,是不是有点小兴奋呢? 32 | 4. 安装 hexo-deployer-git,为下一步做准备 33 | `$ npm install hexo-deployer-git --save` 34 | 35 | #### 部署到[GitHub](https://github.com/) 36 | 在GitHub上新建一个repository 37 | 1. 首先你得有[GitHub](https://github.com/join?source=login)帐号,没有的话点击进入注册。 38 | 2. [新建一个repository](https://github.com/new),命名为`Ower.github.io`。 39 | 例如,我的仓库名为`Lee-Cloud.github.io` 40 | 3. 仓库创建完成过后,在settings下找到GitHub Pages选项卡,点击“Launch automatic page generator”,按提示完成GitHub Pages创建。 41 | 创建完成后通过刚刚创建的仓库名`Lee-Cloud.github.io`,即可访问GitHub Pages. 42 | 43 | 将Hexo部署到GitHub Pages 44 | 1. 配置你的git信息 45 | ``` 46 | git config --global user.name 47 | git config --global user.email 48 | git config --global user.username 49 | ``` 50 | 2. 生成SSH-KEY 51 | `ssh-keygen -t rsa -C ` 52 | 若提示`ssh-keygen不是有效的。。。。`则需要配置一下path。 53 | 找到ssh-keygen.exe的路径,添加到环境变量path里即可。 54 | 找到.ssh文件夹里的id_rsa.pub文件,复制内容到——个人设置——SSH and GPG keys ——New SSH key中 55 | 之后验证一下: 56 | `ssh -T git@github.com` 57 | 3. 配置本地Hexo文件夹下_config.yml文件。 58 | 打开_config.yml文件,找到最下方的deploy,配置如下。 59 | deploy: 60 | type: git 61 | repo: git@github.com:Lee-Cloud/Lee-Cloud.github.io.git 62 | 其中repo换成你的仓库地址,使用SSH。 63 | 4. 部署网站 64 | 回到hexo文件夹下 65 | 使用命令 `$ hexo deploy` 部署网站。 66 | 部署完成后,打开你的GitHub Pages,如` Lee-Cloud.github.io`即可看到你的博客啦~~~ 67 | 68 | #### 扩展、定制 69 | 以上步骤只是初步的将hexo模版部署到github上,想定制属于你自己的博客,参考一下资料,开始动手吧! 70 | - [hexo官网](https://hexo.io/zh-cn/) 71 | 官网里有详细的API文档、主题、插件,授人以鱼不如授人予渔,这里有最全最官方的第一手资料。 72 | - [nexT主题](http://theme-next.iissnan.com/getting-started.html) 73 | hexo的另一大特点就是丰富的主题,这里我选择nexT,官网里的资料也很全,就不一一赘述。 74 | - [markdown语法](http://sspai.com/25137) 75 | 关于markdown,我参考的是少数派上Te_Lee的一篇文章 76 | 77 | #### 不定时更新 78 | - Cannot GET /tags/ 等问题 79 | ``` 80 | $ cd heox-site 81 | $ hexo new page tags 82 | $ vim source/tags/index.md 83 | # add line: type: "tags" 84 | ``` 85 | - 新标签打开链接 86 | ``` 87 | {% link text url true [title] %} 88 | ``` 89 | 90 | #### 写在最后 91 | 今天是我使用hexo的第一天,也是第一次写博客,肯定有很多不足的地方,对于新手,有不明白的可以联系我,希望能帮到大家,对于老司机们,请不吝赐教。 92 | -------------------------------------------------------------------------------- /server/public/blog/posts/咕啦前端规范之CSS.md: -------------------------------------------------------------------------------- 1 | #### 前言 2 | > 为提高团队协作开发效率,统一代码书写规范是很有必要的。一套优秀的书写规范不仅能提高代码质量、性能、可读性,而且有助于后期项目升级、维护,方便项目管理。原则是:简洁、有序。 3 | 4 | #### CSS文件的分类、引用 5 | - 采用外部样式表引入方式,做到结构与样式分离,提高代码可读性。 6 | - 样式表引入置于body之前head之间,script引入置于页面底部,防止JS脚本阻塞html文件解析,提高页面渲染速度。 7 | - 若引入多个样式表,需按照其性质、用途合理命名并按顺序依次引用。 8 | ``` 9 | 10 | 11 | 12 | 13 | 14 | 15 | ``` 16 | - 生产环境中若用到第三方CSS库时请引用压缩版本,例如`bootstrap`,不要引用~~bootstrap.css~~。 17 | ``` 18 | 19 | ``` 20 | 21 | #### 命名规范 22 | - 所有命名一律小写。 23 | - 语义化,禁止使用诸如 ~~abc~~,~~a1~~,~~a2~~ 等无实际意义的样式名或者ID。布局类命名规则如下: 24 | - 外套 wrap -- 用于最外层 25 | - 头部 header -- 用于头部 26 | - 主要内容 main -- 用于主体内容(中部) 27 | - 左侧 main-left -- 左侧布局 28 | - 右侧 main-right -- 右侧布局 29 | - 导航条 nav -- 网页菜单导航条 30 | - 内容 content -- 用于网页中部主体 31 | - 底部 footer -- 用于底部 32 | - 多单词统一使用“-”连接,不要使用下划线或者驼峰命名以区分JS变量名。例如: 33 | ``` 34 | /* 不推荐 */ 35 | .header_logo {...} 36 | .headerLogo {...} 37 | /* 推荐 */ 38 | .header-logo {...} 39 | ``` 40 | 41 | #### 语法规范 42 | - 用两个空格代替制表符(Tab),保证在任何环境下的一致性(不同编辑器Tab表示的空格数不一样)。 43 | - 为选择器分组时,将单独的选择器单独放在一行。例如: 44 | ``` 45 | /* 不推荐 */ 46 | .selector, .selector-secondary, .selector-tertiary {...} 47 | /* 推荐 */ 48 | .selector, 49 | .selector-secondary, 50 | .selector-tertiary {...} 51 | ``` 52 | - 对于只包含一条声明的样式,为了易读性和便于快速编辑,建议将语句放在同一行。 53 | ``` 54 | .span1 { width: 60px; } 55 | .span2 { width: 140px; } 56 | .span3 { width: 220px; } 57 | ``` 58 | 59 | - 对于带有多条声明的样式,为了代码的易读性,在每个声明块的左花括号前添加一个空格,声明块的右花括号应当单独成行。 60 | ``` 61 | /* 不推荐 */ 62 | .selector{position:relative;margin:10px;} 63 | /* 推荐 */ 64 | .selector { 65 | position: relative; 66 | margin: 10px; 67 | } 68 | ``` 69 | - 每条声明语句的 : 后应该插入一个空格。每条声明都应该独占一行且以";"结尾。 70 | ``` 71 | /* 不推荐 */ 72 | .selector { 73 | width: 100px;height:100px 74 | } 75 | /* 推荐 */ 76 | .selector { 77 | width: 100px; 78 | height: 100px; 79 | } 80 | ``` 81 | 82 | - 对于 + , > , ~ 等选择器两边统一留一个空格 83 | ``` 84 | /* 不推荐 */ 85 | .selector+.selector-secondary~.selector-tertiary {...} 86 | /* 推荐 */ 87 | .selector > .selector-secondary + .selector-tertiary {...} 88 | ``` 89 | 90 | - 十六进制数应全部小写,且能缩写均缩写 91 | ``` 92 | /* 不推荐 */ 93 | color: #ffffff; 94 | color: #FFF; 95 | /* 推荐 */ 96 | color: #fff; 97 | ``` 98 | 99 | - 能缩写的属性均缩写 100 | ``` 101 | /* 不推荐 */ 102 | padding-top: 10px; 103 | padding-right: 20px; 104 | /* 推荐 */ 105 | padding: 10px 20px 0 0; 106 | ``` 107 | 108 | - 避免为0值指定单位 109 | ``` 110 | /* 不推荐 */ 111 | padding-top: 0px; 112 | /* 推荐 */ 113 | padding-top: 0; 114 | ``` 115 | 116 | #### 声明顺序 117 | 1. 定位 118 | 2. 盒模型 119 | 3. 字体相关 120 | 4. 背景相关 121 | 5. 其他 122 | ``` 123 | .declaration-order { 124 | /* 定位 */ 125 | position: absolute; 126 | top: 0; 127 | right: 0; 128 | bottom: 0; 129 | left: 0; 130 | z-index: 100; 131 | 132 | /* 盒模型 */ 133 | margin: 10px 10px; 134 | padding: 10px 10px; 135 | width: 100px; 136 | height: 100px; 137 | 138 | /* 字体相关 */ 139 | font: normal 13px "Helvetica Neue", sans-serif; 140 | line-height: 1.5; 141 | color: #333; 142 | text-align: center; 143 | 144 | /* 背景 */ 145 | background-color: #f5f5f5; 146 | border: 1px solid #e5e5e5; 147 | border-radius: 3px; 148 | 149 | /* 其他 */ 150 | opacity: 1; 151 | animate: slide 0.5s linear; 152 | } 153 | ``` 154 | 由于定位可以从正常的文档流中移除元素,并且还能覆盖盒模型相关的样式,因此排在首位。盒模型排在第二位,因为它决定了组件的尺寸和位置。 155 | 其他属性只是影响组件的内部或者是不影响前两组属性,因此排在后面。 156 | 157 | #### 注释 158 | - 代码是由人编写并维护的。请确保你的代码能够自描述、注释良好并且易于他人理解。好的代码注释能够传达上下文关系和代码目的。不要简单地重申组件或 class 名称。 159 | 对于较长的注释,务必书写完整的句子;对于一般性注解,可以书写简洁的短语。 160 | ``` 161 | /* 不推荐 */ 162 | /* Modal header */ 163 | .modal-header { 164 | ... 165 | } 166 | /* 推荐 */ 167 | /* Wrapping element for .modal-title and .modal-close */ 168 | .modal-header { 169 | ... 170 | } 171 | ``` 172 | 173 | #### 参考资料 174 | - [bootstrap编码规范](http://codeguide.bootcss.com/#css) 175 | - [徐尤熙知乎回答](https://www.zhihu.com/question/38773260) 176 | - [fex-team的GitHub](https://github.com/fex-team/styleguide/blob/master/css.md) 177 | 178 | #### 写在最后 179 | - 咕啦前端规范之CSS篇 v0.0.1--By Lee-Cloud于2016-11-2一个夜黑风高的加班夜,欢迎补充指正! 180 | -------------------------------------------------------------------------------- /server/public/blog/posts/移动端HTML5开发总结-By-Cloud.md: -------------------------------------------------------------------------------- 1 | #### 写在最前面 2 |   入坑后大部分时间都是在做移动端页面,个人也更喜欢移动端的开发,原因嘛,首先没有了低版本IE兼容的问题,然后移动端屏幕就那么大,内容不可能大多、太杂,不像PC端页面,各种模块都往上面仍(其实就是懒。。。),再者,移动端是趋势吧个人看法。下面分享一下入坑以来移动端开发的一些个人经验、总结。 3 | #### 响应式布局 4 | > 所谓响应式布局,就是让一个网站能兼容多个终端,解决不同尺寸设备,不同分辨率导致的布局、显示问题,尤其是移动端页面。 5 | 6 | - 一种方案是媒体查询(media query),根据不同分辨率范围写不同的CSS样式,如下代码表示宽度在800px到1024px之间的屏幕应用body里的css。媒体查询的缺点就是不连续,且需要根据不同分辨率写很多的CSS代码,个别地方可以使用,但这不是我们今天要讲的重点。 7 | ```bash 8 | @media screen and (min-width: 800px) and (max-width: 1024px){ 9 | body{...} 10 | }``` 11 | - 另一种方案是rem布局。 12 | 前端开发常用长度单位有: 13 | - px:绝对长度单位。最常用的长度单位,不再多说,绝对长度单位明显不适用于响应式布局,PASS掉。 14 | - em:相对长度单位。相对于父元素font-size的倍数。 15 | - rem:相对长度单位。相对于根元素(即html元素)font-size计算值的倍数。 16 | 17 | em及rem均适用于响应式布局,考虑到em的参照值不确定,使用rem会更明确、不容易出错。 18 | rem的使用方式如下: 19 | ```bash 20 | html{ 21 | font-size:30px; 22 | } 23 | ``` 24 | 此时,1rem = 30px; 25 | ```bash 26 | div{ 27 | width:10rem; //10rem = 300px,即div的宽度为300px 28 | } 29 | ``` 30 | 因此,我们可以用JS动态的根据屏幕宽度来设置相应的html的font-size值,并且CSS中的长度单位均使用rem即可实现响应式布局。 31 | ```bash 32 | 37 | ``` 38 | 39 | #### 关于meta标签 40 | - viewport设置,H5页面自动适配设备宽度,配合rem布局完美实现响应式布局 41 | ```bash 42 | 43 | ``` 44 | - 禁止将页面中的数字自动识别为电话号码 45 | ```bash 46 | 47 | ``` 48 | - 禁止安卓平台对邮箱的自动识别 49 | ```bash 50 | 51 | ``` 52 | - 当网站添加到主屏幕快速启动方式,可隐藏地址栏,仅针对ios的safari 53 | ```bash 54 | 55 | ``` 56 | 57 | #### 关于CSS 58 | - css reset 59 | ```bash 60 | *{ 61 | margin:0; 62 | padding:0; 63 | box-sizing:border-box; 64 | } 65 | ol,ul,dl{ 66 | list-style:none; 67 | } 68 | ``` 69 | - input相关 70 | ```bash 71 | input{ 72 | //去除IOS按钮圆角样式 73 | -webkit-appearance: none; 74 | //解决安卓部分机型placeholder字体向上偏移问题 75 | line-height:normal; 76 | } 77 | input::-webkit-input-placeholder{ 78 | // 改变placeholder样式 79 | color:#444; 80 | text-align:center; 81 | font-size:30px; 82 | } 83 | ``` 84 | - 其他 85 | ```bash 86 | //点击颜色 87 | -webkit-tap-highlight-color: rgba(0,0,0,0); 88 | //禁止选中文字 89 | -webkit-user-select:none; 90 | ``` 91 | 92 | #### 关于Click 93 | - 触摸事件相应顺序 94 | ```bash 95 | touchstart 96 | touchmove 97 | touchend 98 | click 99 | ``` 100 | - 点击事件300ms延时 101 | 由于移动端存在双击放大事件,因此click屏幕时并不会马上触发click事件,而是会等待300ms判断用户是否有第二次点击触发放大事件,这并不是我们想要的。 102 | 解决方案1:个人推荐方案 103 | ```bash 104 | //禁止视口缩放可消除300ms延时 105 | 106 | ``` 107 | 解决方案2:用引入fastclick.js。 108 | 解决方案3:用touchstart事件代替click事件。 109 | 110 | #### 杂七杂八 111 | - 单行文本溢出不换行并显示省略号 112 | ``` 113 | overflow: hidden; 114 | text-overflow: ellipsis; 115 | white-space: nowrap; 116 | ``` 117 | - 多行文本溢出显示省略号 118 | ``` 119 | display: -webkit-box; 120 | -webkit-box-orient: vertical; 121 | -webkit-line-clamp: 3; 122 | overflow: hidden; 123 | ``` 124 | - 文本显示方式 125 | ``` 126 | writing-mode: horizontal-tb; /* 默认值 */ 127 | writing-mode: vertical-rl; 128 | writing-mode: vertical-lr 129 | ``` 130 | 131 | `horizontal-tb`表示,文本流是水平方向(horizontal)的,元素是从上往下(tb:top-bottom)堆叠的。 132 | `vertical-rl`表示文本是垂直方向(vertical)展示,然后阅读的顺序是从右往左(rl:right-left),跟我们古诗的阅读顺序一致。 133 | `vertical-lr`表示文本是垂直方向(vertical)展示,然后阅读的顺序还是默认的从左往右(lr:left-right),也就是仅仅是水平变垂直 134 | #### 未完待续 135 | 不定期更新。 -------------------------------------------------------------------------------- /server/public/static/css/app.d4655a3d6fdb40e4e92681ec67711e8b.css: -------------------------------------------------------------------------------- 1 | *{box-sizing:border-box}a{text-decoration:none}body,html{width:100%;height:100%;overflow:hidden;margin:0;padding:0}@media (min-width:768px){body{font-size:20px}.header>.icon-down{width:50px;height:50px}}@media (max-width:768px){body{font-size:16px}.header>.icon-down{width:30px;height:30px}}#app{width:100%;height:100%;transition:transform 1s}#app.roll-down{transform:translate3d(0,-100%,0)}#app.roll-up{transform:translateZ(0)}.header{position:relative;width:100%;height:100%;background:url(/static/img/theme10-min.d20da16.jpg) no-repeat 50%;background-size:cover}.header>iframe{position:absolute;top:10%;left:-254px;opacity:.4}.header>div.box{position:absolute;top:40%;left:50%;width:7.5rem;transform:translate(-50%,-50%)}.header h1,.header h3{color:#fff;text-align:center}.header h3{margin-top:10px}p.socials{margin:30px auto 0;overflow:hidden;width:210px}p.socials>a.icon{float:left;width:30px;height:30px;margin:0 20px;background-size:100% 100%;border-radius:5px}p.socials>a.github{background-image:url(/static/img/github-10-xxl.8f65afc.png)}p.socials>a.sina{background-image:url(data:image/png;base64,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)}p.socials>a.twitter{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAACXBIWXMAACTpAAAk6QFQJOf4AAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAASRSURBVHja7N1BTiNREAXBf/9LFwcAyabB4K6MlGo3K6tfAMYjzswc51zzHv0DSffv2wBICkBg+FIYAgBIADB+qYgAACQASCoiAAAJAJIAIAkAkgAgCQCSACAJAJIAIAkAkgAgCQCSACAJAJIAIAkAkgAgCQCSACAJAJIAIAkAkgAgCQCSACAJAJIAIAkAkgAgCQCSACAJAJIAIAkAkgAgCQCSACABAAASACQBQBIAJAFAEgCkTw/OhRMAFBo8EAAgowcCAGT4MACADB8EAJDhwwAAMn4QAEDGDwEAyPhBAAAZPwgAIOOHAABk/O+PwAGAANCE4ABAxt9E4ABAxt9E4ABAxt9DYNubjwAAAAR++DoCQMa/FIHtv3oEAAAAcPG1GwDI+PcgUPzQEQAAkEXAJw4BAAAHAAAYv3vN+A8ABIDm8O+wKwAAwM3rfnsAABl/YPx3fb8AAABwF4e74c1CAADAze9/VmAAIADsAWDrrwoBAAA33Q8KAQAAbrofEgIAANx0PyEIAAC46PgBYPwuPH4AAMCFxw8AALjw+AEAABcdPgAA4MLDBwAAXHj4AACAi48fABBwAAAAAJwfAQQABwABwAFAAHAAEAAcAAQACABAAAAAAAQBAABAAAAAAAQAAABAAAAAANKDAwAAAOAr5Vs8dEYLgCQAHkYAAGA5AB7Ixw+m1wYAawDwAP7Nn7RyAICAcwAAgHMAgIBzAICAAwAAIOAAAAAIOAAAAAIOAACAgAMAAEDgAAAACDgAAAAEzvgBAAMHAAAAwQEAAHBwAAAAABwAAGD4DgAAMHpn/AAwfAcAABi/AwAAjN8ZPwAA4AAAAAA4AAAAAg4AAICAM34AgMABAAAgcAAAAAic8QMABg4AAPh3FEACAADImIwfAIbvAAAA43fGDwDDdwAAgPE7AADA+J3xA8D4HQAAAABn/AAwfgcAABi/M34A5AEADgAAEEPAdxzGD4AYBn7cAAAAAjB4v8H4ASDjBwAABADjB4CMHwAAEACMHwACgPEDAAAOAAAAgDN+AADAAQAAAHDGDwAI+LsExg8ACIz/RGT8AMhC4McIAABAxm/8ABAAPMsAkK/+AgAAjF8AMH7jFwAAYPwCAACMXwAwfuMXAIzf+AUAABg/ALwOxm/8AJDxGz8AZPzGDwABwPgBIOM3fgDI+I0fADJ+4weAjN/4ASDjN3wAyPiNHwAyfuMHgIzf+AEg4zd8AMj4jR8AMnzjB4B81RcAZPwCgOEbvgBg/MYvABi+4QsAxm/4AoDhG74AYPiGLwAYvfELAIZv9ALA1XEauuEr/h3AcYYvPwIYuNHLewAwsAEAeAiaGEgACGEgASAEggSACAoSAAI4SACQBABJAJAEAEkAkAQASQCQBABJAJAEAEkAkAAAAAkAkgAgCQCSACAJAJIAIAkAkgAgCQCSACAJAJIAIAkAkgAgCQCSACAJAJIAIAkAkgAgCQCSACAJAJIAIAkAkgAgCQCSACAJAJIAIAkAkp4HAAJSbPwAkAAwEJCC4weABID56iQtHv4jAEAgLR7+swA45xbfxwAPAE2ENYW6TQAAAABJRU5ErkJggg==)}.header>.icon-down{position:absolute;bottom:5%;left:50%;display:block;margin:10px;background-image:url(data:image/png;base64,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);background-size:100% 100%;animation:pull-down .8s linear infinite;cursor:pointer}.header>.icon-down:before{content:'Click me';position:absolute;left:50%;top:0;transform:translate(-50%,-150%);color:#fff;white-space:nowrap;text-align:center;font-weight:600}.header>.icon-up{position:absolute;top:200%;left:10px;z-index:1000;display:block;width:60px;height:60px;background-image:url(data:image/png;base64,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);background-size:100% 100%;transform:translateY(calc(-100% - .5rem));cursor:pointer;opacity:.2}@keyframes pull-down{0%{transform:translate3d(-50%,0,0);opacity:.6}to{transform:translate3d(-50%,20px,0);opacity:.2}}nav.navbar{width:100%;height:100px;background-color:#000}nav.navbar>ul.nav{width:7.5rem;height:100%;display:-ms-flexbox;display:flex;margin:0 auto;list-style:none;padding:0}nav.navbar>ul.nav>li{-ms-flex:1;flex:1;height:100%;line-height:100px;text-align:center;color:#fff}nav.navbar>ul.nav>li>a{position:relative;display:block;width:100%;height:100%;color:#fff}nav.navbar>ul.nav>li>a.router-link-active:before{content:"[";position:absolute;top:0;left:6px;height:100%;font-size:28px}nav.navbar>ul.nav>li>a.router-link-active:after{content:"]";position:absolute;top:0;right:6px;height:100%;font-size:28px}.view{width:100%;height:calc(100% - 100px);overflow-y:scroll}span.scrollTop[data-v-2515e4db]{position:fixed;top:200%;right:20px;display:block;width:40px;height:40px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAIAAAADnC86AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDRGQzM4NTFCQkM0MTFFMzkwNUJFNjREREY5ODQzRUUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDRGQzM4NTJCQkM0MTFFMzkwNUJFNjREREY5ODQzRUUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NEZDMzg0RkJCQzQxMUUzOTA1QkU2NERERjk4NDNFRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NEZDMzg1MEJCQzQxMUUzOTA1QkU2NERERjk4NDNFRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg8b+/UAAACdSURBVHja7NftCYAgEAZgrWZxAsdoDxd0GqdJEkSy8+MsjHjvh4jIPXjKgdIYI2bEIiYFYMCAAQP+LbyfMQJvg6q1lgevWmu2qpTyo3PudTivMNvugKl75dmtcPk1MewmOFf9m/JM8Hh2Hb5VAxw9hl2BKTXMR+y+BpKq1MozpU7PRBktezidKyYqZGzZcwmJnwRgwIABA/4cfAgwALYeYaV7sMLVAAAAAElFTkSuQmCC);background-size:100% 100%;transform:translateY(calc(-100% - .5rem));-webkit-transform:translateY(calc(-100% - .5rem));-ms-transform:translateY(calc(-100% - .5rem));-o-transform:translateY(calc(-100% - .5rem));opacity:.2;cursor:pointer}ul.posts[data-v-f8f9d2c8]{width:7.5rem;margin:0 auto;padding:.4rem .8rem;list-style:none}ul.posts h3[data-v-f8f9d2c8]{color:#555}ul.posts>li[data-v-f8f9d2c8]{position:relative;border-bottom:1px dashed #ccc}ul.posts>li>p[data-v-f8f9d2c8]{font-size:12px;color:#666}ul.posts>li>p.click[data-v-f8f9d2c8]{position:absolute;right:0;bottom:0;font-size:14px;cursor:pointer;text-decoration:underline}div.post{width:7.5rem;margin:0 auto;padding:.4rem .8rem;color:#666;line-height:200%;text-align:justify}div.post>h3.post-title{text-align:center;line-height:160%;margin-bottom:.2rem;color:#444}div.post>p.datetime{text-align:center;color:#888;font-size:14px}div.post div.content pre{background-color:#eee;overflow-x:scroll;padding:.2rem .3rem}div.post div.content blockquote>p{position:relative;overflow:visible}div.post div.content blockquote>p:after{content:'';position:absolute;left:-20px;top:0;width:6px;height:100%;background-color:#ddd}div.about[data-v-89895d54]{width:7.5rem;margin:0 auto;padding:.4rem .8rem}div.about>h1[data-v-89895d54]{margin-bottom:.4rem}div.about>h2[data-v-89895d54]{margin-bottom:.3rem}div.about>h3[data-v-89895d54]{margin:.1rem}div.about>p.text[data-v-89895d54]{margin-bottom:.4rem;line-height:200%;text-indent:40px;color:#555;text-align:justify}div.about>ul.list[data-v-89895d54]{padding-left:.4rem;list-style-position:inside;list-style-type:disc;line-height:200%} 2 | /*# sourceMappingURL=app.d4655a3d6fdb40e4e92681ec67711e8b.css.map*/ -------------------------------------------------------------------------------- /server/public/static/css/app.d4655a3d6fdb40e4e92681ec67711e8b.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///webpack:///src/App.vue","webpack:///webpack:///src/components/scrollTop.vue","webpack:///webpack:///src/views/posts.vue","webpack:///webpack:///src/views/post.vue","webpack:///webpack:///src/views/about.vue"],"names":[],"mappings":"AACA,EACE,qBAAuB,CAEzB,EACE,oBAAsB,CAExB,UACE,WACA,YACA,gBACA,SACA,SAAW,CAEb,yBACA,KACI,cAAgB,CAEpB,mBACI,WACA,WAAa,CAChB,CAED,yBACA,KACI,cAAgB,CAEpB,mBACI,WACA,WAAa,CAChB,CAED,KACE,WACA,YACA,uBAAyB,CAE3B,eACE,gCAAkC,CAEpC,aACE,uBAA8B,CAEhC,QACE,kBACA,WACA,YACA,uDACA,qBAAuB,CAEzB,eACE,kBACA,QACA,YACA,UAAa,CAEf,gBACE,kBACA,QACA,SACA,aACA,8BAAgC,CAMlC,sBAHE,WACA,iBAAmB,CAMpB,WADC,eAAiB,CAEnB,UACE,mBACA,gBACA,WAAa,CAEf,iBACE,WACA,WACA,YACA,cACA,0BACA,iBAAmB,CAErB,mBACE,8CAAoD,CAEtD,iBACE,8CAAgD,CAElD,oBACE,8CAAmD,CAErD,mBACE,kBACA,UACA,SACA,cACA,YACA,+CACA,0BACA,wCACA,cAAgB,CAElB,0BACE,mBACA,kBACA,SACA,MACA,gCACA,WACA,mBACA,kBACA,eAAiB,CAEnB,iBACE,kBACA,SACA,UACA,aACA,cACA,WACA,YACA,+CACA,0BACA,0CACA,eACA,UAAa,CAEf,qBACA,GACI,gCACA,UAAa,CAEjB,GACM,mCACA,UAAa,CAClB,CAED,WACE,WACA,aACA,qBAAwB,CAE1B,kBACE,aACA,YACA,oBACA,aACA,cACA,gBACA,SAAW,CAEb,qBACE,WACI,OACJ,YACA,kBACA,kBACA,UAAa,CAEf,uBACE,kBACA,cACA,WACA,YACA,UAAa,CAEf,iDACE,YACA,kBACA,MACA,SACA,YACA,cAAgB,CAElB,gDACE,YACA,kBACA,MACA,UACA,YACA,cAAgB,CAElB,MACE,WACA,0BAEA,iBAAmB,CACpB,grjBC7LD,gCACE,eACA,SACA,WACA,cACA,WACA,YACA,+CACA,0BACA,0CACA,kDACA,8CACA,6CACA,WACA,cAAgB,CACjB,04CCfD,0BACE,aACA,cACA,oBACA,eAAiB,CAEnB,6BACE,UAAY,CAEd,6BACE,kBAEA,6BAA+B,CAEjC,+BACE,eACA,UAAY,CAGd,qCACE,kBACA,QACA,SACA,eACA,eACA,yBAA2B,CCzB7B,SACE,aACA,cACA,oBACA,WACA,iBACA,kBAAoB,CAEtB,uBACE,kBACA,iBACA,oBACA,UAAY,CAEd,oBACE,kBACA,WACA,cAAgB,CAElB,yBACE,sBACA,kBACA,mBAAuB,CAEzB,kCACE,kBACA,gBAAkB,CAEpB,wCACE,WACA,kBACA,WACA,MACA,UACA,YACA,qBAAuB,CCnCzB,2BACE,aACA,cACA,mBAAuB,CAEzB,8BACE,mBAAsB,CAExB,8BACE,mBAAsB,CAExB,8BACE,YAAe,CAEjB,kCACE,oBACA,iBACA,iBACA,WACA,kBAAoB,CAEtB,mCACE,mBACA,2BACA,qBACA,gBAAkB","file":"static/css/app.d4655a3d6fdb40e4e92681ec67711e8b.css","sourcesContent":["\n* {\n box-sizing: border-box;\n}\na {\n text-decoration: none;\n}\nhtml,body {\n width: 100%;\n height: 100%;\n overflow: hidden;\n margin: 0;\n padding: 0;\n}\n@media (min-width: 768px) {\nbody {\n font-size: 20px;\n}\n.header > .icon-down{\n width: 50px;\n height: 50px;\n}\n}\n@media (max-width: 768px) {\nbody {\n font-size: 16px;\n}\n.header > .icon-down{\n width: 30px;\n height: 30px;\n}\n}\n#app {\n width: 100%;\n height: 100%;\n transition: transform 1s;\n}\n#app.roll-down {\n transform: translate3d(0,-100%,0);\n}\n#app.roll-up {\n transform: translate3d(0,0,0);\n}\n.header {\n position: relative;\n width: 100%;\n height: 100%;\n background: url('./assets/theme10-min.jpg') no-repeat center;\n background-size: cover;\n}\n.header > iframe {\n position: absolute;\n top: 10%;\n left: -254px;\n opacity: 0.4;\n}\n.header > div.box {\n position: absolute;\n top: 40%;\n left: 50%;\n width: 7.5rem;\n transform: translate(-50%,-50%);\n}\n.header h1 {\n color: white;\n text-align: center;\n}\n.header h3 {\n color: white;\n text-align: center;\n margin-top: 10px;\n}\np.socials {\n margin: 30px auto 0 auto;\n overflow: hidden;\n width: 210px;\n}\np.socials > a.icon {\n float: left;\n width: 30px;\n height: 30px;\n margin: 0 20px;\n background-size: 100% 100%;\n border-radius: 5px;\n}\np.socials > a.github {\n background-image: url('./assets/github-10-xxl.png');\n}\np.socials > a.sina {\n background-image: url('./assets/sina-logo.png');\n}\np.socials > a.twitter {\n background-image: url('./assets/Twitter-logo.png');\n}\n.header > .icon-down {\n position: absolute;\n bottom: 5%;\n left: 50%;\n display: block;\n margin: 10px;\n background-image: url('./assets/Arrowhead-Down.png');\n background-size: 100% 100%;\n animation: pull-down 0.8s linear infinite;\n cursor: pointer;\n}\n.header > .icon-down::before {\n content: 'Click me';\n position: absolute;\n left: 50%;\n top: 0;\n transform: translate(-50%,-150%);\n color: white;\n white-space: nowrap;\n text-align: center;\n font-weight: 600;\n}\n.header > .icon-up {\n position: absolute;\n top: 200%;\n left: 10px;\n z-index: 1000;\n display: block;\n width: 60px;\n height: 60px;\n background-image: url('./assets/rocket.png');\n background-size: 100% 100%;\n transform: translate(0,calc(-100% - 0.5rem));\n cursor: pointer;\n opacity: 0.2;\n}\n@keyframes pull-down {\nfrom {\n transform: translate3d(-50%,0,0);\n opacity: 0.6;\n}\nto {\n transform: translate3d(-50%,20px,0);\n opacity: 0.2;\n}\n}\nnav.navbar {\n width: 100%;\n height: 100px;\n background-color: black;\n}\nnav.navbar > ul.nav {\n width: 7.5rem;\n height: 100%;\n display: -ms-flexbox;\n display: flex;\n margin: 0 auto;\n list-style: none;\n padding: 0;\n}\nnav.navbar > ul.nav > li {\n -ms-flex: 1;\n flex: 1;\n height: 100%;\n line-height: 100px;\n text-align: center;\n color: white;\n}\nnav.navbar > ul.nav > li > a {\n position: relative;\n display: block;\n width: 100%;\n height: 100%;\n color: white;\n}\nnav.navbar > ul.nav > li > a.router-link-active::before {\n content: \"[\";\n position: absolute;\n top: 0;\n left: 6px;\n height: 100%;\n font-size: 28px;\n}\nnav.navbar > ul.nav > li > a.router-link-active::after {\n content: \"]\";\n position: absolute;\n top: 0;\n right: 6px;\n height: 100%;\n font-size: 28px;\n}\n.view {\n width: 100%;\n height: calc(100% - 100px);\n /*margin: 0 auto;*/\n overflow-y: scroll;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/App.vue","\nspan.scrollTop[data-v-2515e4db] {\n position: fixed;\n top: 200%;\n right: 20px;\n display: block;\n width: 40px;\n height: 40px;\n background-image: url('../assets/scrollTop.png');\n background-size: 100% 100%;\n transform: translate(0,calc(-100% - 0.5rem));\n -webkit-transform: translate(0,calc(-100% - 0.5rem));\n -ms-transform: translate(0,calc(-100% - 0.5rem));\n -o-transform: translate(0,calc(-100% - 0.5rem));\n opacity: 0.2;\n cursor: pointer;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/components/scrollTop.vue","\nul.posts[data-v-f8f9d2c8] {\n width: 7.5rem;\n margin: 0 auto;\n padding: 0.4rem 0.8rem;\n list-style: none;\n}\nul.posts h3[data-v-f8f9d2c8] {\n color: #555;\n}\nul.posts > li[data-v-f8f9d2c8] {\n position: relative;\n /*padding: 0.4rem 0;*/\n border-bottom: 1px dashed #ccc;\n}\nul.posts > li > p[data-v-f8f9d2c8] {\n font-size: 12px;\n color: #666;\n /*margin-top: 6px;*/\n}\nul.posts > li > p.click[data-v-f8f9d2c8] {\n position: absolute;\n right: 0;\n bottom: 0;\n font-size: 14px;\n cursor: pointer;\n text-decoration: underline;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/views/posts.vue","\ndiv.post {\n width: 7.5rem;\n margin: 0 auto;\n padding: 0.4rem 0.8rem;\n color: #666;\n line-height: 200%;\n text-align: justify;\n}\ndiv.post > h3.post-title {\n text-align: center;\n line-height: 160%;\n margin-bottom: 0.2rem;\n color: #444;\n}\ndiv.post > p.datetime {\n text-align: center;\n color: #888;\n font-size: 14px;\n}\ndiv.post div.content pre {\n background-color: #eee;\n overflow-x: scroll;\n padding: 0.2rem 0.3rem;\n}\ndiv.post div.content blockquote > p{\n position: relative;\n overflow: visible;\n}\ndiv.post div.content blockquote > p::after {\n content: '';\n position: absolute;\n left: -20px;\n top: 0;\n width: 6px;\n height: 100%;\n background-color: #ddd;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/views/post.vue","\ndiv.about[data-v-89895d54] {\n width: 7.5rem;\n margin: 0 auto;\n padding: 0.4rem 0.8rem;\n}\ndiv.about > h1[data-v-89895d54] {\n margin-bottom: 0.4rem;\n}\ndiv.about > h2[data-v-89895d54] {\n margin-bottom: 0.3rem;\n}\ndiv.about > h3[data-v-89895d54] {\n margin: 0.1rem;\n}\ndiv.about > p.text[data-v-89895d54] {\n margin-bottom: 0.4rem;\n line-height: 200%;\n text-indent: 40px;\n color: #555;\n text-align: justify;\n}\ndiv.about > ul.list[data-v-89895d54] {\n padding-left: 0.4rem;\n list-style-position: inside;\n list-style-type: disc;\n line-height: 200%;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/views/about.vue"],"sourceRoot":""} -------------------------------------------------------------------------------- /server/public/static/img/github-10-xxl.8f65afc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/server/public/static/img/github-10-xxl.8f65afc.png -------------------------------------------------------------------------------- /server/public/static/img/theme10-min.d20da16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/server/public/static/img/theme10-min.d20da16.jpg -------------------------------------------------------------------------------- /server/public/static/js/app.88900cf6936897de38cc.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([1,0],[function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function s(){window.innerWidth>750?document.getElementsByTagName("html")[0].style.fontSize="100px":document.getElementsByTagName("html")[0].style.fontSize=window.innerWidth/7.5+"px"}var a=n(1),i=o(a),r=n(20),c=o(r),u=n(3),l=o(u);new i.default({el:"#app",template:"",components:{App:c.default},router:l.default}),s(),window.onresize=s},,,function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var s=n(1),a=o(s),i=n(5),r=o(i),c=n(23),u=o(c),l=n(25),d=o(l),f=n(24),p=o(f),h=n(22),m=o(h),v=n(21),b=o(v);a.default.use(r.default),e.default=new r.default({mode:"history",base:"blog",routes:[{path:"/",redirect:"/home"},{path:"/home",component:u.default},{path:"/gallery",component:m.default},{path:"/posts",component:d.default},{path:"/post/:filename",component:p.default},{path:"/about",component:b.default}]})},function(t,e,n){var o,s;n(14),o=n(7);var a=n(27);s=o=o||{},"object"!=typeof o.default&&"function"!=typeof o.default||(s=o=o.default),"function"==typeof s&&(s=s.options),s.render=a.render,s.staticRenderFns=a.staticRenderFns,s._scopeId="data-v-2515e4db",t.exports=o},,function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"app",data:function(){return{state:""}},created:function(){},computed:{},mounted:function(){},methods:{rollDown:function(){this.state="roll-down"},rollUp:function(){this.state="roll-up"}},components:{}}},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={data:function(){return{}},computed:{},mounted:function(){},methods:{scrollTop:function(){var t=document.getElementById("view"),e=setInterval(function(){t.scrollTop-=100,0==t.scrollTop&&clearInterval(e)},10)}},components:{}}},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={data:function(){return{}},computed:{},mounted:function(){},methods:{},components:{}}},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={data:function(){return{}},computed:{},mounted:function(){},methods:{},components:{}}},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var s=n(1),a=o(s),i=n(2),r=o(i),c=n(4),u=o(c);a.default.use(r.default),e.default={data:function(){return{header:"",content:""}},created:function(){this.$http.get("http://54.249.79.151/api/blog/posts").then(function(t){this.header=t.body[0],this.$http.get("http://54.249.79.151/api/blog/post?file="+this.header.title+".md").then(function(t){this.content=t.body.content})})},computed:{},mounted:function(){},methods:{},components:{scrollTop:u.default}}},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var s=n(1),a=o(s),i=n(2),r=o(i),c=n(4),u=o(c);a.default.use(r.default),e.default={data:function(){return{content:"",Mtime:""}},created:function(){this.$http.get("http://54.249.79.151/api/blog/post?file="+this.$route.params.filename+".md").then(function(t){this.content=t.body.content,this.Mtime=t.body.Mtime})},computed:{},mounted:function(){},methods:{},components:{scrollTop:u.default}}},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var s=n(1),a=o(s),i=n(2),r=o(i),c=n(3),u=o(c);a.default.use(r.default),e.default={data:function(){return{posts:[]}},created:function(){this.$http.get("http://54.249.79.151/api/blog/posts").then(function(t){this.posts=t.body})},computed:{},mounted:function(){},methods:{read:function(t){u.default.push("post/"+t)}},components:{}}},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e,n){var o,s;n(13),o=n(6);var a=n(26);s=o=o||{},"object"!=typeof o.default&&"function"!=typeof o.default||(s=o=o.default),"function"==typeof s&&(s=s.options),s.render=a.render,s.staticRenderFns=a.staticRenderFns,t.exports=o},function(t,e,n){var o,s;n(17),o=n(8);var a=n(30);s=o=o||{},"object"!=typeof o.default&&"function"!=typeof o.default||(s=o=o.default),"function"==typeof s&&(s=s.options),s.render=a.render,s.staticRenderFns=a.staticRenderFns,s._scopeId="data-v-89895d54",t.exports=o},function(t,e,n){var o,s;n(16),o=n(9);var a=n(29);s=o=o||{},"object"!=typeof o.default&&"function"!=typeof o.default||(s=o=o.default),"function"==typeof s&&(s=s.options),s.render=a.render,s.staticRenderFns=a.staticRenderFns,t.exports=o},function(t,e,n){var o,s;n(18),o=n(10);var a=n(31);s=o=o||{},"object"!=typeof o.default&&"function"!=typeof o.default||(s=o=o.default),"function"==typeof s&&(s=s.options),s.render=a.render,s.staticRenderFns=a.staticRenderFns,t.exports=o},function(t,e,n){var o,s;n(15),o=n(11);var a=n(28);s=o=o||{},"object"!=typeof o.default&&"function"!=typeof o.default||(s=o=o.default),"function"==typeof s&&(s=s.options),s.render=a.render,s.staticRenderFns=a.staticRenderFns,t.exports=o},function(t,e,n){var o,s;n(19),o=n(12);var a=n(32);s=o=o||{},"object"!=typeof o.default&&"function"!=typeof o.default||(s=o=o.default),"function"==typeof s&&(s=s.options),s.render=a.render,s.staticRenderFns=a.staticRenderFns,s._scopeId="data-v-f8f9d2c8",t.exports=o},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;return e("div",{class:[t.state],attrs:{id:"app"}},[e("header",{staticClass:"header"},[t._m(0)," ",e("i",{staticClass:"icon-down",on:{click:t.rollDown}})," ",e("i",{staticClass:"icon-up",on:{click:t.rollUp}})])," ",e("nav",{staticClass:"navbar"},[e("ul",{staticClass:"nav"},[e("li",[e("router-link",{attrs:{to:"/home"}},["首页"])])," ",e("li",[e("router-link",{attrs:{to:"/posts"}},["文章"])])," ",e("li",[e("router-link",{attrs:{to:"/gallery"}},["作品"])])," ",e("li",[e("router-link",{attrs:{to:"/about"}},["关于"])])])])," ",e("router-view",{staticClass:"view",attrs:{id:"view"}})])},staticRenderFns:[function(){var t=this,e=t.$createElement;return e("div",{staticClass:"box"},[e("h1",["Cloud's Blog"])," ",e("h3",["为自己吹过的牛逼奋斗终生"])," ",e("p",{staticClass:"socials"},[e("a",{staticClass:"icon github",attrs:{href:"https://github.com/Lee-Cloud",target:"_blank"}})," ",e("a",{staticClass:"icon sina",attrs:{href:"http://weibo.com/2808915224",target:"_blank"}})," ",e("a",{staticClass:"icon twitter",attrs:{href:"https://twitter.com/dangerous_cl",target:"_blank"}})])])}]}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;return e("span",{staticClass:"scrollTop",on:{click:t.scrollTop}})},staticRenderFns:[]}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;return e("div",[e("div",{staticClass:"post"},[e("h3",{staticClass:"post-title"},[t._s(t.$route.params.filename)])," ",e("p",{staticClass:"datetime"},["发表于:"+t._s(t.Mtime)])," ",e("div",{staticClass:"content",domProps:{innerHTML:t._s(t.content)}})," ",e("scrollTop")])])},staticRenderFns:[]}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;return e("div",["\n This is gallery view!\n"])},staticRenderFns:[]}},function(t,e){t.exports={render:function(){var t=this;t.$createElement;return t._m(0)},staticRenderFns:[function(){var t=this,e=t.$createElement;return e("div",[e("div",{staticClass:"about"},[e("h1",["About Me"])," ",e("h3",["基本信息"])," ",e("p",{staticClass:"text"},["\n 大家好,我是Cloud,坐标厦门,是一名90后coder(好吧,其实并没有“后”),谦虚但喜欢装逼,热爱生活,热爱健身,热爱coding。立志全栈的页面仔。\n "])," ",e("h3",["技术栈"])," ",e("ul",{staticClass:"list"},[e("li",["前端三板斧"])," ",e("li",["各主流CSS、JS库"])," ",e("li",["Git、SVN"])," ",e("li",["Vue.js"])," ",e("li",["Node.js"])])," ",e("p",{staticClass:"text"},["\n 前端基础扎实,掌握Jquery、Bootstrap、Vue(不限于)等主流JS、CSS库;\n 能完成各主流浏览器兼容、移动端响应式布局、安卓及IOS平台的Hybrid应用开发;\n 关注Web性能、体验(懒加载、预加载、缓存等);\n 提倡前后端分离(Ajax),\n 擅长基于Vue.js的SPA开发;\n 目前专注于node.js、MySQL、MongoDB等后端技术的学习。(反正吹牛逼又不用成本)\n "])," ",e("h3",["联系我"])," ",e("ul",{staticClass:"list"},[e("li",[e("a",{attrs:{href:"http://weibo.com/2808915224",target:"_blank"}},["新浪微博"])])," ",e("li",[e("a",{attrs:{href:"https://github.com/Lee-Cloud",target:"_blank"}},["Gitbub"])])," ",e("li",["QQ:595199568"])])])])}]}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;return e("div",[e("div",{staticClass:"post scroll"},[e("h3",{staticClass:"post-title"},["[顶] "+t._s(t.header.title)])," ",e("p",{staticClass:"datetime"},[t._s(t.header.datetime)])," ",e("div",{staticClass:"content",domProps:{innerHTML:t._s(t.content)}})," ",e("scrollTop")])])},staticRenderFns:[]}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;return e("div",[e("ul",{staticClass:"posts"},[t._l(t.posts,function(n){return e("li",[e("h3",[t._s(n.title)])," ",e("p",[t._s(n.datetime)])," ",e("p",{staticClass:"click",on:{click:function(e){t.read(n.title)}}},["点击阅读>>"])])})])])},staticRenderFns:[]}}]); 2 | //# sourceMappingURL=app.88900cf6936897de38cc.js.map -------------------------------------------------------------------------------- /server/public/static/js/app.88900cf6936897de38cc.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///static/js/app.88900cf6936897de38cc.js","webpack:///./src/main.js","webpack:///./src/router.js","webpack:///./src/components/scrollTop.vue","webpack:///App.vue","webpack:///scrollTop.vue","webpack:///home.vue","webpack:///post.vue","webpack:///posts.vue","webpack:///./src/App.vue","webpack:///./src/views/about.vue","webpack:///./src/views/gallery.vue","webpack:///./src/views/home.vue","webpack:///./src/views/post.vue","webpack:///./src/views/posts.vue","webpack:///./src/App.vue?c994","webpack:///./src/components/scrollTop.vue?5090","webpack:///./src/views/post.vue?0dae","webpack:///./src/views/gallery.vue?be4c","webpack:///./src/views/about.vue?38c0","webpack:///./src/views/home.vue?a455","webpack:///./src/views/posts.vue?aa91"],"names":["webpackJsonp","module","exports","__webpack_require__","_interopRequireDefault","obj","__esModule","default","responsive","window","innerWidth","document","getElementsByTagName","style","fontSize","_vue","_vue2","_App","_App2","_router","_router2","el","template","components","App","router","onresize","Object","defineProperty","value","_vueRouter","_vueRouter2","_home","_home2","_posts","_posts2","_post","_post2","_gallery","_gallery2","_about","_about2","use","mode","base","routes","path","redirect","component","__vue_exports__","__vue_options__","__vue_template__","options","render","staticRenderFns","_scopeId","name","data","state","created","computed","mounted","methods","rollDown","this","rollUp","scrollTop","scrollBox","getElementById","T","setInterval","clearInterval","_vueResource","_vueResource2","_scrollTop","_scrollTop2","header","content","$http","get","then","res","body","title","Mtime","$route","params","filename","posts","read","file","push","_vm","_h","$createElement","class","attrs","id","staticClass","_m","on","click","to","href","target","_s","domProps","innerHTML","datetime","_l","post","$event"],"mappings":"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","file":"static/js/app.88900cf6936897de38cc.js","sourcesContent":["webpackJsonp([1,0],[\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _vue = __webpack_require__(1);\n\t\n\tvar _vue2 = _interopRequireDefault(_vue);\n\t\n\tvar _App = __webpack_require__(20);\n\t\n\tvar _App2 = _interopRequireDefault(_App);\n\t\n\tvar _router = __webpack_require__(3);\n\t\n\tvar _router2 = _interopRequireDefault(_router);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tnew _vue2.default({\n\t el: '#app',\n\t template: '',\n\t components: { App: _App2.default },\n\t router: _router2.default\n\t});\n\tfunction responsive() {\n\t if (window.innerWidth > 750) {\n\t document.getElementsByTagName('html')[0].style.fontSize = 100 + 'px';\n\t } else {\n\t document.getElementsByTagName('html')[0].style.fontSize = window.innerWidth / 7.5 + 'px';\n\t }\n\t};\n\tresponsive();\n\twindow.onresize = responsive;\n\n/***/ },\n/* 1 */,\n/* 2 */,\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _vue = __webpack_require__(1);\n\t\n\tvar _vue2 = _interopRequireDefault(_vue);\n\t\n\tvar _vueRouter = __webpack_require__(5);\n\t\n\tvar _vueRouter2 = _interopRequireDefault(_vueRouter);\n\t\n\tvar _home = __webpack_require__(23);\n\t\n\tvar _home2 = _interopRequireDefault(_home);\n\t\n\tvar _posts = __webpack_require__(25);\n\t\n\tvar _posts2 = _interopRequireDefault(_posts);\n\t\n\tvar _post = __webpack_require__(24);\n\t\n\tvar _post2 = _interopRequireDefault(_post);\n\t\n\tvar _gallery = __webpack_require__(22);\n\t\n\tvar _gallery2 = _interopRequireDefault(_gallery);\n\t\n\tvar _about = __webpack_require__(21);\n\t\n\tvar _about2 = _interopRequireDefault(_about);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t_vue2.default.use(_vueRouter2.default);\n\t\n\texports.default = new _vueRouter2.default({\n\t mode: 'history',\n\t base: 'blog',\n\t routes: [{\n\t path: '/',\n\t redirect: '/home'\n\t }, {\n\t path: '/home',\n\t component: _home2.default\n\t }, {\n\t path: '/gallery',\n\t component: _gallery2.default\n\t }, {\n\t path: '/posts',\n\t component: _posts2.default\n\t }, {\n\t path: '/post/:filename',\n\t component: _post2.default\n\t }, {\n\t path: '/about',\n\t component: _about2.default\n\t }]\n\t});\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __vue_exports__, __vue_options__\n\tvar __vue_styles__ = {}\n\t\n\t/* styles */\n\t__webpack_require__(14)\n\t\n\t/* script */\n\t__vue_exports__ = __webpack_require__(7)\n\t\n\t/* template */\n\tvar __vue_template__ = __webpack_require__(27)\n\t__vue_options__ = __vue_exports__ = __vue_exports__ || {}\n\tif (\n\t typeof __vue_exports__.default === \"object\" ||\n\t typeof __vue_exports__.default === \"function\"\n\t) {\n\t__vue_options__ = __vue_exports__ = __vue_exports__.default\n\t}\n\tif (typeof __vue_options__ === \"function\") {\n\t __vue_options__ = __vue_options__.options\n\t}\n\t\n\t__vue_options__.render = __vue_template__.render\n\t__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n\t__vue_options__._scopeId = \"data-v-2515e4db\"\n\t\n\tmodule.exports = __vue_exports__\n\n\n/***/ },\n/* 5 */,\n/* 6 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.default = {\n\t name: 'app',\n\t data: function data() {\n\t return {\n\t state: ''\n\t };\n\t },\n\t created: function created() {},\n\t\n\t computed: {},\n\t mounted: function mounted() {},\n\t\n\t methods: {\n\t rollDown: function rollDown() {\n\t this.state = 'roll-down';\n\t },\n\t rollUp: function rollUp() {\n\t this.state = 'roll-up';\n\t }\n\t },\n\t components: {}\n\t};\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.default = {\n\t data: function data() {\n\t return {};\n\t },\n\t\n\t computed: {},\n\t mounted: function mounted() {},\n\t\n\t methods: {\n\t scrollTop: function scrollTop() {\n\t var scrollBox = document.getElementById('view');\n\t var T = setInterval(function () {\n\t scrollBox.scrollTop -= 100;\n\t if (scrollBox.scrollTop == 0) {\n\t clearInterval(T);\n\t }\n\t }, 10);\n\t }\n\t },\n\t components: {}\n\t};\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.default = {\n\t data: function data() {\n\t return {};\n\t },\n\t\n\t computed: {},\n\t mounted: function mounted() {},\n\t\n\t methods: {},\n\t components: {}\n\t};\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.default = {\n\t data: function data() {\n\t return {};\n\t },\n\t\n\t computed: {},\n\t mounted: function mounted() {},\n\t\n\t methods: {},\n\t components: {}\n\t};\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _vue = __webpack_require__(1);\n\t\n\tvar _vue2 = _interopRequireDefault(_vue);\n\t\n\tvar _vueResource = __webpack_require__(2);\n\t\n\tvar _vueResource2 = _interopRequireDefault(_vueResource);\n\t\n\tvar _scrollTop = __webpack_require__(4);\n\t\n\tvar _scrollTop2 = _interopRequireDefault(_scrollTop);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t_vue2.default.use(_vueResource2.default);\n\texports.default = {\n\t data: function data() {\n\t return {\n\t header: '',\n\t content: ''\n\t };\n\t },\n\t created: function created() {\n\t this.$http.get('http://54.249.79.151/api/blog/posts').then(function (res) {\n\t this.header = res.body[0];\n\t this.$http.get('http://54.249.79.151/api/blog/post?file=' + this.header.title + '.md').then(function (res) {\n\t this.content = res.body.content;\n\t });\n\t });\n\t },\n\t\n\t computed: {},\n\t mounted: function mounted() {},\n\t\n\t methods: {},\n\t components: {\n\t scrollTop: _scrollTop2.default\n\t }\n\t};\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _vue = __webpack_require__(1);\n\t\n\tvar _vue2 = _interopRequireDefault(_vue);\n\t\n\tvar _vueResource = __webpack_require__(2);\n\t\n\tvar _vueResource2 = _interopRequireDefault(_vueResource);\n\t\n\tvar _scrollTop = __webpack_require__(4);\n\t\n\tvar _scrollTop2 = _interopRequireDefault(_scrollTop);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t_vue2.default.use(_vueResource2.default);\n\texports.default = {\n\t data: function data() {\n\t return {\n\t content: '',\n\t Mtime: ''\n\t };\n\t },\n\t created: function created() {\n\t this.$http.get('http://54.249.79.151/api/blog/post?file=' + this.$route.params.filename + '.md').then(function (res) {\n\t this.content = res.body.content;\n\t this.Mtime = res.body.Mtime;\n\t });\n\t },\n\t\n\t computed: {},\n\t mounted: function mounted() {},\n\t\n\t methods: {},\n\t components: {\n\t scrollTop: _scrollTop2.default\n\t }\n\t};\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _vue = __webpack_require__(1);\n\t\n\tvar _vue2 = _interopRequireDefault(_vue);\n\t\n\tvar _vueResource = __webpack_require__(2);\n\t\n\tvar _vueResource2 = _interopRequireDefault(_vueResource);\n\t\n\tvar _router = __webpack_require__(3);\n\t\n\tvar _router2 = _interopRequireDefault(_router);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t_vue2.default.use(_vueResource2.default);\n\texports.default = {\n\t data: function data() {\n\t return {\n\t posts: []\n\t };\n\t },\n\t created: function created() {\n\t this.$http.get('http://54.249.79.151/api/blog/posts').then(function (res) {\n\t this.posts = res.body;\n\t });\n\t },\n\t\n\t computed: {},\n\t mounted: function mounted() {},\n\t\n\t methods: {\n\t read: function read(file) {\n\t _router2.default.push('post/' + file);\n\t }\n\t },\n\t components: {}\n\t};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __vue_exports__, __vue_options__\n\tvar __vue_styles__ = {}\n\t\n\t/* styles */\n\t__webpack_require__(13)\n\t\n\t/* script */\n\t__vue_exports__ = __webpack_require__(6)\n\t\n\t/* template */\n\tvar __vue_template__ = __webpack_require__(26)\n\t__vue_options__ = __vue_exports__ = __vue_exports__ || {}\n\tif (\n\t typeof __vue_exports__.default === \"object\" ||\n\t typeof __vue_exports__.default === \"function\"\n\t) {\n\t__vue_options__ = __vue_exports__ = __vue_exports__.default\n\t}\n\tif (typeof __vue_options__ === \"function\") {\n\t __vue_options__ = __vue_options__.options\n\t}\n\t\n\t__vue_options__.render = __vue_template__.render\n\t__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n\t\n\tmodule.exports = __vue_exports__\n\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __vue_exports__, __vue_options__\n\tvar __vue_styles__ = {}\n\t\n\t/* styles */\n\t__webpack_require__(17)\n\t\n\t/* script */\n\t__vue_exports__ = __webpack_require__(8)\n\t\n\t/* template */\n\tvar __vue_template__ = __webpack_require__(30)\n\t__vue_options__ = __vue_exports__ = __vue_exports__ || {}\n\tif (\n\t typeof __vue_exports__.default === \"object\" ||\n\t typeof __vue_exports__.default === \"function\"\n\t) {\n\t__vue_options__ = __vue_exports__ = __vue_exports__.default\n\t}\n\tif (typeof __vue_options__ === \"function\") {\n\t __vue_options__ = __vue_options__.options\n\t}\n\t\n\t__vue_options__.render = __vue_template__.render\n\t__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n\t__vue_options__._scopeId = \"data-v-89895d54\"\n\t\n\tmodule.exports = __vue_exports__\n\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __vue_exports__, __vue_options__\n\tvar __vue_styles__ = {}\n\t\n\t/* styles */\n\t__webpack_require__(16)\n\t\n\t/* script */\n\t__vue_exports__ = __webpack_require__(9)\n\t\n\t/* template */\n\tvar __vue_template__ = __webpack_require__(29)\n\t__vue_options__ = __vue_exports__ = __vue_exports__ || {}\n\tif (\n\t typeof __vue_exports__.default === \"object\" ||\n\t typeof __vue_exports__.default === \"function\"\n\t) {\n\t__vue_options__ = __vue_exports__ = __vue_exports__.default\n\t}\n\tif (typeof __vue_options__ === \"function\") {\n\t __vue_options__ = __vue_options__.options\n\t}\n\t\n\t__vue_options__.render = __vue_template__.render\n\t__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n\t\n\tmodule.exports = __vue_exports__\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __vue_exports__, __vue_options__\n\tvar __vue_styles__ = {}\n\t\n\t/* styles */\n\t__webpack_require__(18)\n\t\n\t/* script */\n\t__vue_exports__ = __webpack_require__(10)\n\t\n\t/* template */\n\tvar __vue_template__ = __webpack_require__(31)\n\t__vue_options__ = __vue_exports__ = __vue_exports__ || {}\n\tif (\n\t typeof __vue_exports__.default === \"object\" ||\n\t typeof __vue_exports__.default === \"function\"\n\t) {\n\t__vue_options__ = __vue_exports__ = __vue_exports__.default\n\t}\n\tif (typeof __vue_options__ === \"function\") {\n\t __vue_options__ = __vue_options__.options\n\t}\n\t\n\t__vue_options__.render = __vue_template__.render\n\t__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n\t\n\tmodule.exports = __vue_exports__\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __vue_exports__, __vue_options__\n\tvar __vue_styles__ = {}\n\t\n\t/* styles */\n\t__webpack_require__(15)\n\t\n\t/* script */\n\t__vue_exports__ = __webpack_require__(11)\n\t\n\t/* template */\n\tvar __vue_template__ = __webpack_require__(28)\n\t__vue_options__ = __vue_exports__ = __vue_exports__ || {}\n\tif (\n\t typeof __vue_exports__.default === \"object\" ||\n\t typeof __vue_exports__.default === \"function\"\n\t) {\n\t__vue_options__ = __vue_exports__ = __vue_exports__.default\n\t}\n\tif (typeof __vue_options__ === \"function\") {\n\t __vue_options__ = __vue_options__.options\n\t}\n\t\n\t__vue_options__.render = __vue_template__.render\n\t__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n\t\n\tmodule.exports = __vue_exports__\n\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __vue_exports__, __vue_options__\n\tvar __vue_styles__ = {}\n\t\n\t/* styles */\n\t__webpack_require__(19)\n\t\n\t/* script */\n\t__vue_exports__ = __webpack_require__(12)\n\t\n\t/* template */\n\tvar __vue_template__ = __webpack_require__(32)\n\t__vue_options__ = __vue_exports__ = __vue_exports__ || {}\n\tif (\n\t typeof __vue_exports__.default === \"object\" ||\n\t typeof __vue_exports__.default === \"function\"\n\t) {\n\t__vue_options__ = __vue_exports__ = __vue_exports__.default\n\t}\n\tif (typeof __vue_options__ === \"function\") {\n\t __vue_options__ = __vue_options__.options\n\t}\n\t\n\t__vue_options__.render = __vue_template__.render\n\t__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n\t__vue_options__._scopeId = \"data-v-f8f9d2c8\"\n\t\n\tmodule.exports = __vue_exports__\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n\t return _h('div', {\n\t class: [_vm.state],\n\t attrs: {\n\t \"id\": \"app\"\n\t }\n\t }, [_h('header', {\n\t staticClass: \"header\"\n\t }, [_vm._m(0), \" \", _h('i', {\n\t staticClass: \"icon-down\",\n\t on: {\n\t \"click\": _vm.rollDown\n\t }\n\t }), \" \", _h('i', {\n\t staticClass: \"icon-up\",\n\t on: {\n\t \"click\": _vm.rollUp\n\t }\n\t })]), \" \", _h('nav', {\n\t staticClass: \"navbar\"\n\t }, [_h('ul', {\n\t staticClass: \"nav\"\n\t }, [_h('li', [_h('router-link', {\n\t attrs: {\n\t \"to\": \"/home\"\n\t }\n\t }, [\"首页\"])]), \" \", _h('li', [_h('router-link', {\n\t attrs: {\n\t \"to\": \"/posts\"\n\t }\n\t }, [\"文章\"])]), \" \", _h('li', [_h('router-link', {\n\t attrs: {\n\t \"to\": \"/gallery\"\n\t }\n\t }, [\"作品\"])]), \" \", _h('li', [_h('router-link', {\n\t attrs: {\n\t \"to\": \"/about\"\n\t }\n\t }, [\"关于\"])])])]), \" \", _h('router-view', {\n\t staticClass: \"view\",\n\t attrs: {\n\t \"id\": \"view\"\n\t }\n\t })])\n\t},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;\n\t return _h('div', {\n\t staticClass: \"box\"\n\t }, [_h('h1', [\"Cloud's Blog\"]), \" \", _h('h3', [\"为自己吹过的牛逼奋斗终生\"]), \" \", _h('p', {\n\t staticClass: \"socials\"\n\t }, [_h('a', {\n\t staticClass: \"icon github\",\n\t attrs: {\n\t \"href\": \"https://github.com/Lee-Cloud\",\n\t \"target\": \"_blank\"\n\t }\n\t }), \" \", _h('a', {\n\t staticClass: \"icon sina\",\n\t attrs: {\n\t \"href\": \"http://weibo.com/2808915224\",\n\t \"target\": \"_blank\"\n\t }\n\t }), \" \", _h('a', {\n\t staticClass: \"icon twitter\",\n\t attrs: {\n\t \"href\": \"https://twitter.com/dangerous_cl\",\n\t \"target\": \"_blank\"\n\t }\n\t })])])\n\t}]}\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n\t return _h('span', {\n\t staticClass: \"scrollTop\",\n\t on: {\n\t \"click\": _vm.scrollTop\n\t }\n\t })\n\t},staticRenderFns: []}\n\n/***/ },\n/* 28 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n\t return _h('div', [_h('div', {\n\t staticClass: \"post\"\n\t }, [_h('h3', {\n\t staticClass: \"post-title\"\n\t }, [_vm._s(_vm.$route.params.filename)]), \" \", _h('p', {\n\t staticClass: \"datetime\"\n\t }, [\"发表于:\" + _vm._s(_vm.Mtime)]), \" \", _h('div', {\n\t staticClass: \"content\",\n\t domProps: {\n\t \"innerHTML\": _vm._s(_vm.content)\n\t }\n\t }), \" \", _h('scrollTop')])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n\t return _h('div', [\"\\n This is gallery view!\\n\"])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 30 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n\t return _vm._m(0)\n\t},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;\n\t return _h('div', [_h('div', {\n\t staticClass: \"about\"\n\t }, [_h('h1', [\"About Me\"]), \" \", _h('h3', [\"基本信息\"]), \" \", _h('p', {\n\t staticClass: \"text\"\n\t }, [\"\\n 大家好,我是Cloud,坐标厦门,是一名90后coder(好吧,其实并没有“后”),谦虚但喜欢装逼,热爱生活,热爱健身,热爱coding。立志全栈的页面仔。\\n \"]), \" \", _h('h3', [\"技术栈\"]), \" \", _h('ul', {\n\t staticClass: \"list\"\n\t }, [_h('li', [\"前端三板斧\"]), \" \", _h('li', [\"各主流CSS、JS库\"]), \" \", _h('li', [\"Git、SVN\"]), \" \", _h('li', [\"Vue.js\"]), \" \", _h('li', [\"Node.js\"])]), \" \", _h('p', {\n\t staticClass: \"text\"\n\t }, [\"\\n 前端基础扎实,掌握Jquery、Bootstrap、Vue(不限于)等主流JS、CSS库;\\n 能完成各主流浏览器兼容、移动端响应式布局、安卓及IOS平台的Hybrid应用开发;\\n 关注Web性能、体验(懒加载、预加载、缓存等);\\n 提倡前后端分离(Ajax),\\n 擅长基于Vue.js的SPA开发;\\n 目前专注于node.js、MySQL、MongoDB等后端技术的学习。(反正吹牛逼又不用成本)\\n \"]), \" \", _h('h3', [\"联系我\"]), \" \", _h('ul', {\n\t staticClass: \"list\"\n\t }, [_h('li', [_h('a', {\n\t attrs: {\n\t \"href\": \"http://weibo.com/2808915224\",\n\t \"target\": \"_blank\"\n\t }\n\t }, [\"新浪微博\"])]), \" \", _h('li', [_h('a', {\n\t attrs: {\n\t \"href\": \"https://github.com/Lee-Cloud\",\n\t \"target\": \"_blank\"\n\t }\n\t }, [\"Gitbub\"])]), \" \", _h('li', [\"QQ:595199568\"])])])])\n\t}]}\n\n/***/ },\n/* 31 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n\t return _h('div', [_h('div', {\n\t staticClass: \"post scroll\"\n\t }, [_h('h3', {\n\t staticClass: \"post-title\"\n\t }, [\"[顶] \" + _vm._s(_vm.header.title)]), \" \", _h('p', {\n\t staticClass: \"datetime\"\n\t }, [_vm._s(_vm.header.datetime)]), \" \", _h('div', {\n\t staticClass: \"content\",\n\t domProps: {\n\t \"innerHTML\": _vm._s(_vm.content)\n\t }\n\t }), \" \", _h('scrollTop')])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 32 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n\t return _h('div', [_h('ul', {\n\t staticClass: \"posts\"\n\t }, [_vm._l((_vm.posts), function(post) {\n\t return _h('li', [_h('h3', [_vm._s(post.title)]), \" \", _h('p', [_vm._s(post.datetime)]), \" \", _h('p', {\n\t staticClass: \"click\",\n\t on: {\n\t \"click\": function($event) {\n\t _vm.read(post.title)\n\t }\n\t }\n\t }, [\"点击阅读>>\"])])\n\t })])])\n\t},staticRenderFns: []}\n\n/***/ }\n]);\n\n\n// WEBPACK FOOTER //\n// static/js/app.88900cf6936897de38cc.js","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport App from './App'\nimport router from './router.js'\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n template: '',\n components: { App },\n router\n})\nfunction responsive(){\n if (window.innerWidth > 750) {\n document.getElementsByTagName('html')[0].style.fontSize = 100 + 'px';\n } else {\n document.getElementsByTagName('html')[0].style.fontSize = window.innerWidth / 7.5 + 'px';\n }\n};\nresponsive();\nwindow.onresize = responsive;\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js","import Vue from 'vue'\r\nimport VueRouter from 'vue-router'\r\nVue.use(VueRouter)\r\n\r\nimport Home from './views/home.vue'\r\nimport Posts from './views/posts.vue'\r\nimport Post from './views/post.vue'\r\nimport Gallery from './views/gallery.vue'\r\nimport About from './views/about.vue'\r\nexport default new VueRouter({\r\n mode: 'history',\r\n base: 'blog',\r\n routes: [\r\n {\r\n path: '/',\r\n redirect: '/home'\r\n },\r\n {\r\n path: '/home',\r\n component: Home\r\n },\r\n {\r\n path: '/gallery',\r\n component: Gallery\r\n },\r\n {\r\n path: '/posts',\r\n component: Posts\r\n },\r\n {\r\n path: '/post/:filename',\r\n component: Post\r\n },\r\n {\r\n path: '/about',\r\n component: About\r\n }\r\n ]\r\n})\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/router.js","var __vue_exports__, __vue_options__\nvar __vue_styles__ = {}\n\n/* styles */\nrequire(\"!!./../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"extract\\\":true,\\\"remove\\\":true}!vue-style-loader!css-loader?sourceMap!vue-loader/lib/style-rewriter?id=data-v-2515e4db&scoped=true!vue-loader/lib/selector?type=styles&index=0!./scrollTop.vue\")\n\n/* script */\n__vue_exports__ = require(\"!!babel-loader!vue-loader/lib/selector?type=script&index=0!./scrollTop.vue\")\n\n/* template */\nvar __vue_template__ = require(\"!!vue-loader/lib/template-compiler?id=data-v-2515e4db!vue-loader/lib/selector?type=template&index=0!./scrollTop.vue\")\n__vue_options__ = __vue_exports__ = __vue_exports__ || {}\nif (\n typeof __vue_exports__.default === \"object\" ||\n typeof __vue_exports__.default === \"function\"\n) {\n__vue_options__ = __vue_exports__ = __vue_exports__.default\n}\nif (typeof __vue_options__ === \"function\") {\n __vue_options__ = __vue_options__.options\n}\n\n__vue_options__.render = __vue_template__.render\n__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n__vue_options__._scopeId = \"data-v-2515e4db\"\n\nmodule.exports = __vue_exports__\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/scrollTop.vue\n// module id = 4\n// module chunks = 1","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// App.vue?51cbb253","\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// scrollTop.vue?17bc300a","\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// home.vue?b532e7f6","\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// post.vue?39bb0d60","\r\n\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// posts.vue?2519ca1b","var __vue_exports__, __vue_options__\nvar __vue_styles__ = {}\n\n/* styles */\nrequire(\"!!./../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"extract\\\":true,\\\"remove\\\":true}!vue-style-loader!css-loader?sourceMap!vue-loader/lib/style-rewriter?id=data-v-0780d4b8!vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n\n/* script */\n__vue_exports__ = require(\"!!babel-loader!vue-loader/lib/selector?type=script&index=0!./App.vue\")\n\n/* template */\nvar __vue_template__ = require(\"!!vue-loader/lib/template-compiler?id=data-v-0780d4b8!vue-loader/lib/selector?type=template&index=0!./App.vue\")\n__vue_options__ = __vue_exports__ = __vue_exports__ || {}\nif (\n typeof __vue_exports__.default === \"object\" ||\n typeof __vue_exports__.default === \"function\"\n) {\n__vue_options__ = __vue_exports__ = __vue_exports__.default\n}\nif (typeof __vue_options__ === \"function\") {\n __vue_options__ = __vue_options__.options\n}\n\n__vue_options__.render = __vue_template__.render\n__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n\nmodule.exports = __vue_exports__\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = 20\n// module chunks = 1","var __vue_exports__, __vue_options__\nvar __vue_styles__ = {}\n\n/* styles */\nrequire(\"!!./../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"extract\\\":true,\\\"remove\\\":true}!vue-style-loader!css-loader?sourceMap!vue-loader/lib/style-rewriter?id=data-v-89895d54&scoped=true!vue-loader/lib/selector?type=styles&index=0!./about.vue\")\n\n/* script */\n__vue_exports__ = require(\"!!babel-loader!vue-loader/lib/selector?type=script&index=0!./about.vue\")\n\n/* template */\nvar __vue_template__ = require(\"!!vue-loader/lib/template-compiler?id=data-v-89895d54!vue-loader/lib/selector?type=template&index=0!./about.vue\")\n__vue_options__ = __vue_exports__ = __vue_exports__ || {}\nif (\n typeof __vue_exports__.default === \"object\" ||\n typeof __vue_exports__.default === \"function\"\n) {\n__vue_options__ = __vue_exports__ = __vue_exports__.default\n}\nif (typeof __vue_options__ === \"function\") {\n __vue_options__ = __vue_options__.options\n}\n\n__vue_options__.render = __vue_template__.render\n__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n__vue_options__._scopeId = \"data-v-89895d54\"\n\nmodule.exports = __vue_exports__\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/about.vue\n// module id = 21\n// module chunks = 1","var __vue_exports__, __vue_options__\nvar __vue_styles__ = {}\n\n/* styles */\nrequire(\"!!./../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"extract\\\":true,\\\"remove\\\":true}!vue-style-loader!css-loader?sourceMap!vue-loader/lib/style-rewriter?id=data-v-599d925b!vue-loader/lib/selector?type=styles&index=0!./gallery.vue\")\n\n/* script */\n__vue_exports__ = require(\"!!babel-loader!vue-loader/lib/selector?type=script&index=0!./gallery.vue\")\n\n/* template */\nvar __vue_template__ = require(\"!!vue-loader/lib/template-compiler?id=data-v-599d925b!vue-loader/lib/selector?type=template&index=0!./gallery.vue\")\n__vue_options__ = __vue_exports__ = __vue_exports__ || {}\nif (\n typeof __vue_exports__.default === \"object\" ||\n typeof __vue_exports__.default === \"function\"\n) {\n__vue_options__ = __vue_exports__ = __vue_exports__.default\n}\nif (typeof __vue_options__ === \"function\") {\n __vue_options__ = __vue_options__.options\n}\n\n__vue_options__.render = __vue_template__.render\n__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n\nmodule.exports = __vue_exports__\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/gallery.vue\n// module id = 22\n// module chunks = 1","var __vue_exports__, __vue_options__\nvar __vue_styles__ = {}\n\n/* styles */\nrequire(\"!!./../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"extract\\\":true,\\\"remove\\\":true}!vue-style-loader!css-loader?sourceMap!vue-loader/lib/style-rewriter?id=data-v-ce04c7b4!vue-loader/lib/selector?type=styles&index=0!./home.vue\")\n\n/* script */\n__vue_exports__ = require(\"!!babel-loader!vue-loader/lib/selector?type=script&index=0!./home.vue\")\n\n/* template */\nvar __vue_template__ = require(\"!!vue-loader/lib/template-compiler?id=data-v-ce04c7b4!vue-loader/lib/selector?type=template&index=0!./home.vue\")\n__vue_options__ = __vue_exports__ = __vue_exports__ || {}\nif (\n typeof __vue_exports__.default === \"object\" ||\n typeof __vue_exports__.default === \"function\"\n) {\n__vue_options__ = __vue_exports__ = __vue_exports__.default\n}\nif (typeof __vue_options__ === \"function\") {\n __vue_options__ = __vue_options__.options\n}\n\n__vue_options__.render = __vue_template__.render\n__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n\nmodule.exports = __vue_exports__\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/home.vue\n// module id = 23\n// module chunks = 1","var __vue_exports__, __vue_options__\nvar __vue_styles__ = {}\n\n/* styles */\nrequire(\"!!./../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"extract\\\":true,\\\"remove\\\":true}!vue-style-loader!css-loader?sourceMap!vue-loader/lib/style-rewriter?id=data-v-39d11132!vue-loader/lib/selector?type=styles&index=0!./post.vue\")\n\n/* script */\n__vue_exports__ = require(\"!!babel-loader!vue-loader/lib/selector?type=script&index=0!./post.vue\")\n\n/* template */\nvar __vue_template__ = require(\"!!vue-loader/lib/template-compiler?id=data-v-39d11132!vue-loader/lib/selector?type=template&index=0!./post.vue\")\n__vue_options__ = __vue_exports__ = __vue_exports__ || {}\nif (\n typeof __vue_exports__.default === \"object\" ||\n typeof __vue_exports__.default === \"function\"\n) {\n__vue_options__ = __vue_exports__ = __vue_exports__.default\n}\nif (typeof __vue_options__ === \"function\") {\n __vue_options__ = __vue_options__.options\n}\n\n__vue_options__.render = __vue_template__.render\n__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n\nmodule.exports = __vue_exports__\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/post.vue\n// module id = 24\n// module chunks = 1","var __vue_exports__, __vue_options__\nvar __vue_styles__ = {}\n\n/* styles */\nrequire(\"!!./../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"extract\\\":true,\\\"remove\\\":true}!vue-style-loader!css-loader?sourceMap!vue-loader/lib/style-rewriter?id=data-v-f8f9d2c8&scoped=true!vue-loader/lib/selector?type=styles&index=0!./posts.vue\")\n\n/* script */\n__vue_exports__ = require(\"!!babel-loader!vue-loader/lib/selector?type=script&index=0!./posts.vue\")\n\n/* template */\nvar __vue_template__ = require(\"!!vue-loader/lib/template-compiler?id=data-v-f8f9d2c8!vue-loader/lib/selector?type=template&index=0!./posts.vue\")\n__vue_options__ = __vue_exports__ = __vue_exports__ || {}\nif (\n typeof __vue_exports__.default === \"object\" ||\n typeof __vue_exports__.default === \"function\"\n) {\n__vue_options__ = __vue_exports__ = __vue_exports__.default\n}\nif (typeof __vue_options__ === \"function\") {\n __vue_options__ = __vue_options__.options\n}\n\n__vue_options__.render = __vue_template__.render\n__vue_options__.staticRenderFns = __vue_template__.staticRenderFns\n__vue_options__._scopeId = \"data-v-f8f9d2c8\"\n\nmodule.exports = __vue_exports__\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/posts.vue\n// module id = 25\n// module chunks = 1","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n return _h('div', {\n class: [_vm.state],\n attrs: {\n \"id\": \"app\"\n }\n }, [_h('header', {\n staticClass: \"header\"\n }, [_vm._m(0), \" \", _h('i', {\n staticClass: \"icon-down\",\n on: {\n \"click\": _vm.rollDown\n }\n }), \" \", _h('i', {\n staticClass: \"icon-up\",\n on: {\n \"click\": _vm.rollUp\n }\n })]), \" \", _h('nav', {\n staticClass: \"navbar\"\n }, [_h('ul', {\n staticClass: \"nav\"\n }, [_h('li', [_h('router-link', {\n attrs: {\n \"to\": \"/home\"\n }\n }, [\"首页\"])]), \" \", _h('li', [_h('router-link', {\n attrs: {\n \"to\": \"/posts\"\n }\n }, [\"文章\"])]), \" \", _h('li', [_h('router-link', {\n attrs: {\n \"to\": \"/gallery\"\n }\n }, [\"作品\"])]), \" \", _h('li', [_h('router-link', {\n attrs: {\n \"to\": \"/about\"\n }\n }, [\"关于\"])])])]), \" \", _h('router-view', {\n staticClass: \"view\",\n attrs: {\n \"id\": \"view\"\n }\n })])\n},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;\n return _h('div', {\n staticClass: \"box\"\n }, [_h('h1', [\"Cloud's Blog\"]), \" \", _h('h3', [\"为自己吹过的牛逼奋斗终生\"]), \" \", _h('p', {\n staticClass: \"socials\"\n }, [_h('a', {\n staticClass: \"icon github\",\n attrs: {\n \"href\": \"https://github.com/Lee-Cloud\",\n \"target\": \"_blank\"\n }\n }), \" \", _h('a', {\n staticClass: \"icon sina\",\n attrs: {\n \"href\": \"http://weibo.com/2808915224\",\n \"target\": \"_blank\"\n }\n }), \" \", _h('a', {\n staticClass: \"icon twitter\",\n attrs: {\n \"href\": \"https://twitter.com/dangerous_cl\",\n \"target\": \"_blank\"\n }\n })])])\n}]}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-0780d4b8!./~/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = 26\n// module chunks = 1","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n return _h('span', {\n staticClass: \"scrollTop\",\n on: {\n \"click\": _vm.scrollTop\n }\n })\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-2515e4db!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/scrollTop.vue\n// module id = 27\n// module chunks = 1","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n return _h('div', [_h('div', {\n staticClass: \"post\"\n }, [_h('h3', {\n staticClass: \"post-title\"\n }, [_vm._s(_vm.$route.params.filename)]), \" \", _h('p', {\n staticClass: \"datetime\"\n }, [\"发表于:\" + _vm._s(_vm.Mtime)]), \" \", _h('div', {\n staticClass: \"content\",\n domProps: {\n \"innerHTML\": _vm._s(_vm.content)\n }\n }), \" \", _h('scrollTop')])])\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-39d11132!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/post.vue\n// module id = 28\n// module chunks = 1","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n return _h('div', [\"\\n This is gallery view!\\n\"])\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-599d925b!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/gallery.vue\n// module id = 29\n// module chunks = 1","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n return _vm._m(0)\n},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;\n return _h('div', [_h('div', {\n staticClass: \"about\"\n }, [_h('h1', [\"About Me\"]), \" \", _h('h3', [\"基本信息\"]), \" \", _h('p', {\n staticClass: \"text\"\n }, [\"\\n 大家好,我是Cloud,坐标厦门,是一名90后coder(好吧,其实并没有“后”),谦虚但喜欢装逼,热爱生活,热爱健身,热爱coding。立志全栈的页面仔。\\n \"]), \" \", _h('h3', [\"技术栈\"]), \" \", _h('ul', {\n staticClass: \"list\"\n }, [_h('li', [\"前端三板斧\"]), \" \", _h('li', [\"各主流CSS、JS库\"]), \" \", _h('li', [\"Git、SVN\"]), \" \", _h('li', [\"Vue.js\"]), \" \", _h('li', [\"Node.js\"])]), \" \", _h('p', {\n staticClass: \"text\"\n }, [\"\\n 前端基础扎实,掌握Jquery、Bootstrap、Vue(不限于)等主流JS、CSS库;\\n 能完成各主流浏览器兼容、移动端响应式布局、安卓及IOS平台的Hybrid应用开发;\\n 关注Web性能、体验(懒加载、预加载、缓存等);\\n 提倡前后端分离(Ajax),\\n 擅长基于Vue.js的SPA开发;\\n 目前专注于node.js、MySQL、MongoDB等后端技术的学习。(反正吹牛逼又不用成本)\\n \"]), \" \", _h('h3', [\"联系我\"]), \" \", _h('ul', {\n staticClass: \"list\"\n }, [_h('li', [_h('a', {\n attrs: {\n \"href\": \"http://weibo.com/2808915224\",\n \"target\": \"_blank\"\n }\n }, [\"新浪微博\"])]), \" \", _h('li', [_h('a', {\n attrs: {\n \"href\": \"https://github.com/Lee-Cloud\",\n \"target\": \"_blank\"\n }\n }, [\"Gitbub\"])]), \" \", _h('li', [\"QQ:595199568\"])])])])\n}]}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-89895d54!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/about.vue\n// module id = 30\n// module chunks = 1","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n return _h('div', [_h('div', {\n staticClass: \"post scroll\"\n }, [_h('h3', {\n staticClass: \"post-title\"\n }, [\"[顶] \" + _vm._s(_vm.header.title)]), \" \", _h('p', {\n staticClass: \"datetime\"\n }, [_vm._s(_vm.header.datetime)]), \" \", _h('div', {\n staticClass: \"content\",\n domProps: {\n \"innerHTML\": _vm._s(_vm.content)\n }\n }), \" \", _h('scrollTop')])])\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-ce04c7b4!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/home.vue\n// module id = 31\n// module chunks = 1","module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;\n return _h('div', [_h('ul', {\n staticClass: \"posts\"\n }, [_vm._l((_vm.posts), function(post) {\n return _h('li', [_h('h3', [_vm._s(post.title)]), \" \", _h('p', [_vm._s(post.datetime)]), \" \", _h('p', {\n staticClass: \"click\",\n on: {\n \"click\": function($event) {\n _vm.read(post.title)\n }\n }\n }, [\"点击阅读>>\"])])\n })])])\n},staticRenderFns: []}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler.js?id=data-v-f8f9d2c8!./~/vue-loader/lib/selector.js?type=template&index=0!./src/views/posts.vue\n// module id = 32\n// module chunks = 1"],"sourceRoot":""} -------------------------------------------------------------------------------- /server/public/static/js/manifest.8842679756f1e67b9a3e.js: -------------------------------------------------------------------------------- 1 | !function(e){function t(n){if(r[n])return r[n].exports;var a=r[n]={exports:{},id:n,loaded:!1};return e[n].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var n=window.webpackJsonp;window.webpackJsonp=function(c,o){for(var p,s,l=0,i=[];l 2 |
3 |
4 | 6 |
7 |

Cloud's Blog

8 |

为自己吹过的牛逼奋斗终生

9 |

10 | 11 | 12 | 13 |

14 |
15 | 16 | 17 |
18 | 26 | 27 |
28 | 29 | 30 | 52 | 53 | 243 | -------------------------------------------------------------------------------- /src/assets/Arrowhead-Down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/Arrowhead-Down.png -------------------------------------------------------------------------------- /src/assets/Pedalo.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/Pedalo.mp3 -------------------------------------------------------------------------------- /src/assets/Twitter-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/Twitter-logo.png -------------------------------------------------------------------------------- /src/assets/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/avatar.jpg -------------------------------------------------------------------------------- /src/assets/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/avatar.png -------------------------------------------------------------------------------- /src/assets/blog.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/blog.jpg -------------------------------------------------------------------------------- /src/assets/github-10-xxl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/github-10-xxl.png -------------------------------------------------------------------------------- /src/assets/lottery.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/lottery.jpg -------------------------------------------------------------------------------- /src/assets/rocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/rocket.png -------------------------------------------------------------------------------- /src/assets/scrollTop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/scrollTop.png -------------------------------------------------------------------------------- /src/assets/sina-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/sina-logo.png -------------------------------------------------------------------------------- /src/assets/theme1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/theme1.jpg -------------------------------------------------------------------------------- /src/assets/theme10-min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/theme10-min.jpg -------------------------------------------------------------------------------- /src/assets/theme10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/theme10.jpg -------------------------------------------------------------------------------- /src/assets/theme2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/theme2.jpg -------------------------------------------------------------------------------- /src/assets/theme3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/theme3.jpg -------------------------------------------------------------------------------- /src/assets/theme4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/theme4.jpg -------------------------------------------------------------------------------- /src/assets/theme5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/theme5.jpg -------------------------------------------------------------------------------- /src/assets/theme6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/theme6.jpg -------------------------------------------------------------------------------- /src/assets/theme7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/theme7.jpg -------------------------------------------------------------------------------- /src/assets/theme8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/theme8.jpg -------------------------------------------------------------------------------- /src/assets/theme9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/src/assets/theme9.jpg -------------------------------------------------------------------------------- /src/components/scrollTop.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 26 | 27 | 45 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router.js' 6 | /* eslint-disable no-new */ 7 | new Vue({ 8 | el: '#app', 9 | template: '', 10 | components: { App }, 11 | router 12 | }) 13 | function responsive(){ 14 | if (window.innerWidth > 750) { 15 | document.getElementsByTagName('html')[0].style.fontSize = 100 + 'px'; 16 | } else { 17 | document.getElementsByTagName('html')[0].style.fontSize = window.innerWidth / 7.5 + 'px'; 18 | } 19 | }; 20 | responsive(); 21 | window.onresize = responsive; 22 | -------------------------------------------------------------------------------- /src/router.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | Vue.use(VueRouter) 4 | 5 | import Home from './views/home.vue' 6 | import Posts from './views/posts.vue' 7 | import Post from './views/post.vue' 8 | import Gallery from './views/gallery.vue' 9 | import About from './views/about.vue' 10 | export default new VueRouter({ 11 | mode: 'history', 12 | base: 'blog', 13 | routes: [ 14 | { 15 | path: '/', 16 | redirect: '/home' 17 | }, 18 | { 19 | path: '/home', 20 | component: Home 21 | }, 22 | { 23 | path: '/gallery', 24 | component: Gallery 25 | }, 26 | { 27 | path: '/posts', 28 | component: Posts 29 | }, 30 | { 31 | path: '/post/:filename', 32 | component: Post 33 | }, 34 | { 35 | path: '/about', 36 | component: About 37 | } 38 | ] 39 | }) 40 | -------------------------------------------------------------------------------- /src/views/about.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 46 | 47 | 76 | -------------------------------------------------------------------------------- /src/views/gallery.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 49 | 50 | 86 | -------------------------------------------------------------------------------- /src/views/home.vue: -------------------------------------------------------------------------------- 1 | 11 | 39 | 40 | 43 | -------------------------------------------------------------------------------- /src/views/post.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 38 | 77 | -------------------------------------------------------------------------------- /src/views/posts.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 39 | 40 | 69 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lee-Cloud/CloudBlog/53037677f3cfbc6b974afd3ac3f28154b7224c65/static/.gitkeep --------------------------------------------------------------------------------