summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorCamil Staps2021-06-23 10:28:05 +0200
committerCamil Staps2021-06-23 10:28:36 +0200
commit8e5dc18b9a655200e3355410e812e49db27a4171 (patch)
tree21b387fd9ffe89b579fc2c7e6c6b125f3146c393
parentSetup infrastructure for articles written in markdown (diff)
Arrange menu on /articles by year
-rw-r--r--gulpfile.js31
-rw-r--r--package-lock.json371
-rw-r--r--package.json2
-rw-r--r--resources/pug/include/layout-articles.pug4
-rw-r--r--resources/pug/include/layout-sidebar.pug45
5 files changed, 440 insertions, 13 deletions
diff --git a/gulpfile.js b/gulpfile.js
index 824a788..37a07c5 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -1,15 +1,18 @@
-var gulp = require('gulp'),
+var
changed = require('gulp-changed'),
+ gulp = require('gulp'),
hljs = require('highlight.js'),
md = require('jstransformer')(require('jstransformer-markdown-it')),
minifyhtml = require('gulp-minify-html'),
+ minifyjs = require('gulp-minify'),
notify = require('gulp-notify'),
pug = require('gulp-pug-3'),
sass = require('gulp-sass-next');
var config = {
- mdPath: './resources/md',
- pugPath: './resources/pug',
+ jsPath: './resources/js',
+ mdPath: './resources/md',
+ pugPath: './resources/pug',
sassPath: './resources/sass',
}
@@ -64,6 +67,25 @@ function html() {
.pipe(gulp.dest(dst));
}
+function js() {
+ var src = [
+ './node_modules/bootstrap-sass/assets/javascripts/bootstrap/collapse.js',
+ './node_modules/bootstrap-sass/assets/javascripts/bootstrap/transition.js',
+ './node_modules/jquery/dist/jquery.slim.min.js',
+ ];
+ var dst = './build/assets/js';
+
+ return gulp.src(src)
+ .pipe(minifyjs({
+ ext: {
+ min: '.min.js'
+ },
+ ignoreFiles: ['*.min.js'],
+ noSource: true,
+ }))
+ .pipe(gulp.dest(dst));
+}
+
function img() {
return gulp.src('./resources/img/*')
.pipe(gulp.dest('./build/assets/img'));
@@ -92,10 +114,11 @@ function watch() {
exports.css = css;
exports.html = html;
exports.img = img;
+exports.js = js;
exports.pdf = pdf;
exports.fonts = fonts;
exports.watch = watch;
-var build = gulp.parallel(css, html, img, pdf, fonts);
+var build = gulp.parallel(css, html, img, js, pdf, fonts);
gulp.task('build', build);
gulp.task('default', build);
diff --git a/package-lock.json b/package-lock.json
index c82d1eb..8ce8b8b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,11 +14,13 @@
"bootstrap-sass": "~3.4.1",
"gulp": "^4.0.2",
"gulp-changed": "^4.0.2",
+ "gulp-minify": "^3.1.0",
"gulp-minify-html": "^1.0.6",
"gulp-notify": "^4.0.0",
"gulp-pug-3": "^1.2.2",
"gulp-sass-next": "^6.0.0",
"highlight.js": "^11.0.1",
+ "jquery": "^3.6.0",
"jstransformer-markdown-it": "^2.1.0"
}
},
@@ -116,6 +118,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ansi-cyan": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
+ "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
+ "dev": true,
+ "dependencies": {
+ "ansi-wrap": "0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/ansi-gray": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
@@ -128,6 +142,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ansi-red": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
+ "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+ "dev": true,
+ "dependencies": {
+ "ansi-wrap": "0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/ansi-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
@@ -392,6 +418,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/array-sort": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
@@ -1129,6 +1164,12 @@
"node": ">= 0.8"
}
},
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
"node_modules/component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
@@ -2577,6 +2618,20 @@
"readable-stream": "2 || 3"
}
},
+ "node_modules/gulp-minify": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/gulp-minify/-/gulp-minify-3.1.0.tgz",
+ "integrity": "sha512-ixF41aYg+NQikI8hpoHdEclYcQkbGdXQu1CBdHaU7Epg8H6e8d2jWXw1+rBPgYwl/XpKgjHj7NI6gkhoSNSSAg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^1.0.1",
+ "minimatch": "^3.0.2",
+ "plugin-error": "^0.1.2",
+ "terser": "^3.7.6",
+ "through2": "^2.0.3",
+ "vinyl": "^2.1.0"
+ }
+ },
"node_modules/gulp-minify-html": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/gulp-minify-html/-/gulp-minify-html-1.0.6.tgz",
@@ -2610,6 +2665,106 @@
"xtend": ">=4.0.0 <4.1.0-0"
}
},
+ "node_modules/gulp-minify/node_modules/arr-diff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+ "dev": true,
+ "dependencies": {
+ "arr-flatten": "^1.0.1",
+ "array-slice": "^0.2.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gulp-minify/node_modules/arr-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+ "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gulp-minify/node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/gulp-minify/node_modules/clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "node_modules/gulp-minify/node_modules/extend-shallow": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gulp-minify/node_modules/kind-of": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+ "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gulp-minify/node_modules/plugin-error": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+ "dev": true,
+ "dependencies": {
+ "ansi-cyan": "^0.1.1",
+ "ansi-red": "^0.1.1",
+ "arr-diff": "^1.0.1",
+ "arr-union": "^2.0.1",
+ "extend-shallow": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gulp-minify/node_modules/replace-ext": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/gulp-minify/node_modules/vinyl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+ "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
+ "dev": true,
+ "dependencies": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/gulp-notify": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/gulp-notify/-/gulp-notify-4.0.0.tgz",
@@ -3742,6 +3897,12 @@
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
},
+ "node_modules/jquery": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
+ "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==",
+ "dev": true
+ },
"node_modules/js-base64": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
@@ -6179,6 +6340,25 @@
"urix": "^0.1.0"
}
},
+ "node_modules/source-map-support": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/source-map-url": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
@@ -6515,6 +6695,32 @@
"node": ">=10"
}
},
+ "node_modules/terser": {
+ "version": "3.17.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
+ "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^2.19.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.10"
+ },
+ "bin": {
+ "terser": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/terser/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/text-hex": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/text-hex/-/text-hex-0.0.0.tgz",
@@ -7348,6 +7554,15 @@
"ansi-wrap": "^0.1.0"
}
},
+ "ansi-cyan": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
+ "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
"ansi-gray": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
@@ -7357,6 +7572,15 @@
"ansi-wrap": "0.1.0"
}
},
+ "ansi-red": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
+ "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
"ansi-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
@@ -7575,6 +7799,12 @@
}
}
},
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true
+ },
"array-sort": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
@@ -8201,6 +8431,12 @@
"delayed-stream": "~1.0.0"
}
},
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
"component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
@@ -9510,6 +9746,98 @@
}
}
},
+ "gulp-minify": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/gulp-minify/-/gulp-minify-3.1.0.tgz",
+ "integrity": "sha512-ixF41aYg+NQikI8hpoHdEclYcQkbGdXQu1CBdHaU7Epg8H6e8d2jWXw1+rBPgYwl/XpKgjHj7NI6gkhoSNSSAg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^1.0.1",
+ "minimatch": "^3.0.2",
+ "plugin-error": "^0.1.2",
+ "terser": "^3.7.6",
+ "through2": "^2.0.3",
+ "vinyl": "^2.1.0"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1",
+ "array-slice": "^0.2.3"
+ }
+ },
+ "arr-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+ "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+ "dev": true
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^1.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+ "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+ "dev": true
+ },
+ "plugin-error": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+ "dev": true,
+ "requires": {
+ "ansi-cyan": "^0.1.1",
+ "ansi-red": "^0.1.1",
+ "arr-diff": "^1.0.1",
+ "arr-union": "^2.0.1",
+ "extend-shallow": "^1.1.2"
+ }
+ },
+ "replace-ext": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+ "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ }
+ }
+ }
+ },
"gulp-minify-html": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/gulp-minify-html/-/gulp-minify-html-1.0.6.tgz",
@@ -10411,6 +10739,12 @@
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
},
+ "jquery": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
+ "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==",
+ "dev": true
+ },
"js-base64": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
@@ -12449,6 +12783,24 @@
"urix": "^0.1.0"
}
},
+ "source-map-support": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
"source-map-url": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
@@ -12743,6 +13095,25 @@
}
}
},
+ "terser": {
+ "version": "3.17.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
+ "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.19.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.10"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
"text-hex": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/text-hex/-/text-hex-0.0.0.tgz",
diff --git a/package.json b/package.json
index 8b08ffe..3a80179 100644
--- a/package.json
+++ b/package.json
@@ -5,11 +5,13 @@
"bootstrap-sass": "~3.4.1",
"gulp": "^4.0.2",
"gulp-changed": "^4.0.2",
+ "gulp-minify": "^3.1.0",
"gulp-minify-html": "^1.0.6",
"gulp-notify": "^4.0.0",
"gulp-pug-3": "^1.2.2",
"gulp-sass-next": "^6.0.0",
"highlight.js": "^11.0.1",
+ "jquery": "^3.6.0",
"jstransformer-markdown-it": "^2.1.0"
},
"dependencies": {
diff --git a/resources/pug/include/layout-articles.pug b/resources/pug/include/layout-articles.pug
index 88b1aea..26fa69f 100644
--- a/resources/pug/include/layout-articles.pug
+++ b/resources/pug/include/layout-articles.pug
@@ -4,5 +4,7 @@ block append menu
- var base_url = '/articles/'
+menu(
{name: 'Home', link: ''},
- {name: 'Clean Sandbox', year: 2021, month: 6, day: 22},
+ {name: 2021, menu: [
+ {name: 'Clean Sandbox', year: 2021, month: 6, day: 22},
+ ]},
)
diff --git a/resources/pug/include/layout-sidebar.pug b/resources/pug/include/layout-sidebar.pug
index 8cf7d5a..265564d 100644
--- a/resources/pug/include/layout-sidebar.pug
+++ b/resources/pug/include/layout-sidebar.pug
@@ -1,22 +1,51 @@
extends layout.pug
+block prepend js
+ script(src='/assets/js/jquery.slim.min.js')
+ script(src='/assets/js/transition.min.js')
+ script(src='/assets/js/collapse.min.js')
+
block content
div.row
div.col-lg-3.col-md-4
ul.nav.nav-pills.nav-stacked
block menu
mixin menu(...items)
- - const pad_zero = n => n < 10 ? '0' + n : n;
+ -
+ function pad_zero (n) {
+ return n < 10 ? '0' + n : n;
+ }
- each item in items
- if typeof item.link == 'undefined'
- - item.link = item.name.toLowerCase().replace(/\W/g, '-')
+ function item_link (item) {
+ if (!('link' in item)) {
+ item.link = new String(item.name).toLowerCase().replace(/\W/g, '-');
+
+ if ('year' in item && 'month' in item && 'day' in item)
+ item.link = item.year + '-' + pad_zero(item.month) + '-' + pad_zero(item.day) + '-' + item.link;
+ }
- unless typeof item.year == 'undefined' || typeof item.month == 'undefined' || typeof item.day == 'undefined'
- - item.link = item.year + '-' + pad_zero(item.month) + '-' + pad_zero(item.day) + '-' + item.link
+ return item.link;
+ }
+
+ function item_is_active (item) {
+ return item_link(item) == page;
+ }
+
+ each item in items
+ if 'menu' in item
+ - const active = item.menu.some(item_is_active)
+ li(role='presentation')
+ - const id = 'menu-' + item_link(item);
+ a(href='#' + id, data-toggle='collapse', role='button', aria-expanded=active.toString(), aria-controls=id)= item.name
+ div.collapse(id=id, class=active ? 'in' : '')
+ ul.nav.nav-pills.nav-stacked.col-xs-12.col-md-10.pull-right
+ +menu(...item.menu)
+ br(style='clear:both;')
- li(role='presentation', class=(page == item.link) ? 'active' : '')
- a(href=base_url + (item.link == '' ? '' : item.link + '.html'))= item.name
+ else
+ - var link = item_link(item)
+ li(role='presentation', class=item_is_active(item) ? 'active' : '')
+ a(href=base_url + (link == '' ? '' : link + '.html'))= item.name
div.col-lg-7.col-md-6
h3