aboutsummaryrefslogtreecommitdiff
path: root/gulpfile.js
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2019-10-22 03:40:14 +0200
committerMitja Felicijan <mitja.felicijan@gmail.com>2019-10-22 03:40:14 +0200
commit28dd784a088a35739cdfdc4ce79f8ee6d50bf816 (patch)
treec198abb97177f60864530ee46f5cdcf0ae88d2bf /gulpfile.js
parent421677613114bb40780d3a5516b6930d386d0b09 (diff)
downloadmitjafelicijan.com-28dd784a088a35739cdfdc4ce79f8ee6d50bf816.tar.gz
Cleanup of repo and move to gostatic
Diffstat (limited to 'gulpfile.js')
-rw-r--r--gulpfile.js181
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
3const util = require('util');
4const gulp = require('gulp');
5const concat = require('gulp-concat');
6const terser = require('gulp-terser');
7const clean = require('gulp-clean-css');
8const settings = require('./settings.js');
9const minify = require('html-minifier').minify;
10var browserSync = require('browser-sync').create();
11
12const fs = require('fs');
13const markdown = require('markdown-it');
14const prism = require('markdown-it-prism');
15const nunjucks = require('nunjucks');
16const yaml = require('yaml');
17const dayjs = require('dayjs');
18
19const 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
31nunjucks.configure('source/layouts', {
32 autoescape: false,
33 noCache: true,
34});
35
36gulp.task('js', () => gulp.src(settings.assets.javascript)
37 .pipe(concat('bundle.js'))
38 .pipe(terser())
39 .pipe(gulp.dest('tmp'))
40);
41
42gulp.task('css', () => gulp.src(settings.assets.css)
43 .pipe(concat('bundle.css'))
44 .pipe(clean({}))
45 .pipe(gulp.dest('tmp'))
46);
47
48gulp.task('copy-robots', () => gulp.src('robots.txt')
49 .pipe(gulp.dest('public'))
50);
51
52gulp.task('copy-files', () => gulp.src('content/files/**/*')
53 .pipe(gulp.dest('public/files'))
54);
55
56gulp.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
108const 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
151const 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
167gulp.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
180gulp.task('dev', gulp.series('css', 'js', 'copy-robots', 'copy-files', 'generate-static', gulp.parallel(watchers, 'browser-sync')));
181gulp.task('build', gulp.series('css', 'js', 'copy-robots', 'copy-files', 'generate-static'));