sharkey/src/client/app/desktop/views/components/context-menu.menu.vue

122 lines
2.4 KiB
Vue
Raw Normal View History

2018-02-18 12:35:18 +09:00
<template>
2018-02-20 07:58:21 +09:00
<ul class="menu">
2018-06-08 11:46:45 +09:00
<li v-for="(item, i) in menu" :class="item ? item.type : item === null ? 'divider' : null">
<template v-if="item">
<template v-if="item.type == null || item.type == 'item'">
<p @click="click(item)"><i v-if="item.icon" :class="$style.icon"><fa :icon="item.icon"/></i>{{ item.text }}</p>
2018-06-08 11:46:45 +09:00
</template>
<template v-else-if="item.type == 'link'">
<a :href="item.href" :target="item.target" @click="click(item)"><i v-if="item.icon" :class="$style.icon"><fa :icon="item.icon"/></i>{{ item.text }}</a>
2018-06-08 11:46:45 +09:00
</template>
<template v-else-if="item.type == 'nest'">
<p><i v-if="item.icon" :class="$style.icon"><fa :icon="item.icon"/></i>{{ item.text }}...<span class="caret"><fa icon="caret-right"/></span></p>
2018-06-08 11:46:45 +09:00
<me-nu :menu="item.menu" @x="click"/>
</template>
2018-02-18 12:35:18 +09:00
</template>
</li>
</ul>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
name: 'me-nu',
props: ['menu'],
methods: {
click(item) {
this.$emit('x', item);
}
}
});
</script>
<style lang="stylus" scoped>
2018-09-28 19:59:19 +09:00
.menu
2018-02-18 12:35:18 +09:00
$width = 240px
$item-height = 38px
$padding = 10px
2018-02-18 13:48:40 +09:00
margin 0
padding $padding 0
list-style none
2018-02-18 12:35:18 +09:00
li
display block
2018-02-18 15:27:06 +09:00
&.divider
2018-02-18 12:35:18 +09:00
margin-top $padding
padding-top $padding
2018-09-28 19:59:19 +09:00
border-top solid 1px var(--faceDivider)
2018-02-18 12:35:18 +09:00
&.nest
> p
cursor default
> .caret
2018-02-18 15:27:06 +09:00
position absolute
top 0
right 8px
2018-02-18 12:35:18 +09:00
> *
line-height $item-height
2018-02-18 15:27:06 +09:00
width 28px
text-align center
2018-02-18 12:35:18 +09:00
&:hover > ul
visibility visible
&:active
> p, a
2018-09-26 20:19:35 +09:00
background var(--primary)
2018-02-18 12:35:18 +09:00
> p, a
display block
z-index 1
margin 0
padding 0 32px 0 38px
line-height $item-height
2018-09-28 19:59:19 +09:00
color var(--text)
2018-02-18 12:35:18 +09:00
text-decoration none
cursor pointer
&:hover
text-decoration none
*
pointer-events none
&:hover
> p, a
text-decoration none
2018-09-26 20:19:35 +09:00
background var(--primary)
color var(--primaryForeground)
2018-02-18 12:35:18 +09:00
&:active
> p, a
text-decoration none
2018-09-26 20:19:35 +09:00
background var(--primaryDarken10)
color var(--primaryForeground)
2018-02-18 12:35:18 +09:00
li > ul
visibility hidden
position absolute
top 0
left $width
margin-top -($padding)
width $width
2018-09-28 19:59:19 +09:00
background var(--popupBg)
2018-02-18 12:35:18 +09:00
border-radius 0 4px 4px 4px
2018-04-29 08:51:17 +09:00
box-shadow 2px 2px 8px rgba(#000, 0.2)
2018-02-18 12:35:18 +09:00
transition visibility 0s linear 0.2s
</style>
2018-02-18 15:27:06 +09:00
<style lang="stylus" module>
.icon
display inline-block
width 28px
margin-left -28px
text-align center
2018-02-18 15:27:06 +09:00
</style>