mizzkey/src/client/app/mobile/views/pages/welcome.vue

324 lines
6.7 KiB
Vue
Raw Normal View History

2018-02-21 19:11:24 +01:00
<template>
2018-09-05 21:52:42 +02:00
<div class="wgwfgvvimdjvhjfwxropcwksnzftjqes">
2018-09-20 10:21:16 +02:00
<div class="banner" :style="{ backgroundImage: banner ? `url(${banner})` : null }"></div>
2018-04-27 12:12:15 +02:00
<div>
2018-09-27 18:05:09 +02:00
<img svg-inline src="../../../../assets/title.svg" :alt="name">
2018-06-14 02:51:55 +02:00
<p class="host">{{ host }}</p>
<div class="about">
2018-08-07 06:25:50 +02:00
<h2>{{ name }}</h2>
<p v-html="description || this.$t('@.about')"></p>
<router-link class="signup" to="/signup">{{ $t('signup') }}</router-link>
2018-06-14 02:51:55 +02:00
</div>
<div class="login">
2018-06-16 00:40:07 +02:00
<mk-signin :with-avatar="false"/>
2018-02-21 21:05:19 +01:00
</div>
2018-06-15 06:08:56 +02:00
<div class="tl">
<mk-welcome-timeline/>
</div>
<div class="hashtags">
2018-09-07 13:41:12 +02:00
<mk-tag-cloud/>
</div>
2018-09-05 21:52:42 +02:00
<div class="photos">
<div v-for="photo in photos" :style="`background-image: url(${photo.thumbnailUrl})`"></div>
</div>
2018-06-16 00:40:07 +02:00
<div class="stats" v-if="stats">
<span><fa icon="user"/> {{ stats.originalUsersCount | number }}</span>
<span><fa icon="pencil-alt"/> {{ stats.originalNotesCount | number }}</span>
2018-06-16 00:40:07 +02:00
</div>
2018-09-05 21:52:42 +02:00
<div class="announcements" v-if="announcements && announcements.length > 0">
<article v-for="announcement in announcements">
<span class="title" v-html="announcement.title"></span>
<div v-html="announcement.text"></div>
</article>
</div>
2018-09-08 08:28:38 +02:00
<article class="about-misskey">
<h1>{{ $t('@.intro.title') }}</h1>
<p v-html="this.$t('@.intro.about')"></p>
2018-09-08 08:28:38 +02:00
<section>
<h2>{{ $t('@.intro.features') }}</h2>
2018-09-08 08:28:38 +02:00
<section>
<h3>{{ $t('@.intro.rich-contents') }}</h3>
2018-09-08 08:28:38 +02:00
<div class="image"><img src="/assets/about/post.png" alt=""></div>
<p v-html="this.$t('@.intro.rich-contents-desc')"></p>
2018-09-08 08:28:38 +02:00
</section>
<section>
<h3>{{ $t('@.intro.reaction') }}</h3>
2018-09-08 08:28:38 +02:00
<div class="image"><img src="/assets/about/reaction.png" alt=""></div>
<p v-html="this.$t('@.intro.reaction-desc')"></p>
2018-09-08 08:28:38 +02:00
</section>
<section>
<h3>{{ $t('@.intro.ui') }}</h3>
2018-09-08 08:28:38 +02:00
<div class="image"><img src="/assets/about/ui.png" alt=""></div>
<p v-html="this.$t('@.intro.ui-desc')"></p>
2018-09-08 08:28:38 +02:00
</section>
<section>
<h3>{{ $t('@.intro.drive') }}</h3>
2018-09-08 08:28:38 +02:00
<div class="image"><img src="/assets/about/drive.png" alt=""></div>
<p v-html="this.$t('@.intro.drive-desc')"></p>
2018-09-08 08:28:38 +02:00
</section>
</section>
<p v-html="this.$t('@.intro.outro')"></p>
2018-09-08 08:28:38 +02:00
</article>
2018-09-07 13:41:12 +02:00
<div class="info" v-if="meta">
<p>Version: <b>{{ meta.version }}</b></p>
<p>Maintainer: <b><a :href="'mailto:' + meta.maintainer.email" target="_blank">{{ meta.maintainer.name }}</a></b></p>
2018-09-07 13:41:12 +02:00
</div>
2018-04-27 12:12:15 +02:00
<footer>
<small>{{ copyright }}</small>
</footer>
2018-02-21 21:05:19 +01:00
</div>
2018-02-21 19:11:24 +01:00
</div>
</template>
2018-02-21 21:05:19 +01:00
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
2018-09-07 13:41:12 +02:00
import { copyright, host } from '../../../config';
2018-09-06 14:31:15 +02:00
import { concat } from '../../../../../prelude/array';
2018-11-11 04:35:30 +01:00
import { toUnicode } from 'punycode';
2018-02-21 21:05:19 +01:00
export default Vue.extend({
i18n: i18n('mobile/views/pages/welcome.vue'),
2018-02-21 21:05:19 +01:00
data() {
return {
2018-09-07 13:41:12 +02:00
meta: null,
2018-03-17 15:01:17 +01:00
copyright,
2018-06-16 00:40:07 +02:00
stats: null,
2018-09-20 10:21:16 +02:00
banner: null,
2018-11-11 04:35:30 +01:00
host: toUnicode(host),
2018-08-19 14:07:18 +02:00
name: 'Misskey',
description: '',
2018-09-05 21:52:42 +02:00
photos: [],
announcements: []
2018-02-21 21:05:19 +01:00
};
},
2018-06-16 00:40:07 +02:00
created() {
2018-11-09 00:13:34 +01:00
this.$root.getMeta().then(meta => {
2018-09-07 13:41:12 +02:00
this.meta = meta;
2018-08-19 14:07:18 +02:00
this.name = meta.name;
this.description = meta.description;
2018-09-05 21:52:42 +02:00
this.announcements = meta.broadcasts;
2018-09-20 10:21:16 +02:00
this.banner = meta.bannerUrl;
2018-08-19 14:07:18 +02:00
});
2018-11-09 00:13:34 +01:00
this.$root.api('stats').then(stats => {
2018-06-16 00:40:07 +02:00
this.stats = stats;
2018-03-17 15:01:17 +01:00
});
2018-09-05 21:52:42 +02:00
const image = [
'image/jpeg',
'image/png',
'image/gif'
];
2018-11-09 00:13:34 +01:00
this.$root.api('notes/local-timeline', {
2018-09-05 21:52:42 +02:00
fileType: image,
2018-09-25 14:09:38 +02:00
excludeNsfw: true,
2018-09-05 21:52:42 +02:00
limit: 6
2018-09-06 14:31:15 +02:00
}).then((notes: any[]) => {
const files = concat(notes.map((n: any): any[] => n.files));
2018-09-05 21:52:42 +02:00
this.photos = files.filter(f => image.includes(f.type)).slice(0, 6);
});
2018-02-21 21:05:19 +01:00
}
});
</script>
<style lang="stylus" scoped>
2018-09-28 12:59:19 +02:00
.wgwfgvvimdjvhjfwxropcwksnzftjqes
2018-06-14 02:51:55 +02:00
text-align center
2018-02-21 21:05:19 +01:00
2018-09-20 10:21:16 +02:00
> .banner
position absolute
top 0
left 0
width 100%
height 300px
background-position center
background-size cover
opacity 0.7
&:after
content ""
display block
position absolute
bottom 0
left 0
width 100%
height 100px
2018-09-27 18:05:09 +02:00
background linear-gradient(transparent, var(--bg))
2018-09-20 10:21:16 +02:00
> div:not(.banner)
2018-06-14 02:51:55 +02:00
padding 32px
2018-04-27 12:12:15 +02:00
margin 0 auto
max-width 500px
2018-02-21 21:05:19 +01:00
2018-09-27 18:05:09 +02:00
> svg
2018-06-14 00:22:50 +02:00
display block
2018-09-27 18:05:09 +02:00
width 200px
height 50px
2018-06-14 00:22:50 +02:00
margin 0 auto
2018-04-27 12:12:15 +02:00
2018-06-14 02:51:55 +02:00
> .host
display block
text-align center
padding 6px 12px
line-height 32px
font-weight bold
color #333
background rgba(#000, 0.035)
border-radius 6px
> .about
margin-top 16px
padding 16px
2018-09-27 18:05:09 +02:00
color var(--text)
background var(--face)
2018-06-14 02:51:55 +02:00
border-radius 6px
> h2
margin 0
> p
margin 8px
> .signup
font-weight bold
> .login
margin 16px 0
2018-04-27 12:12:15 +02:00
2018-06-14 00:22:50 +02:00
> form
2018-02-21 21:05:19 +01:00
2018-06-14 00:22:50 +02:00
button
display block
width 100%
padding 10px
margin 0
color #333
font-size 1em
2018-04-27 12:12:15 +02:00
text-align center
2018-06-14 00:22:50 +02:00
text-decoration none
text-shadow 0 1px 0 rgba(255, 255, 255, 0.9)
background-image linear-gradient(#fafafa, #eaeaea)
border 1px solid #ddd
border-bottom-color #cecece
border-radius 4px
&:active
background-color #767676
background-image none
border-color #444
box-shadow 0 1px 3px rgba(#000, 0.075), inset 0 0 5px rgba(#000, 0.2)
2018-03-16 19:33:36 +01:00
2018-06-15 06:08:56 +02:00
> .tl
margin 16px 0
2018-06-15 06:08:56 +02:00
> *
max-height 300px
border-radius 6px
overflow auto
-webkit-overflow-scrolling touch
> .hashtags
2018-09-07 13:41:12 +02:00
padding 0 8px
height 200px
2018-09-05 21:52:42 +02:00
> .photos
display grid
grid-template-rows 1fr 1fr 1fr
grid-template-columns 1fr 1fr
gap 8px
height 300px
margin-top 16px
> div
border-radius 4px
background-position center center
background-size cover
2018-06-16 00:40:07 +02:00
> .stats
margin 16px 0
padding 8px
font-size 14px
2018-09-27 18:05:09 +02:00
color var(--text)
2018-06-16 00:40:07 +02:00
background rgba(#000, 0.1)
border-radius 6px
> *
margin 0 8px
2018-09-05 21:52:42 +02:00
> .announcements
margin 16px 0
> article
2018-09-27 18:05:09 +02:00
background var(--mobileAnnouncement)
2018-09-05 21:52:42 +02:00
border-radius 6px
2018-09-27 18:05:09 +02:00
color var(--mobileAnnouncementFg)
2018-09-05 21:52:42 +02:00
padding 16px
margin 8px 0
font-size 12px
> .title
font-weight bold
2018-09-08 08:28:38 +02:00
> .about-misskey
margin 16px 0
padding 32px
font-size 14px
2018-09-27 18:05:09 +02:00
background var(--face)
2018-09-08 08:28:38 +02:00
border-radius 6px
overflow hidden
2018-09-27 18:05:09 +02:00
color var(--text)
2018-09-08 08:28:38 +02:00
> h1
margin 0
& + p
margin-top 8px
> p:last-child
margin-bottom 0
> section
> h2
2018-09-27 18:05:09 +02:00
border-bottom 1px solid var(--faceDivider)
2018-09-08 08:28:38 +02:00
> section
margin-bottom 16px
padding-bottom 16px
2018-09-27 18:05:09 +02:00
border-bottom 1px solid var(--faceDivider)
2018-09-08 08:28:38 +02:00
> h3
margin-bottom 8px
> p
margin-bottom 0
> .image
> img
display block
width 100%
height 120px
object-fit cover
2018-09-07 13:41:12 +02:00
> .info
padding 16px 0
2018-09-27 18:05:09 +02:00
border solid 2px rgba(0, 0, 0, 0.1)
2018-09-07 13:41:12 +02:00
border-radius 8px
color var(--text)
2018-09-07 13:41:12 +02:00
> *
margin 0 16px
2018-04-27 12:12:15 +02:00
> footer
text-align center
2018-09-27 18:05:09 +02:00
color var(--text)
2018-03-17 15:01:17 +01:00
2018-04-27 12:12:15 +02:00
> small
display block
margin 16px 0 0 0
opacity 0.7
2018-03-16 19:33:36 +01:00
2018-02-21 21:05:19 +01:00
</style>