From 7e7eddcf470cc04c27d1e13615f2edb10dec1b5a Mon Sep 17 00:00:00 2001 From: JP Hastings-Spital Date: Mon, 3 Feb 2025 21:06:23 +0000 Subject: [PATCH] Fix photo uploads Uses image resizing, and sets the media URLs appropriately. --- Taskfile.yml | 12 +++- indiekit/indiekit.config.js | 23 ++++++- indiekit/package-lock.json | 62 ++++++++++++------- indiekit/package.json | 2 + .../indiekit-preset-byjp/lib/post-template.js | 9 ++- 5 files changed, 80 insertions(+), 28 deletions(-) diff --git a/Taskfile.yml b/Taskfile.yml index c3188db1..c3799e47 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -8,7 +8,7 @@ vars: puma_dev_tld: .test env: - HUGO_INDIEKIT_URL: https://indiekit.last.pub{{.DOMAIN_SUFFIX}} + HUGO_INDIEKIT_URL: https://indiekit.last.pub HUGO_LAST_UPDATE_TIME: sh: git log -1 --format=%cI HUGO_LAST_UPDATE_HASH: @@ -25,11 +25,21 @@ tasks: silent: true vars: port: 1313 + env: + HUGO_INDIEKIT_URL: https://indiekit.last.pub.test cmds: - | [ -d "$HOME/.puma-dev/" ] && (echo {{ .port }} > $HOME/.puma-dev/{{ .domain }}) || echo "Puma dev not installed, https://{{ .domain }}{{ .puma_dev_tld }} will not work" - hugo server --bind "0.0.0.0" --port {{ .port }} --minify --printUnusedTemplates --buildDrafts --baseURL "https://{{ .domain }}{{ .puma_dev_tld }}" --appendPort=false + dev-indiekit: + desc: Run a local Indiekit server for testing local packages + silent: true + dir: indiekit + dotenv: ['.env'] + cmds: + - npm run start + build: desc: Builds the production-ready site in ./public/ vars: diff --git a/indiekit/indiekit.config.js b/indiekit/indiekit.config.js index 211e05ba..6f408779 100644 --- a/indiekit/indiekit.config.js +++ b/indiekit/indiekit.config.js @@ -1,3 +1,5 @@ +const store = process.env.GITHUB_TOKEN ? "@indiekit/store-github" : "@indiekit/store-file-system" + export default { application: { name: "IndieKit byJP", @@ -6,8 +8,8 @@ export default { timeZone: 'Europe/London', }, plugins: [ + store, "indiekit-preset-byjp", - "@indiekit/store-github", "@indiekit/syndicator-mastodon", "@indiekit/endpoint-files", "@indiekit/endpoint-image", @@ -61,7 +63,8 @@ export default { url: "photos/{yyyy}-{MM}-{dd}/{slug}/" }, media: { - path: "content/photos/{yyyy}-{MM}-{dd}/{slug}/{filename}" + path: "content/photos/{yyyy}-{MM}-{dd}/{filename}", + url: "photos/{yyyy}-{MM}-{dd}/{filename}" } } } @@ -93,5 +96,19 @@ export default { "@indiekit/endpoint-micropub": {}, "@indiekit/endpoint-share": {}, "@indiekit/endpoint-files": {}, - "@indiekit/endpoint-posts": {} + "@indiekit/endpoint-media": { + "imageProcessing": { + "resize": { + "width": 1280, + "height": 1280, + "options": { + "fit": "contain", + }, + }, + } + }, + "@indiekit/endpoint-posts": {}, + "@indiekit/store-file-system": { + "directory": ".." + } } diff --git a/indiekit/package-lock.json b/indiekit/package-lock.json index d4f323b4..c3de1089 100644 --- a/indiekit/package-lock.json +++ b/indiekit/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@indiekit/endpoint-files": "^1.0.0-beta.15", "@indiekit/endpoint-image": "^1.0.0-beta.10", + "@indiekit/endpoint-media": "^1.0.0-beta.19", "@indiekit/endpoint-micropub": "^1.0.0-beta.18", "@indiekit/endpoint-posts": "^1.0.0-beta.18", "@indiekit/endpoint-share": "^1.0.0-beta.15", @@ -22,6 +23,7 @@ "@indiekit/post-type-note": "^1.0.0-beta.8", "@indiekit/post-type-photo": "^1.0.0-beta.15", "@indiekit/post-type-reply": "^1.0.0-beta.18", + "@indiekit/store-file-system": "^1.0.0-beta.19", "@indiekit/store-github": "^1.0.0-beta.18", "@indiekit/syndicator-mastodon": "^1.0.0-beta.18", "indiekit-preset-byjp": "file:./packages/indiekit-preset-byjp" @@ -33,6 +35,10 @@ "node": ">=20.6" } }, + "helpers/fixtures": { + "name": "@indiekit-test/fixtures", + "license": "MIT" + }, "node_modules/@accessible-components/tag-input": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@accessible-components/tag-input/-/tag-input-0.2.0.tgz", @@ -72,6 +78,11 @@ "node": ">=6.9.0" } }, + "node_modules/@date-fns/tz": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.2.0.tgz", + "integrity": "sha512-LBrd7MiJZ9McsOgxqWX7AaxrDjcFVjWH/tIKJd7pnR7McaslGYOP1QmmiBXdJH/H/yLCT+rcQ7FaPBUxRGUtrg==" + }, "node_modules/@emnapi/runtime": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.1.tgz", @@ -909,6 +920,10 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@indiekit-test/fixtures": { + "resolved": "helpers/fixtures", + "link": true + }, "node_modules/@indiekit/endpoint-auth": { "version": "1.0.0-beta.18", "resolved": "https://registry.npmjs.org/@indiekit/endpoint-auth/-/endpoint-auth-1.0.0-beta.18.tgz", @@ -952,12 +967,13 @@ } }, "node_modules/@indiekit/endpoint-media": { - "version": "1.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@indiekit/endpoint-media/-/endpoint-media-1.0.0-beta.18.tgz", - "integrity": "sha512-n6vvmF9f5pgEezp8MVH0nhtP0noGvmGg7zm06eeTcPvi+il5mOqKLYbjNCfCEyh86xCyKMKa+cDRQ9dUkiY3KA==", + "version": "1.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@indiekit/endpoint-media/-/endpoint-media-1.0.0-beta.19.tgz", + "integrity": "sha512-Jfe1DvjsA+N+zMUVDP0HOlzY6GcdJR2jwqkOPlDreDb1eEelrRo426GV5t+shZp84IZH/p5lepOPdzZpBnyDyQ==", "dependencies": { "@indiekit/error": "^1.0.0-beta.15", - "@indiekit/util": "^1.0.0-beta.18", + "@indiekit/util": "^1.0.0-beta.19", + "debug": "^4.3.2", "deepmerge": "^4.3.1", "express": "^4.17.1", "file-type": "^19.0.0", @@ -1206,6 +1222,17 @@ "node": ">=20" } }, + "node_modules/@indiekit/store-file-system": { + "version": "1.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@indiekit/store-file-system/-/store-file-system-1.0.0-beta.19.tgz", + "integrity": "sha512-usW+z2FXoIDzg+RogdeFi1NW5WSaLXA/5mAcvZq3K+mwwPUaIceaTZlyXpmL9hBz38vHxGeF/p830lseJdoq9A==", + "dependencies": { + "@indiekit/error": "^1.0.0-beta.15" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/@indiekit/store-github": { "version": "1.0.0-beta.18", "resolved": "https://registry.npmjs.org/@indiekit/store-github/-/store-github-1.0.0-beta.18.tgz", @@ -1233,13 +1260,13 @@ } }, "node_modules/@indiekit/util": { - "version": "1.0.0-beta.18", - "resolved": "https://registry.npmjs.org/@indiekit/util/-/util-1.0.0-beta.18.tgz", - "integrity": "sha512-zZmBivgs7jntl4s6DOTQCaPyle4XASqmxTs0y4AsLWEjgtLIo+8MmjsQefbw/wb9EC6Onc3sythyr941/Ogm6w==", + "version": "1.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@indiekit/util/-/util-1.0.0-beta.19.tgz", + "integrity": "sha512-30kolXxnrM6JknnQPG1NCefIb+57ZlLfcKsUv1TCBRpfEguWbmNqE2tyOq4gQgmUxtpp9Ev7H2+fFXtepwoO+g==", "dependencies": { + "@date-fns/tz": "^1.0.2", "@sindresorhus/slugify": "^2.1.0", - "date-fns": "^3.6.0", - "date-fns-tz": "^3.0.0", + "date-fns": "^4.0.0", "mongodb": "^6.8.0" }, "engines": { @@ -2925,22 +2952,14 @@ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" }, "node_modules/date-fns": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", - "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" } }, - "node_modules/date-fns-tz": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.1.3.tgz", - "integrity": "sha512-ZfbMu+nbzW0mEzC8VZrLiSWvUIaI3aRHeq33mTe7Y38UctKukgqPR4nTDwcwS4d64Gf8GghnVsroBuMY3eiTeA==", - "peerDependencies": { - "date-fns": "^3.0.0" - } - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -6835,10 +6854,11 @@ } }, "packages/indiekit-preset-byjp": { - "version": "1.0.0-beta.10", + "version": "1.0.0-beta.10-jp1", "license": "MIT", "dependencies": { "@iarna/toml": "^2.2.5", + "@indiekit-test/fixtures": "file:../../helpers/fixtures", "camelcase-keys": "^9.0.0", "plur": "^5.1.0", "yaml": "^2.4.0" diff --git a/indiekit/package.json b/indiekit/package.json index d8cc9183..56d71983 100644 --- a/indiekit/package.json +++ b/indiekit/package.json @@ -19,6 +19,7 @@ "dependencies": { "@indiekit/endpoint-files": "^1.0.0-beta.15", "@indiekit/endpoint-image": "^1.0.0-beta.10", + "@indiekit/endpoint-media": "^1.0.0-beta.19", "@indiekit/endpoint-micropub": "^1.0.0-beta.18", "@indiekit/endpoint-posts": "^1.0.0-beta.18", "@indiekit/endpoint-share": "^1.0.0-beta.15", @@ -30,6 +31,7 @@ "@indiekit/post-type-note": "^1.0.0-beta.8", "@indiekit/post-type-photo": "^1.0.0-beta.15", "@indiekit/post-type-reply": "^1.0.0-beta.18", + "@indiekit/store-file-system": "^1.0.0-beta.19", "@indiekit/store-github": "^1.0.0-beta.18", "@indiekit/syndicator-mastodon": "^1.0.0-beta.18", "indiekit-preset-byjp": "file:./packages/indiekit-preset-byjp" diff --git a/indiekit/packages/indiekit-preset-byjp/lib/post-template.js b/indiekit/packages/indiekit-preset-byjp/lib/post-template.js index 1a5dcc22..f090d287 100644 --- a/indiekit/packages/indiekit-preset-byjp/lib/post-template.js +++ b/indiekit/packages/indiekit-preset-byjp/lib/post-template.js @@ -48,11 +48,13 @@ const getFrontMatter = (properties, frontMatterFormat) => { ...(properties.deleted && { expiryDate: properties.deleted }), ...(properties.name && { title: properties.name }), ...(properties.photo && { - images: properties.photo.map((image) => image.url), - }), + media: properties.photo.map(({url, alt}) => ({ + url: `/${url}`, + alt, + })), + }), ...properties, }; - // TODO: move photos delete properties.content; // Shown below front matter delete properties.deleted; // Use `expiryDate` @@ -63,6 +65,7 @@ const getFrontMatter = (properties, frontMatterFormat) => { delete properties.type; // Not required delete properties.updated; // Use `lastmod` delete properties.url; // Not required + delete properties.photo; // Was moved to media switch (frontMatterFormat) { case "json": {