Fix photo uploads

Uses image resizing, and sets the media URLs appropriately.
This commit is contained in:
JP Hastings-Spital 2025-02-03 21:06:23 +00:00
parent 99e5be2587
commit 7e7eddcf47
5 changed files with 80 additions and 28 deletions

View file

@ -8,7 +8,7 @@ vars:
puma_dev_tld: .test puma_dev_tld: .test
env: env:
HUGO_INDIEKIT_URL: https://indiekit.last.pub{{.DOMAIN_SUFFIX}} HUGO_INDIEKIT_URL: https://indiekit.last.pub
HUGO_LAST_UPDATE_TIME: HUGO_LAST_UPDATE_TIME:
sh: git log -1 --format=%cI sh: git log -1 --format=%cI
HUGO_LAST_UPDATE_HASH: HUGO_LAST_UPDATE_HASH:
@ -25,11 +25,21 @@ tasks:
silent: true silent: true
vars: vars:
port: 1313 port: 1313
env:
HUGO_INDIEKIT_URL: https://indiekit.last.pub.test
cmds: cmds:
- | - |
[ -d "$HOME/.puma-dev/" ] && (echo {{ .port }} > $HOME/.puma-dev/{{ .domain }}) || echo "Puma dev not installed, https://{{ .domain }}{{ .puma_dev_tld }} will not work" [ -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 - 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: build:
desc: Builds the production-ready site in ./public/ desc: Builds the production-ready site in ./public/
vars: vars:

View file

@ -1,3 +1,5 @@
const store = process.env.GITHUB_TOKEN ? "@indiekit/store-github" : "@indiekit/store-file-system"
export default { export default {
application: { application: {
name: "IndieKit byJP", name: "IndieKit byJP",
@ -6,8 +8,8 @@ export default {
timeZone: 'Europe/London', timeZone: 'Europe/London',
}, },
plugins: [ plugins: [
store,
"indiekit-preset-byjp", "indiekit-preset-byjp",
"@indiekit/store-github",
"@indiekit/syndicator-mastodon", "@indiekit/syndicator-mastodon",
"@indiekit/endpoint-files", "@indiekit/endpoint-files",
"@indiekit/endpoint-image", "@indiekit/endpoint-image",
@ -61,7 +63,8 @@ export default {
url: "photos/{yyyy}-{MM}-{dd}/{slug}/" url: "photos/{yyyy}-{MM}-{dd}/{slug}/"
}, },
media: { 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-micropub": {},
"@indiekit/endpoint-share": {}, "@indiekit/endpoint-share": {},
"@indiekit/endpoint-files": {}, "@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": ".."
}
} }

View file

@ -11,6 +11,7 @@
"dependencies": { "dependencies": {
"@indiekit/endpoint-files": "^1.0.0-beta.15", "@indiekit/endpoint-files": "^1.0.0-beta.15",
"@indiekit/endpoint-image": "^1.0.0-beta.10", "@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-micropub": "^1.0.0-beta.18",
"@indiekit/endpoint-posts": "^1.0.0-beta.18", "@indiekit/endpoint-posts": "^1.0.0-beta.18",
"@indiekit/endpoint-share": "^1.0.0-beta.15", "@indiekit/endpoint-share": "^1.0.0-beta.15",
@ -22,6 +23,7 @@
"@indiekit/post-type-note": "^1.0.0-beta.8", "@indiekit/post-type-note": "^1.0.0-beta.8",
"@indiekit/post-type-photo": "^1.0.0-beta.15", "@indiekit/post-type-photo": "^1.0.0-beta.15",
"@indiekit/post-type-reply": "^1.0.0-beta.18", "@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/store-github": "^1.0.0-beta.18",
"@indiekit/syndicator-mastodon": "^1.0.0-beta.18", "@indiekit/syndicator-mastodon": "^1.0.0-beta.18",
"indiekit-preset-byjp": "file:./packages/indiekit-preset-byjp" "indiekit-preset-byjp": "file:./packages/indiekit-preset-byjp"
@ -33,6 +35,10 @@
"node": ">=20.6" "node": ">=20.6"
} }
}, },
"helpers/fixtures": {
"name": "@indiekit-test/fixtures",
"license": "MIT"
},
"node_modules/@accessible-components/tag-input": { "node_modules/@accessible-components/tag-input": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/@accessible-components/tag-input/-/tag-input-0.2.0.tgz", "resolved": "https://registry.npmjs.org/@accessible-components/tag-input/-/tag-input-0.2.0.tgz",
@ -72,6 +78,11 @@
"node": ">=6.9.0" "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": { "node_modules/@emnapi/runtime": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.1.tgz", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.1.tgz",
@ -909,6 +920,10 @@
"url": "https://opencollective.com/libvips" "url": "https://opencollective.com/libvips"
} }
}, },
"node_modules/@indiekit-test/fixtures": {
"resolved": "helpers/fixtures",
"link": true
},
"node_modules/@indiekit/endpoint-auth": { "node_modules/@indiekit/endpoint-auth": {
"version": "1.0.0-beta.18", "version": "1.0.0-beta.18",
"resolved": "https://registry.npmjs.org/@indiekit/endpoint-auth/-/endpoint-auth-1.0.0-beta.18.tgz", "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": { "node_modules/@indiekit/endpoint-media": {
"version": "1.0.0-beta.18", "version": "1.0.0-beta.19",
"resolved": "https://registry.npmjs.org/@indiekit/endpoint-media/-/endpoint-media-1.0.0-beta.18.tgz", "resolved": "https://registry.npmjs.org/@indiekit/endpoint-media/-/endpoint-media-1.0.0-beta.19.tgz",
"integrity": "sha512-n6vvmF9f5pgEezp8MVH0nhtP0noGvmGg7zm06eeTcPvi+il5mOqKLYbjNCfCEyh86xCyKMKa+cDRQ9dUkiY3KA==", "integrity": "sha512-Jfe1DvjsA+N+zMUVDP0HOlzY6GcdJR2jwqkOPlDreDb1eEelrRo426GV5t+shZp84IZH/p5lepOPdzZpBnyDyQ==",
"dependencies": { "dependencies": {
"@indiekit/error": "^1.0.0-beta.15", "@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", "deepmerge": "^4.3.1",
"express": "^4.17.1", "express": "^4.17.1",
"file-type": "^19.0.0", "file-type": "^19.0.0",
@ -1206,6 +1222,17 @@
"node": ">=20" "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": { "node_modules/@indiekit/store-github": {
"version": "1.0.0-beta.18", "version": "1.0.0-beta.18",
"resolved": "https://registry.npmjs.org/@indiekit/store-github/-/store-github-1.0.0-beta.18.tgz", "resolved": "https://registry.npmjs.org/@indiekit/store-github/-/store-github-1.0.0-beta.18.tgz",
@ -1233,13 +1260,13 @@
} }
}, },
"node_modules/@indiekit/util": { "node_modules/@indiekit/util": {
"version": "1.0.0-beta.18", "version": "1.0.0-beta.19",
"resolved": "https://registry.npmjs.org/@indiekit/util/-/util-1.0.0-beta.18.tgz", "resolved": "https://registry.npmjs.org/@indiekit/util/-/util-1.0.0-beta.19.tgz",
"integrity": "sha512-zZmBivgs7jntl4s6DOTQCaPyle4XASqmxTs0y4AsLWEjgtLIo+8MmjsQefbw/wb9EC6Onc3sythyr941/Ogm6w==", "integrity": "sha512-30kolXxnrM6JknnQPG1NCefIb+57ZlLfcKsUv1TCBRpfEguWbmNqE2tyOq4gQgmUxtpp9Ev7H2+fFXtepwoO+g==",
"dependencies": { "dependencies": {
"@date-fns/tz": "^1.0.2",
"@sindresorhus/slugify": "^2.1.0", "@sindresorhus/slugify": "^2.1.0",
"date-fns": "^3.6.0", "date-fns": "^4.0.0",
"date-fns-tz": "^3.0.0",
"mongodb": "^6.8.0" "mongodb": "^6.8.0"
}, },
"engines": { "engines": {
@ -2925,22 +2952,14 @@
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
}, },
"node_modules/date-fns": { "node_modules/date-fns": {
"version": "3.6.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
"integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/kossnocorp" "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": { "node_modules/debug": {
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@ -6835,10 +6854,11 @@
} }
}, },
"packages/indiekit-preset-byjp": { "packages/indiekit-preset-byjp": {
"version": "1.0.0-beta.10", "version": "1.0.0-beta.10-jp1",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@iarna/toml": "^2.2.5", "@iarna/toml": "^2.2.5",
"@indiekit-test/fixtures": "file:../../helpers/fixtures",
"camelcase-keys": "^9.0.0", "camelcase-keys": "^9.0.0",
"plur": "^5.1.0", "plur": "^5.1.0",
"yaml": "^2.4.0" "yaml": "^2.4.0"

View file

@ -19,6 +19,7 @@
"dependencies": { "dependencies": {
"@indiekit/endpoint-files": "^1.0.0-beta.15", "@indiekit/endpoint-files": "^1.0.0-beta.15",
"@indiekit/endpoint-image": "^1.0.0-beta.10", "@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-micropub": "^1.0.0-beta.18",
"@indiekit/endpoint-posts": "^1.0.0-beta.18", "@indiekit/endpoint-posts": "^1.0.0-beta.18",
"@indiekit/endpoint-share": "^1.0.0-beta.15", "@indiekit/endpoint-share": "^1.0.0-beta.15",
@ -30,6 +31,7 @@
"@indiekit/post-type-note": "^1.0.0-beta.8", "@indiekit/post-type-note": "^1.0.0-beta.8",
"@indiekit/post-type-photo": "^1.0.0-beta.15", "@indiekit/post-type-photo": "^1.0.0-beta.15",
"@indiekit/post-type-reply": "^1.0.0-beta.18", "@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/store-github": "^1.0.0-beta.18",
"@indiekit/syndicator-mastodon": "^1.0.0-beta.18", "@indiekit/syndicator-mastodon": "^1.0.0-beta.18",
"indiekit-preset-byjp": "file:./packages/indiekit-preset-byjp" "indiekit-preset-byjp": "file:./packages/indiekit-preset-byjp"

View file

@ -48,11 +48,13 @@ const getFrontMatter = (properties, frontMatterFormat) => {
...(properties.deleted && { expiryDate: properties.deleted }), ...(properties.deleted && { expiryDate: properties.deleted }),
...(properties.name && { title: properties.name }), ...(properties.name && { title: properties.name }),
...(properties.photo && { ...(properties.photo && {
images: properties.photo.map((image) => image.url), media: properties.photo.map(({url, alt}) => ({
}), url: `/${url}`,
alt,
})),
}),
...properties, ...properties,
}; };
// TODO: move photos
delete properties.content; // Shown below front matter delete properties.content; // Shown below front matter
delete properties.deleted; // Use `expiryDate` delete properties.deleted; // Use `expiryDate`
@ -63,6 +65,7 @@ const getFrontMatter = (properties, frontMatterFormat) => {
delete properties.type; // Not required delete properties.type; // Not required
delete properties.updated; // Use `lastmod` delete properties.updated; // Use `lastmod`
delete properties.url; // Not required delete properties.url; // Not required
delete properties.photo; // Was moved to media
switch (frontMatterFormat) { switch (frontMatterFormat) {
case "json": { case "json": {