mirror of
https://github.com/reactjs/react.dev.git
synced 2026-02-26 07:25:20 +00:00
Added custom remark transform for Codepen example links
This commit is contained in:
@@ -76,7 +76,7 @@ ReactDOM.render(
|
||||
);
|
||||
```
|
||||
|
||||
<a href="/codepen/components-and-props/rendering-a-component" target="_blank">Try it on CodePen</a>.
|
||||
[](codepen:components-and-props/rendering-a-component).
|
||||
|
||||
Let's recap what happens in this example:
|
||||
|
||||
@@ -118,7 +118,7 @@ ReactDOM.render(
|
||||
);
|
||||
```
|
||||
|
||||
<a href="/codepen/components-and-props/composing-components" target="_blank">Try it on CodePen</a>.
|
||||
[](codepen:components-and-props/composing-components).
|
||||
|
||||
Typically, new React apps have a single `App` component at the very top. However, if you integrate React into an existing app, you might start bottom-up with a small component like `Button` and gradually work your way to the top of the view hierarchy.
|
||||
|
||||
@@ -152,7 +152,7 @@ function Comment(props) {
|
||||
}
|
||||
```
|
||||
|
||||
<a href="/codepen/components-and-props/extracting-components" target="_blank">Try it on CodePen</a>.
|
||||
[](codepen:components-and-props/extracting-components).
|
||||
|
||||
It accepts `author` (an object), `text` (a string), and `date` (a date) as props, and describes a comment on a social media website.
|
||||
|
||||
@@ -231,7 +231,7 @@ function Comment(props) {
|
||||
}
|
||||
```
|
||||
|
||||
<a href="/codepen/components-and-props/extracting-components-continued" target="_blank">Try it on CodePen</a>.
|
||||
[](codepen:components-and-props/extracting-components-continued).
|
||||
|
||||
Extracting components might seem like grunt work at first, but having a palette of reusable components pays off in larger apps. A good rule of thumb is that if a part of your UI is used several times (`Button`, `Panel`, `Avatar`), or is complex enough on its own (`App`, `FeedStory`, `Comment`), it is a good candidate to be a reusable component.
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ redirect_from:
|
||||
- "docs/getting-started-zh-CN.html"
|
||||
---
|
||||
|
||||
The easiest way to get started with React is to use <a href="/codepen/hello-world" target="_blank">this Hello World example code on CodePen</a>. You don't need to install anything; you can just open it in another tab and follow along as we go through examples. If you'd rather use a local development environment, check out the [Installation](/docs/installation.html) page.
|
||||
The easiest way to get started with React is to use [this Hello World example code on CodePen](codepen:hello-world). You don't need to install anything; you can just open it in another tab and follow along as we go through examples. If you'd rather use a local development environment, check out the [Installation](/docs/installation.html) page.
|
||||
|
||||
The smallest React example looks like this:
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ prev: hello-world.html
|
||||
next: rendering-elements.html
|
||||
---
|
||||
|
||||
|
||||
Consider this variable declaration:
|
||||
|
||||
```js
|
||||
@@ -46,7 +47,7 @@ ReactDOM.render(
|
||||
);
|
||||
```
|
||||
|
||||
<a href="/codepen/introducing-jsx" target="_blank">Try it on CodePen.</a>
|
||||
[](codepen:introducing-jsx).
|
||||
|
||||
We split JSX over multiple lines for readability. While it isn't required, when doing this, we also recommend wrapping it in parentheses to avoid the pitfalls of [automatic semicolon insertion](http://stackoverflow.com/q/2846283).
|
||||
|
||||
|
||||
@@ -56,6 +56,7 @@ module.exports = {
|
||||
},
|
||||
},
|
||||
'gatsby-remark-autolink-headers',
|
||||
'gatsby-remark-codepen-examples',
|
||||
'gatsby-remark-use-jsx',
|
||||
{
|
||||
resolve: 'gatsby-remark-prismjs',
|
||||
|
||||
@@ -85,6 +85,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint-config-prettier": "^2.6.0",
|
||||
"recursive-readdir": "^2.2.1"
|
||||
"recursive-readdir": "^2.2.1",
|
||||
"unist-util-map": "^1.0.3"
|
||||
}
|
||||
}
|
||||
|
||||
45
plugins/gatsby-remark-codepen-examples/index.js
Normal file
45
plugins/gatsby-remark-codepen-examples/index.js
Normal file
@@ -0,0 +1,45 @@
|
||||
const map = require('unist-util-map');
|
||||
|
||||
const DEFAULT_LINK_TEXT = 'Try it on CodePen';
|
||||
|
||||
// TODO target="_blank"
|
||||
module.exports = ({markdownAST}) => {
|
||||
map(markdownAST, (node, index, parent) => {
|
||||
// eg convert
|
||||
// from: [](codepen:introducing-jsx)
|
||||
// to: <a href="/codepen/introducing-jsx" target="_blank">Try it on CodePen</a>
|
||||
// from: [Try the Hello World example on CodePen](codepen:hello-world)
|
||||
// to: <a href="/codepen/hello-world" target="_blank">Try the Hello World example on CodePen</a>
|
||||
if (node.type === 'link' && node.url.startsWith('codepen:')) {
|
||||
const href = node.url.replace('codepen:', '/codepen/');
|
||||
const text =
|
||||
node.children.length === 0 ? DEFAULT_LINK_TEXT : node.children[0].value;
|
||||
|
||||
const anchorOpenNode = {
|
||||
type: 'html',
|
||||
value: `<a href="${href}" target="_blank">`,
|
||||
};
|
||||
|
||||
const textNode = {
|
||||
type: 'text',
|
||||
value: text,
|
||||
};
|
||||
|
||||
const anchorCloseNode = {
|
||||
type: 'html',
|
||||
value: '</a>',
|
||||
};
|
||||
|
||||
parent.children.splice(
|
||||
index,
|
||||
1,
|
||||
anchorOpenNode,
|
||||
textNode,
|
||||
anchorCloseNode,
|
||||
);
|
||||
}
|
||||
|
||||
// No change
|
||||
return node;
|
||||
});
|
||||
};
|
||||
4
plugins/gatsby-remark-codepen-examples/package.json
Normal file
4
plugins/gatsby-remark-codepen-examples/package.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "gatsby-remark-codepen-examples",
|
||||
"version": "0.0.1"
|
||||
}
|
||||
@@ -9795,6 +9795,12 @@ unist-util-is@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.1.tgz#0c312629e3f960c66e931e812d3d80e77010947b"
|
||||
|
||||
unist-util-map@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-map/-/unist-util-map-1.0.3.tgz#26a913d7cddb3cd3e9a886d135d37a3d1f54e514"
|
||||
dependencies:
|
||||
object-assign "^4.0.1"
|
||||
|
||||
unist-util-modify-children@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-1.1.1.tgz#66d7e6a449e6f67220b976ab3cb8b5ebac39e51d"
|
||||
|
||||
Reference in New Issue
Block a user