summaryrefslogtreecommitdiff
path: root/docs/guides/markdown-content.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/guides/markdown-content.md')
-rw-r--r--docs/guides/markdown-content.md222
1 files changed, 0 insertions, 222 deletions
diff --git a/docs/guides/markdown-content.md b/docs/guides/markdown-content.md
deleted file mode 100644
index d1fe069ad..000000000
--- a/docs/guides/markdown-content.md
+++ /dev/null
@@ -1,222 +0,0 @@
----
-layout: ~/layouts/Main.astro
-title: Markdown
----
-
-Astro comes with out-of-the-box Markdown support powered by the expansive [remark](https://remark.js.org/) ecosystem.
-
-## Remark and Rehype Plugins
-
-In addition to [custom components inside the `<Markdown>` component](#markdown-component), Astro comes with [GitHub-flavored Markdown](https://github.github.com/gfm/) support, [Footnotes](https://github.com/remarkjs/remark-footnotes) syntax, [Smartypants](https://github.com/silvenon/remark-smartypants), and syntax highlighting via [Prism](https://prismjs.com/) pre-enabled.
-
-Also, Astro supports third-party plugins for Markdown. You can provide your plugins in `astro.config.mjs`.
-
-> **Note** Enabling custom `remarkPlugins` or `rehypePlugins` removes Astro's built-in support for [GitHub-flavored Markdown](https://github.github.com/gfm/) support, [Footnotes](https://github.com/remarkjs/remark-footnotes) syntax, [Smartypants](https://github.com/silvenon/remark-smartypants). You must explicitly add these plugins to your `astro.config.mjs` file, if desired.
-
-## Add a markdown plugin in Astro
-
-If you want to add a plugin, you need to install the npm package dependency in your project and then update the `markdownOptions.remarkPlugins` or `markdownOptions.rehypePlugins` depends on what plugin you want to have:
-
-```js
-// astro.config.js
-export default {
- markdownOptions: {
- remarkPlugins: [
- // Add a Remark plugin that you want to enable for your project.
- // If you need to provide options for the plugin, you can use an array and put the options as the second item.
- // 'remark-slug',
- // ['remark-autolink-headings', { behavior: 'prepend'}],
- ]
- rehypePlugins: [
- // Add a Rehype plugin that you want to enable for your project.
- // If you need to provide options for the plugin, you can use an array and put the options as the second item.
- // 'rehype-slug',
- // ['rehype-autolink-headings', { behavior: 'prepend'}],
- ]
- },
-};
-```
-
-You can provide names of the plugins as well as import them:
-
-```js
-// astro.config.js
-export default {
- markdownOptions: {
- remarkPlugins: [import('remark-slug'), [import('remark-autolink-headings'), { behavior: 'prepend' }]],
- },
-};
-```
-
-### Markdown Pages
-
-Astro treats any `.md` files inside of the `/src/pages` directory as pages. These pages are processed as plain markdown files and do not support components. If you're looking to embed rich components in your markdown, take a look at the [Markdown Component](#astros-markdown-component) section.
-
-`layout`
-
-The only special Frontmatter key is `layout`, which defines the relative path to an `.astro` component which should wrap your Markdown content.
-
-`src/pages/index.md`
-
-```jsx
----
-layout: ../layouts/main.astro
----
-
-# Hello World!
-```
-
-Layout files are normal `.astro` components. Any Frontmatter defined in your `.md` page will be exposed to the Layout component as the `content` prop. `content` also has an `astro` key which holds special metadata about your file, like the complete Markdown `source` and a `headings` object.
-
-Keep in mind that the only guaranteed variables coming from the `content` prop object are `astro` and `url`. An example of what a blog post `content` object might look like is as follows:
-
-```json
-{
- /** Frontmatter from blog post
- "title": "",
- "date": "",
- "author": "",
- "description": "",
- **/
- "astro": {
- "headers": [],
- "source": ""
- },
- "url": ""
-}
-```
-
-The rendered Markdown content is placed into the default `<slot />` element.
-
-`src/layouts/main.astro`
-
-```jsx
----
-const { content } = Astro.props;
----
-
-<html>
- <head>
- <title>{content.title}</title>
- </head>
-
- <body>
- <slot/>
- </body>
-</html>
-```
-
-### Astro's Markdown Component
-
-Astro has a dedicated component used to let you render your markdown as HTML components. This is a special component that is only exposed to `.astro` files. To use the `<Markdown>` component, within yout frontmatter block use the following import statement:
-
-```jsx
----
-import { Markdown } from 'astro/components';
----
-```
-
-You can utilize this within your `.astro` file by doing the following:
-
-```jsx
----
-import { Markdown } from 'astro/components';
----
-
-<Layout>
- <Markdown>
- # Hello world!
-
- The contents inside here is all in markdown.
- </Markdown>
-</Layout>
-```
-
-`<Markdown>` components provide more flexibility and allow you to use plain HTML or custom components. For example:
-
-````jsx
----
-// For now, this import _must_ be named "Markdown" and _must not_ be wrapped with a custom component
-// We're working on easing these restrictions!
-import { Markdown } from 'astro/components';
-import Layout from '../layouts/main.astro';
-import MyFancyCodePreview from '../components/MyFancyCodePreview.tsx';
-
-const expressions = 'Lorem ipsum';
----
-
-<Layout>
- <Markdown>
- # Hello world!
-
- **Everything** supported in a `.md` file is also supported here!
-
- There is _zero_ runtime overhead.
-
- In addition, Astro supports:
- - Astro {expressions}
- - Automatic indentation normalization
- - Automatic escaping of expressions inside code blocks
-
- ```jsx
- // This content is not transformed!
- const object = { someOtherValue };
- ```
-
- - Rich component support like any `.astro` file!
- - Recursive Markdown support (Component children are also processed as Markdown)
-
- <MyFancyCodePreview:visible>
- ```jsx
- const object = { someOtherValue };
- ```
- </MyFancyCodePreview:visible>
- </Markdown>
-</Layout>
-````
-
-### Remote Markdown
-
-If you have Markdown in a remote source, you may pass it directly to the Markdown component through the `content` attribute. For example, the example below fetches the README from Snowpack's Github repository and renders it as HTML.
-
-```jsx
----
-import { Markdown } from 'astro/components';
-
-const content = await fetch('https://raw.githubusercontent.com/snowpackjs/snowpack/main/README.md').then(res => res.text());
----
-
-<Layout>
- <Markdown content={content} />
-</Layout>
-```
-
-There might be times when you want to combine both dynamic, and static markdown. If that is the case, you can nest `<Markdown>` components with each other to get the best of both worlds.
-
-```jsx
----
-import { Markdown } from 'astro/components';
-
-const content = await fetch('https://raw.githubusercontent.com/snowpackjs/snowpack/main/README.md').then(res => res.text());
----
-
-<Layout>
- <Markdown>
- ## Markdown example
-
- Here we have some __Markdown__ code. We can also dynamically render content from remote places.
-
- <Markdown content={content} />
- </Mardown>
-</Layout>
-```
-
-### Security FAQs
-
-**Aren't there security concerns to rendering remote markdown directly to HTML?**
-
-Yes! Just like with regular HTML, improper use of the `Markdown` component can open you up to a [cross-site scripting (XSS)](https://en.wikipedia.org/wiki/Cross-site_scripting) attack. If you are rendering untrusted content, be sure to _sanitize your content **before** rendering it_.
-
-**Why not use a prop like React's `dangerouslySetInnerHTML={{ __html: content }}`?**
-
-Rendering a string of HTML (or Markdown) is an extremely common use case when rendering a static site and you probably don't need the extra hoops to jump through. Rendering untrusted content is always dangerous! Be sure to _sanitize your content **before** rendering it_.