mirror of
https://github.com/strapi/strapi.git
synced 2025-09-15 19:39:06 +00:00
137 lines
3.6 KiB
Vue
137 lines
3.6 KiB
Vue
<template>
|
|
<header class="navbar">
|
|
<SidebarButton @toggle-sidebar="$emit('toggle-sidebar')" />
|
|
|
|
<router-link :to="$localePath" class="home-link">
|
|
<img
|
|
class="logo"
|
|
v-if="$site.themeConfig.logo"
|
|
:src="$withBase($site.themeConfig.logo)"
|
|
:alt="$siteTitle"
|
|
/>
|
|
<span
|
|
ref="siteName"
|
|
class="site-name"
|
|
v-if="$siteTitle"
|
|
:class="{ 'can-hide': $site.themeConfig.logo }"
|
|
>{{ $siteTitle }}</span
|
|
>
|
|
</router-link>
|
|
|
|
<span class="deprecated" v-if="isBeta">
|
|
Beta docs (deprecated) - View the
|
|
<router-link :to="$localePath" class="home-link"> current version </router-link>
|
|
</span>
|
|
|
|
<div
|
|
class="links"
|
|
:style="
|
|
linksWrapMaxWidth
|
|
? {
|
|
'max-width': linksWrapMaxWidth + 'px',
|
|
}
|
|
: {}
|
|
"
|
|
>
|
|
<AlgoliaSearchBox :options="algolia" />
|
|
<NavLinks class="can-hide" />
|
|
</div>
|
|
</header>
|
|
</template>
|
|
|
|
<script>
|
|
import AlgoliaSearchBox from '@theme/components/AlgoliaSearchBox';
|
|
import SearchBox from '@SearchBox';
|
|
import SidebarButton from '@parent-theme/components/SidebarButton.vue';
|
|
import NavLinks from '@parent-theme/components/NavLinks.vue';
|
|
export default {
|
|
components: { SidebarButton, NavLinks, AlgoliaSearchBox, SearchBox },
|
|
data() {
|
|
return {
|
|
linksWrapMaxWidth: null,
|
|
isBeta: false,
|
|
};
|
|
},
|
|
mounted() {
|
|
const MOBILE_DESKTOP_BREAKPOINT = 719; // refer to config.styl
|
|
const NAVBAR_VERTICAL_PADDING =
|
|
parseInt(css(this.$el, 'paddingLeft')) + parseInt(css(this.$el, 'paddingRight'));
|
|
const handleLinksWrapWidth = () => {
|
|
if (document.documentElement.clientWidth < MOBILE_DESKTOP_BREAKPOINT) {
|
|
this.linksWrapMaxWidth = null;
|
|
} else {
|
|
this.linksWrapMaxWidth =
|
|
this.$el.offsetWidth -
|
|
NAVBAR_VERTICAL_PADDING -
|
|
((this.$refs.siteName && this.$refs.siteName.offsetWidth) || 0);
|
|
}
|
|
};
|
|
handleLinksWrapWidth();
|
|
window.addEventListener('resize', handleLinksWrapWidth, false);
|
|
this.isBeta = /documentation\/3.0.0-beta.x/.test(window.location.href);
|
|
},
|
|
computed: {
|
|
algolia() {
|
|
return this.$themeLocaleConfig.algolia || this.$site.themeConfig.algolia || {};
|
|
},
|
|
},
|
|
};
|
|
function css(el, property) {
|
|
// NOTE: Known bug, will return 'auto' if style value is 'auto'
|
|
const win = el.ownerDocument.defaultView;
|
|
// null means not to return pseudo styles
|
|
return win.getComputedStyle(el, null)[property];
|
|
}
|
|
</script>
|
|
|
|
<style lang="stylus">
|
|
$navbar-vertical-padding = 0.7rem
|
|
$navbar-horizontal-padding = 1.5rem
|
|
.navbar
|
|
padding $navbar-vertical-padding $navbar-horizontal-padding
|
|
line-height $navbarHeight - 1.4rem
|
|
.deprecated
|
|
padding 0 0.5rem
|
|
margin-left 1rem
|
|
font-weight 600
|
|
background-color #fff3cd
|
|
border-radius .25rem
|
|
a, span, img
|
|
display inline-block
|
|
.logo
|
|
height $navbarHeight - 1.4rem
|
|
min-width $navbarHeight - 1.4rem
|
|
margin-right 0.8rem
|
|
vertical-align top
|
|
.site-name
|
|
font-size 1.3rem
|
|
font-weight 600
|
|
color $textColor
|
|
position relative
|
|
.links
|
|
padding-left 1.5rem
|
|
box-sizing border-box
|
|
background-color white
|
|
white-space nowrap
|
|
font-size 0.9rem
|
|
position absolute
|
|
right $navbar-horizontal-padding
|
|
top $navbar-vertical-padding
|
|
display flex
|
|
.search-box
|
|
flex: 0 0 auto
|
|
vertical-align top
|
|
@media (max-width: $MQMobile)
|
|
.navbar
|
|
padding-left 4rem
|
|
.can-hide
|
|
display none
|
|
.links
|
|
padding-left 1.5rem
|
|
.site-name
|
|
width calc(100vw - 9.4rem)
|
|
overflow hidden
|
|
white-space nowrap
|
|
text-overflow ellipsis
|
|
</style>
|