This commit is contained in:
syuilo 2018-02-10 14:56:33 +09:00
parent 29b1541a8e
commit 08ee9e4eaf
14 changed files with 193 additions and 29 deletions

View file

@ -38,7 +38,7 @@ export default class MiOS extends EventEmitter {
/**
* Whether signed in
*/
public get isSignedin() {
public get isSignedIn() {
return this.i != null;
}
@ -251,7 +251,7 @@ export default class MiOS extends EventEmitter {
if (!isSwSupported) return;
// Reject when not signed in to Misskey
if (!this.isSignedin) return;
if (!this.isSignedIn) return;
// When service worker activated
navigator.serviceWorker.ready.then(registration => {

View file

@ -23,7 +23,7 @@ export default (mios: MiOS) => {
route('*', notFound);
function index() {
mios.isSignedin ? home() : entrance();
mios.isSignedIn ? home() : entrance();
}
function home() {

View file

@ -5,19 +5,17 @@
// Style
import './style.styl';
import Vue from 'vue';
import init from '../init';
import fuckAdBlock from './scripts/fuck-ad-block';
import MiOS from '../common/mios';
import HomeStreamManager from '../common/scripts/streaming/home-stream-manager';
import composeNotification from '../common/scripts/compose-notification';
import MkIndex from './tags/pages/index.vue';
import MkIndex from './views/pages/index.vue';
/**
* init
*/
init(async (mios: MiOS, app: Vue) => {
init(async (os, launch) => {
/**
* Fuck AD Block
*/
@ -33,12 +31,17 @@ init(async (mios: MiOS, app: Vue) => {
}
if ((Notification as any).permission == 'granted') {
registerNotifications(mios.stream);
registerNotifications(os.stream);
}
}
// Register components
require('./views/components');
const app = launch();
app.$router.addRoutes([{
path: '/', component: MkIndex, props: { os: mios }
path: '/', component: MkIndex, props: { os }
}]);
}, true);

View file

@ -42,10 +42,10 @@
background rgba(0, 0, 0, 0.2)
html
height 100%
background #f7f7f7
// workaround of https://github.com/riot/riot/issues/2134
&[data-page='entrance']
#wait
right auto
left 15px
body
display flex
flex-direction column
min-height 100%

View file

@ -1,3 +0,0 @@
<template>
<h1>hi</h1>
</template>

View file

@ -0,0 +1,5 @@
import Vue from 'vue';
import ui from './ui.vue';
Vue.component('mk-ui', ui);

View file

@ -0,0 +1,6 @@
<template>
<div>
<header>misskey</header>
<slot></slot>
</div>
</template>

View file

@ -82,8 +82,6 @@
<script lang="typescript">
import uuid from 'uuid';
import Sortable from 'sortablejs';
import I from '../../common/i';
import { resolveSrv } from 'dns';
export default {
props: {

View file

@ -0,0 +1,17 @@
<template>
<mk-ui>
<home ref="home" :mode="mode"/>
</mk-ui>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
props: {
mode: {
type: String,
default: 'timeline'
}
},
});
</script>

View file

@ -0,0 +1,17 @@
<template>
<component v-bind:is="os.isSignedIn ? 'home' : 'welcome'"></component>
</template>
<script lang="ts">
import Vue from 'vue';
import HomeView from './home.vue';
import WelcomeView from './welcome.vue';
export default Vue.extend({
props: ['os'],
components: {
home: HomeView,
welcome: WelcomeView
}
});
</script>

View file

@ -0,0 +1,119 @@
<template>
<div class="root">
<main>
<div>
<h1>繋がるNotes</h1>
<p>ようこそ <b>Misskey</b>はTwitter風ミニブログSNSです思ったこと共有したいことをシンプルに書き残せますタイムラインを見れば皆の反応や皆がどう思っているのかもすぐにわかります<a>詳しく...</a></p>
<p><button class="signup" @click="signup">はじめる</button><button class="signin" @click="signin">ログイン</button></p>
</div>
<div>
</div>
</main>
<mk-forkit/>
<footer>
<div>
<mk-nav-links/>
<p class="c">{ _COPYRIGHT_ }</p>
</div>
</footer>
</div>
</template>
<style>
#wait {
right: auto;
left: 15px;
}
</style>
<style lang="stylus" scoped>
.root
display flex
flex-direction column
flex 1
background #eee
$width = 1000px
> main
display flex
flex 1
max-width $width
margin 0 auto
padding 80px 0 0 0
> div:first-child
margin 0 auto 0 0
width calc(100% - 500px)
color #777
> h1
margin 0
font-weight normal
> p
margin 0.5em 0
line-height 2em
button
padding 8px 16px
font-size inherit
.signup
color $theme-color
border solid 2px $theme-color
border-radius 4px
&:focus
box-shadow 0 0 0 3px rgba($theme-color, 0.2)
&:hover
color $theme-color-foreground
background $theme-color
&:active
color $theme-color-foreground
background darken($theme-color, 10%)
border-color darken($theme-color, 10%)
.signin
&:focus
color #444
&:hover
color #444
&:active
color #333
> div:last-child
margin 0 0 0 auto
> footer
background #fff
*
color #fff !important
text-shadow 0 0 8px #000
font-weight bold
> div
max-width $width
margin 0 auto
padding 16px 0
text-align center
border-top solid 1px #fff
> .c
margin 0
line-height 64px
font-size 10px
</style>
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
})
</script>

View file

@ -61,22 +61,24 @@ if (localStorage.getItem('should-refresh') == 'true') {
}
// MiOSを初期化してコールバックする
export default (callback, sw = false) => {
export default (callback: (os: MiOS, launch: () => Vue) => void, sw = false) => {
const mios = new MiOS(sw);
mios.init(() => {
// アプリ基底要素マウント
document.body.innerHTML = '<div id="app"></div>';
const app = new Vue({
router: new VueRouter({
mode: 'history'
}),
render: createEl => createEl(App)
}).$mount('#app');
const launch = () => {
return new Vue({
router: new VueRouter({
mode: 'history'
}),
render: createEl => createEl(App)
}).$mount('#app');
};
try {
callback(mios, app);
callback(mios, launch);
} catch (e) {
panic(e);
}

View file

@ -32,7 +32,7 @@ export default (mios: MiOS) => {
route('*', notFound);
function index() {
mios.isSignedin ? home() : entrance();
mios.isSignedIn ? home() : entrance();
}
function home() {

View file

@ -8,7 +8,7 @@ const constants = require('../../../src/const.json');
export default () => ({
enforce: 'pre',
test: /\.tag$/,
test: /\.vue$/,
exclude: /node_modules/,
loader: StringReplacePlugin.replace({
replacements: [