12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- 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`);
- }
|