f0a29721c9
* wip * Update note.ts * Update timeline.ts * Update core.ts * wip * Update generate-visibility-query.ts * wip * wip * wip * wip * wip * Update global-timeline.ts * wip * wip * wip * Update vote.ts * wip * wip * Update create.ts * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * Update files.ts * wip * wip * Update CONTRIBUTING.md * wip * wip * wip * wip * wip * wip * wip * wip * Update read-notification.ts * wip * wip * wip * wip * wip * wip * wip * Update cancel.ts * wip * wip * wip * Update show.ts * wip * wip * Update gen-id.ts * Update create.ts * Update id.ts * wip * wip * wip * wip * wip * wip * wip * Docker: Update files about Docker (#4599) * Docker: Use cache if files used by `yarn install` was not updated This patch reduces the number of times to installing node_modules. For example, `yarn install` step will be skipped when only ".config/default.yml" is updated. * Docker: Migrate MongoDB to Postgresql Misskey uses Postgresql as a database instead of Mongodb since version 11. * Docker: Uncomment about data persistence This patch will save a lot of databases. * wip * wip * wip * Update activitypub.ts * wip * wip * wip * Update logs.ts * wip * Update drive-file.ts * Update register.ts * wip * wip * Update mentions.ts * wip * wip * wip * Update recommendation.ts * wip * Update index.ts * wip * Update recommendation.ts * Doc: Update docker.ja.md and docker.en.md (#1) (#4608) Update how to set up misskey. * wip * ✌️ * wip * Update note.ts * Update postgre.ts * wip * wip * wip * wip * Update add-file.ts * wip * wip * wip * Clean up * Update logs.ts * wip * 🍕 * wip * Ad notes * wip * Update api-visibility.ts * Update note.ts * Update add-file.ts * tests * tests * Update postgre.ts * Update utils.ts * wip * wip * Refactor * wip * Refactor * wip * wip * Update show-users.ts * Update update-instance.ts * wip * Update feed.ts * Update outbox.ts * Update outbox.ts * Update user.ts * wip * Update list.ts * Update update-hashtag.ts * wip * Update update-hashtag.ts * Refactor * Update update.ts * wip * wip * ✌️ * clean up * docs * Update push.ts * wip * Update api.ts * wip * ✌️ * Update make-pagination-query.ts * ✌️ * Delete hashtags.ts * Update instances.ts * Update instances.ts * Update create.ts * Update search.ts * Update reversi-game.ts * Update signup.ts * Update user.ts * id * Update example.yml * 🎨 * objectid * fix * reversi * reversi * Fix bug of chart engine * Add test of chart engine * Improve test * Better testing * Improve chart engine * Refactor * Add test of chart engine * Refactor * Add chart test * Fix bug * コミットし忘れ * Refactoring * ✌️ * Add tests * Add test * Extarct note tests * Refactor * 存在しないユーザーにメンションできなくなっていた問題を修正 * Fix bug * Update update-meta.ts * Fix bug * Update mention.vue * Fix bug * Update meta.ts * Update CONTRIBUTING.md * Fix bug * Fix bug * Fix bug * Clean up * Clean up * Update notification.ts * Clean up * Add mute tests * Add test * Refactor * Add test * Fix test * Refactor * Refactor * Add tests * Update utils.ts * Update utils.ts * Fix test * Update package.json * Update update.ts * Update manifest.ts * Fix bug * Fix bug * Add test * 🎨 * Update endpoint permissions * Updaye permisison * Update person.ts #4299 * データベースと同期しないように * Fix bug * Fix bug * Update reversi-game.ts * Use a feature of Node v11.7.0 to extract a public key (#4644) * wip * wip * ✌️ * Refactoring #1540 * test * test * test * test * test * test * test * Fix bug * Fix test * 🍣 * wip * #4471 * Add test for #4335 * Refactor * Fix test * Add tests * 🕓 * Fix bug * Add test * Add test * rename * Fix bug
188 lines
4.4 KiB
Vue
188 lines
4.4 KiB
Vue
<template>
|
|
<div>
|
|
<ui-container :show-header="false" v-if="meta && stats">
|
|
<div class="kpdsmpnk" :style="{ backgroundImage: meta.bannerUrl ? `url(${meta.bannerUrl})` : null }">
|
|
<div>
|
|
<router-link to="/explore" class="title">{{ $t('explore', { host: meta.name || 'Misskey' }) }}</router-link>
|
|
<span>{{ $t('users-info', { users: num(stats.originalUsersCount) }) }}</span>
|
|
</div>
|
|
</div>
|
|
</ui-container>
|
|
|
|
<ui-container :body-togglable="true" :expanded="tag == null" ref="tags">
|
|
<template #header><fa :icon="faHashtag" fixed-width/>{{ $t('popular-tags') }}</template>
|
|
|
|
<div class="vxjfqztj">
|
|
<router-link v-for="tag in tagsLocal" :to="`/explore/tags/${tag.name}`" :key="'local:' + tag.name" class="local">{{ tag.name }}</router-link>
|
|
<router-link v-for="tag in tagsRemote" :to="`/explore/tags/${tag.name}`" :key="'remote:' + tag.name">{{ tag.name }}</router-link>
|
|
</div>
|
|
</ui-container>
|
|
|
|
<mk-user-list v-if="tag != null" :make-promise="tagUsers" :key="`${tag}-local`">
|
|
<fa :icon="faHashtag" fixed-width/>{{ tag }}
|
|
</mk-user-list>
|
|
<mk-user-list v-if="tag != null" :make-promise="tagRemoteUsers" :key="`${tag}-remote`">
|
|
<fa :icon="faHashtag" fixed-width/>{{ tag }} ({{ $t('federated') }})
|
|
</mk-user-list>
|
|
|
|
<template v-if="tag == null">
|
|
<mk-user-list :make-promise="verifiedUsers">
|
|
<fa :icon="faBookmark" fixed-width/>{{ $t('verified-users') }}
|
|
</mk-user-list>
|
|
<mk-user-list :make-promise="popularUsers">
|
|
<fa :icon="faChartLine" fixed-width/>{{ $t('popular-users') }}
|
|
</mk-user-list>
|
|
<mk-user-list :make-promise="recentlyUpdatedUsers">
|
|
<fa :icon="faCommentAlt" fixed-width/>{{ $t('recently-updated-users') }}
|
|
</mk-user-list>
|
|
<mk-user-list :make-promise="recentlyRegisteredUsers">
|
|
<fa :icon="faPlus" fixed-width/>{{ $t('recently-registered-users') }}
|
|
</mk-user-list>
|
|
</template>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import Vue from 'vue';
|
|
import i18n from '../../../i18n';
|
|
import { faChartLine, faPlus, faHashtag } from '@fortawesome/free-solid-svg-icons';
|
|
import { faBookmark, faCommentAlt } from '@fortawesome/free-regular-svg-icons';
|
|
|
|
export default Vue.extend({
|
|
i18n: i18n('common/views/pages/explore.vue'),
|
|
|
|
props: {
|
|
tag: {
|
|
type: String,
|
|
required: false
|
|
}
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
verifiedUsers: () => this.$root.api('users', {
|
|
state: 'verified',
|
|
origin: 'local',
|
|
sort: '+follower',
|
|
limit: 10
|
|
}),
|
|
popularUsers: () => this.$root.api('users', {
|
|
state: 'alive',
|
|
origin: 'local',
|
|
sort: '+follower',
|
|
limit: 10
|
|
}),
|
|
recentlyUpdatedUsers: () => this.$root.api('users', {
|
|
origin: 'local',
|
|
sort: '+updatedAt',
|
|
limit: 10
|
|
}),
|
|
recentlyRegisteredUsers: () => this.$root.api('users', {
|
|
origin: 'local',
|
|
state: 'alive',
|
|
sort: '+createdAt',
|
|
limit: 10
|
|
}),
|
|
tagsLocal: [],
|
|
tagsRemote: [],
|
|
stats: null,
|
|
meta: null,
|
|
num: Vue.filter('number'),
|
|
faBookmark, faChartLine, faCommentAlt, faPlus, faHashtag
|
|
};
|
|
},
|
|
|
|
computed: {
|
|
tagUsers(): () => Promise<any> {
|
|
return () => this.$root.api('hashtags/users', {
|
|
tag: this.tag,
|
|
state: 'alive',
|
|
origin: 'local',
|
|
sort: '+follower',
|
|
limit: 30
|
|
});
|
|
},
|
|
|
|
tagRemoteUsers(): () => Promise<any> {
|
|
return () => this.$root.api('hashtags/users', {
|
|
tag: this.tag,
|
|
state: 'alive',
|
|
origin: 'remote',
|
|
sort: '+follower',
|
|
limit: 30
|
|
});
|
|
},
|
|
},
|
|
|
|
watch: {
|
|
tag() {
|
|
if (this.$refs.tags) this.$refs.tags.toggleContent(this.tag == null);
|
|
}
|
|
},
|
|
|
|
created() {
|
|
this.$root.api('hashtags/list', {
|
|
sort: '+attachedLocalUsers',
|
|
attachedToLocalUserOnly: true,
|
|
limit: 30
|
|
}).then(tags => {
|
|
this.tagsLocal = tags;
|
|
});
|
|
this.$root.api('hashtags/list', {
|
|
sort: '+attachedRemoteUsers',
|
|
attachedToRemoteUserOnly: true,
|
|
limit: 30
|
|
}).then(tags => {
|
|
this.tagsRemote = tags;
|
|
});
|
|
this.$root.api('stats').then(stats => {
|
|
this.stats = stats;
|
|
});
|
|
this.$root.getMeta().then(meta => {
|
|
this.meta = meta;
|
|
});
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<style lang="stylus" scoped>
|
|
.vxjfqztj
|
|
padding 16px
|
|
|
|
> *
|
|
margin-right 16px
|
|
|
|
&.local
|
|
font-weight bold
|
|
|
|
.kpdsmpnk
|
|
min-height 100px
|
|
padding 16px
|
|
background-position center
|
|
background-size cover
|
|
|
|
&:before
|
|
content ""
|
|
display block
|
|
position absolute
|
|
top 0
|
|
left 0
|
|
width 100%
|
|
height 100%
|
|
background rgba(0, 0, 0, 0.3)
|
|
|
|
> div
|
|
color #fff
|
|
text-shadow 0 0 8px #00
|
|
|
|
> .title
|
|
display block
|
|
font-size 20px
|
|
font-weight bold
|
|
color inherit
|
|
|
|
> span
|
|
font-size 14px
|
|
opacity 0.8
|
|
|
|
</style>
|