Skip to content

Commit ebe1d18

Browse files
committed
chore: Add syntax highlighting, github theme to codesnippet component
1 parent d367086 commit ebe1d18

File tree

3 files changed

+38
-6
lines changed

3 files changed

+38
-6
lines changed

package-lock.json

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"gatsby-transformer-remark": "^2.7.3",
1919
"gatsby-transformer-sharp": "^2.4.6",
2020
"node-sass": "^4.13.1",
21+
"prism-react-renderer": "^1.1.1",
2122
"prop-types": "^15.7.2",
2223
"react": "^16.12.0",
2324
"react-dom": "^16.12.0",

src/components/CodeSnippet.js

+32-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,46 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
3+
import Highlight, { defaultProps } from 'prism-react-renderer';
4+
import github from 'prism-react-renderer/themes/github';
35

4-
const CodeSnippet = ({ children, copy }) => (
5-
<div className="CodeSnippet">
6-
<div className="CodeSnippet-code">{children}</div>
7-
{copy !== 'false' && <div className="CodeSnippet-copy">COPY ME</div>}
8-
</div>
9-
);
6+
const CodeSnippet = ({ children, copy, className }) => {
7+
const language = className.replace('language-', '');
8+
return (
9+
<div className="CodeSnippet">
10+
<div className="CodeSnippet-code">
11+
<Highlight
12+
{...defaultProps}
13+
theme={github}
14+
code={children}
15+
language={language}
16+
>
17+
{({ className, style, tokens, getLineProps, getTokenProps }) => (
18+
<pre className={className} style={{ ...style, padding: '20px' }}>
19+
{tokens.map((line, i) => (
20+
<div key={i} {...getLineProps({ line, key: i })}>
21+
{line.map((token, key) => (
22+
<span key={key} {...getTokenProps({ token, key })} />
23+
))}
24+
</div>
25+
))}
26+
</pre>
27+
)}
28+
</Highlight>
29+
</div>
30+
{copy !== 'false' && <div className="CodeSnippet-copy">COPY ME</div>}
31+
</div>
32+
);
33+
};
1034

1135
CodeSnippet.propTypes = {
1236
children: PropTypes.node.isRequired,
1337
copy: PropTypes.string, // TODO: limit options
38+
className: PropTypes.string,
1439
};
1540

1641
CodeSnippet.defaultProps = {
1742
copy: 'true',
43+
className: 'language-javascript',
1844
};
1945

2046
export default CodeSnippet;

0 commit comments

Comments
 (0)