Skip to content

Commit

Permalink
feat: add git repo link
Browse files Browse the repository at this point in the history
  • Loading branch information
Shintaro Tanaka committed Sep 4, 2020
1 parent 2e8e1f5 commit 38d94f1
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 4 deletions.
9 changes: 6 additions & 3 deletions src/client/theme-default/components/NavBar.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import { computed } from 'vue'
import { withBase } from '../utils'
import { useSiteDataByRoute } from 'vitepress'
import { useSiteData, useSiteDataByRoute } from 'vitepress'
import NavBarLink from './NavBarLink.vue'
import NavDropdownLink from './NavDropdownLink.vue'
import NavRepoLink from './NavRepoLink.vue'

export default {
components: {
NavBarLink,
NavDropdownLink
NavDropdownLink,
NavRepoLink
},

setup() {
Expand All @@ -18,7 +20,8 @@ export default {
? // navbar items do not change in production
useSiteDataByRoute().value.themeConfig.nav
: // use computed in dev for hot reload
computed(() => useSiteDataByRoute().value.themeConfig.nav)
computed(() => useSiteDataByRoute().value.themeConfig.nav),
editLinkConfig: computed(() => useSiteData().value.themeConfig.editLink)
}
}
}
3 changes: 2 additions & 1 deletion src/client/theme-default/components/NavBar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@
/>
<span>{{ $site.title }}</span>
</a>
<nav class="nav-links" v-if="navData">
<nav class="nav-links" v-if="navData || editLinkConfig">
<template v-for="item of navData">
<NavDropdownLink v-if='item.items' :item="item"/>
<NavBarLink v-else :item="item"/>
<NavRepoLink :edit-link-config="editLinkConfig" />
</template>
</nav>
</template>
Expand Down
47 changes: 47 additions & 0 deletions src/client/theme-default/components/NavRepoLink.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { computed, defineComponent, PropType } from 'vue'
import OutboundLink from './icons/OutboundLink.vue'
import { DefaultTheme } from '/@theme/config'

export default defineComponent({
components: {
OutboundLink
},

props: {
editLinkConfig: {
type: Object as PropType<DefaultTheme.EditLinkConfig>,
required: true
}
},

setup(props) {
const editLinkConfig = props.editLinkConfig
const repoLink = computed(() => {
if (editLinkConfig && editLinkConfig.repo) {
return /^https?:/.test(editLinkConfig.repo)
? editLinkConfig.repo
: `https://github.com/${editLinkConfig.repo}`
}
return null
})
const repoLabel = computed(() => {
if (!repoLink.value) return
const repoHosts = repoLink.value.match(/^https?:\/\/[^/]+/)
if (!repoHosts) return
const repoHost = repoHosts[0]
const platforms = ['GitHub', 'GitLab', 'Bitbucket']
for (let i = 0; i < platforms.length; i++) {
const platform = platforms[i]
if (new RegExp(platform, 'i').test(repoHost)) {
return platform
}
}

return 'Source'
})
return {
repoLink,
repoLabel
}
}
})
22 changes: 22 additions & 0 deletions src/client/theme-default/components/NavRepoLink.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<template>
<a
v-if="repoLink"
:href="repoLink"
class="repo-link"
target="_blank"
rel="noopener noreferrer"
>
{{ repoLabel }}
<OutboundLink />
</a>
</template>

<script src="./NavRepoLink"></script>

<style>
.repo-link {
margin-left: 1.5rem;
color: var(--text-color);
font-weight: 600;
}
</style>

0 comments on commit 38d94f1

Please sign in to comment.