summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ben Holmes <hey@bholmes.dev> 2022-08-09 18:18:34 -0500
committerGravatar GitHub <noreply@github.com> 2022-08-09 19:18:34 -0400
commitb5ef1c2113693523f10479d472e855ab9c41395d (patch)
tree31f0f7c3e36180cf2d29bf57c2dec99f32059a7f
parenta4f24266c0ca262df7c4e040a6fbb3559747b43a (diff)
downloadastro-b5ef1c2113693523f10479d472e855ab9c41395d.tar.gz
astro-b5ef1c2113693523f10479d472e855ab9c41395d.tar.zst
astro-b5ef1c2113693523f10479d472e855ab9c41395d.zip
[MD] Add `rawContent` and `compiledContent` to MD layout props (#4222)
* fix: add subs for astro.source and astro.html * fix: define "source" property * test: raw and compiled content from layout * chore: changeset Co-authored-by: bholmesdev <bholmesdev@gmail.com>
-rw-r--r--.changeset/warm-socks-exercise.md5
-rw-r--r--packages/astro/src/vite-plugin-markdown/index.ts20
-rw-r--r--packages/astro/test/astro-markdown.test.js22
-rw-r--r--packages/astro/test/fixtures/astro-markdown/src/layouts/Base.astro4
4 files changed, 50 insertions, 1 deletions
diff --git a/.changeset/warm-socks-exercise.md b/.changeset/warm-socks-exercise.md
new file mode 100644
index 000000000..f77694313
--- /dev/null
+++ b/.changeset/warm-socks-exercise.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+Add rawContent and compiledContent to MD layout props
diff --git a/packages/astro/src/vite-plugin-markdown/index.ts b/packages/astro/src/vite-plugin-markdown/index.ts
index 3279e573c..d025d669d 100644
--- a/packages/astro/src/vite-plugin-markdown/index.ts
+++ b/packages/astro/src/vite-plugin-markdown/index.ts
@@ -92,10 +92,28 @@ export default function markdown({ config, logging }: AstroPluginOptions): Plugi
throw new Error('The "astro" property is no longer supported! To access "headings" from your layout, try using "Astro.props.headings."')
}
});
+ Object.defineProperty(content.astro, 'html', {
+ get() {
+ throw new Error('The "astro" property is no longer supported! To access "html" from your layout, try using "Astro.props.compiledContent()."')
+ }
+ });
+ Object.defineProperty(content.astro, 'source', {
+ get() {
+ throw new Error('The "astro" property is no longer supported! To access "source" from your layout, try using "Astro.props.rawContent()."')
+ }
+ });
const contentFragment = h(Fragment, { 'set:html': html });
return ${
layout
- ? `h(Layout, { content, frontmatter: content, headings: getHeadings(), 'server:root': true, children: contentFragment })`
+ ? `h(Layout, {
+ content,
+ frontmatter: content,
+ headings: getHeadings(),
+ rawContent,
+ compiledContent,
+ 'server:root': true,
+ children: contentFragment
+ })`
: `contentFragment`
};
}
diff --git a/packages/astro/test/astro-markdown.test.js b/packages/astro/test/astro-markdown.test.js
index cf0e7a0ac..c326bb548 100644
--- a/packages/astro/test/astro-markdown.test.js
+++ b/packages/astro/test/astro-markdown.test.js
@@ -89,6 +89,28 @@ describe('Astro Markdown', () => {
expect(headingSlugs).to.contain('section-2');
});
+ it('Passes compiled content to layout via "compiledContent" prop', async () => {
+ const html = await fixture.readFile('/with-layout/index.html');
+ const $ = cheerio.load(html);
+
+ const compiledContent = $('[data-compiled-content]');
+
+ expect(fixLineEndings(compiledContent.text()).trim()).to.equal(
+ `<h2 id="section-1">Section 1</h2>\n<h2 id="section-2">Section 2</h2>`
+ );
+ });
+
+ it('Passes raw content to layout via "rawContent" prop', async () => {
+ const html = await fixture.readFile('/with-layout/index.html');
+ const $ = cheerio.load(html);
+
+ const rawContent = $('[data-raw-content]');
+
+ expect(fixLineEndings(rawContent.text()).trim()).to.equal(
+ `## Section 1\n\n## Section 2`
+ );
+ });
+
it('Exposes getHeadings() on glob imports', async () => {
const { headings } = JSON.parse(await fixture.readFile('/headings-glob.json'));
diff --git a/packages/astro/test/fixtures/astro-markdown/src/layouts/Base.astro b/packages/astro/test/fixtures/astro-markdown/src/layouts/Base.astro
index e4fa7560a..64817bad9 100644
--- a/packages/astro/test/fixtures/astro-markdown/src/layouts/Base.astro
+++ b/packages/astro/test/fixtures/astro-markdown/src/layouts/Base.astro
@@ -3,6 +3,8 @@ const {
content = { title: "content didn't work" },
frontmatter = { title: "frontmatter didn't work" },
headings = [],
+ compiledContent = () => '',
+ rawContent = () => '',
} = Astro.props;
---
@@ -18,6 +20,8 @@ const {
<body>
<p data-content-title>{content.title}</p>
<p data-frontmatter-title>{frontmatter.title}</p>
+ <p data-compiled-content>{compiledContent()}</p>
+ <p data-raw-content>{rawContent()}</p>
<p data-layout-rendered>Layout rendered!</p>
<ul data-headings>
{headings.map(heading => <li>{heading.slug}</li>)}