Add auto updating last modified code to blog posts
This commit is contained in:
parent
9c6d49e14f
commit
92992c6142
6 changed files with 36 additions and 3 deletions
|
@ -1,5 +1,6 @@
|
||||||
// @ts-check
|
// @ts-check
|
||||||
import { defineConfig } from 'astro/config';
|
import { defineConfig } from 'astro/config';
|
||||||
|
import { remarkModifiedTime } from './remark-modified-time.mjs';
|
||||||
|
|
||||||
import preact from "@astrojs/preact";
|
import preact from "@astrojs/preact";
|
||||||
import tailwind from "@astrojs/tailwind";
|
import tailwind from "@astrojs/tailwind";
|
||||||
|
@ -22,4 +23,7 @@ export default defineConfig({
|
||||||
adapter: node({
|
adapter: node({
|
||||||
mode: "standalone",
|
mode: "standalone",
|
||||||
}),
|
}),
|
||||||
|
markdown: {
|
||||||
|
remarkPlugins: [remarkModifiedTime],
|
||||||
|
},
|
||||||
});
|
});
|
|
@ -17,6 +17,7 @@
|
||||||
"@astrojs/tailwind": "^5.1.5",
|
"@astrojs/tailwind": "^5.1.5",
|
||||||
"astro": "^5.4.2",
|
"astro": "^5.4.2",
|
||||||
"astro-icon": "^1.1.5",
|
"astro-icon": "^1.1.5",
|
||||||
|
"dayjs": "^1.11.13",
|
||||||
"preact": "^10.26.4",
|
"preact": "^10.26.4",
|
||||||
"sharp": "^0.33.5",
|
"sharp": "^0.33.5",
|
||||||
"tailwindcss": "^3.4.17",
|
"tailwindcss": "^3.4.17",
|
||||||
|
|
8
pnpm-lock.yaml
generated
8
pnpm-lock.yaml
generated
|
@ -32,6 +32,9 @@ importers:
|
||||||
astro-icon:
|
astro-icon:
|
||||||
specifier: ^1.1.5
|
specifier: ^1.1.5
|
||||||
version: 1.1.5
|
version: 1.1.5
|
||||||
|
dayjs:
|
||||||
|
specifier: ^1.11.13
|
||||||
|
version: 1.11.13
|
||||||
preact:
|
preact:
|
||||||
specifier: ^10.26.4
|
specifier: ^10.26.4
|
||||||
version: 10.26.4
|
version: 10.26.4
|
||||||
|
@ -1089,6 +1092,9 @@ packages:
|
||||||
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
|
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
|
||||||
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
|
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
|
||||||
|
|
||||||
|
dayjs@1.11.13:
|
||||||
|
resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
|
||||||
|
|
||||||
debug@4.4.0:
|
debug@4.4.0:
|
||||||
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
|
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
|
||||||
engines: {node: '>=6.0'}
|
engines: {node: '>=6.0'}
|
||||||
|
@ -4085,6 +4091,8 @@ snapshots:
|
||||||
dependencies:
|
dependencies:
|
||||||
css-tree: 2.2.1
|
css-tree: 2.2.1
|
||||||
|
|
||||||
|
dayjs@1.11.13: {}
|
||||||
|
|
||||||
debug@4.4.0:
|
debug@4.4.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
ms: 2.1.3
|
ms: 2.1.3
|
||||||
|
|
9
remark-modified-time.mjs
Normal file
9
remark-modified-time.mjs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
import { execSync } from "node:child_process";
|
||||||
|
|
||||||
|
export function remarkModifiedTime() {
|
||||||
|
return (tree, file) => {
|
||||||
|
const filepath = file.history[0];
|
||||||
|
const result = execSync(`git log -1 --pretty="format:%cI" "${filepath}"`);
|
||||||
|
file.data.astro.frontmatter.lastModified = result.toString();
|
||||||
|
};
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
import Partition from "../components/Partition.astro";
|
import Partition from "../components/Partition.astro";
|
||||||
import BaseLayout from "./BaseLayout.astro";
|
import BaseLayout from "./BaseLayout.astro";
|
||||||
const { frontmatter } = Astro.props;
|
const { frontmatter } = Astro.props;
|
||||||
|
const { lastModified } = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
<BaseLayout pageTitle={frontmatter.title} description={frontmatter.description}>
|
<BaseLayout pageTitle={frontmatter.title} description={frontmatter.description}>
|
||||||
|
@ -9,7 +10,8 @@ const { frontmatter } = Astro.props;
|
||||||
<p>
|
<p>
|
||||||
<h1 class="text-xl font-bold underline">{frontmatter.title}</h1>
|
<h1 class="text-xl font-bold underline">{frontmatter.title}</h1>
|
||||||
<em>{frontmatter.description}</em><br />
|
<em>{frontmatter.description}</em><br />
|
||||||
<sub>Date: {frontmatter.pubDate.toLocaleDateString()}</sub>
|
<sub>Date: {frontmatter.pubDate.toLocaleDateString()}</sub><br />
|
||||||
|
<sub>Last Modified: {lastModified}</sub>
|
||||||
</p>
|
</p>
|
||||||
</Partition>
|
</Partition>
|
||||||
<Partition>
|
<Partition>
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
---
|
---
|
||||||
import { getCollection, render } from "astro:content";
|
import { getCollection, render } from "astro:content";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import utc from "dayjs/plugin/utc";
|
||||||
|
|
||||||
|
dayjs.extend(utc);
|
||||||
|
|
||||||
import MarkdownPostLayout from "../../layouts/MarkdownPostLayout.astro";
|
import MarkdownPostLayout from "../../layouts/MarkdownPostLayout.astro";
|
||||||
|
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
|
@ -11,8 +16,12 @@ export async function getStaticPaths() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const { post } = Astro.props;
|
const { post } = Astro.props;
|
||||||
const { Content } = await render(post);
|
const { Content, remarkPluginFrontmatter } = await render(post);
|
||||||
|
|
||||||
|
const lastModified = dayjs(remarkPluginFrontmatter.lastModified)
|
||||||
|
.utc()
|
||||||
|
.format("HH:mm:ss DD MMMM YYYY UTC");
|
||||||
---
|
---
|
||||||
<MarkdownPostLayout frontmatter={post.data}>
|
<MarkdownPostLayout frontmatter={post.data} lastModified={lastModified}>
|
||||||
<Content />
|
<Content />
|
||||||
</MarkdownPostLayout>
|
</MarkdownPostLayout>
|
Loading…
Add table
Add a link
Reference in a new issue