aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vuepress/lib/default-theme/Page.vue
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/vuepress/lib/default-theme/Page.vue')
-rw-r--r--node_modules/vuepress/lib/default-theme/Page.vue246
1 files changed, 246 insertions, 0 deletions
diff --git a/node_modules/vuepress/lib/default-theme/Page.vue b/node_modules/vuepress/lib/default-theme/Page.vue
new file mode 100644
index 00000000..37d65b41
--- /dev/null
+++ b/node_modules/vuepress/lib/default-theme/Page.vue
@@ -0,0 +1,246 @@
+<template>
+ <div class="page">
+ <slot name="top"/>
+
+ <Content :custom="false"/>
+
+ <div class="page-edit">
+ <div
+ class="edit-link"
+ v-if="editLink"
+ >
+ <a
+ :href="editLink"
+ target="_blank"
+ rel="noopener noreferrer"
+ >{{ editLinkText }}</a>
+ <OutboundLink/>
+ </div>
+
+ <div
+ class="last-updated"
+ v-if="lastUpdated"
+ >
+ <span class="prefix">{{ lastUpdatedText }}: </span>
+ <span class="time">{{ lastUpdated }}</span>
+ </div>
+ </div>
+
+ <div class="page-nav" v-if="prev || next">
+ <p class="inner">
+ <span
+ v-if="prev"
+ class="prev"
+ >
+ ←
+ <router-link
+ v-if="prev"
+ class="prev"
+ :to="prev.path"
+ >
+ {{ prev.title || prev.path }}
+ </router-link>
+ </span>
+
+ <span
+ v-if="next"
+ class="next"
+ >
+ <router-link
+ v-if="next"
+ :to="next.path"
+ >
+ {{ next.title || next.path }}
+ </router-link>
+ →
+ </span>
+ </p>
+ </div>
+
+ <slot name="bottom"/>
+ </div>
+</template>
+
+<script>
+import { resolvePage, normalize, outboundRE, endingSlashRE } from './util'
+
+export default {
+ props: ['sidebarItems'],
+
+ computed: {
+ lastUpdated () {
+ if (this.$page.lastUpdated) {
+ return new Date(this.$page.lastUpdated).toLocaleString(this.$lang)
+ }
+ },
+
+ lastUpdatedText () {
+ if (typeof this.$themeLocaleConfig.lastUpdated === 'string') {
+ return this.$themeLocaleConfig.lastUpdated
+ }
+ if (typeof this.$site.themeConfig.lastUpdated === 'string') {
+ return this.$site.themeConfig.lastUpdated
+ }
+ return 'Last Updated'
+ },
+
+ prev () {
+ const prev = this.$page.frontmatter.prev
+ if (prev === false) {
+ return
+ } else if (prev) {
+ return resolvePage(this.$site.pages, prev, this.$route.path)
+ } else {
+ return resolvePrev(this.$page, this.sidebarItems)
+ }
+ },
+
+ next () {
+ const next = this.$page.frontmatter.next
+ if (next === false) {
+ return
+ } else if (next) {
+ return resolvePage(this.$site.pages, next, this.$route.path)
+ } else {
+ return resolveNext(this.$page, this.sidebarItems)
+ }
+ },
+
+ editLink () {
+ if (this.$page.frontmatter.editLink === false) {
+ return
+ }
+ const {
+ repo,
+ editLinks,
+ docsDir = '',
+ docsBranch = 'master',
+ docsRepo = repo
+ } = this.$site.themeConfig
+
+ let path = normalize(this.$page.path)
+ if (endingSlashRE.test(path)) {
+ path += 'README.md'
+ } else {
+ path += '.md'
+ }
+ if (docsRepo && editLinks) {
+ return this.createEditLink(repo, docsRepo, docsDir, docsBranch, path)
+ }
+ },
+
+ editLinkText () {
+ return (
+ this.$themeLocaleConfig.editLinkText ||
+ this.$site.themeConfig.editLinkText ||
+ `Edit this page`
+ )
+ }
+ },
+
+ methods: {
+ createEditLink (repo, docsRepo, docsDir, docsBranch, path) {
+ const bitbucket = /bitbucket.org/
+ if (bitbucket.test(repo)) {
+ const base = outboundRE.test(docsRepo)
+ ? docsRepo
+ : repo
+ return (
+ base.replace(endingSlashRE, '') +
+ `/${docsBranch}` +
+ (docsDir ? '/' + docsDir.replace(endingSlashRE, '') : '') +
+ path +
+ `?mode=edit&spa=0&at=${docsBranch}&fileviewer=file-view-default`
+ )
+ }
+
+ const base = outboundRE.test(docsRepo)
+ ? docsRepo
+ : `https://github.com/${docsRepo}`
+
+ return (
+ base.replace(endingSlashRE, '') +
+ `/edit/${docsBranch}` +
+ (docsDir ? '/' + docsDir.replace(endingSlashRE, '') : '') +
+ path
+ )
+ }
+ }
+}
+
+function resolvePrev (page, items) {
+ return find(page, items, -1)
+}
+
+function resolveNext (page, items) {
+ return find(page, items, 1)
+}
+
+function find (page, items, offset) {
+ const res = []
+ items.forEach(item => {
+ if (item.type === 'group') {
+ res.push(...item.children || [])
+ } else {
+ res.push(item)
+ }
+ })
+ for (let i = 0; i < res.length; i++) {
+ const cur = res[i]
+ if (cur.type === 'page' && cur.path === page.path) {
+ return res[i + offset]
+ }
+ }
+}
+</script>
+
+<style lang="stylus">
+@import './styles/config.styl'
+@require './styles/wrapper.styl'
+
+.page
+ padding-bottom 2rem
+
+.page-edit
+ @extend $wrapper
+ padding-top 1rem
+ padding-bottom 1rem
+ overflow auto
+ .edit-link
+ display inline-block
+ a
+ color lighten($textColor, 25%)
+ margin-right 0.25rem
+ .last-updated
+ float right
+ font-size 0.9em
+ .prefix
+ font-weight 500
+ color lighten($textColor, 25%)
+ .time
+ font-weight 400
+ color #aaa
+
+.page-nav
+ @extend $wrapper
+ padding-top 1rem
+ padding-bottom 0
+ .inner
+ min-height 2rem
+ margin-top 0
+ border-top 1px solid $borderColor
+ padding-top 1rem
+ overflow auto // clear float
+ .next
+ float right
+
+@media (max-width: $MQMobile)
+ .page-edit
+ .edit-link
+ margin-bottom .5rem
+ .last-updated
+ font-size .8em
+ float none
+ text-align left
+
+</style>