summaryrefslogtreecommitdiff
path: root/src/web
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-02-20 08:14:44 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-02-20 08:14:44 +0900
commit58af12ccc3806fc438733bb43ee3cf1422324b2b (patch)
treef4dc8f5ff44d35c3e2443e95bd6be6cd2cb23f3c /src/web
parentwip (diff)
downloadmisskey-58af12ccc3806fc438733bb43ee3cf1422324b2b.tar.gz
misskey-58af12ccc3806fc438733bb43ee3cf1422324b2b.tar.bz2
misskey-58af12ccc3806fc438733bb43ee3cf1422324b2b.zip
wip
Diffstat (limited to 'src/web')
-rw-r--r--src/web/app/desktop/-tags/big-follow-button.tag153
-rw-r--r--src/web/app/desktop/views/components/follow-button.vue116
2 files changed, 65 insertions, 204 deletions
diff --git a/src/web/app/desktop/-tags/big-follow-button.tag b/src/web/app/desktop/-tags/big-follow-button.tag
deleted file mode 100644
index d8222f92cb..0000000000
--- a/src/web/app/desktop/-tags/big-follow-button.tag
+++ /dev/null
@@ -1,153 +0,0 @@
-<mk-big-follow-button>
- <button :class="{ wait: wait, follow: !user.is_following, unfollow: user.is_following }" v-if="!init" @click="onclick" disabled={ wait } title={ user.is_following ? 'フォロー解除' : 'フォローする' }>
- <span v-if="!wait && user.is_following">%fa:minus%フォロー解除</span>
- <span v-if="!wait && !user.is_following">%fa:plus%フォロー</span>
- <template v-if="wait">%fa:spinner .pulse .fw%</template>
- </button>
- <div class="init" v-if="init">%fa:spinner .pulse .fw%</div>
- <style lang="stylus" scoped>
- :scope
- display block
-
- > button
- > .init
- display block
- cursor pointer
- padding 0
- margin 0
- width 100%
- line-height 38px
- font-size 1em
- outline none
- border-radius 4px
-
- *
- pointer-events none
-
- i
- margin-right 8px
-
- &:focus
- &:after
- content ""
- pointer-events none
- position absolute
- top -5px
- right -5px
- bottom -5px
- left -5px
- border 2px solid rgba($theme-color, 0.3)
- border-radius 8px
-
- &.follow
- color #888
- background linear-gradient(to bottom, #ffffff 0%, #f5f5f5 100%)
- border solid 1px #e2e2e2
-
- &:hover
- background linear-gradient(to bottom, #f9f9f9 0%, #ececec 100%)
- border-color #dcdcdc
-
- &:active
- background #ececec
- border-color #dcdcdc
-
- &.unfollow
- color $theme-color-foreground
- background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
- border solid 1px lighten($theme-color, 15%)
-
- &:not(:disabled)
- font-weight bold
-
- &:hover:not(:disabled)
- background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
- border-color $theme-color
-
- &:active:not(:disabled)
- background $theme-color
- border-color $theme-color
-
- &.wait
- cursor wait !important
- opacity 0.7
-
- </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.$root.$data.os.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.$root.$data.os.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-big-follow-button>
diff --git a/src/web/app/desktop/views/components/follow-button.vue b/src/web/app/desktop/views/components/follow-button.vue
index 4697fb05e1..9056307bbf 100644
--- a/src/web/app/desktop/views/components/follow-button.vue
+++ b/src/web/app/desktop/views/components/follow-button.vue
@@ -1,12 +1,18 @@
<template>
<button class="mk-follow-button"
- :class="{ wait, follow: !user.is_following, unfollow: user.is_following }"
+ :class="{ wait, follow: !user.is_following, unfollow: user.is_following, big: size == 'big' }"
@click="onClick"
:disabled="wait"
:title="user.is_following ? 'フォロー解除' : 'フォローする'"
>
- <template v-if="!wait && user.is_following">%fa:minus%</template>
- <template v-if="!wait && !user.is_following">%fa:plus%</template>
+ <template v-if="!wait && user.is_following">
+ <template v-if="size == 'compact'">%fa:minus%</template>
+ <template v-if="size == 'big'">%fa:minus%フォロー解除</template>
+ </template>
+ <template v-if="!wait && !user.is_following">
+ <template v-if="size == 'compact'">%fa:plus%</template>
+ <template v-if="size == 'big'">%fa:plus%フォロー</template>
+ </template>
<template v-if="wait">%fa:spinner .pulse .fw%</template>
</button>
</template>
@@ -18,6 +24,10 @@ export default Vue.extend({
user: {
type: Object,
required: true
+ },
+ size: {
+ type: String,
+ default: 'compact'
}
},
data() {
@@ -84,65 +94,69 @@ export default Vue.extend({
<style lang="stylus" scoped>
.mk-follow-button
display block
+ cursor pointer
+ padding 0
+ margin 0
+ width 32px
+ height 32px
+ font-size 1em
+ outline none
+ border-radius 4px
- > button
- > .init
- display block
- cursor pointer
- padding 0
- margin 0
- width 32px
- height 32px
- font-size 1em
- outline none
- border-radius 4px
+ *
+ pointer-events none
- *
+ &:focus
+ &:after
+ content ""
pointer-events none
+ position absolute
+ top -5px
+ right -5px
+ bottom -5px
+ left -5px
+ border 2px solid rgba($theme-color, 0.3)
+ border-radius 8px
+
+ &.follow
+ color #888
+ background linear-gradient(to bottom, #ffffff 0%, #f5f5f5 100%)
+ border solid 1px #e2e2e2
- &:focus
- &:after
- content ""
- pointer-events none
- position absolute
- top -5px
- right -5px
- bottom -5px
- left -5px
- border 2px solid rgba($theme-color, 0.3)
- border-radius 8px
+ &:hover
+ background linear-gradient(to bottom, #f9f9f9 0%, #ececec 100%)
+ border-color #dcdcdc
- &.follow
- color #888
- background linear-gradient(to bottom, #ffffff 0%, #f5f5f5 100%)
- border solid 1px #e2e2e2
+ &:active
+ background #ececec
+ border-color #dcdcdc
- &:hover
- background linear-gradient(to bottom, #f9f9f9 0%, #ececec 100%)
- border-color #dcdcdc
+ &.unfollow
+ color $theme-color-foreground
+ background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
+ border solid 1px lighten($theme-color, 15%)
- &:active
- background #ececec
- border-color #dcdcdc
+ &:not(:disabled)
+ font-weight bold
- &.unfollow
- color $theme-color-foreground
- background linear-gradient(to bottom, lighten($theme-color, 25%) 0%, lighten($theme-color, 10%) 100%)
- border solid 1px lighten($theme-color, 15%)
+ &:hover:not(:disabled)
+ background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
+ border-color $theme-color
- &:not(:disabled)
- font-weight bold
+ &:active:not(:disabled)
+ background $theme-color
+ border-color $theme-color
- &:hover:not(:disabled)
- background linear-gradient(to bottom, lighten($theme-color, 8%) 0%, darken($theme-color, 8%) 100%)
- border-color $theme-color
+ &.wait
+ cursor wait !important
+ opacity 0.7
- &:active:not(:disabled)
- background $theme-color
- border-color $theme-color
+ &.big
+ width 100%
+ height 38px
+ line-height 38px
- &.wait
- cursor wait !important
- opacity 0.7
+ i
+ margin-right 8px
</style>