diff --git a/packages/website/docusaurus.config.js b/packages/website/docusaurus.config.js index c7af4ddcf7b..5b2542b6ee8 100644 --- a/packages/website/docusaurus.config.js +++ b/packages/website/docusaurus.config.js @@ -42,7 +42,7 @@ const config = { path: '../eslint-plugin/docs/rules', sidebarPath: require.resolve('./sidebars/sidebar.rules.js'), routeBasePath: 'rules', - editUrl: `${githubUrl}/edit/master/docs/`, + editUrl: `${githubUrl}/edit/master/packages/website/`, remarkPlugins, }, ], @@ -53,7 +53,7 @@ const config = { path: '../../docs', routeBasePath: 'docs', sidebarPath: require.resolve('./sidebars/sidebar.base.js'), - editUrl: `${githubUrl}/edit/master/docs/`, + editUrl: `${githubUrl}/edit/master/packages/website/`, remarkPlugins, }, ], diff --git a/packages/website/src/prism/language/jsonc.js b/packages/website/src/prism/language/jsonc.js new file mode 100644 index 00000000000..c42733fb7d6 --- /dev/null +++ b/packages/website/src/prism/language/jsonc.js @@ -0,0 +1,27 @@ +// https://www.json.org/json-en.html +Prism.languages.cjson = { + property: { + pattern: /(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/, + lookbehind: true, + greedy: true, + }, + string: { + pattern: /(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/, + lookbehind: true, + greedy: true, + }, + comment: { + pattern: /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/, + greedy: true, + }, + number: /-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i, + punctuation: /[{}[\],]/, + operator: /:/, + boolean: /\b(?:false|true)\b/, + null: { + pattern: /\bnull\b/, + alias: 'keyword', + }, +}; + +Prism.languages.jsonc = Prism.languages.cjson; diff --git a/packages/website/src/theme/prism-include-languages.js b/packages/website/src/theme/prism-include-languages.js new file mode 100644 index 00000000000..aaf2d101e96 --- /dev/null +++ b/packages/website/src/theme/prism-include-languages.js @@ -0,0 +1,27 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; +import siteConfig from '@generated/docusaurus.config'; + +const prismIncludeLanguages = PrismObject => { + if (ExecutionEnvironment.canUseDOM) { + const { + themeConfig: { prism = {} }, + } = siteConfig; + const { additionalLanguages = [] } = prism; + window.Prism = PrismObject; + + additionalLanguages.forEach(lang => { + require(`prismjs/components/prism-${lang}`); // eslint-disable-line + }); + + require(`../prism/language/jsonc`); + delete window.Prism; + } +}; + +export default prismIncludeLanguages;