mirror of
				https://github.com/strapi/strapi.git
				synced 2025-11-03 19:36:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			155 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
  <div class="dropdown-wrapper" :class="{ open }">
 | 
						|
    <a class="dropdown-title" @click="toggle">
 | 
						|
      <span class="title">{{ item.text }}</span>
 | 
						|
      <span class="arrow" :class="open ? 'down' : 'right'"></span>
 | 
						|
    </a>
 | 
						|
    <DropdownTransition>
 | 
						|
      <ul class="nav-dropdown" v-show="open">
 | 
						|
        <li
 | 
						|
        class="dropdown-item"
 | 
						|
        v-for="(subItem, index) in item.items"
 | 
						|
        :key="subItem.link || index">
 | 
						|
          <h4 v-if="subItem.type === 'links'">{{ subItem.text }}</h4>
 | 
						|
          <ul class="dropdown-subitem-wrapper" v-if="subItem.type === 'links'">
 | 
						|
            <li
 | 
						|
            class="dropdown-subitem"
 | 
						|
            v-for="childSubItem in subItem.items"
 | 
						|
            :key="childSubItem.link">
 | 
						|
              <NavLink :item="childSubItem"/>
 | 
						|
            </li>
 | 
						|
          </ul>
 | 
						|
          <NavLink v-else :item="subItem"/>
 | 
						|
        </li>
 | 
						|
      </ul>
 | 
						|
    </DropdownTransition>
 | 
						|
  </div>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
import NavLink from './NavLink.vue'
 | 
						|
import DropdownTransition from './DropdownTransition.vue'
 | 
						|
 | 
						|
export default {
 | 
						|
  components: { NavLink, DropdownTransition },
 | 
						|
  data () {
 | 
						|
    return {
 | 
						|
      open: false
 | 
						|
    }
 | 
						|
  },
 | 
						|
  props: {
 | 
						|
    item: {
 | 
						|
      required: true
 | 
						|
    }
 | 
						|
  },
 | 
						|
  methods: {
 | 
						|
    toggle () {
 | 
						|
      this.open = !this.open
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
</script>
 | 
						|
 | 
						|
<style lang="stylus">
 | 
						|
@import './styles/config.styl'
 | 
						|
 | 
						|
.dropdown-wrapper
 | 
						|
  .dropdown-title
 | 
						|
    display block
 | 
						|
    &:hover
 | 
						|
      border-color transparent
 | 
						|
    .arrow
 | 
						|
      vertical-align middle
 | 
						|
      margin-top -1px
 | 
						|
      margin-left 0.4rem
 | 
						|
  .nav-dropdown
 | 
						|
    .dropdown-item
 | 
						|
      color inherit
 | 
						|
      line-height 1.7rem
 | 
						|
      h4
 | 
						|
        margin 0.45rem 0 0
 | 
						|
        border-top 1px solid #eee
 | 
						|
        padding 0.45rem 1.5rem 0 1.25rem
 | 
						|
      .dropdown-subitem-wrapper
 | 
						|
        padding 0
 | 
						|
        list-style none
 | 
						|
        .dropdown-subitem
 | 
						|
          font-size 0.9em
 | 
						|
      a
 | 
						|
        display block
 | 
						|
        line-height 1.7rem
 | 
						|
        position relative
 | 
						|
        border-bottom none
 | 
						|
        font-weight 400
 | 
						|
        margin-bottom 0
 | 
						|
        padding 0 1.5rem 0 1.25rem
 | 
						|
        &:hover
 | 
						|
          color $accentColor
 | 
						|
        &.router-link-active
 | 
						|
          color $accentColor
 | 
						|
          &::after
 | 
						|
            content ""
 | 
						|
            width 0
 | 
						|
            height 0
 | 
						|
            border-left 5px solid $accentColor
 | 
						|
            border-top 3px solid transparent
 | 
						|
            border-bottom 3px solid transparent
 | 
						|
            position absolute
 | 
						|
            top calc(50% - 2px)
 | 
						|
            left 9px
 | 
						|
      &:first-child h4
 | 
						|
        margin-top 0
 | 
						|
        padding-top 0
 | 
						|
        border-top 0
 | 
						|
 | 
						|
@media (max-width: $MQMobile)
 | 
						|
  .dropdown-wrapper
 | 
						|
    &.open .dropdown-title
 | 
						|
      margin-bottom 0.5rem
 | 
						|
    .nav-dropdown
 | 
						|
      transition height .1s ease-out
 | 
						|
      overflow hidden
 | 
						|
      .dropdown-item
 | 
						|
        h4
 | 
						|
          border-top 0
 | 
						|
          margin-top 0
 | 
						|
          padding-top 0
 | 
						|
        h4, & > a
 | 
						|
          font-size 15px
 | 
						|
          line-height 2rem
 | 
						|
        .dropdown-subitem
 | 
						|
          font-size 14px
 | 
						|
          padding-left 1rem
 | 
						|
 | 
						|
@media (min-width: $MQMobile)
 | 
						|
  .dropdown-wrapper
 | 
						|
    height 1.8rem
 | 
						|
    &:hover .nav-dropdown
 | 
						|
      // override the inline style.
 | 
						|
      display block !important
 | 
						|
    .dropdown-title .arrow
 | 
						|
      // make the arrow always down at desktop
 | 
						|
      border-left 4px solid transparent
 | 
						|
      border-right 4px solid transparent
 | 
						|
      border-top 6px solid $arrowBgColor
 | 
						|
      border-bottom 0
 | 
						|
    .nav-dropdown
 | 
						|
      display none
 | 
						|
      // Avoid height shaked by clicking
 | 
						|
      height auto !important
 | 
						|
      box-sizing border-box;
 | 
						|
      max-height calc(100vh - 2.7rem)
 | 
						|
      overflow-y auto
 | 
						|
      position absolute
 | 
						|
      top 100%
 | 
						|
      right 0
 | 
						|
      background-color #fff
 | 
						|
      padding 0.6rem 0
 | 
						|
      border 1px solid #ddd
 | 
						|
      border-bottom-color #ccc
 | 
						|
      text-align left
 | 
						|
      border-radius 0.25rem
 | 
						|
      white-space nowrap
 | 
						|
      margin 0
 | 
						|
</style>
 |