mirror of https://github.com/vuejs/vitepress
feat: add git repo link and edit links (#55)
Co-authored-by: Shintaro Tanaka <s-tanaka@holmescloud.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com>pull/90/head
parent
a90d971b40
commit
0ea34cbb1d
@ -0,0 +1,81 @@
|
||||
import { computed } from 'vue'
|
||||
import OutboundLink from './icons/OutboundLink.vue'
|
||||
import { endingSlashRE, isExternal } from '/@theme/utils'
|
||||
import { usePageData, useSiteData } from 'vitepress'
|
||||
import { DefaultTheme } from '../config'
|
||||
|
||||
function createEditLink(
|
||||
repo: string,
|
||||
docsRepo: string,
|
||||
docsDir: string,
|
||||
docsBranch: string,
|
||||
path: string
|
||||
) {
|
||||
const bitbucket = /bitbucket.org/
|
||||
if (bitbucket.test(repo)) {
|
||||
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`
|
||||
)
|
||||
}
|
||||
|
||||
const base = isExternal(docsRepo)
|
||||
? docsRepo
|
||||
: `https://github.com/${docsRepo}`
|
||||
return (
|
||||
base.replace(endingSlashRE, '') +
|
||||
`/edit` +
|
||||
`/${docsBranch}/` +
|
||||
(docsDir ? docsDir.replace(endingSlashRE, '') + '/' : '') +
|
||||
path
|
||||
)
|
||||
}
|
||||
|
||||
export default {
|
||||
components: {
|
||||
OutboundLink
|
||||
},
|
||||
|
||||
setup() {
|
||||
const pageData = usePageData()
|
||||
const siteData = useSiteData<DefaultTheme.Config>()
|
||||
|
||||
const editLink = computed(() => {
|
||||
const showEditLink: boolean | undefined =
|
||||
pageData.value.frontmatter.editLink == null
|
||||
? siteData.value.themeConfig.editLinks
|
||||
: pageData.value.frontmatter.editLink
|
||||
const {
|
||||
repo,
|
||||
docsDir = '',
|
||||
docsBranch = 'master',
|
||||
docsRepo = repo
|
||||
} = siteData.value.themeConfig
|
||||
|
||||
const { relativePath } = pageData.value
|
||||
if (showEditLink && relativePath && repo) {
|
||||
return createEditLink(
|
||||
repo,
|
||||
docsRepo || repo,
|
||||
docsDir,
|
||||
docsBranch,
|
||||
relativePath
|
||||
)
|
||||
}
|
||||
return null
|
||||
})
|
||||
const editLinkText = computed(
|
||||
() => siteData.value.themeConfig.editLinkText || 'Edit this page'
|
||||
)
|
||||
|
||||
return {
|
||||
editLink,
|
||||
editLinkText
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
<template>
|
||||
<footer class="page-edit">
|
||||
<a
|
||||
v-if="editLink"
|
||||
:href="editLink"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
{{ editLinkText }}
|
||||
<OutboundLink />
|
||||
</a>
|
||||
</footer>
|
||||
</template>
|
||||
|
||||
<script src="./PageEdit"></script>
|
||||
|
||||
<style>
|
||||
.page-edit {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.page-edit a {
|
||||
color: var(--text-color);
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
</style>
|
Loading…
Reference in new issue