Skip to content

Commit

Permalink
editUrl functions should receive md doc permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
slorber committed Feb 17, 2021
1 parent 2ff5d34 commit ac641cc
Show file tree
Hide file tree
Showing 8 changed files with 79 additions and 63 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -184,26 +184,31 @@ describe('loadBlog', () => {
expect(editUrlFunction).toHaveBeenCalledWith({
blogDirPath: 'blog',
blogPath: 'date-matter.md',
permalink: '/blog/date-matter',
locale: 'en',
});
expect(editUrlFunction).toHaveBeenCalledWith({
blogDirPath: 'blog',
blogPath: 'draft.md',
permalink: '/blog/draft',
locale: 'en',
});
expect(editUrlFunction).toHaveBeenCalledWith({
blogDirPath: 'blog',
blogPath: 'complex-slug.md',
permalink: '/blog/hey/my super path/héllô',
locale: 'en',
});
expect(editUrlFunction).toHaveBeenCalledWith({
blogDirPath: 'blog',
blogPath: 'simple-slug.md',
permalink: '/blog/simple/slug',
locale: 'en',
});
expect(editUrlFunction).toHaveBeenCalledWith({
blogDirPath: 'i18n/en/docusaurus-plugin-content-blog',
blogPath: '2018-12-14-Happy-First-Birthday-Slash.md',
permalink: '/blog/2018/12/14/Happy-First-Birthday-Slash',
locale: 'en',
});
});
Expand Down
70 changes: 36 additions & 34 deletions packages/docusaurus-plugin-content-blog/src/blogUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ export async function generateBlogPosts(
routeBasePath,
truncateMarker,
showReadingTime,
editUrl: siteEditUrl,
editUrl,
} = options;

