mirror of
https://github.com/facebook/docusaurus.git
synced 2025-06-05 20:32:42 +02:00
feat(v2): extract site title formatter to theme-common util (#3838)
This commit is contained in:
parent
821a39bf2e
commit
21572ccd37
9 changed files with 32 additions and 23 deletions
|
@ -18,6 +18,7 @@
|
||||||
"@docusaurus/plugin-content-blog": "2.0.0-alpha.69",
|
"@docusaurus/plugin-content-blog": "2.0.0-alpha.69",
|
||||||
"@docusaurus/plugin-content-docs": "2.0.0-alpha.69",
|
"@docusaurus/plugin-content-docs": "2.0.0-alpha.69",
|
||||||
"@docusaurus/plugin-content-pages": "2.0.0-alpha.69",
|
"@docusaurus/plugin-content-pages": "2.0.0-alpha.69",
|
||||||
|
"@docusaurus/theme-common": "2.0.0-alpha.69",
|
||||||
"@docusaurus/types": "2.0.0-alpha.69",
|
"@docusaurus/types": "2.0.0-alpha.69",
|
||||||
"@mdx-js/react": "^1.6.21",
|
"@mdx-js/react": "^1.6.21",
|
||||||
"bootstrap": "^4.4.1",
|
"bootstrap": "^4.4.1",
|
||||||
|
|
|
@ -9,6 +9,7 @@ import React from 'react';
|
||||||
|
|
||||||
import Head from '@docusaurus/Head';
|
import Head from '@docusaurus/Head';
|
||||||
import isInternalUrl from '@docusaurus/isInternalUrl';
|
import isInternalUrl from '@docusaurus/isInternalUrl';
|
||||||
|
import {useTitleFormatter} from '@docusaurus/theme-common';
|
||||||
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
||||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||||
|
|
||||||
|
@ -20,10 +21,8 @@ function Layout(props: Props): JSX.Element {
|
||||||
const {siteConfig = {}} = useDocusaurusContext();
|
const {siteConfig = {}} = useDocusaurusContext();
|
||||||
const {
|
const {
|
||||||
favicon,
|
favicon,
|
||||||
title: siteTitle,
|
|
||||||
themeConfig: {image: defaultImage, metadatas},
|
themeConfig: {image: defaultImage, metadatas},
|
||||||
url: siteUrl,
|
url: siteUrl,
|
||||||
titleDelimiter,
|
|
||||||
} = siteConfig;
|
} = siteConfig;
|
||||||
const {
|
const {
|
||||||
children,
|
children,
|
||||||
|
@ -34,9 +33,7 @@ function Layout(props: Props): JSX.Element {
|
||||||
keywords,
|
keywords,
|
||||||
permalink,
|
permalink,
|
||||||
} = props;
|
} = props;
|
||||||
const metaTitle = title
|
const metaTitle = useTitleFormatter(title);
|
||||||
? `${title} ${titleDelimiter} ${siteTitle}`
|
|
||||||
: siteTitle;
|
|
||||||
const metaImage = image || defaultImage;
|
const metaImage = image || defaultImage;
|
||||||
let metaImageUrl = siteUrl + useBaseUrl(metaImage);
|
let metaImageUrl = siteUrl + useBaseUrl(metaImage);
|
||||||
if (!isInternalUrl(metaImage)) {
|
if (!isInternalUrl(metaImage)) {
|
||||||
|
|
|
@ -9,13 +9,14 @@ import React from 'react';
|
||||||
import isInternalUrl from '@docusaurus/isInternalUrl';
|
import isInternalUrl from '@docusaurus/isInternalUrl';
|
||||||
import Head from '@docusaurus/Head';
|
import Head from '@docusaurus/Head';
|
||||||
import DocPaginator from '@theme/DocPaginator';
|
import DocPaginator from '@theme/DocPaginator';
|
||||||
|
import {useTitleFormatter} from '@docusaurus/theme-common';
|
||||||
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
||||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||||
import {Props} from '@theme/DocItem';
|
import {Props} from '@theme/DocItem';
|
||||||
|
|
||||||
function DocItem(props: Props): JSX.Element {
|
function DocItem(props: Props): JSX.Element {
|
||||||
const {siteConfig = {}} = useDocusaurusContext();
|
const {siteConfig = {}} = useDocusaurusContext();
|
||||||
const {url: siteUrl, title: siteTitle, titleDelimiter = ' | '} = siteConfig;
|
const {url: siteUrl} = siteConfig;
|
||||||
const {content: DocContent} = props;
|
const {content: DocContent} = props;
|
||||||
const {metadata} = DocContent;
|
const {metadata} = DocContent;
|
||||||
const {description, title, permalink} = metadata;
|
const {description, title, permalink} = metadata;
|
||||||
|
@ -23,9 +24,7 @@ function DocItem(props: Props): JSX.Element {
|
||||||
frontMatter: {image: metaImage, keywords},
|
frontMatter: {image: metaImage, keywords},
|
||||||
} = DocContent;
|
} = DocContent;
|
||||||
|
|
||||||
const metaTitle = title
|
const metaTitle = useTitleFormatter(title);
|
||||||
? `${title} ${titleDelimiter} ${siteTitle}`
|
|
||||||
: siteTitle;
|
|
||||||
let metaImageUrl: string | undefined = siteUrl + useBaseUrl(metaImage);
|
let metaImageUrl: string | undefined = siteUrl + useBaseUrl(metaImage);
|
||||||
|
|
||||||
if (!isInternalUrl(metaImage)) {
|
if (!isInternalUrl(metaImage)) {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import Head from '@docusaurus/Head';
|
import Head from '@docusaurus/Head';
|
||||||
|
import {useTitleFormatter} from '@docusaurus/theme-common';
|
||||||
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
||||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||||
import DocPaginator from '@theme/DocPaginator';
|
import DocPaginator from '@theme/DocPaginator';
|
||||||
|
@ -25,7 +26,7 @@ import {
|
||||||
|
|
||||||
function DocItem(props: Props): JSX.Element {
|
function DocItem(props: Props): JSX.Element {
|
||||||
const {siteConfig} = useDocusaurusContext();
|
const {siteConfig} = useDocusaurusContext();
|
||||||
const {url: siteUrl, title: siteTitle, titleDelimiter} = siteConfig;
|
const {url: siteUrl} = siteConfig;
|
||||||
const {content: DocContent} = props;
|
const {content: DocContent} = props;
|
||||||
const {metadata} = DocContent;
|
const {metadata} = DocContent;
|
||||||
const {
|
const {
|
||||||
|
@ -54,9 +55,7 @@ function DocItem(props: Props): JSX.Element {
|
||||||
// See https://github.com/facebook/docusaurus/issues/3362
|
// See https://github.com/facebook/docusaurus/issues/3362
|
||||||
const showVersionBadge = versions.length > 1;
|
const showVersionBadge = versions.length > 1;
|
||||||
|
|
||||||
const metaTitle = title
|
const metaTitle = useTitleFormatter(title);
|
||||||
? `${title} ${titleDelimiter} ${siteTitle}`
|
|
||||||
: siteTitle;
|
|
||||||
const metaImageUrl = useBaseUrl(metaImage, {absolute: true});
|
const metaImageUrl = useBaseUrl(metaImage, {absolute: true});
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|
|
@ -11,7 +11,7 @@ import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
||||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||||
import type {Props} from '@theme/Layout';
|
import type {Props} from '@theme/Layout';
|
||||||
import SearchMetadatas from '@theme/SearchMetadatas';
|
import SearchMetadatas from '@theme/SearchMetadatas';
|
||||||
import {DEFAULT_SEARCH_TAG} from '@docusaurus/theme-common';
|
import {DEFAULT_SEARCH_TAG, useTitleFormatter} from '@docusaurus/theme-common';
|
||||||
|
|
||||||
export default function LayoutHead(props: Props): JSX.Element {
|
export default function LayoutHead(props: Props): JSX.Element {
|
||||||
const {
|
const {
|
||||||
|
@ -20,10 +20,8 @@ export default function LayoutHead(props: Props): JSX.Element {
|
||||||
} = useDocusaurusContext();
|
} = useDocusaurusContext();
|
||||||
const {
|
const {
|
||||||
favicon,
|
favicon,
|
||||||
title: siteTitle,
|
|
||||||
themeConfig: {image: defaultImage, metadatas},
|
themeConfig: {image: defaultImage, metadatas},
|
||||||
url: siteUrl,
|
url: siteUrl,
|
||||||
titleDelimiter,
|
|
||||||
} = siteConfig;
|
} = siteConfig;
|
||||||
const {
|
const {
|
||||||
title,
|
title,
|
||||||
|
@ -33,9 +31,7 @@ export default function LayoutHead(props: Props): JSX.Element {
|
||||||
permalink,
|
permalink,
|
||||||
searchMetadatas,
|
searchMetadatas,
|
||||||
} = props;
|
} = props;
|
||||||
const metaTitle = title
|
const metaTitle = useTitleFormatter(title);
|
||||||
? `${title} ${titleDelimiter} ${siteTitle}`
|
|
||||||
: siteTitle;
|
|
||||||
const metaImage = image || defaultImage;
|
const metaImage = image || defaultImage;
|
||||||
const metaImageUrl = useBaseUrl(metaImage, {absolute: true});
|
const metaImageUrl = useBaseUrl(metaImage, {absolute: true});
|
||||||
const faviconUrl = useBaseUrl(favicon);
|
const faviconUrl = useBaseUrl(favicon);
|
||||||
|
|
|
@ -22,6 +22,8 @@ export {isDocsPluginEnabled} from './utils/docsUtils';
|
||||||
|
|
||||||
export {isSamePath} from './utils/pathUtils';
|
export {isSamePath} from './utils/pathUtils';
|
||||||
|
|
||||||
|
export {useTitleFormatter} from './utils/generalUtils';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
useDocsPreferredVersion,
|
useDocsPreferredVersion,
|
||||||
useDocsPreferredVersionByPluginId,
|
useDocsPreferredVersionByPluginId,
|
||||||
|
|
15
packages/docusaurus-theme-common/src/utils/generalUtils.ts
Normal file
15
packages/docusaurus-theme-common/src/utils/generalUtils.ts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
/**
|
||||||
|
* 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 useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
||||||
|
|
||||||
|
export const useTitleFormatter = (title?: string | undefined) => {
|
||||||
|
const {siteConfig = {}} = useDocusaurusContext();
|
||||||
|
const {title: siteTitle, titleDelimiter = '|'} = siteConfig;
|
||||||
|
return title && title.trim().length
|
||||||
|
? `${title.trim()} ${titleDelimiter} ${siteTitle}`
|
||||||
|
: siteTitle;
|
||||||
|
};
|
|
@ -15,6 +15,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@docsearch/react": "^3.0.0-alpha.31",
|
"@docsearch/react": "^3.0.0-alpha.31",
|
||||||
"@docusaurus/core": "2.0.0-alpha.69",
|
"@docusaurus/core": "2.0.0-alpha.69",
|
||||||
|
"@docusaurus/theme-common": "2.0.0-alpha.69",
|
||||||
"@docusaurus/utils": "2.0.0-alpha.69",
|
"@docusaurus/utils": "2.0.0-alpha.69",
|
||||||
"algoliasearch": "^4.0.0",
|
"algoliasearch": "^4.0.0",
|
||||||
"algoliasearch-helper": "^3.1.1",
|
"algoliasearch-helper": "^3.1.1",
|
||||||
|
|
|
@ -14,11 +14,12 @@ import algoliaSearchHelper from 'algoliasearch-helper';
|
||||||
import clsx from 'clsx';
|
import clsx from 'clsx';
|
||||||
|
|
||||||
import Head from '@docusaurus/Head';
|
import Head from '@docusaurus/Head';
|
||||||
|
import Link from '@docusaurus/Link';
|
||||||
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
|
import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
|
||||||
|
import {useTitleFormatter} from '@docusaurus/theme-common';
|
||||||
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
||||||
import {useAllDocsData} from '@theme/hooks/useDocs';
|
import {useAllDocsData} from '@theme/hooks/useDocs';
|
||||||
import useSearchQuery from '@theme/hooks/useSearchQuery';
|
import useSearchQuery from '@theme/hooks/useSearchQuery';
|
||||||
import Link from '@docusaurus/Link';
|
|
||||||
import Layout from '@theme/Layout';
|
import Layout from '@theme/Layout';
|
||||||
|
|
||||||
import styles from './styles.module.css';
|
import styles from './styles.module.css';
|
||||||
|
@ -102,8 +103,6 @@ function Search() {
|
||||||
const {
|
const {
|
||||||
siteConfig: {
|
siteConfig: {
|
||||||
themeConfig: {algolia: {appId = 'BH4D9OD16A', apiKey, indexName} = {}},
|
themeConfig: {algolia: {appId = 'BH4D9OD16A', apiKey, indexName} = {}},
|
||||||
title: siteTitle,
|
|
||||||
titleDelimiter,
|
|
||||||
} = {},
|
} = {},
|
||||||
} = useDocusaurusContext();
|
} = useDocusaurusContext();
|
||||||
const docsSearchVersionsHelpers = useDocsSearchVersionsHelpers();
|
const docsSearchVersionsHelpers = useDocsSearchVersionsHelpers();
|
||||||
|
@ -298,7 +297,7 @@ function Search() {
|
||||||
return (
|
return (
|
||||||
<Layout wrapperClassName="search-page-wrapper">
|
<Layout wrapperClassName="search-page-wrapper">
|
||||||
<Head>
|
<Head>
|
||||||
<title>{`${getTitle()} ${titleDelimiter} ${siteTitle}`}</title>
|
<title>{useTitleFormatter(getTitle())}</title>
|
||||||
{/*
|
{/*
|
||||||
We should not index search pages
|
We should not index search pages
|
||||||
See https://github.com/facebook/docusaurus/pull/3233
|
See https://github.com/facebook/docusaurus/pull/3233
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue