import { computed } from 'vue'; import { useData } from 'vitepress'; import { endingSlashRE, isExternal } from '../utils'; const bitbucketRE = /bitbucket.org/; export function useEditLink() { const { page, theme, frontmatter } = useData(); const url = computed(() => { const { repo, docsDir = '', docsBranch = 'master', docsRepo = repo, editLinks } = theme.value; const showEditLink = frontmatter.value.editLink != null ? frontmatter.value.editLink : editLinks; const { relativePath } = page.value; if (!showEditLink || !relativePath || !repo) { return null; } return createUrl(repo, docsRepo, docsDir, docsBranch, relativePath); }); const text = computed(() => { return theme.value.editLinkText || 'Edit this page'; }); return { url, text }; } function createUrl(repo, docsRepo, docsDir, docsBranch, path) { return bitbucketRE.test(repo) ? createBitbucketUrl(repo, docsRepo, docsDir, docsBranch, path) : createGitHubUrl(repo, docsRepo, docsDir, docsBranch, path); } function createGitHubUrl(repo, docsRepo, docsDir, docsBranch, path) { const base = isExternal(docsRepo) ? docsRepo : `https://github.com/${docsRepo}`; return (base.replace(endingSlashRE, '') + `/edit` + `/${docsBranch}/` + (docsDir ? docsDir.replace(endingSlashRE, '') + '/' : '') + path); } function createBitbucketUrl(repo, docsRepo, docsDir, docsBranch, path) { const base = isExternal(docsRepo) ? docsRepo : repo; return (base.replace(endingSlashRE, '') + `/src` + `/${docsBranch}/` + (docsDir ? docsDir.replace(endingSlashRE, '') + '/' : '') + path + `?mode=edit&spa=0&at=${docsBranch}&fileviewer=file-view-default`); }