From c4e76b0c8912470efa5484b331b823ee2be4375c Mon Sep 17 00:00:00 2001 From: syuilo <syuilotan@yahoo.co.jp> Date: Fri, 26 May 2017 16:12:52 +0900 Subject: [PATCH] #192 --- src/web/app/mobile/tags/home-timeline.tag | 7 + src/web/app/mobile/tags/index.js | 1 + src/web/app/mobile/tags/init-following.tag | 169 +++++++++++++++++++++ 3 files changed, 177 insertions(+) create mode 100644 src/web/app/mobile/tags/init-following.tag diff --git a/src/web/app/mobile/tags/home-timeline.tag b/src/web/app/mobile/tags/home-timeline.tag index 34cea212b1..c5aeacd4d5 100644 --- a/src/web/app/mobile/tags/home-timeline.tag +++ b/src/web/app/mobile/tags/home-timeline.tag @@ -1,14 +1,21 @@ <mk-home-timeline> + <mk-init-following if={ noFollowing } /> <mk-timeline ref="timeline" init={ init } more={ more } empty={ '%i18n:mobile.tags.mk-home-timeline.empty-timeline%' }></mk-timeline> <style> :scope display block + + > mk-init-following + border-bottom solid 1px #eee + </style> <script> this.mixin('i'); this.mixin('api'); this.mixin('stream'); + this.noFollowing = this.I.following_count == 0; + this.init = new Promise((res, rej) => { this.api('posts/timeline').then(posts => { res(posts); diff --git a/src/web/app/mobile/tags/index.js b/src/web/app/mobile/tags/index.js index 3797e1a159..02d1541fcd 100644 --- a/src/web/app/mobile/tags/index.js +++ b/src/web/app/mobile/tags/index.js @@ -49,3 +49,4 @@ require('./user-preview.tag'); require('./users-list.tag'); require('./user-following.tag'); require('./user-followers.tag'); +require('./init-following.tag'); diff --git a/src/web/app/mobile/tags/init-following.tag b/src/web/app/mobile/tags/init-following.tag new file mode 100644 index 0000000000..e7388972ae --- /dev/null +++ b/src/web/app/mobile/tags/init-following.tag @@ -0,0 +1,169 @@ +<mk-init-following> + <p class="title">気になるユーザーをフォロー:</p> + <div class="users" if={ !fetching && users.length > 0 }> + <div class="user" each={ users }><a class="avatar-anchor" href={ '/' + username }><img class="avatar" src={ avatar_url + '?thumbnail&size=42' } alt=""/></a> + <div class="body"><a class="name" href={ '/' + username } target="_blank">{ name }</a> + <p class="username">@{ username }</p> + </div> + <mk-follow-button user={ this }></mk-follow-button> + </div> + </div> + <p class="empty" if={ !fetching && users.length == 0 }>おすすめのユーザーは見つかりませんでした。</p> + <p class="fetching" if={ fetching }><i class="fa fa-spinner fa-pulse fa-fw"></i>読み込んでいます + <mk-ellipsis></mk-ellipsis> + </p><a class="refresh" onclick={ refresh }>もっと見る</a> + <button class="close" onclick={ close } title="閉じる"><i class="fa fa-times"></i></button> + <style> + :scope + display block + padding 16px + + > .title + margin 0 0 12px 0 + font-size 1em + font-weight bold + color #888 + + > .users + &:after + content "" + display block + clear both + + > .user + padding 16px + width 238px + float left + + &:after + content "" + display block + clear both + + > .avatar-anchor + display block + float left + margin 0 12px 0 0 + + > .avatar + display block + width 42px + height 42px + margin 0 + border-radius 8px + vertical-align bottom + + > .body + float left + width calc(100% - 54px) + + > .name + margin 0 + font-size 16px + line-height 24px + color #555 + + > .username + margin 0 + font-size 15px + line-height 16px + color #ccc + + > mk-follow-button + position absolute + top 16px + right 16px + + > .empty + margin 0 + padding 16px + text-align center + color #aaa + + > .fetching + margin 0 + padding 16px + text-align center + color #aaa + + > i + margin-right 4px + + > .refresh + display block + margin 0 8px 0 0 + text-align right + font-size 0.9em + color #999 + + > .close + cursor pointer + display block + position absolute + top 0 + right 0 + z-index 1 + margin 0 + padding 0 + font-size 1.2em + color #999 + border none + outline none + background transparent + + &:hover + color #555 + + &:active + color #222 + + > i + padding 14px + + </style> + <script> + this.mixin('api'); + + this.users = null; + this.fetching = true; + + this.limit = 6; + this.page = 0; + + this.on('mount', () => { + this.fetch(); + }); + + this.fetch = () => { + this.update({ + fetching: true, + users: null + }); + + this.api('users/recommendation', { + limit: this.limit, + offset: this.limit * this.page + }).then(users => { + this.fetching = false + this.users = users + this.update({ + fetching: false, + users: users + }); + }); + }; + + this.refresh = () => { + if (this.users.length < this.limit) { + this.page = 0; + } else { + this.page++; + } + this.fetch(); + }; + + this.close = () => { + this.unmount(); + }; + </script> +</mk-init-following>