feat(v2): allow line highlighting (#1860)

* feat(v2): allow line highlighting

* Refactor: use parse-numeric-range for parsing

* Add line highlighting for live code blocks

* feat(v2): add sticky footer (#1855)

* feat(v2): add sticky footer

* Update CHANGELOG-2.x.md

* Update CHANGELOG-2.x.md

* fix(v2): remove empty doc sidebar container (#1870)

* docs: showcase user Amphora (#1873)

* Add Amphora Data link to users

Adds Amphora Data to the list of users

* Add Amphora Data logo

* fix case of image path

* Move Image into users directory

* use black amphora image

* fix(v2): fix search input blur on desktop (#1874)

* docs(v2): showcase user mbt-bundle (#1875)

* feat(v2): postcss should only use stage 3 features instead of stage 2 (#1872)

* feat(v2): add ability expand all items in doc sidebar (#1876)

* feat(v2): add ability expand all items in doc sidebar

* Fix tests

* Refactor: use themeConfig

* Improve docs

* Revert unnecessary  changes

* Refactor: better consistency

* Revert extra change

* Refactor: use useDocusaurusContext to get config value

* chore(v2): update changelog

* chore(v2): update showcase and broken link

* perf(v2): disable hash for css modules localident in dev (#1882)

* perf(v2): disable hash for css modules localident in dev

* changelog

* feat(v2): display footer in docs page for consistency (#1883)

* feat(v2): display footer in docs page

* nits

* address review

* nits

* docs(v2): fix format inline code (#1888)

* docs(v2): add docs on useful client api (#1890)

* docs(v2): add docs on useful client api

* Update docusaurus-core.md

* Update website/docs/docusaurus-core.md

* Update website/docs/docusaurus-core.md

* Update website/docs/docusaurus-core.md

* Update website/docs/docusaurus-core.md

* docs(v2): update config docs (#1885)

* fix(v2): do not show categories with empty items (#1891)

* styles(v2): update infima and fix styles (#1892)

* fix(v2): wrong css class

* v2.0.0-alpha.31

* chore(v2): update docs and changelog

* docs(v2): update plugins, presets and themes docs (#1889)

* docs(v2): update plugins, presets and themes docs

* ideal image plugin

* proof reading

* Merge master

* refactor(v2): Convert sitemap plugin to TypeScript (#1894)

* Convert sitemap plugin to TypeScript

Test - enabled the sitemap plugin in the v2 website and verified that
the sitemap is created after running `docusaurus build`.

* Addressing review comments

* perf(v2): significantly reduce bundle size & initial html payload (#1898)

* perf(v2): reduce bundle size significantly with super short chunk name and registry

* changelog

* use hash:8 as id for better long term caching

* even shorter filename. slice contenthash

* fix(v2): align search icon on small width device (#1893)

* fix(v2): align search icon on small width device

* nits

* nits

* refactor(v2): refactor dark toggle into a hook (#1899)

* change(v2): refactor dark toggle into a theme

* follow how themes resolve files

* let theme hook to pick up default theme by itself

* perf(v2): reduce memory usage consumption (#1900)

* misc(v1): use primary color for hovered items in table of contents (#1871)

* fix issue#1752

when element in side nav is hovered over the color changes.

* Update main.css

* fix(v1): mobile safari search input misalignment in header (#1895)

* misc(v2): v1 backward compatibility for USE_SSH env var (#1880)

* misc(v2): address comments

* misc(v2): update CHANGELOG
This commit is contained in:
Alexey Pyltsyn 2019-10-28 01:19:28 +03:00 committed by Yangshun Tay
parent 812a30be57
commit 9c69dfd240
6 changed files with 63 additions and 16 deletions

View file

@ -8,6 +8,7 @@
- Significantly reduce main bundle size and initial HTML payload on production build. Generated JS files from webpack is also shorter in name. - Significantly reduce main bundle size and initial HTML payload on production build. Generated JS files from webpack is also shorter in name.
- Refactor dark toggle into a hook. - Refactor dark toggle into a hook.
- Changed the way we read the `USE_SSH` env variable during deployment to be the same as in v1. - Changed the way we read the `USE_SSH` env variable during deployment to be the same as in v1.
- Add highlight specific lines in code blocks.
## 2.0.0-alpha.31 ## 2.0.0-alpha.31

View file

@ -13,6 +13,7 @@
"classnames": "^2.2.6", "classnames": "^2.2.6",
"clipboard": "^2.0.4", "clipboard": "^2.0.4",
"infima": "0.2.0-alpha.3", "infima": "0.2.0-alpha.3",
"parse-numeric-range": "^0.0.2",
"prism-react-renderer": "^1.0.2", "prism-react-renderer": "^1.0.2",
"react-toggle": "^4.1.1" "react-toggle": "^4.1.1"
}, },

View file

@ -10,10 +10,13 @@ import classnames from 'classnames';
import Highlight, {defaultProps} from 'prism-react-renderer'; import Highlight, {defaultProps} from 'prism-react-renderer';
import defaultTheme from 'prism-react-renderer/themes/palenight'; import defaultTheme from 'prism-react-renderer/themes/palenight';
import Clipboard from 'clipboard'; import Clipboard from 'clipboard';
import rangeParser from 'parse-numeric-range';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import styles from './styles.module.css'; import styles from './styles.module.css';
export default ({children, className: languageClassName}) => { const highlightLinesRangeRegex = /{([\d,-]+)}/;
export default ({children, className: languageClassName, metastring}) => {
const { const {
siteConfig: { siteConfig: {
themeConfig: {prismTheme}, themeConfig: {prismTheme},
@ -22,7 +25,12 @@ export default ({children, className: languageClassName}) => {
const [showCopied, setShowCopied] = useState(false); const [showCopied, setShowCopied] = useState(false);
const target = useRef(null); const target = useRef(null);
const button = useRef(null); const button = useRef(null);
let highlightLines = [];
if (metastring && highlightLinesRangeRegex.test(metastring)) {
const highlightLinesRange = metastring.match(highlightLinesRangeRegex)[1];
highlightLines = rangeParser.parse(highlightLinesRange).filter(n => n > 0);
}
useEffect(() => { useEffect(() => {
let clipboard; let clipboard;
@ -61,13 +69,21 @@ export default ({children, className: languageClassName}) => {
ref={target} ref={target}
className={classnames(className, styles.codeBlock)} className={classnames(className, styles.codeBlock)}
style={style}> style={style}>
{tokens.map((line, i) => ( {tokens.map((line, i) => {
<div key={i} {...getLineProps({line, key: i})}> const lineProps = getLineProps({line, key: i});
if (highlightLines.includes(i + 1)) {
lineProps.className = `${lineProps.className} highlight-line`;
}
return (
<div key={i} {...lineProps}>
{line.map((token, key) => ( {line.map((token, key) => (
<span key={key} {...getTokenProps({token, key})} /> <span key={key} {...getTokenProps({token, key})} />
))} ))}
</div> </div>
))} );
})}
</pre> </pre>
<button <button
ref={button} ref={button}

View file

@ -11,6 +11,7 @@
"@philpl/buble": "^0.19.7", "@philpl/buble": "^0.19.7",
"classnames": "^2.2.6", "classnames": "^2.2.6",
"clipboard": "^2.0.4", "clipboard": "^2.0.4",
"parse-numeric-range": "^0.0.2",
"prism-react-renderer": "^1.0.2", "prism-react-renderer": "^1.0.2",
"react-live": "^2.2.1" "react-live": "^2.2.1"
}, },

View file

@ -10,11 +10,20 @@ import classnames from 'classnames';
import Highlight, {defaultProps} from 'prism-react-renderer'; import Highlight, {defaultProps} from 'prism-react-renderer';
import defaultTheme from 'prism-react-renderer/themes/palenight'; import defaultTheme from 'prism-react-renderer/themes/palenight';
import Clipboard from 'clipboard'; import Clipboard from 'clipboard';
import rangeParser from 'parse-numeric-range';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Playground from '@theme/Playground'; import Playground from '@theme/Playground';
import styles from './styles.module.css'; import styles from './styles.module.css';
export default ({children, className: languageClassName, live, ...props}) => { const highlightLinesRangeRegex = /{([\d,-]+)}/;
export default ({
children,
className: languageClassName,
live,
metastring,
...props
}) => {
const { const {
siteConfig: { siteConfig: {
themeConfig: {prismTheme}, themeConfig: {prismTheme},
@ -23,6 +32,12 @@ export default ({children, className: languageClassName, live, ...props}) => {
const [showCopied, setShowCopied] = useState(false); const [showCopied, setShowCopied] = useState(false);
const target = useRef(null); const target = useRef(null);
const button = useRef(null); const button = useRef(null);
let highlightLines = [];
if (metastring && highlightLinesRangeRegex.test(metastring)) {
const highlightLinesRange = metastring.match(highlightLinesRangeRegex)[1];
highlightLines = rangeParser.parse(highlightLinesRange).filter(n => n > 0);
}
useEffect(() => { useEffect(() => {
let clipboard; let clipboard;
@ -73,13 +88,21 @@ export default ({children, className: languageClassName, live, ...props}) => {
ref={target} ref={target}
className={classnames(className, styles.codeBlock)} className={classnames(className, styles.codeBlock)}
style={style}> style={style}>
{tokens.map((line, i) => ( {tokens.map((line, i) => {
<div key={i} {...getLineProps({line, key: i})}> const lineProps = getLineProps({line, key: i});
if (highlightLines.includes(i + 1)) {
lineProps.className = `${lineProps.className} highlight-line`;
}
return (
<div key={i} {...lineProps}>
{line.map((token, key) => ( {line.map((token, key) => (
<span key={key} {...getTokenProps({token, key})} /> <span key={key} {...getTokenProps({token, key})} />
))} ))}
</div> </div>
))} );
})}
</pre> </pre>
<button <button
ref={button} ref={button}

View file

@ -11842,6 +11842,11 @@ parse-json@^4.0.0:
error-ex "^1.3.1" error-ex "^1.3.1"
json-parse-better-errors "^1.0.1" json-parse-better-errors "^1.0.1"
parse-numeric-range@^0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz#b4f09d413c7adbcd987f6e9233c7b4b210c938e4"
integrity sha1-tPCdQTx6282Yf26SM8e0shDJOOQ=
parse-path@^4.0.0: parse-path@^4.0.0:
version "4.0.1" version "4.0.1"
resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff"