mirror of https://github.com/vuejs/vitepress
parent
c3be5472e6
commit
8b50db871a
@ -0,0 +1,81 @@
|
|||||||
|
import { defineComponent, computed } from 'vue'
|
||||||
|
import OutboundLink from './icons/OutboundLink.vue'
|
||||||
|
import { endingSlashRE, isExternal } from '/@theme/utils'
|
||||||
|
import { usePageData, useSiteData, useSiteDataByRoute } from 'vitepress'
|
||||||
|
|
||||||
|
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 defineComponent({
|
||||||
|
components: {
|
||||||
|
OutboundLink
|
||||||
|
},
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
const pageData = usePageData()
|
||||||
|
const siteData = useSiteData()
|
||||||
|
const siteDataByRoute = useSiteDataByRoute()
|
||||||
|
|
||||||
|
const {
|
||||||
|
repo,
|
||||||
|
text,
|
||||||
|
dir = '',
|
||||||
|
branch = 'master',
|
||||||
|
docsRepo = repo
|
||||||
|
} = siteData.value.themeConfig.editLink
|
||||||
|
const { relativePath } = pageData.value
|
||||||
|
|
||||||
|
const editLink = computed(() => {
|
||||||
|
const showEditLink =
|
||||||
|
pageData.value.frontmatter.editLink == null
|
||||||
|
? siteData.value.themeConfig.editLink
|
||||||
|
: pageData.value.frontmatter.editLink
|
||||||
|
|
||||||
|
if (showEditLink && relativePath) {
|
||||||
|
return createEditLink(repo, docsRepo, dir, branch, relativePath)
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
})
|
||||||
|
const editLinkText = computed(() => {
|
||||||
|
return (
|
||||||
|
siteDataByRoute.value.themeConfig.editLink.text ||
|
||||||
|
text ||
|
||||||
|
`Edit this page`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
editLink,
|
||||||
|
editLinkText
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
@ -0,0 +1,32 @@
|
|||||||
|
<template>
|
||||||
|
<footer class="page-edit">
|
||||||
|
<div
|
||||||
|
v-if="editLink"
|
||||||
|
class="edit-link"
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
:href="editLink"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>{{ editLinkText }}</a>
|
||||||
|
<OutboundLink />
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script src="./PageEdit"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.page-edit {
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
.page-edit .edit-link {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.page-edit .edit-link a {
|
||||||
|
color: #4e6e8e;
|
||||||
|
margin-right: 0.25rem
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in new issue