This commit is contained in:
syuilo 2018-02-20 22:53:34 +09:00
parent 3cc45145fe
commit e1259409e9
16 changed files with 89 additions and 61 deletions

View file

@ -1,13 +1,6 @@
import Vue from 'vue';
import ui from './ui.vue';
import uiHeader from './ui-header.vue';
import uiHeaderAccount from './ui-header-account.vue';
import uiHeaderClock from './ui-header-clock.vue';
import uiHeaderNav from './ui-header-nav.vue';
import uiHeaderNotifications from './ui-header-notifications.vue';
import uiHeaderPostButton from './ui-header-post-button.vue';
import uiHeaderSearch from './ui-header-search.vue';
import uiNotification from './ui-notification.vue';
import home from './home.vue';
import timeline from './timeline.vue';
@ -46,13 +39,6 @@ import wBroadcast from './widgets/broadcast.vue';
import wTimemachine from './widgets/timemachine.vue';
Vue.component('mk-ui', ui);
Vue.component('mk-ui-header', uiHeader);
Vue.component('mk-ui-header-account', uiHeaderAccount);
Vue.component('mk-ui-header-clock', uiHeaderClock);
Vue.component('mk-ui-header-nav', uiHeaderNav);
Vue.component('mk-ui-header-notifications', uiHeaderNotifications);
Vue.component('mk-ui-header-post-button', uiHeaderPostButton);
Vue.component('mk-ui-header-search', uiHeaderSearch);
Vue.component('mk-ui-notification', uiNotification);
Vue.component('mk-home', home);
Vue.component('mk-timeline', timeline);

View file

