diff options
| author | Mitja Felicijan <mitja.felicijan@gmail.com> | 2019-10-22 03:40:14 +0200 |
|---|---|---|
| committer | Mitja Felicijan <mitja.felicijan@gmail.com> | 2019-10-22 03:40:14 +0200 |
| commit | 28dd784a088a35739cdfdc4ce79f8ee6d50bf816 (patch) | |
| tree | c198abb97177f60864530ee46f5cdcf0ae88d2bf /gulpfile.js | |
| parent | 421677613114bb40780d3a5516b6930d386d0b09 (diff) | |
| download | mitjafelicijan.com-28dd784a088a35739cdfdc4ce79f8ee6d50bf816.tar.gz | |
Cleanup of repo and move to gostatic
Diffstat (limited to 'gulpfile.js')
| -rw-r--r-- | gulpfile.js | 181 |
1 files changed, 0 insertions, 181 deletions
diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index cf0ce50..0000000 --- a/gulpfile.js +++ /dev/null | |||
| @@ -1,181 +0,0 @@ | |||
| 1 | 'use strict'; | ||
| 2 | |||
| 3 | const util = require('util'); | ||
| 4 | const gulp = require('gulp'); | ||
| 5 | const concat = require('gulp-concat'); | ||
| 6 | const terser = require('gulp-terser'); | ||
| 7 | const clean = require('gulp-clean-css'); | ||
| 8 | const settings = require('./settings.js'); | ||
| 9 | const minify = require('html-minifier').minify; | ||
| 10 | var browserSync = require('browser-sync').create(); | ||
| 11 | |||
| 12 | const fs = require('fs'); | ||
| 13 | const markdown = require('markdown-it'); | ||
| 14 | const prism = require('markdown-it-prism'); | ||
| 15 | const nunjucks = require('nunjucks'); | ||
| 16 | const yaml = require('yaml'); | ||
| 17 | const dayjs = require('dayjs'); | ||
| 18 | |||
| 19 | const md = new markdown({ | ||
| 20 | html: true, | ||
| 21 | linkify: false, | ||
| 22 | typographer: true, | ||
| 23 | breaks: true, | ||
| 24 | }) | ||
| 25 | .use(prism) | ||
| 26 | .use(require('markdown-it-deflist')) | ||
| 27 | .use(require('markdown-it-footnote')) | ||
| 28 | .use(require('markdown-it-anchor')) | ||
| 29 | .use(require('markdown-it-checkbox')) | ||
| 30 | |||
| 31 | nunjucks.configure('source/layouts', { | ||
| 32 | autoescape: false, | ||
| 33 | noCache: true, | ||
| 34 | }); | ||
| 35 | |||
| 36 | gulp.task('js', () => gulp.src(settings.assets.javascript) | ||
| 37 | .pipe(concat('bundle.js')) | ||
| 38 | .pipe(terser()) | ||
| 39 | .pipe(gulp.dest('tmp')) | ||
| 40 | ); | ||
| 41 | |||
| 42 | gulp.task('css', () => gulp.src(settings.assets.css) | ||
| 43 | .pipe(concat('bundle.css')) | ||
| 44 | .pipe(clean({})) | ||
| 45 | .pipe(gulp.dest('tmp')) | ||
| 46 | ); | ||
| 47 | |||
| 48 | gulp.task('copy-robots', () => gulp.src('robots.txt') | ||
| 49 | .pipe(gulp.dest('public')) | ||
| 50 | ); | ||
| 51 | |||
| 52 | gulp.task('copy-files', () => gulp.src('content/files/**/*') | ||
| 53 | .pipe(gulp.dest('public/files')) | ||
| 54 | ); | ||
| 55 | |||
| 56 | gulp.task('generate-static', function (done) { | ||
| 57 | fs.readdir('content', function (err, items) { | ||
| 58 | |||
| 59 | let posts = []; | ||
| 60 | items.forEach(item => { | ||
| 61 | if (item.endsWith('.md')) { | ||
| 62 | |||
| 63 | processMarkdown(`content/${item}`); | ||
| 64 | |||
| 65 | let contents = fs.readFileSync(`content/${item}`, 'utf8'); | ||
| 66 | let raw = contents.split('---'); | ||
| 67 | let meta = null; | ||
| 68 | |||
| 69 | try { | ||
| 70 | meta = yaml.parse(raw[1]) | ||
| 71 | } catch (error) { } | ||
| 72 | |||
| 73 | if (meta.layout == 'post') { | ||
| 74 | meta.dateFormatted = dayjs(meta.date).format('MMMM D, YYYY'); | ||
| 75 | meta.dateOriginal = meta.date; | ||
| 76 | meta.date = new Date(meta.date); | ||
| 77 | posts.push(meta) | ||
| 78 | } | ||
| 79 | } | ||
| 80 | }); | ||
| 81 | |||
| 82 | const css = fs.readFileSync('tmp/bundle.css', 'utf8'); | ||
| 83 | const javascript = fs.readFileSync('tmp/bundle.js', 'utf8'); | ||
| 84 | |||
| 85 | let page = nunjucks.render(`index.njk`, { | ||
| 86 | css: `<style>${css}</style>`, | ||
| 87 | javascript: `<script>${javascript}</script>`, | ||
| 88 | currentYear: new Date().getFullYear(), | ||
| 89 | timestamp: Math.floor(Date.now() / 1000), | ||
| 90 | vars: settings.vars, | ||
| 91 | posts: posts.reverse(), | ||
| 92 | }); | ||
| 93 | |||
| 94 | util.log(`Processing: Index`); | ||
| 95 | |||
| 96 | fs.writeFileSync(`public/index.html`, minify(page, { | ||
| 97 | removeAttributeQuotes: true, | ||
| 98 | collapseWhitespace: true, | ||
| 99 | removeComments: true, | ||
| 100 | removeTagWhitespace: true, | ||
| 101 | })); | ||
| 102 | |||
| 103 | }); | ||
| 104 | |||
| 105 | done(); | ||
| 106 | }); | ||
| 107 | |||
| 108 | const processMarkdown = (file) => { | ||
| 109 | const contents = fs.readFileSync(file, 'utf8'); | ||
| 110 | let raw = contents.split('---'); | ||
| 111 | let meta = null; | ||
| 112 | |||
| 113 | try { | ||
| 114 | meta = yaml.parse(raw[1]) | ||
| 115 | } catch (error) { } | ||
| 116 | |||
| 117 | //const slug = slugify(meta.title, { lower: true }); | ||
| 118 | const slug = meta.slug; | ||
| 119 | const css = fs.readFileSync('tmp/bundle.css', 'utf8'); | ||
| 120 | const javascript = fs.readFileSync('tmp/bundle.js', 'utf8'); | ||
| 121 | |||
| 122 | raw.shift(); | ||
| 123 | raw.shift(); | ||
| 124 | |||
| 125 | let post = nunjucks.render(`${meta.layout}.njk`, { | ||
| 126 | content: md.render(raw.join('')), | ||
| 127 | title: meta.title, //.substring(0, 65) | ||
| 128 | description: meta.description, | ||
| 129 | css: `<style>${css}</style>`, | ||
| 130 | javascript: `<script>${javascript}</script>`, | ||
| 131 | slug: slug, | ||
| 132 | currentYear: new Date().getFullYear(), | ||
| 133 | timestamp: Math.floor(Date.now() / 1000), | ||
| 134 | vars: settings.vars, | ||
| 135 | writtenDate: { | ||
| 136 | formatted: dayjs(meta.date).format('MMMM D, YYYY'), | ||
| 137 | original: meta.date, | ||
| 138 | }, | ||
| 139 | }); | ||
| 140 | |||
| 141 | util.log(`Processing: ${meta.title}`); | ||
| 142 | |||
| 143 | fs.writeFileSync(`public/${slug}.html`, minify(post, { | ||
| 144 | removeAttributeQuotes: true, | ||
| 145 | collapseWhitespace: true, | ||
| 146 | removeComments: true, | ||
| 147 | removeTagWhitespace: true, | ||
| 148 | })); | ||
| 149 | }; | ||
| 150 | |||
| 151 | const watchers = (done) => { | ||
| 152 | gulp.watch('source/assets/*.css', { | ||
| 153 | awaitWriteFinish: true, | ||
| 154 | }).on('change', gulp.series('css')); | ||
| 155 | |||
| 156 | gulp.watch('source/assets/*.js', { | ||
| 157 | awaitWriteFinish: true, | ||
| 158 | }).on('change', gulp.series('js')); | ||
| 159 | |||
| 160 | gulp.watch('content/*.md', { | ||
| 161 | awaitWriteFinish: true, | ||
| 162 | }).on('change', processMarkdown); | ||
| 163 | |||
| 164 | done(); | ||
| 165 | } | ||
| 166 | |||
| 167 | gulp.task('browser-sync', () => { | ||
| 168 | browserSync.init({ | ||
| 169 | watch: true, | ||
| 170 | open: false, | ||
| 171 | server: { | ||
| 172 | baseDir: './public', | ||
| 173 | serveStaticOptions: { | ||
| 174 | extensions: ["html"] | ||
| 175 | } | ||
| 176 | } | ||
| 177 | }); | ||
| 178 | }); | ||
| 179 | |||
| 180 | gulp.task('dev', gulp.series('css', 'js', 'copy-robots', 'copy-files', 'generate-static', gulp.parallel(watchers, 'browser-sync'))); | ||
| 181 | gulp.task('build', gulp.series('css', 'js', 'copy-robots', 'copy-files', 'generate-static')); | ||
