summaryrefslogtreecommitdiff
path: root/src/client/app/common/views/components/note-menu.vue
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-06-06 05:18:08 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-06-06 05:18:08 +0900
commit69b5de3346377ef2b7e5786e078d870717277084 (patch)
treeab30dfac17c3dba53ccfeda11ded39f150257b09 /src/client/app/common/views/components/note-menu.vue
parentwip (diff)
downloadmisskey-69b5de3346377ef2b7e5786e078d870717277084.tar.gz
misskey-69b5de3346377ef2b7e5786e078d870717277084.tar.bz2
misskey-69b5de3346377ef2b7e5786e078d870717277084.zip
wip
Diffstat (limited to 'src/client/app/common/views/components/note-menu.vue')
-rw-r--r--src/client/app/common/views/components/note-menu.vue162
1 files changed, 29 insertions, 133 deletions
diff --git a/src/client/app/common/views/components/note-menu.vue b/src/client/app/common/views/components/note-menu.vue
index a400610a2b..951a9ed1d9 100644
--- a/src/client/app/common/views/components/note-menu.vue
+++ b/src/client/app/common/views/components/note-menu.vue
@@ -1,55 +1,41 @@
<template>
-<div class="mk-note-menu">
- <div class="backdrop" ref="backdrop" @click="close"></div>
- <div class="popover" :class="{ compact }" ref="popover">
- <button @click="favorite">%i18n:@favorite%</button>
- <button v-if="note.userId == $store.state.i.id" @click="pin">%i18n:@pin%</button>
- <button v-if="note.userId == $store.state.i.id" @click="del">%i18n:@delete%</button>
- <a v-if="note.uri" :href="note.uri" target="_blank">%i18n:@remote%</a>
- </div>
+<div class="mk-note-menu" style="position:initial">
+ <mk-menu ref="menu" :source="source" :compact="compact" :items="items" @closed="$destroy"/>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
-import * as anime from 'animejs';
export default Vue.extend({
props: ['note', 'source', 'compact'],
- mounted() {
- this.$nextTick(() => {
- const popover = this.$refs.popover as any;
-
- const rect = this.source.getBoundingClientRect();
- const width = popover.offsetWidth;
- const height = popover.offsetHeight;
-
- if (this.compact) {
- const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2);
- const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2);
- popover.style.left = (x - (width / 2)) + 'px';
- popover.style.top = (y - (height / 2)) + 'px';
- } else {
- const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2);
- const y = rect.top + window.pageYOffset + this.source.offsetHeight;
- popover.style.left = (x - (width / 2)) + 'px';
- popover.style.top = y + 'px';
- }
-
- anime({
- targets: this.$refs.backdrop,
- opacity: 1,
- duration: 100,
- easing: 'linear'
+ computed: {
+ items() {
+ const items = [];
+ items.push({
+ content: '%i18n:@favorite%',
+ onClick: this.favorite
});
-
- anime({
- targets: this.$refs.popover,
- opacity: 1,
- scale: [0.5, 1],
- duration: 500
- });
- });
+ if (this.note.userId == this.$store.state.i.id) {
+ items.push({
+ content: '%i18n:@pin%',
+ onClick: this.pin
+ });
+ items.push({
+ content: '%i18n:@delete%',
+ onClick: this.del
+ });
+ }
+ if (this.note.uri) {
+ items.push({
+ content: '%i18n:@remote%',
+ onClick: () => {
+ window.open(this.note.uri, '_blank');
+ }
+ });
+ }
+ return items;
+ }
},
methods: {
pin() {
@@ -78,98 +64,8 @@ export default Vue.extend({
},
close() {
- (this.$refs.backdrop as any).style.pointerEvents = 'none';
- anime({
- targets: this.$refs.backdrop,
- opacity: 0,
- duration: 200,
- easing: 'linear'
- });
-
- (this.$refs.popover as any).style.pointerEvents = 'none';
- anime({
- targets: this.$refs.popover,
- opacity: 0,
- scale: 0.5,
- duration: 200,
- easing: 'easeInBack',
- complete: () => this.$destroy()
- });
+ this.$refs.menu.close();
}
}
});
</script>
-
-<style lang="stylus" scoped>
-@import '~const.styl'
-
-$border-color = rgba(27, 31, 35, 0.15)
-
-.mk-note-menu
- position initial
-
- > .backdrop
- position fixed
- top 0
- left 0
- z-index 10000
- width 100%
- height 100%
- background rgba(#000, 0.1)
- opacity 0
-
- > .popover
- position absolute
- z-index 10001
- padding 8px 0
- background #fff
- border 1px solid $border-color
- border-radius 4px
- box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
- transform scale(0.5)
- opacity 0
-
- $balloon-size = 16px
-
- &:not(.compact)
- margin-top $balloon-size
- transform-origin center -($balloon-size)
-
- &:before
- content ""
- display block
- position absolute
- top -($balloon-size * 2)
- left s('calc(50% - %s)', $balloon-size)
- border-top solid $balloon-size transparent
- border-left solid $balloon-size transparent
- border-right solid $balloon-size transparent
- border-bottom solid $balloon-size $border-color
-
- &:after
- content ""
- display block
- position absolute
- top -($balloon-size * 2) + 1.5px
- left s('calc(50% - %s)', $balloon-size)
- border-top solid $balloon-size transparent
- border-left solid $balloon-size transparent
- border-right solid $balloon-size transparent
- border-bottom solid $balloon-size #fff
-
- > button
- > a
- display block
- padding 8px 16px
- width 100%
-
- &:hover
- color $theme-color-foreground
- background $theme-color
- text-decoration none
-
- &:active
- color $theme-color-foreground
- background darken($theme-color, 10%)
-
-</style>