summaryrefslogtreecommitdiff
path: root/src/client/app/desktop/views/components/friends-maker.vue
blob: 4e8a212b00be57affdcc826f2dda5d07d4cabd08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
<template>
<div class="mk-friends-maker">
	<p class="title">%i18n:@title%</p>
	<div class="users" v-if="!fetching && users.length > 0">
		<div class="user" v-for="user in users" :key="user.id">
			<mk-avatar class="avatar" :user="user" target="_blank"/>
			<div class="body">
				<router-link class="name" :to="user | userPage" v-user-preview="user.id">{{ user | userName }}</router-link>
				<p class="username">@{{ user | acct }}</p>
			</div>
			<mk-follow-button :user="user"/>
		</div>
	</div>
	<p class="empty" v-if="!fetching && users.length == 0">%i18n:@empty%</p>
	<p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:@fetching%<mk-ellipsis/></p>
	<a class="refresh" @click="refresh">%i18n:@refresh%</a>
	<button class="close" @click="destroyDom()" title="%i18n:@close%">%fa:times%</button>
</div>
</template>

<script lang="ts">
import Vue from 'vue';

export default Vue.extend({
	data() {
		return {
			users: [],
			fetching: true,
			limit: 6,
			page: 0
		};
	},
	mounted() {
		this.fetch();
	},
	methods: {
		fetch() {
			this.fetching = true;
			this.users = [];

			(this as any).api('users/recommendation', {
				limit: this.limit,
				offset: this.limit * this.page
			}).then(users => {
				this.users = users;
				this.fetching = false;
			});
		},
		refresh() {
			if (this.users.length < this.limit) {
				this.page = 0;
			} else {
				this.page++;
			}
			this.fetch();
		}
	}
});
</script>

<style lang="stylus" scoped>
.mk-friends-maker
	padding 24px

	> .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
				display block
				float left
				margin 0 12px 0 0
				width 42px
				height 42px
				border-radius 8px

			> .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

		> [data-fa]
			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 6px
		right 6px
		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

		> [data-fa]
			padding 14px

</style>