summaryrefslogtreecommitdiff
path: root/src/server/web/app/desktop/views/widgets
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-03-29 20:32:18 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-03-29 20:32:18 +0900
commitcf33e483f7e6f40e8cbbbc0118a7df70bdaf651f (patch)
tree318279530d3392ee40d91968477fc0e78d5cf0f7 /src/server/web/app/desktop/views/widgets
parentUpdate .travis.yml (diff)
downloadmisskey-cf33e483f7e6f40e8cbbbc0118a7df70bdaf651f.tar.gz
misskey-cf33e483f7e6f40e8cbbbc0118a7df70bdaf651f.tar.bz2
misskey-cf33e483f7e6f40e8cbbbc0118a7df70bdaf651f.zip
整理した
Diffstat (limited to 'src/server/web/app/desktop/views/widgets')
-rw-r--r--src/server/web/app/desktop/views/widgets/activity.vue31
-rw-r--r--src/server/web/app/desktop/views/widgets/channel.channel.form.vue67
-rw-r--r--src/server/web/app/desktop/views/widgets/channel.channel.post.vue71
-rw-r--r--src/server/web/app/desktop/views/widgets/channel.channel.vue106
-rw-r--r--src/server/web/app/desktop/views/widgets/channel.vue107
-rw-r--r--src/server/web/app/desktop/views/widgets/index.ts23
-rw-r--r--src/server/web/app/desktop/views/widgets/messaging.vue59
-rw-r--r--src/server/web/app/desktop/views/widgets/notifications.vue70
-rw-r--r--src/server/web/app/desktop/views/widgets/polls.vue129
-rw-r--r--src/server/web/app/desktop/views/widgets/post-form.vue111
-rw-r--r--src/server/web/app/desktop/views/widgets/profile.vue125
-rw-r--r--src/server/web/app/desktop/views/widgets/timemachine.vue28
-rw-r--r--src/server/web/app/desktop/views/widgets/trends.vue135
-rw-r--r--src/server/web/app/desktop/views/widgets/users.vue172
14 files changed, 0 insertions, 1234 deletions
diff --git a/src/server/web/app/desktop/views/widgets/activity.vue b/src/server/web/app/desktop/views/widgets/activity.vue
deleted file mode 100644
index 0bdf4622af..0000000000
--- a/src/server/web/app/desktop/views/widgets/activity.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-<template>
-<mk-activity
- :design="props.design"
- :init-view="props.view"
- :user="os.i"
- @view-changed="viewChanged"/>
-</template>
-
-<script lang="ts">
-import define from '../../../common/define-widget';
-export default define({
- name: 'activity',
- props: () => ({
- design: 0,
- view: 0
- })
-}).extend({
- methods: {
- func() {
- if (this.props.design == 2) {
- this.props.design = 0;
- } else {
- this.props.design++;
- }
- },
- viewChanged(view) {
- this.props.view = view;
- }
- }
-});
-</script>
diff --git a/src/server/web/app/desktop/views/widgets/channel.channel.form.vue b/src/server/web/app/desktop/views/widgets/channel.channel.form.vue
deleted file mode 100644
index aaf327f1ef..0000000000
--- a/src/server/web/app/desktop/views/widgets/channel.channel.form.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-<template>
-<div class="form">
- <input v-model="text" :disabled="wait" @keydown="onKeydown" placeholder="書いて">
-</div>
-</template>
-
-<script lang="ts">
-import Vue from 'vue';
-export default Vue.extend({
- data() {
- return {
- text: '',
- wait: false
- };
- },
- methods: {
- onKeydown(e) {
- if (e.which == 10 || e.which == 13) this.post();
- },
- post() {
- this.wait = true;
-
- let reply = null;
-
- if (/^>>([0-9]+) /.test(this.text)) {
- const index = this.text.match(/^>>([0-9]+) /)[1];
- reply = (this.$parent as any).posts.find(p => p.index.toString() == index);
- this.text = this.text.replace(/^>>([0-9]+) /, '');
- }
-
- (this as any).api('posts/create', {
- text: this.text,
- replyId: reply ? reply.id : undefined,
- channelId: (this.$parent as any).channel.id
- }).then(data => {
- this.text = '';
- }).catch(err => {
- alert('失敗した');
- }).then(() => {
- this.wait = false;
- });
- }
- }
-});
-</script>
-
-<style lang="stylus" scoped>
-.form
- width 100%
- height 38px
- padding 4px
- border-top solid 1px #ddd
-
- > input
- padding 0 8px
- width 100%
- height 100%
- font-size 14px
- color #55595c
- border solid 1px #dadada
- border-radius 4px
-
- &:hover
- &:focus
- border-color #aeaeae
-
-</style>
diff --git a/src/server/web/app/desktop/views/widgets/channel.channel.post.vue b/src/server/web/app/desktop/views/widgets/channel.channel.post.vue
deleted file mode 100644
index 433f9a00aa..0000000000
--- a/src/server/web/app/desktop/views/widgets/channel.channel.post.vue
+++ /dev/null
@@ -1,71 +0,0 @@
-<template>
-<div class="post">
- <header>
- <a class="index" @click="reply">{{ post.index }}:</a>
- <router-link class="name" :to="`/@${acct}`" v-user-preview="post.user.id"><b>{{ post.user.name }}</b></router-link>
- <span>ID:<i>{{ acct }}</i></span>
- </header>
- <div>
- <a v-if="post.reply">&gt;&gt;{{ post.reply.index }}</a>
- {{ post.text }}
- <div class="media" v-if="post.media">
- <a v-for="file in post.media" :href="file.url" target="_blank">
- <img :src="`${file.url}?thumbnail&size=512`" :alt="file.name" :title="file.name"/>
- </a>
- </div>
- </div>
-</div>
-</template>
-
-<script lang="ts">
-import Vue from 'vue';
-import getAcct from '../../../../../common/user/get-acct';
-
-export default Vue.extend({
- props: ['post'],
- computed: {
- acct() {
- return getAcct(this.post.user);
- }
- },
- methods: {
- reply() {
- this.$emit('reply', this.post);
- }
- }
-});
-</script>
-
-<style lang="stylus" scoped>
-.post
- margin 0
- padding 0
- color #444
-
- > header
- position -webkit-sticky
- position sticky
- z-index 1
- top 0
- padding 8px 4px 4px 16px
- background rgba(255, 255, 255, 0.9)
-
- > .index
- margin-right 0.25em
-
- > .name
- margin-right 0.5em
- color #008000
-
- > div
- padding 0 16px 16px 16px
-
- > .media
- > a
- display inline-block
-
- > img
- max-width 100%
- vertical-align bottom
-
-</style>
diff --git a/src/server/web/app/desktop/views/widgets/channel.channel.vue b/src/server/web/app/desktop/views/widgets/channel.channel.vue
deleted file mode 100644
index e9fb9e3fd7..0000000000
--- a/src/server/web/app/desktop/views/widgets/channel.channel.vue
+++ /dev/null
@@ -1,106 +0,0 @@
-<template>
-<div class="channel">
- <p v-if="fetching">読み込み中<mk-ellipsis/></p>
- <div v-if="!fetching" ref="posts" class="posts">
- <p v-if="posts.length == 0">まだ投稿がありません</p>
- <x-post class="post" v-for="post in posts.slice().reverse()" :post="post" :key="post.id" @reply="reply"/>
- </div>
- <x-form class="form" ref="form"/>
-</div>
-</template>
-
-<script lang="ts">
-import Vue from 'vue';
-import ChannelStream from '../../../common/scripts/streaming/channel';
-import XForm from './channel.channel.form.vue';
-import XPost from './channel.channel.post.vue';
-
-export default Vue.extend({
- components: {
- XForm,
- XPost
- },
- props: ['channel'],
- data() {
- return {
- fetching: true,
- posts: [],
- connection: null
- };
- },
- watch: {
- channel() {
- this.zap();
- }
- },
- mounted() {
- this.zap();
- },
- beforeDestroy() {
- this.disconnect();
- },
- methods: {
- zap() {
- this.fetching = true;
-
- (this as any).api('channels/posts', {
- channelId: this.channel.id
- }).then(posts => {
- this.posts = posts;
- this.fetching = false;
-
- this.$nextTick(() => {
- this.scrollToBottom();
- });
-
- this.disconnect();
- this.connection = new ChannelStream((this as any).os, this.channel.id);
- this.connection.on('post', this.onPost);
- });
- },
- disconnect() {
- if (this.connection) {
- this.connection.off('post', this.onPost);
- this.connection.close();
- }
- },
- onPost(post) {
- this.posts.unshift(post);
- this.scrollToBottom();
- },
- scrollToBottom() {
- (this.$refs.posts as any).scrollTop = (this.$refs.posts as any).scrollHeight;
- },
- reply(post) {
- (this.$refs.form as any).text = `>>${ post.index } `;
- }
- }
-});
-</script>
-
-<style lang="stylus" scoped>
-.channel
-
- > p
- margin 0
- padding 16px
- text-align center
- color #aaa
-
- > .posts
- height calc(100% - 38px)
- overflow auto
- font-size 0.9em
-
- > .post
- border-bottom solid 1px #eee
-
- &:last-child
- border-bottom none
-
- > .form
- position absolute
- left 0
- bottom 0
-
-</style>
diff --git a/src/server/web/app/desktop/views/widgets/channel.vue b/src/server/web/app/desktop/views/widgets/channel.vue
deleted file mode 100644
index c9b62dfeab..0000000000
--- a/src/server/web/app/desktop/views/widgets/channel.vue
+++ /dev/null
@@ -1,107 +0,0 @@
-<template>
-<div class="mkw-channel">
- <template v-if="!props.compact">
- <p class="title">%fa:tv%{{ channel ? channel.title : '%i18n:desktop.tags.mk-channel-home-widget.title%' }}</p>
- <button @click="settings" title="%i18n:desktop.tags.mk-channel-home-widget.settings%">%fa:cog%</button>
- </template>
- <p class="get-started" v-if="props.channel == null">%i18n:desktop.tags.mk-channel-home-widget.get-started%</p>
- <x-channel class="channel" :channel="channel" v-if="channel != null"/>
-</div>
-</template>
-
-<script lang="ts">
-import define from '../../../common/define-widget';
-import XChannel from './channel.channel.vue';
-
-export default define({
- name: 'server',
- props: () => ({
- channel: null,
- compact: false
- })
-}).extend({
- components: {
- XChannel
- },
- data() {
- return {
- fetching: true,
- channel: null
- };
- },
- mounted() {
- if (this.props.channel) {
- this.zap();
- }
- },
- methods: {
- func() {
- this.props.compact = !this.props.compact;
- },
- settings() {
- const id = window.prompt('チャンネルID');
- if (!id) return;
- this.props.channel = id;
- this.zap();
- },
- zap() {
- this.fetching = true;
-
- (this as any).api('channels/show', {
- channelId: this.props.channel
- }).then(channel => {
- this.channel = channel;
- this.fetching = false;
- });
- }
- }
-});
-</script>
-
-<style lang="stylus" scoped>
-.mkw-channel
- background #fff
- border solid 1px rgba(0, 0, 0, 0.075)
- border-radius 6px
- overflow hidden
-
- > .title
- z-index 2
- margin 0
- padding 0 16px
- line-height 42px
- font-size 0.9em
- font-weight bold
- color #888
- box-shadow 0 1px rgba(0, 0, 0, 0.07)
-
- > [data-fa]
- margin-right 4px
-
- > button
- position absolute
- z-index 2
- top 0
- right 0
- padding 0
- width 42px
- font-size 0.9em
- line-height 42px
- color #ccc
-
- &:hover
- color #aaa
-
- &:active
- color #999
-
- > .get-started
- margin 0
- padding 16px
- text-align center
- color #aaa
-
- > .channel
- height 200px
-
-</style>
diff --git a/src/server/web/app/desktop/views/widgets/index.ts b/src/server/web/app/desktop/views/widgets/index.ts
deleted file mode 100644
index 77d771d6b3..0000000000
--- a/src/server/web/app/desktop/views/widgets/index.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import Vue from 'vue';
-
-import wNotifications from './notifications.vue';
-import wTimemachine from './timemachine.vue';
-import wActivity from './activity.vue';
-import wTrends from './trends.vue';
-import wUsers from './users.vue';
-import wPolls from './polls.vue';
-import wPostForm from './post-form.vue';
-import wMessaging from './messaging.vue';
-import wChannel from './channel.vue';
-import wProfile from './profile.vue';
-
-Vue.component('mkw-notifications', wNotifications);
-Vue.component('mkw-timemachine', wTimemachine);
-Vue.component('mkw-activity', wActivity);
-Vue.component('mkw-trends', wTrends);
-Vue.component('mkw-users', wUsers);
-Vue.component('mkw-polls', wPolls);
-Vue.component('mkw-post-form', wPostForm);
-Vue.component('mkw-messaging', wMessaging);
-Vue.component('mkw-channel', wChannel);
-Vue.component('mkw-profile', wProfile);
diff --git a/src/server/web/app/desktop/views/widgets/messaging.vue b/src/server/web/app/desktop/views/widgets/messaging.vue
deleted file mode 100644
index 2c9f473bd1..0000000000
--- a/src/server/web/app/desktop/views/widgets/messaging.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-<div class="mkw-messaging">
- <p class="title" v-if="props.design == 0">%fa:comments%%i18n:desktop.tags.mk-messaging-home-widget.title%</p>
- <mk-messaging ref="index" compact @navigate="navigate"/>
-</div>
-</template>
-
-<script lang="ts">
-import define from '../../../common/define-widget';
-import MkMessagingRoomWindow from '../components/messaging-room-window.vue';
-
-export default define({
- name: 'messaging',
- props: () => ({
- design: 0
- })
-}).extend({
- methods: {
- navigate(user) {
- (this as any).os.new(MkMessagingRoomWindow, {
- user: user
- });
- },
- func() {
- if (this.props.design == 1) {
- this.props.design = 0;
- } else {
- this.props.design++;
- }
- }
- }
-});
-</script>
-
-<style lang="stylus" scoped>
-.mkw-messaging
- overflow hidden
- background #fff
- border solid 1px rgba(0, 0, 0, 0.075)
- border-radius 6px
-
- > .title
- z-index 2
- margin 0
- padding 0 16px
- line-height 42px
- font-size 0.9em
- font-weight bold
- color #888
- box-shadow 0 1px rgba(0, 0, 0, 0.07)
-
- > [data-fa]
- margin-right 4px
-
- > .mk-messaging
- max-height 250px
- overflow auto
-
-</style>
diff --git a/src/server/web/app/desktop/views/widgets/notifications.vue b/src/server/web/app/desktop/views/widgets/notifications.vue
deleted file mode 100644
index 1a2b3d3f89..0000000000
--- a/src/server/web/app/desktop/views/widgets/notifications.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-<div class="mkw-notifications">
- <template v-if="!props.compact">
- <p class="title">%fa:R bell%%i18n:desktop.tags.mk-notifications-home-widget.title%</p>
- <button @click="settings" title="%i18n:desktop.tags.mk-notifications-home-widget.settings%">%fa:cog%</button>
- </template>
- <mk-notifications/>
-</div>
-</template>
-
-<script lang="ts">
-import define from '../../../common/define-widget';
-export default define({
- name: 'notifications',
- props: () => ({
- compact: false
- })
-}).extend({
- methods: {
- settings() {
- alert('not implemented yet');
- },
- func() {
- this.props.compact = !this.props.compact;
- }
- }
-});
-</script>
-
-<style lang="stylus" scoped>
-.mkw-notifications
- background #fff
- border solid 1px rgba(0, 0, 0, 0.075)
- border-radius 6px
-
- > .title
- z-index 1
- margin 0
- padding 0 16px
- line-height 42px
- font-size 0.9em
- font-weight bold
- color #888
- box-shadow 0 1px rgba(0, 0, 0, 0.07)
-
- > [data-fa]
- margin-right 4px
-
- > button
- position absolute
- z-index 2
- top 0
- right 0
- padding 0
- width 42px
- font-size 0.9em
- line-height 42px
- color #ccc
-
- &:hover
- color #aaa
-
- &:active
- color #999
-
- > .mk-notifications
- max-height 300px
- overflow auto
-
-</style>
diff --git a/src/server/web/app/desktop/views/widgets/polls.vue b/src/server/web/app/desktop/views/widgets/polls.vue
deleted file mode 100644
index e5db34fc7a..0000000000
--- a/src/server/web/app/desktop/views/widgets/polls.vue
+++ /dev/null
@@ -1,129 +0,0 @@
-<template>
-<div class="mkw-polls">
- <template v-if="!props.compact">
- <p class="title">%fa:chart-pie%%i18n:desktop.tags.mk-recommended-polls-home-widget.title%</p>
- <button @click="fetch" title="%i18n:desktop.tags.mk-recommended-polls-home-widget.refresh%">%fa:sync%</button>
- </template>
- <div class="poll" v-if="!fetching && poll != null">
- <p v-if="poll.text"><router-link to="`/@${ acct }/${ poll.id }`">{{ poll.text }}</router-link></p>
- <p v-if="!poll.text"><router-link to="`/@${ acct }/${ poll.id }`">%fa:link%</router-link></p>
- <mk-poll :post="poll"/>
- </div>
- <p class="empty" v-if="!fetching && poll == null">%i18n:desktop.tags.mk-recommended-polls-home-widget.nothing%</p>
- <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
-</div>
-</template>
-
-<script lang="ts">
-import define from '../../../common/define-widget';
-import getAcct from '../../../../../common/user/get-acct';
-
-export default define({
- name: 'polls',
- props: () => ({
- compact: false
- })
-}).extend({
- computed: {
- acct() {
- return getAcct(this.poll.user);
- },
- },
- data() {
- return {
- poll: null,
- fetching: true,
- offset: 0
- };
- },
- mounted() {
- this.fetch();
- },
- methods: {
- func() {
- this.props.compact = !this.props.compact;
- },
- fetch() {
- this.fetching = true;
- this.poll = null;
-
- (this as any).api('posts/polls/recommendation', {
- limit: 1,
- offset: this.offset
- }).then(posts => {
- const poll = posts ? posts[0] : null;
- if (poll == null) {
- this.offset = 0;
- } else {
- this.offset++;
- }
- this.poll = poll;
- this.fetching = false;
- });
- }
- }
-});
-</script>
-
-<style lang="stylus" scoped>
-.mkw-polls
- background #fff
- border solid 1px rgba(0, 0, 0, 0.075)
- border-radius 6px
-
- > .title
- margin 0
- padding 0 16px
- line-height 42px
- font-size 0.9em
- font-weight bold
- color #888
- border-bottom solid 1px #eee
-
- > [data-fa]
- margin-right 4px
-
- > button
- position absolute
- z-index 2
- top 0
- right 0
- padding 0
- width 42px
- font-size 0.9em
- line-height 42px
- color #ccc
-
- &:hover
- color #aaa
-
- &:active
- color #999
-
- > .poll
- padding 16px
- font-size 12px
- color #555
-
- > p
- margin 0 0 8px 0
-
- > a
- color inherit
-
- > .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
-
-</style>
diff --git a/src/server/web/app/desktop/views/widgets/post-form.vue b/src/server/web/app/desktop/views/widgets/post-form.vue
deleted file mode 100644
index cf7fd1f2b2..0000000000
--- a/src/server/web/app/desktop/views/widgets/post-form.vue
+++ /dev/null
@@ -1,111 +0,0 @@
-<template>
-<div class="mkw-post-form">
- <template v-if="props.design == 0">
- <p class="title">%fa:pencil-alt%%i18n:desktop.tags.mk-post-form-home-widget.title%</p>
- </template>
- <textarea :disabled="posting" v-model="text" @keydown="onKeydown" placeholder="%i18n:desktop.tags.mk-post-form-home-widget.placeholder%"></textarea>
- <button @click="post" :disabled="posting">%i18n:desktop.tags.mk-post-form-home-widget.post%</button>
-</div>
-</template>
-
-<script lang="ts">
-import define from '../../../common/define-widget';
-export default define({
- name: 'post-form',
- props: () => ({
- design: 0
- })
-}).extend({
- data() {
- return {
- posting: false,
- text: ''
- };
- },
- methods: {
- func() {
- if (this.props.design == 1) {
- this.props.design = 0;
- } else {
- this.props.design++;
- }
- },
- onKeydown(e) {
- if ((e.which == 10 || e.which == 13) && (e.ctrlKey || e.metaKey)) this.post();
- },
- post() {
- this.posting = true;
-
- (this as any).api('posts/create', {
- text: this.text
- }).then(data => {
- this.clear();
- }).catch(err => {
- alert('失敗した');
- }).then(() => {
- this.posting = false;
- });
- },
- clear() {
- this.text = '';
- }
- }
-});
-</script>
-
-<style lang="stylus" scoped>
-@import '~const.styl'
-
-.mkw-post-form
- background #fff
- overflow hidden
- border solid 1px rgba(0, 0, 0, 0.075)
- border-radius 6px
-
- > .title
- z-index 1
- margin 0
- padding 0 16px
- line-height 42px
- font-size 0.9em
- font-weight bold
- color #888
- box-shadow 0 1px rgba(0, 0, 0, 0.07)
-
- > [data-fa]
- margin-right 4px
-
- > textarea
- display block
- width 100%
- max-width 100%
- min-width 100%
- padding 16px
- margin-bottom 28px + 16px
- border none
- border-bottom solid 1px #eee
-
- > button
- display block
- position absolute
- bottom 8px
- right 8px
- margin 0
- padding 0 10px
- height 28px
- color $theme-color-foreground
- background $theme-color !important
- outline none
- border none
- border-radius 4px
- transition background 0.1s ease
- cursor pointer
-
- &:hover
- background lighten($theme-color, 10%) !important
-
- &:active
- background darken($theme-color, 10%) !important
- transition background 0s ease
-
-</style>
diff --git a/src/server/web/app/desktop/views/widgets/profile.vue b/src/server/web/app/desktop/views/widgets/profile.vue
deleted file mode 100644
index 83cd67b50c..0000000000
--- a/src/server/web/app/desktop/views/widgets/profile.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-<div class="mkw-profile"
- :data-compact="props.design == 1 || props.design == 2"
- :data-melt="props.design == 2"
->
- <div class="banner"
- :style="os.i.bannerUrl ? `background-image: url(${os.i.bannerUrl}?thumbnail&size=256)` : ''"
- title="クリックでバナー編集"
- @click="os.apis.updateBanner"
- ></div>
- <img class="avatar"
- :src="`${os.i.avatarUrl}?thumbnail&size=96`"
- @click="os.apis.updateAvatar"
- alt="avatar"
- title="クリックでアバター編集"
- v-user-preview="os.i.id"
- />
- <router-link class="name" :to="`/@${os.i.username}`">{{ os.i.name }}</router-link>
- <p class="username">@{{ os.i.username }}</p>
-</div>
-</template>
-
-<script lang="ts">
-import define from '../../../common/define-widget';
-export default define({
- name: 'profile',
- props: () => ({
- design: 0
- })
-}).extend({
- methods: {
- func() {
- if (this.props.design == 2) {
- this.props.design = 0;
- } else {
- this.props.design++;
- }
- }
- }
-});
-</script>
-
-<style lang="stylus" scoped>
-.mkw-profile
- overflow hidden
- background #fff
- border solid 1px rgba(0, 0, 0, 0.075)
- border-radius 6px
-
- &[data-compact]
- > .banner:before
- content ""
- display block
- width 100%
- height 100%
- background rgba(0, 0, 0, 0.5)
-
- > .avatar
- top ((100px - 58px) / 2)
- left ((100px - 58px) / 2)
- border none
- border-radius 100%
- box-shadow 0 0 16px rgba(0, 0, 0, 0.5)
-
- > .name
- position absolute
- top 0
- left 92px
- margin 0
- line-height 100px
- color #fff
- text-shadow 0 0 8px rgba(0, 0, 0, 0.5)
-
- > .username
- display none
-
- &[data-melt]
- background transparent !important
- border none !important
-
- > .banner
- visibility hidden
-
- > .avatar
- box-shadow none
-
- > .name
- color #666
- text-shadow none
-
- > .banner
- height 100px
- background-color #f5f5f5
- background-size cover
- background-position center
- cursor pointer
-
- > .avatar
- display block
- position absolute
- top 76px
- left 16px
- width 58px
- height 58px
- margin 0
- border solid 3px #fff
- border-radius 8px
- vertical-align bottom
- cursor pointer
-
- > .name
- display block
- margin 10px 0 0 84px
- line-height 16px
- font-weight bold
- color #555
-
- > .username
- display block
- margin 4px 0 8px 84px
- line-height 16px
- font-size 0.9em
- color #999
-
-</style>
diff --git a/src/server/web/app/desktop/views/widgets/timemachine.vue b/src/server/web/app/desktop/views/widgets/timemachine.vue
deleted file mode 100644
index 6db3b14c62..0000000000
--- a/src/server/web/app/desktop/views/widgets/timemachine.vue
+++ /dev/null
@@ -1,28 +0,0 @@
-<template>
-<div class="mkw-timemachine">
- <mk-calendar :design="props.design" @chosen="chosen"/>
-</div>
-</template>
-
-<script lang="ts">
-import define from '../../../common/define-widget';
-export default define({
- name: 'timemachine',
- props: () => ({
- design: 0
- })
-}).extend({
- methods: {
- chosen(date) {
- this.$emit('chosen', date);
- },
- func() {
- if (this.props.design == 5) {
- this.props.design = 0;
- } else {
- this.props.design++;
- }
- }
- }
-});
-</script>
diff --git a/src/server/web/app/desktop/views/widgets/trends.vue b/src/server/web/app/desktop/views/widgets/trends.vue
deleted file mode 100644
index 77779787ee..0000000000
--- a/src/server/web/app/desktop/views/widgets/trends.vue
+++ /dev/null
@@ -1,135 +0,0 @@
-<template>
-<div class="mkw-trends">
- <template v-if="!props.compact">
- <p class="title">%fa:fire%%i18n:desktop.tags.mk-trends-home-widget.title%</p>
- <button @click="fetch" title="%i18n:desktop.tags.mk-trends-home-widget.refresh%">%fa:sync%</button>
- </template>
- <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
- <div class="post" v-else-if="post != null">
- <p class="text"><router-link :to="`/@${ acct }/${ post.id }`">{{ post.text }}</router-link></p>
- <p class="author">―<router-link :to="`/@${ acct }`">@{{ acct }}</router-link></p>
- </div>
- <p class="empty" v-else>%i18n:desktop.tags.mk-trends-home-widget.nothing%</p>
-</div>
-</template>
-
-<script lang="ts">
-import define from '../../../common/define-widget';
-import getAcct from '../../../../../common/user/get-acct';
-
-export default define({
- name: 'trends',
- props: () => ({
- compact: false
- })
-}).extend({
- computed: {
- acct() {
- return getAcct(this.post.user);
- },
- },
- data() {
- return {
- post: null,
- fetching: true,
- offset: 0
- };
- },
- mounted() {
- this.fetch();
- },
- methods: {
- func() {
- this.props.compact = !this.props.compact;
- },
- fetch() {
- this.fetching = true;
- this.post = null;
-
- (this as any).api('posts/trend', {
- limit: 1,
- offset: this.offset,
- repost: false,
- reply: false,
- media: false,
- poll: false
- }).then(posts => {
- const post = posts ? posts[0] : null;
- if (post == null) {
- this.offset = 0;
- } else {
- this.offset++;
- }
- this.post = post;
- this.fetching = false;
- });
- }
- }
-});
-</script>
-
-<style lang="stylus" scoped>
-.mkw-trends
- background #fff
- border solid 1px rgba(0, 0, 0, 0.075)
- border-radius 6px
-
- > .title
- margin 0
- padding 0 16px
- line-height 42px
- font-size 0.9em
- font-weight bold
- color #888
- border-bottom solid 1px #eee
-
- > [data-fa]
- margin-right 4px
-
- > button
- position absolute
- z-index 2
- top 0
- right 0
- padding 0
- width 42px
- font-size 0.9em
- line-height 42px
- color #ccc
-
- &:hover
- color #aaa
-
- &:active
- color #999
-
- > .post
- padding 16px
- font-size 12px
- font-style oblique
- color #555
-
- > p
- margin 0
-
- > .text,
- > .author
- > a
- color inherit
-
- > .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
-
-</style>
diff --git a/src/server/web/app/desktop/views/widgets/users.vue b/src/server/web/app/desktop/views/widgets/users.vue
deleted file mode 100644
index 7b89441126..0000000000
--- a/src/server/web/app/desktop/views/widgets/users.vue
+++ /dev/null
@@ -1,172 +0,0 @@
-<template>
-<div class="mkw-users">
- <template v-if="!props.compact">
- <p class="title">%fa:users%%i18n:desktop.tags.mk-user-recommendation-home-widget.title%</p>
- <button @click="refresh" title="%i18n:desktop.tags.mk-user-recommendation-home-widget.refresh%">%fa:sync%</button>
- </template>
- <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
- <template v-else-if="users.length != 0">
- <div class="user" v-for="_user in users">
- <router-link class="avatar-anchor" :to="`/@${getAcct(_user)}`">
- <img class="avatar" :src="`${_user.avatarUrl}?thumbnail&size=42`" alt="" v-user-preview="_user.id"/>
- </router-link>
- <div class="body">
- <router-link class="name" :to="`/@${getAcct(_user)}`" v-user-preview="_user.id">{{ _user.name }}</router-link>
- <p class="username">@{{ getAcct(_user) }}</p>
- </div>
- <mk-follow-button :user="_user"/>
- </div>
- </template>
- <p class="empty" v-else>%i18n:desktop.tags.mk-user-recommendation-home-widget.no-one%</p>
-</div>
-</template>
-
-<script lang="ts">
-import define from '../../../common/define-widget';
-import getAcct from '../../../../../common/user/get-acct';
-
-const limit = 3;
-
-export default define({
- name: 'users',
- props: () => ({
- compact: false
- })
-}).extend({
- data() {
- return {
- users: [],
- fetching: true,
- page: 0
- };
- },
- mounted() {
- this.fetch();
- },
- methods: {
- getAcct,
- func() {
- this.props.compact = !this.props.compact;
- },
- fetch() {
- this.fetching = true;
- this.users = [];
-
- (this as any).api('users/recommendation', {
- limit: limit,
- offset: limit * this.page
- }).then(users => {
- this.users = users;
- this.fetching = false;
- });
- },
- refresh() {
- if (this.users.length < limit) {
- this.page = 0;
- } else {
- this.page++;
- }
- this.fetch();
- }
- }
-});
-</script>
-
-<style lang="stylus" scoped>
-.mkw-users
- background #fff
- border solid 1px rgba(0, 0, 0, 0.075)
- border-radius 6px
-
- > .title
- margin 0
- padding 0 16px
- line-height 42px
- font-size 0.9em
- font-weight bold
- color #888
- border-bottom solid 1px #eee
-
- > [data-fa]
- margin-right 4px
-
- > button
- position absolute
- z-index 2
- top 0
- right 0
- padding 0
- width 42px
- font-size 0.9em
- line-height 42px
- color #ccc
-
- &:hover
- color #aaa
-
- &:active
- color #999
-
- > .user
- padding 16px
- border-bottom solid 1px #eee
-
- &:last-child
- border-bottom none
-
- &: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
- display block
- 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
-
-</style>