diff options
| -rw-r--r-- | packages/client/src/components/ui/pagination.vue | 7 | ||||
| -rw-r--r-- | packages/client/src/pages/channel-editor.vue | 34 | ||||
| -rw-r--r-- | packages/client/src/pages/channel.vue | 56 | ||||
| -rw-r--r-- | packages/client/src/pages/channels.vue | 75 |
4 files changed, 96 insertions, 76 deletions
diff --git a/packages/client/src/components/ui/pagination.vue b/packages/client/src/components/ui/pagination.vue index 00200efd3c..64af4a54f7 100644 --- a/packages/client/src/components/ui/pagination.vue +++ b/packages/client/src/components/ui/pagination.vue @@ -5,7 +5,12 @@ <MkError v-else-if="error" @retry="init()"/> <div v-else-if="empty" key="_empty_" class="empty"> - <slot name="empty"></slot> + <slot name="empty"> + <div class="_fullinfo"> + <img src="https://xn--931a.moe/assets/info.jpg" class="_ghost"/> + <div>{{ $ts.nothing }}</div> + </div> + </slot> </div> <div v-else class="cxiknjgy"> diff --git a/packages/client/src/pages/channel-editor.vue b/packages/client/src/pages/channel-editor.vue index 67b839bc3d..58c644be62 100644 --- a/packages/client/src/pages/channel-editor.vue +++ b/packages/client/src/pages/channel-editor.vue @@ -1,28 +1,26 @@ <template> -<div> - <div class="_section"> - <div class="_content"> - <MkInput v-model="name"> - <template #label>{{ $ts.name }}</template> - </MkInput> +<MkSpacer :content-max="700"> + <div class="_formRoot"> + <MkInput v-model="name" class="_formBlock"> + <template #label>{{ $ts.name }}</template> + </MkInput> - <MkTextarea v-model="description"> - <template #label>{{ $ts.description }}</template> - </MkTextarea> + <MkTextarea v-model="description" class="_formBlock"> + <template #label>{{ $ts.description }}</template> + </MkTextarea> - <div class="banner"> - <MkButton v-if="bannerId == null" @click="setBannerImage"><i class="fas fa-plus"></i> {{ $ts._channel.setBanner }}</MkButton> - <div v-else-if="bannerUrl"> - <img :src="bannerUrl" style="width: 100%;"/> - <MkButton @click="removeBannerImage()"><i class="fas fa-trash-alt"></i> {{ $ts._channel.removeBanner }}</MkButton> - </div> + <div class="banner"> + <MkButton v-if="bannerId == null" @click="setBannerImage"><i class="fas fa-plus"></i> {{ $ts._channel.setBanner }}</MkButton> + <div v-else-if="bannerUrl"> + <img :src="bannerUrl" style="width: 100%;"/> + <MkButton @click="removeBannerImage()"><i class="fas fa-trash-alt"></i> {{ $ts._channel.removeBanner }}</MkButton> </div> </div> - <div class="_footer"> + <div class="_formBlock"> <MkButton primary @click="save()"><i class="fas fa-save"></i> {{ channelId ? $ts.save : $ts.create }}</MkButton> </div> </div> -</div> +</MkSpacer> </template> <script lang="ts"> @@ -51,9 +49,11 @@ export default defineComponent({ [symbols.PAGE_INFO]: computed(() => this.channelId ? { title: this.$ts._channel.edit, icon: 'fas fa-satellite-dish', + bg: 'var(--bg)', } : { title: this.$ts._channel.create, icon: 'fas fa-satellite-dish', + bg: 'var(--bg)', }), channel: null, name: null, diff --git a/packages/client/src/pages/channel.vue b/packages/client/src/pages/channel.vue index a328eacb07..67ab2d8981 100644 --- a/packages/client/src/pages/channel.vue +++ b/packages/client/src/pages/channel.vue @@ -1,29 +1,31 @@ <template> -<div v-if="channel" class="_section"> - <div class="wpgynlbz _content _panel _gap" :class="{ hide: !showBanner }"> - <XChannelFollowButton :channel="channel" :full="true" class="subscribe"/> - <button class="_button toggle" @click="() => showBanner = !showBanner"> - <template v-if="showBanner"><i class="fas fa-angle-up"></i></template> - <template v-else><i class="fas fa-angle-down"></i></template> - </button> - <div v-if="!showBanner" class="hideOverlay"> - </div> - <div :style="{ backgroundImage: channel.bannerUrl ? `url(${channel.bannerUrl})` : null }" class="banner"> - <div class="status"> - <div><i class="fas fa-users fa-fw"></i><I18n :src="$ts._channel.usersCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.usersCount }}</b></template></I18n></div> - <div><i class="fas fa-pencil-alt fa-fw"></i><I18n :src="$ts._channel.notesCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.notesCount }}</b></template></I18n></div> +<MkSpacer :content-max="700"> + <div v-if="channel"> + <div class="wpgynlbz _panel _gap" :class="{ hide: !showBanner }"> + <XChannelFollowButton :channel="channel" :full="true" class="subscribe"/> + <button class="_button toggle" @click="() => showBanner = !showBanner"> + <template v-if="showBanner"><i class="fas fa-angle-up"></i></template> + <template v-else><i class="fas fa-angle-down"></i></template> + </button> + <div v-if="!showBanner" class="hideOverlay"> + </div> + <div :style="{ backgroundImage: channel.bannerUrl ? `url(${channel.bannerUrl})` : null }" class="banner"> + <div class="status"> + <div><i class="fas fa-users fa-fw"></i><I18n :src="$ts._channel.usersCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.usersCount }}</b></template></I18n></div> + <div><i class="fas fa-pencil-alt fa-fw"></i><I18n :src="$ts._channel.notesCount" tag="span" style="margin-left: 4px;"><template #n><b>{{ channel.notesCount }}</b></template></I18n></div> + </div> + <div class="fade"></div> + </div> + <div v-if="channel.description" class="description"> + <Mfm :text="channel.description" :is-note="false" :i="$i"/> </div> - <div class="fade"></div> - </div> - <div v-if="channel.description" class="description"> - <Mfm :text="channel.description" :is-note="false" :i="$i"/> </div> - </div> - <XPostForm v-if="$i" :channel="channel" class="post-form _content _panel _gap" fixed/> + <XPostForm v-if="$i" :channel="channel" class="post-form _panel _gap" fixed/> - <XTimeline :key="channelId" class="_content _gap" src="channel" :channel="channelId" @before="before" @after="after"/> -</div> + <XTimeline :key="channelId" class="_gap" src="channel" :channel="channelId" @before="before" @after="after"/> + </div> +</MkSpacer> </template> <script lang="ts"> @@ -55,6 +57,12 @@ export default defineComponent({ [symbols.PAGE_INFO]: computed(() => this.channel ? { title: this.channel.name, icon: 'fas fa-satellite-dish', + bg: 'var(--bg)', + actions: [...(this.$i && this.$i.id === this.channel.userId ? [{ + icon: 'fas fa-cog', + text: this.$ts.edit, + handler: this.edit, + }] : [])], } : null), channel: null, showBanner: true, @@ -79,8 +87,10 @@ export default defineComponent({ } }, - created() { - + methods: { + edit() { + this.$router.push(`/channels/${this.channel.id}/edit`); + } }, }); </script> diff --git a/packages/client/src/pages/channels.vue b/packages/client/src/pages/channels.vue index a08c273279..3bc62b5b56 100644 --- a/packages/client/src/pages/channels.vue +++ b/packages/client/src/pages/channels.vue @@ -1,58 +1,63 @@ <template> -<div> - <div v-if="$i" class="_section" style="padding: 0;"> - <MkTab v-model="tab" class="_content"> - <option value="featured"><i class="fas fa-fire-alt"></i> {{ $ts._channel.featured }}</option> - <option value="following"><i class="fas fa-heart"></i> {{ $ts._channel.following }}</option> - <option value="owned"><i class="fas fa-edit"></i> {{ $ts._channel.owned }}</option> - </MkTab> +<MkSpacer :content-max="700"> + <div v-if="tab === 'featured'" class="_content grwlizim featured"> + <MkPagination v-slot="{items}" :pagination="featuredPagination"> + <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> + </MkPagination> </div> - - <div class="_section"> - <div v-if="tab === 'featured'" class="_content grwlizim featured"> - <MkPagination v-slot="{items}" :pagination="featuredPagination"> - <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> - </MkPagination> - </div> - - <div v-if="tab === 'following'" class="_content grwlizim following"> - <MkPagination v-slot="{items}" :pagination="followingPagination"> - <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> - </MkPagination> - </div> - - <div v-if="tab === 'owned'" class="_content grwlizim owned"> - <MkButton class="new" @click="create()"><i class="fas fa-plus"></i></MkButton> - <MkPagination v-slot="{items}" :pagination="ownedPagination"> - <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> - </MkPagination> - </div> + <div v-else-if="tab === 'following'" class="_content grwlizim following"> + <MkPagination v-slot="{items}" :pagination="followingPagination"> + <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> + </MkPagination> </div> -</div> + <div v-else-if="tab === 'owned'" class="_content grwlizim owned"> + <MkButton class="new" @click="create()"><i class="fas fa-plus"></i></MkButton> + <MkPagination v-slot="{items}" :pagination="ownedPagination"> + <MkChannelPreview v-for="channel in items" :key="channel.id" class="_gap" :channel="channel"/> + </MkPagination> + </div> +</MkSpacer> </template> <script lang="ts"> -import { defineComponent } from 'vue'; +import { computed, defineComponent } from 'vue'; import MkChannelPreview from '@/components/channel-preview.vue'; import MkPagination from '@/components/ui/pagination.vue'; import MkButton from '@/components/ui/button.vue'; -import MkTab from '@/components/tab.vue'; import * as symbols from '@/symbols'; export default defineComponent({ components: { - MkChannelPreview, MkPagination, MkButton, MkTab + MkChannelPreview, MkPagination, MkButton, }, data() { return { - [symbols.PAGE_INFO]: { + [symbols.PAGE_INFO]: computed(() => ({ title: this.$ts.channel, icon: 'fas fa-satellite-dish', - action: { + bg: 'var(--bg)', + actions: [{ icon: 'fas fa-plus', + text: this.$ts.create, handler: this.create - } - }, + }], + tabs: [{ + active: this.tab === 'featured', + title: this.$ts._channel.featured, + icon: 'fas fa-fire-alt', + onClick: () => { this.tab = 'featured'; }, + }, { + active: this.tab === 'following', + title: this.$ts._channel.following, + icon: 'fas fa-heart', + onClick: () => { this.tab = 'following'; }, + }, { + active: this.tab === 'owned', + title: this.$ts._channel.owned, + icon: 'fas fa-edit', + onClick: () => { this.tab = 'owned'; }, + },] + })), tab: 'featured', featuredPagination: { endpoint: 'channels/featured', |