summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/client/src/components/ui/pagination.vue7
-rw-r--r--packages/client/src/pages/channel-editor.vue34
-rw-r--r--packages/client/src/pages/channel.vue56
-rw-r--r--packages/client/src/pages/channels.vue75
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',