mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-31 18:08:11 +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> |