diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1a6bd45 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +package-lock.json binary diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..8b7e202 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,88 @@ +const path = require("path"); + +module.exports = grunt => { + grunt.initConfig({ + pkg: grunt.file.readJSON("package.json"), + clean: { + default: ["dist/"], + }, + exec: { + eleventy: "npx @11ty/eleventy", + }, + replace: { + dev: { + src: ["./dist/*.html", "./dist/*.js"], + replacements: [ + { + from: "%%VERSION_NUMBER%%", + to: "<%= pkg.version %>+" + new Date().toISOString().slice(0, 19).replace(/[-:T]/g, "") + } + ], + overwrite: true + }, + deploy: { + src: ["./dist/*.html", "./dist/*.js"], + replacements: [ + { + from: "%%VERSION_NUMBER%%", + to: "<%= pkg.version %>" + } + ], + overwrite: true + }, + }, + webpack: { + options: { + entry: "./src/main/js/index.js", + module: { + rules: [ + { + test: /\.js$/, + exclude: /node_modules/, + }, + ], + }, + resolve: { + extensions: [".js"], + }, + output: { + filename: "bundle.js", + path: path.resolve(__dirname, "dist/"), + }, + }, + dev: { + mode: "development", + devtool: "inline-source-map", + }, + deploy: { + mode: "production", + }, + }, + }); + + grunt.loadNpmTasks("grunt-contrib-clean"); + grunt.loadNpmTasks("grunt-exec"); + grunt.loadNpmTasks("grunt-text-replace"); + grunt.loadNpmTasks("grunt-webpack"); + + grunt.registerTask("dev", [ + // Pre + "clean", + // Generate site + "exec:eleventy", + // Compile JS + "webpack:dev", + "replace:dev", + ]); + grunt.registerTask("deploy", [ + // Pre + "clean", + // Generate site + "exec:eleventy", + // Compile JS + "webpack:deploy", + "replace:deploy", + ]); + + grunt.registerTask("default", ["dev"]); +}; diff --git a/README.md b/README.md new file mode 100644 index 0000000..b404219 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Blog +My personal blog. + +## Development +### Requirements +* [npm](https://www.npmjs.com/) + +### Setting up +```shell script +# Install dependencies (only needed once) +$> npm ci +``` + +### Building +```shell script +# Build the blog in `dist/` for development +$> npm run dev +# Build the blog in `dist/` for deployment +$> npm run deploy +``` + +You may need to change the `pathprefix` option of Eleventy when using WebStorm so that the root of the blog is changed +to `blog/dist/` instead of `blog/`. diff --git a/package-lock.json b/package-lock.json index 1a73252..3d9c29f 100644 Binary files a/package-lock.json and b/package-lock.json differ diff --git a/package.json b/package.json index 01957ad..56b68e6 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,23 @@ }, "private": true, "scripts": { - "build": "npx @11ty/eleventy", - "build:server": "npx @11ty/eleventy --serve" + "clean": "grunt clean", + "dev": "grunt dev", + "dev:server": "grunt dev:server", + "deploy": "grunt deploy" }, "dependencies": { - "@fwdekker/template": "^0.0.13", - "@11ty/eleventy": "^0.10.0" + "@fwdekker/template": "^0.0.13" + }, + "devDependencies": { + "@11ty/eleventy": "^0.10.0", + "grunt": "^1.1.0", + "grunt-cli": "^1.3.2", + "grunt-contrib-clean": "^2.0.0", + "grunt-exec": "^3.0.0", + "grunt-text-replace": "^0.4.0", + "grunt-webpack": "^3.1.3", + "webpack": "^4.42.1", + "webpack-cli": "^3.3.11" } } diff --git a/src/main/_data/site.json b/src/main/_data/site.json index cd5dfcc..43abd4a 100644 --- a/src/main/_data/site.json +++ b/src/main/_data/site.json @@ -1,5 +1,5 @@ { - "url": "https://fwdekker.com/blog/", + "baseurl": "/blog/", "title": "FWDekker's blog", "description": "Felix W. Dekker's blog", "author": "Felix W. Dekker", diff --git a/src/main/_includes/default.njk b/src/main/_includes/default.njk index 5a391f6..4763413 100644 --- a/src/main/_includes/default.njk +++ b/src/main/_includes/default.njk @@ -10,46 +10,44 @@ {% if page.title %}{{ page.title }}{% else %}Blog{% endif %} | FWDekker - + - - - -
- -
+ +
+ +
+ + + +
- {% if title %} -

{{ site.title }}

- {% else %} -

{{ site.title }}

- {% endif %} - - {% if title %} -

{{ title }}

  - {% if date %}{{ date | isoDate }}{% endif %} - {% endif %} + {{ content | safe }}
-
- - -
- {{ content | safe }} -
+ +
+ + + + diff --git a/src/main/_includes/post.njk b/src/main/_includes/post.njk index 81b66bf..e92e7be 100644 --- a/src/main/_includes/post.njk +++ b/src/main/_includes/post.njk @@ -4,6 +4,15 @@ layout: default
+ ← home
+ +

{{ title }}

  + {% if date %}{{ date | isoDate }}{% endif %} + {{ content | safe }} + +
+ + ← home
diff --git a/src/main/js/index.js b/src/main/js/index.js new file mode 100644 index 0000000..e607946 --- /dev/null +++ b/src/main/js/index.js @@ -0,0 +1,17 @@ +import {$, doAfterLoad, footer, header, nav} from "@fwdekker/template"; + + +doAfterLoad(() => { + $("#nav").appendChild(nav()); + $("#header").appendChild(header({title: ""})); + $("#footer").appendChild(footer({ + author: "Felix W. Dekker", + authorURL: "https://fwdekker.com/", + license: "MIT License", + licenseURL: "https://git.fwdekker.com/FWDekker/blog/src/branch/master/LICENSE", + vcs: "git", + vcsURL: "https://git.fwdekker.com/FWDekker/blog/", + version: "v%%VERSION_NUMBER%%" + })); + $("main").style.display = null; +});