summaryrefslogtreecommitdiff
path: root/src/web
diff options
context:
space:
mode:
authorこぴなたみぽ <syuilotan@yahoo.co.jp>2018-02-15 15:37:25 +0900
committerこぴなたみぽ <syuilotan@yahoo.co.jp>2018-02-15 15:37:25 +0900
commitc5feaf5913041f37ee9b06031e1621ac8ebb15fa (patch)
treead380bfa23e4ceb840c159a9f45a166bf869c9b0 /src/web
parentMerge branch 'vue-#972' of https://github.com/syuilo/misskey into vue-#972 (diff)
downloadmisskey-c5feaf5913041f37ee9b06031e1621ac8ebb15fa.tar.gz
misskey-c5feaf5913041f37ee9b06031e1621ac8ebb15fa.tar.bz2
misskey-c5feaf5913041f37ee9b06031e1621ac8ebb15fa.zip
wip
Diffstat (limited to 'src/web')
-rw-r--r--src/web/app/mobile/tags/follow-button.tag131
-rw-r--r--src/web/app/mobile/views/components/follow-button.vue121
2 files changed, 121 insertions, 131 deletions
diff --git a/src/web/app/mobile/tags/follow-button.tag b/src/web/app/mobile/tags/follow-button.tag
deleted file mode 100644
index c6215a7bac..0000000000
--- a/src/web/app/mobile/tags/follow-button.tag
+++ /dev/null
@@ -1,131 +0,0 @@
-<mk-follow-button>
- <button :class="{ wait: wait, follow: !user.is_following, unfollow: user.is_following }" v-if="!init" @click="onclick" disabled={ wait }>
- <template v-if="!wait && user.is_following">%fa:minus%</template>
- <template v-if="!wait && !user.is_following">%fa:plus%</template>
- <template v-if="wait">%fa:spinner .pulse .fw%</template>{ user.is_following ? '%i18n:mobile.tags.mk-follow-button.unfollow%' : '%i18n:mobile.tags.mk-follow-button.follow%' }
- </button>
- <div class="init" v-if="init">%fa:spinner .pulse .fw%</div>
- <style lang="stylus" scoped>
- :scope
- display block
-
- > button
- > .init
- display block
- user-select none
- cursor pointer
- padding 0 16px
- margin 0
- height inherit
- font-size 16px
- outline none
- border solid 1px $theme-color
- border-radius 4px
-
- *
- pointer-events none
-
- &.follow
- color $theme-color
- background transparent
-
- &:hover
- background rgba($theme-color, 0.1)
-
- &:active
- background rgba($theme-color, 0.2)
-
- &.unfollow
- color $theme-color-foreground
- background $theme-color
-
- &.wait
- cursor wait !important
- opacity 0.7
-
- &.init
- cursor wait !important
- opacity 0.7
-
- > [data-fa]
- margin-right 4px
-
- </style>
- <script lang="typescript">
- import isPromise from '../../common/scripts/is-promise';
-
- this.mixin('i');
- this.mixin('api');
-
- this.mixin('stream');
- this.connection = this.stream.getConnection();
- this.connectionId = this.stream.use();
-
- this.user = null;
- this.userPromise = isPromise(this.opts.user)
- ? this.opts.user
- : Promise.resolve(this.opts.user);
- this.init = true;
- this.wait = false;
-
- this.on('mount', () => {
- this.userPromise.then(user => {
- this.update({
- init: false,
- user: user
- });
- this.connection.on('follow', this.onStreamFollow);
- this.connection.on('unfollow', this.onStreamUnfollow);
- });
- });
-
- this.on('unmount', () => {
- this.connection.off('follow', this.onStreamFollow);
- this.connection.off('unfollow', this.onStreamUnfollow);
- this.stream.dispose(this.connectionId);
- });
-
- this.onStreamFollow = user => {
- if (user.id == this.user.id) {
- this.update({
- user: user
- });
- }
- };
-
- this.onStreamUnfollow = user => {
- if (user.id == this.user.id) {
- this.update({
- user: user
- });
- }
- };
-
- this.onclick = () => {
- this.wait = true;
- if (this.user.is_following) {
- this.api('following/delete', {
- user_id: this.user.id
- }).then(() => {
- this.user.is_following = false;
- }).catch(err => {
- console.error(err);
- }).then(() => {
- this.wait = false;
- this.update();
- });
- } else {
- this.api('following/create', {
- user_id: this.user.id
- }).then(() => {
- this.user.is_following = true;
- }).catch(err => {
- console.error(err);
- }).then(() => {
- this.wait = false;
- this.update();
- });
- }
- };
- </script>
-</mk-follow-button>
diff --git a/src/web/app/mobile/views/components/follow-button.vue b/src/web/app/mobile/views/components/follow-button.vue
new file mode 100644
index 0000000000..455be388c1
--- /dev/null
+++ b/src/web/app/mobile/views/components/follow-button.vue
@@ -0,0 +1,121 @@
+<template>
+<button class="mk-follow-button"
+ :class="{ wait: wait, follow: !user.is_following, unfollow: user.is_following }"
+ @click="onClick"
+ :disabled="wait"
+>
+ <template v-if="!wait && user.is_following">%fa:minus%</template>
+ <template v-if="!wait && !user.is_following">%fa:plus%</template>
+ <template v-if="wait">%fa:spinner .pulse .fw%</template>
+ {{ user.is_following ? '%i18n:mobile.tags.mk-follow-button.unfollow%' : '%i18n:mobile.tags.mk-follow-button.follow%' }}
+</button>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+export default Vue.extend({
+ props: {
+ user: {
+ type: Object,
+ required: true
+ }
+ },
+ data() {
+ return {
+ wait: false,
+ connection: null,
+ connectionId: null
+ };
+ },
+ mounted() {
+ this.connection = this.$root.$data.os.stream.getConnection();
+ this.connectionId = this.$root.$data.os.stream.use();
+
+ this.connection.on('follow', this.onFollow);
+ this.connection.on('unfollow', this.onUnfollow);
+ },
+ beforeDestroy() {
+ this.connection.off('follow', this.onFollow);
+ this.connection.off('unfollow', this.onUnfollow);
+ this.$root.$data.os.stream.dispose(this.connectionId);
+ },
+ methods: {
+
+ onFollow(user) {
+ if (user.id == this.user.id) {
+ this.user.is_following = user.is_following;
+ }
+ },
+
+ onUnfollow(user) {
+ if (user.id == this.user.id) {
+ this.user.is_following = user.is_following;
+ }
+ },
+
+ onClick() {
+ this.wait = true;
+ if (this.user.is_following) {
+ this.api('following/delete', {
+ user_id: this.user.id
+ }).then(() => {
+ this.user.is_following = false;
+ }).catch(err => {
+ console.error(err);
+ }).then(() => {
+ this.wait = false;
+ });
+ } else {
+ this.api('following/create', {
+ user_id: this.user.id
+ }).then(() => {
+ this.user.is_following = true;
+ }).catch(err => {
+ console.error(err);
+ }).then(() => {
+ this.wait = false;
+ });
+ }
+ }
+ }
+});
+</script>
+
+<style lang="stylus" scoped>
+.mk-follow-button
+ display block
+ user-select none
+ cursor pointer
+ padding 0 16px
+ margin 0
+ height inherit
+ font-size 16px
+ outline none
+ border solid 1px $theme-color
+ border-radius 4px
+
+ *
+ pointer-events none
+
+ &.follow
+ color $theme-color
+ background transparent
+
+ &:hover
+ background rgba($theme-color, 0.1)
+
+ &:active
+ background rgba($theme-color, 0.2)
+
+ &.unfollow
+ color $theme-color-foreground
+ background $theme-color
+
+ &.wait
+ cursor wait !important
+ opacity 0.7
+
+ > [data-fa]
+ margin-right 4px
+
+</style>