if (!fs.existsSync(contentPaths.contentPath)) {
Expand Down Expand Up @@ -136,37 +136,6 @@ export async function generateBlogPosts(

const blogFileName = path.basename(blogSourceFile);

function getBlogEditUrl() {
const blogPathRelative = path.relative(
blogDirPath,
path.resolve(source),
);

if (typeof siteEditUrl === 'function') {
return siteEditUrl({
blogDirPath: posixPath(path.relative(siteDir, blogDirPath)),
blogPath: posixPath(blogPathRelative),
locale: i18n.currentLocale,
});
} else if (typeof siteEditUrl === 'string') {
const isLocalized = blogDirPath === contentPaths.contentPathLocalized;
const fileContentPath =
isLocalized && options.editLocalizedFiles
? contentPaths.contentPathLocalized
: contentPaths.contentPath;

const contentPathEditUrl = normalizeUrl([
siteEditUrl,
posixPath(path.relative(siteDir, fileContentPath)),
]);

return getEditUrl(blogPathRelative, contentPathEditUrl);
} else {
return undefined;
}
}
const editBlogUrl = getBlogEditUrl();

const {frontMatter, content, excerpt} = await parseMarkdownFile(source);

if (frontMatter.draft && process.env.NODE_ENV === 'production') {
Expand Down Expand Up @@ -204,11 +173,44 @@ export async function generateBlogPosts(
frontMatter.slug || (match ? toUrl({date, link: linkName}) : linkName);
frontMatter.title = frontMatter.title || linkName;

const permalink = normalizeUrl([baseUrl, routeBasePath, slug]);

function getBlogEditUrl() {
const blogPathRelative = path.relative(
blogDirPath,
path.resolve(source),
);

if (typeof editUrl === 'function') {
return editUrl({
blogDirPath: posixPath(path.relative(siteDir, blogDirPath)),
blogPath: posixPath(blogPathRelative),
permalink,
locale: i18n.currentLocale,
});
} else if (typeof editUrl === 'string') {
const isLocalized = blogDirPath === contentPaths.contentPathLocalized;
const fileContentPath =
isLocalized && options.editLocalizedFiles
? contentPaths.contentPathLocalized
: contentPaths.contentPath;

const contentPathEditUrl = normalizeUrl([
editUrl,
posixPath(path.relative(siteDir, fileContentPath)),
]);

return getEditUrl(blogPathRelative, contentPathEditUrl);
} else {
return undefined;
}
}

blogPosts.push({
id: frontMatter.slug || frontMatter.title,
metadata: {
permalink: normalizeUrl([baseUrl, routeBasePath, slug]),
editUrl: editBlogUrl,
permalink,
editUrl: getBlogEditUrl(),
source: aliasedSource,
description: frontMatter.description || excerpt,
date,
Expand Down
1 change: 1 addition & 0 deletions packages/docusaurus-plugin-content-blog/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export type FeedType = 'rss' | 'atom';
export type EditUrlFunction = (editUrlParams: {
blogDirPath: string;
blogPath: string;
permalink: string;
locale: string;
}) => string | undefined;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,7 @@ describe('simple site', () => {
version: 'current',
versionDocsDirPath: 'docs',
docPath: path.posix.join('foo', 'baz.md'),
permalink: '/docs/foo/bazSlug.html',
locale: 'en',
});
});
Expand Down Expand Up @@ -672,6 +673,7 @@ describe('versioned site', () => {
version: '1.0.0',
versionDocsDirPath: 'versioned_docs/version-1.0.0',
docPath: path.join('hello.md'),
permalink: '/docs/1.0.0/hello',
locale: 'en',
});
});
Expand Down
53 changes: 26 additions & 27 deletions packages/docusaurus-plugin-content-docs/src/docs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,32 +119,6 @@ export function processDocMetadata({
// ex: myDoc -> .
const docsFileDirName = path.dirname(source);

const relativeFilePath = path.relative(docsDirPath, filePath);

function getDocEditUrl() {
if (typeof options.editUrl === 'function') {
return options.editUrl({
version: versionMetadata.versionName,
versionDocsDirPath: posixPath(
path.relative(siteDir, versionMetadata.docsDirPath),
),
docPath: posixPath(relativeFilePath),
locale: context.i18n.currentLocale,
});
} else if (typeof options.editUrl === 'string') {
const isLocalized = docsDirPath === versionMetadata.docsDirPathLocalized;
const baseVersionEditUrl =
isLocalized && options.editLocalizedFiles
? versionMetadata.versionEditUrlLocalized
: versionMetadata.versionEditUrl;
return getEditUrl(relativeFilePath, baseVersionEditUrl);
} else {
return undefined;
}
}

const docsEditUrl = getDocEditUrl();

const {frontMatter = {}, excerpt} = parseMarkdownString(content);
const {sidebar_label, custom_edit_url} = frontMatter;

Expand Down Expand Up @@ -194,6 +168,31 @@ export function processDocMetadata({

const permalink = normalizeUrl([versionMetadata.versionPath, docSlug]);

function getDocEditUrl() {
const relativeFilePath = path.relative(docsDirPath, filePath);

if (typeof options.editUrl === 'function') {
return options.editUrl({
version: versionMetadata.versionName,
versionDocsDirPath: posixPath(
path.relative(siteDir, versionMetadata.docsDirPath),
),
docPath: posixPath(relativeFilePath),
permalink,
locale: context.i18n.currentLocale,
});
} else if (typeof options.editUrl === 'string') {
const isLocalized = docsDirPath === versionMetadata.docsDirPathLocalized;
const baseVersionEditUrl =
isLocalized && options.editLocalizedFiles
? versionMetadata.versionEditUrlLocalized
: versionMetadata.versionEditUrl;
return getEditUrl(relativeFilePath, baseVersionEditUrl);
} else {
return undefined;
}
}

// Assign all of object properties during instantiation (if possible) for
// NodeJS optimization.
// Adding properties to object after instantiation will cause hidden
Expand All @@ -207,7 +206,7 @@ export function processDocMetadata({
source: aliasedSitePath(filePath, siteDir),
slug: docSlug,
permalink,
editUrl: custom_edit_url !== undefined ? custom_edit_url : docsEditUrl,
editUrl: custom_edit_url !== undefined ? custom_edit_url : getDocEditUrl(),
version: versionMetadata.versionName,
lastUpdatedBy: lastUpdate.lastUpdatedBy,
lastUpdatedAt: lastUpdate.lastUpdatedAt,
Expand Down
1 change: 1 addition & 0 deletions packages/docusaurus-plugin-content-docs/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export type EditUrlFunction = (editUrlParams: {
version: string;
versionDocsDirPath: string;
docPath: string;
permalink: string;
locale: string;
}) => string | undefined;

Expand Down
2 changes: 1 addition & 1 deletion website/docs/api/plugins/plugin-content-blog.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ module.exports = {
/**
* For advanced cases, compute the edit url for each markdown file yourself.
*/
editUrl: ({locale, blogDirPath, blogPath}) => {
editUrl: ({locale, blogDirPath, blogPath, permalink}) => {
return `https://github.com/facebook/docusaurus/edit/master/website/${blogDirPath}/${blogPath}`;
},
/**
Expand Down
8 changes: 7 additions & 1 deletion website/docs/api/plugins/plugin-content-docs.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,13 @@ module.exports = {
/**
* For advanced cases, compute the edit url for each markdown file yourself.
*/
editUrl: function ({locale, version, versionDocsDirPath, docPath}) {
editUrl: function ({
locale,
version,
versionDocsDirPath,
docPath,
permalink,
}) {
return `https://github.com/facebook/docusaurus/edit/master/website/${versionDocsDirPath}/${docPath}`;
},
/**
Expand Down

0 comments on commit ac641cc

Please sign in to comment.