diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-06-06 05:18:08 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-06-06 05:18:08 +0900 |
| commit | 69b5de3346377ef2b7e5786e078d870717277084 (patch) | |
| tree | ab30dfac17c3dba53ccfeda11ded39f150257b09 /src/client/app/common/views/components/note-menu.vue | |
| parent | wip (diff) | |
| download | misskey-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.vue | 162 |
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> |