@ -1,5 +1,5 @@
<template>
<div class="mk-ui-header-account">
<div class="account">
<button class="header" :data-active="isOpen" @click="toggle">
<span class="username">{{ os.i.username }}<template v-if="!isOpen">%fa:angle-down%</template><template v-if="isOpen">%fa:angle-up%</template></span>
<img class="avatar" :src="`${ os.i.avatar_url }?thumbnail&size=64`" alt="avatar"/>
@ -81,7 +81,7 @@ export default Vue.extend({
</script>
<style lang="stylus" scoped>
.mk-ui-header-account
.account
> .header
display block
margin 0

View file

@ -1,5 +1,5 @@
<template>
<div class="mk-ui-header-clock">
<div class="clock">
<div class="header">
<time ref="time">
<span class="yyyymmdd">{{ yyyy }}/{{ mm }}/{{ dd }}</span>
@ -56,7 +56,7 @@ export default Vue.extend({
</script>
<style lang="stylus" scoped>
.mk-ui-header-clock
.clock
display inline-block
overflow visible

View file

@ -1,5 +1,5 @@
<template>
<div class="mk-ui-header-nav">
<div class="nav">
<ul>
<template v-if="os.isSignedIn">
<li class="home" :class="{ active: page == 'home' }">
@ -17,7 +17,7 @@
</li>
</template>
<li class="ch">
<a :href="_CH_URL_" target="_blank">
<a :href="chUrl" target="_blank">
%fa:tv%
<p>%i18n:desktop.tags.mk-ui-header-nav.ch%</p>
</a>
@ -34,6 +34,7 @@
<script lang="ts">
import Vue from 'vue';
import { chUrl } from '../../../config';
import MkMessagingWindow from './messaging-window.vue';
export default Vue.extend({
@ -41,7 +42,8 @@ export default Vue.extend({
return {
hasUnreadMessagingMessages: false,
connection: null,
connectionId: null
connectionId: null,
chUrl
};
},
mounted() {
@ -84,7 +86,7 @@ export default Vue.extend({
</script>
<style lang="stylus" scoped>
.mk-ui-header-nav
.nav
display inline-block
margin 0
padding 0

View file

@ -1,9 +1,9 @@
<template>
<div class="mk-ui-header-notifications">
<div class="notifications">
<button :data-active="isOpen" @click="toggle" title="%i18n:desktop.tags.mk-ui-header-notifications.title%">
%fa:R bell%<template v-if="hasUnreadNotifications">%fa:circle%</template>
</button>
<div class="notifications" v-if="isOpen">
<div class="pop" v-if="isOpen">
<mk-notifications/>
</div>
</div>
@ -82,7 +82,7 @@ export default Vue.extend({
</script>
<style lang="stylus" scoped>
.mk-ui-header-notifications
.notifications
> button
display block
@ -114,7 +114,7 @@ export default Vue.extend({
font-size 10px
color $theme-color
> .notifications
> .pop
display block
position absolute
top 56px

View file

@ -1,5 +1,5 @@
<template>
<div class="mk-ui-header-post-button">
<div class="post">
<button @click="post" title="%i18n:desktop.tags.mk-ui-header-post-button.post%">%fa:pencil-alt%</button>
</div>
</template>
@ -17,7 +17,7 @@ export default Vue.extend({
</script>
<style lang="stylus" scoped>
.mk-ui-header-post-button
.post
display inline-block
padding 8px
height 100%

View file

@ -1,5 +1,5 @@
<template>
<form class="mk-ui-header-search" @submit.prevent="onSubmit">
<form class="search" @submit.prevent="onSubmit">
%fa:search%
<input v-model="q" type="search" placeholder="%i18n:desktop.tags.mk-ui-header-search.placeholder%"/>
<div class="result"></div>
@ -24,7 +24,7 @@ export default Vue.extend({
</script>
<style lang="stylus" scoped>
.mk-ui-header-search
.search
> [data-fa]
display block

View file

@ -1,19 +1,19 @@
<template>
<div class="mk-ui-header">
<div class="header">
<mk-special-message/>
<div class="main">
<div class="backdrop"></div>
<div class="main">
<div class="container">
<div class="left">
<mk-ui-header-nav/>
<x-nav/>
</div>
<div class="right">
<mk-ui-header-search/>
<mk-ui-header-account v-if="os.isSignedIn"/>
<mk-ui-header-notifications v-if="os.isSignedIn"/>
<mk-ui-header-post-button v-if="os.isSignedIn"/>
<mk-ui-header-clock/>
<x-search/>
<x-account v-if="os.isSignedIn"/>
<x-notifications v-if="os.isSignedIn"/>
<x-post v-if="os.isSignedIn"/>
<x-clock/>
</div>
</div>
</div>
@ -21,9 +21,30 @@
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import XNav from './ui.header.nav.vue';
import XSearch from './ui.header.search.vue';
import XAccount from './ui.header.account.vue';
import XNotifications from './ui.header.notifications.vue';
import XPost from './ui.header.post.vue';
import XClock from './ui.header.clock.vue';
export default Vue.extend({
components: {
'x-nav': XNav,
'x-search': XSearch,
'x-account': XAccount,
'x-notifications': XNotifications,
'x-post': XPost,
'x-clock': XClock,
}
});
</script>
<style lang="stylus" scoped>
.mk-ui-header
display block
.header
position -webkit-sticky
position sticky
top 0

View file

@ -1,6 +1,6 @@
<template>
<div>
<mk-ui-header/>
<x-header/>
<div class="content">
<slot></slot>
</div>
@ -10,9 +10,12 @@
<script lang="ts">
import Vue from 'vue';
import MkPostFormWindow from './post-form-window.vue';
import XHeader from './ui.header.vue';
export default Vue.extend({
components: {
'x-header': XHeader
},
mounted() {
document.addEventListener('keydown', this.onKeydown);
},
@ -20,17 +23,12 @@ export default Vue.extend({
document.removeEventListener('keydown', this.onKeydown);
},
methods: {
openPostForm() {
document.body.appendChild(new MkPostFormWindow({
parent: this
}).$mount().$el);
},
onKeydown(e) {
if (e.target.tagName == 'INPUT' || e.target.tagName == 'TEXTAREA') return;
if (e.which == 80 || e.which == 78) { // p or n
e.preventDefault();
this.openPostForm();
(this as any).apis.post();
}
}
}