-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds dataLanguage property to the replacement <pre> element. (#10538)
* Update highlight.ts * Create cold-snakes-train.md * Update Code.astro Solution for use-case described in withastro/roadmap#276 (withastro/roadmap#276) * roll-back initial fix * new fix * update changeset * Update packages/markdown/remark/src/rehype-prism.ts * Update .changeset/cold-snakes-train.md Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> * Update .changeset/cold-snakes-train.md Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> * Update .changeset/cold-snakes-train.md Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> * Update .changeset/cold-snakes-train.md Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> --------- Co-authored-by: Bjorn Lu <bjornlu.dev@gmail.com> Co-authored-by: Matthew Phillips <matthew@matthewphillips.info> Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
- Loading branch information
1 parent
39988ef
commit ccafa8d
Showing
3 changed files
with
47 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
--- | ||
"@astrojs/markdown-remark": minor | ||
--- | ||
|
||
Adds a `data-language` attribute on the rendered `pre` elements to expose the highlighted syntax language. | ||
|
||
For example, the following Markdown code block will expose `data-language="python"`: | ||
``` | ||
\```python | ||
def func(): | ||
print('Hello Astro!') | ||
\``` | ||
``` | ||
|
||
This allows retrieving the language in a rehype plugin from `node.properties.dataLanguage` by accessing the `<pre>` element using `{ tagName: "pre" }`: | ||
```js | ||
// myRehypePre.js | ||
import { visit } from "unist-util-visit"; | ||
export default function myRehypePre() { | ||
return (tree) => { | ||
visit(tree, { tagName: "pre" }, (node) => { | ||
const lang = node.properties.dataLanguage; | ||
[...] | ||
}); | ||
}; | ||
} | ||
``` | ||
|
||
Note: The `<pre>` element is not exposed when using Astro's `<Code />` component which outputs flattened HTML. | ||
|
||
|
||
The `data-language` attribute may also be used in css rules: | ||
```css | ||
pre::before { | ||
content: attr(data-language); | ||
} | ||
|
||
pre[data-language="javascript"] { | ||
font-size: 2rem; | ||
} | ||
``` | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters