Compare commits
1 commit
develop
...
games-port
Author | SHA1 | Date | |
---|---|---|---|
|
8e248680e4 |
8 changed files with 121 additions and 3 deletions
|
@ -147,6 +147,10 @@ common:
|
||||||
title: "問題が発生しました"
|
title: "問題が発生しました"
|
||||||
retry: "やり直す"
|
retry: "やり直す"
|
||||||
|
|
||||||
|
games:
|
||||||
|
game: "ゲーム"
|
||||||
|
reversi: "リバーシ"
|
||||||
|
|
||||||
reversi:
|
reversi:
|
||||||
drawn: "引き分け"
|
drawn: "引き分け"
|
||||||
my-turn: "あなたのターンです"
|
my-turn: "あなたのターンです"
|
||||||
|
|
74
src/client/app/common/views/components/games/index.vue
Normal file
74
src/client/app/common/views/components/games/index.vue
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
<template>
|
||||||
|
<div class="libshizuoka83ohishiizumi55suki82">
|
||||||
|
<router-link to="reversi" append tag="figure">
|
||||||
|
<div>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256"><circle cx="104" cy="104" r="18" fill="var(--bg)"/><defs><circle id="a" cx="104" cy="104" r="15"/></defs><clipPath id="b"><use overflow="visible" xlink:href="#a"/></clipPath><g clip-path="url(#b)"><path fill="none" stroke="var(--primary)" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" d="M126.9 78.4l-48 48m50.8-45.2l-48 48M132.5 84l-48 48m33.9-62.1l-48 48m50.8-45.2l-48 48M124 75.5l-48 48m11.3 11.3l48-48m2.9 2.9l-48 48"/></g><circle cx="104" cy="104" r="17" fill="none" stroke="var(--primary)" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"/><circle cx="152" cy="152" r="18" fill="var(--bg)"/><defs><circle id="c" cx="152" cy="152" r="15"/></defs><clipPath id="d"><use overflow="visible" xlink:href="#c"/></clipPath><g clip-path="url(#d)"><path fill="none" stroke="var(--primary)" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" d="M174.9 126.4l-48 48m50.8-45.2l-48 48m50.8-45.2l-48 48m33.9-62.1l-48 48m50.8-45.2l-48 48m50.8-45.2l-48 48m11.3 11.3l48-48m2.9 2.9l-48 48"/></g><circle cx="152" cy="152" r="17" fill="none" stroke="var(--primary)" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"/><circle cx="152" cy="104" r="18" fill="var(--bg)"/><circle cx="152" cy="104" r="17" fill="none" stroke="var(--primary)" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"/><circle cx="104" cy="152" r="18" fill="var(--bg)"/><circle cx="104" cy="152" r="17" fill="none" stroke="var(--primary)" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"/><circle cx="56" cy="56" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><circle cx="56" cy="104" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><g><circle cx="56" cy="152" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g><g><circle cx="56" cy="200" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g><g><circle cx="104" cy="56" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g><g><circle cx="152" cy="56" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g><g><circle cx="200" cy="56" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g><g><circle cx="200" cy="104" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g><g><circle cx="200" cy="152" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g><g><circle cx="104" cy="200" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g><g><circle cx="152" cy="200" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g><g><circle cx="200" cy="200" r="17" fill="none" stroke="var(--primary)" stroke-dasharray="0 5.933" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></g></svg>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256"><circle cx="128" cy="128" r="72" fill="var(--bg)"/><defs><circle id="e" cx="128" cy="128" r="60"/></defs><clipPath id="f"><use overflow="visible" xlink:href="#e"/></clipPath><g clip-path="url(#f)"><path fill="none" stroke="var(--primary)" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="8" d="M219.4 25.4l-192 192M230.7 36.8l-192 192M242 48.1l-192 192M185.5-8.5l-192 192M196.8 2.8l-192 192M208.1 14.1l-192 192m45.3 45.3l192-192m11.3 11.3l-192 192"/></g><circle cx="128" cy="128" r="68" fill="none" stroke="var(--primary)" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="8"/></svg>
|
||||||
|
</div>
|
||||||
|
<figcaption>{{ $t('@.games.reversi') }}</figcaption>
|
||||||
|
</router-link>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="stylus" scoped>
|
||||||
|
.libshizuoka83ohishiizumi55suki82
|
||||||
|
align-items center
|
||||||
|
background var(--secondary)
|
||||||
|
bottom 0
|
||||||
|
display flex
|
||||||
|
justify-content center
|
||||||
|
left 0
|
||||||
|
position fixed
|
||||||
|
right 0
|
||||||
|
top 0
|
||||||
|
|
||||||
|
figure
|
||||||
|
flex 0 1 256px
|
||||||
|
transform translateY(0)
|
||||||
|
transition transform .1s ease
|
||||||
|
|
||||||
|
div
|
||||||
|
background var(--bg)
|
||||||
|
border-radius 25%
|
||||||
|
box-shadow 0 4px 8px rgba(#000, .2)
|
||||||
|
height 256px
|
||||||
|
transition box-shadow .1s ease
|
||||||
|
|
||||||
|
svg
|
||||||
|
opacity 1
|
||||||
|
transition opacity .1s ease
|
||||||
|
|
||||||
|
&:last-child
|
||||||
|
height 100%
|
||||||
|
left 0
|
||||||
|
opacity 0
|
||||||
|
position absolute
|
||||||
|
transform rotateX(45deg) rotateY(-15deg) rotateZ(30deg) translateZ(-24px)
|
||||||
|
transition opacity .1s ease, transform .1s ease
|
||||||
|
width 100%
|
||||||
|
|
||||||
|
figcaption
|
||||||
|
color var(--primary)
|
||||||
|
font-size 24pt
|
||||||
|
margin 16px 0 0
|
||||||
|
text-align center
|
||||||
|
text-shadow 0 4px 8px rgba(#000, .2)
|
||||||
|
transition text-shadow .1s ease
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
transform translateY(-4px)
|
||||||
|
|
||||||
|
div
|
||||||
|
box-shadow 0 8px 8px rgba(#000, .2)
|
||||||
|
|
||||||
|
svg
|
||||||
|
opacity 0
|
||||||
|
|
||||||
|
&:last-child
|
||||||
|
opacity 1
|
||||||
|
transform rotateX(45deg) rotateY(-15deg) rotateZ(30deg)
|
||||||
|
|
||||||
|
figcaption
|
||||||
|
text-shadow 0 8px 8px rgba(#000, .2)
|
||||||
|
</style>
|
||||||
|
|
|
@ -25,6 +25,7 @@ import MkMessagingRoom from './views/pages/messaging-room.vue';
|
||||||
import MkNote from './views/pages/note.vue';
|
import MkNote from './views/pages/note.vue';
|
||||||
import MkSearch from './views/pages/search.vue';
|
import MkSearch from './views/pages/search.vue';
|
||||||
import MkTag from './views/pages/tag.vue';
|
import MkTag from './views/pages/tag.vue';
|
||||||
|
import MkGames from './views/pages/games/index.vue';
|
||||||
import MkReversi from './views/pages/games/reversi.vue';
|
import MkReversi from './views/pages/games/reversi.vue';
|
||||||
import MkShare from './views/pages/share.vue';
|
import MkShare from './views/pages/share.vue';
|
||||||
import MkFollow from '../common/views/pages/follow.vue';
|
import MkFollow from '../common/views/pages/follow.vue';
|
||||||
|
@ -147,6 +148,7 @@ init(async (launch) => {
|
||||||
{ path: '/search', component: MkSearch },
|
{ path: '/search', component: MkSearch },
|
||||||
{ path: '/tags/:tag', name: 'tag', component: MkTag },
|
{ path: '/tags/:tag', name: 'tag', component: MkTag },
|
||||||
{ path: '/share', component: MkShare },
|
{ path: '/share', component: MkShare },
|
||||||
|
{ path: '/games', component: MkGames },
|
||||||
{ path: '/games/reversi/:game?', component: MkReversi },
|
{ path: '/games/reversi/:game?', component: MkReversi },
|
||||||
{ path: '/@:user', name: 'user', component: MkUser },
|
{ path: '/@:user', name: 'user', component: MkUser },
|
||||||
{ path: '/@:user/following', name: 'userFollowing', component: MkUserFollowingOrFollowers },
|
{ path: '/@:user/following', name: 'userFollowing', component: MkUserFollowingOrFollowers },
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<mk-window ref="window" width="500px" height="560px" :popout-url="popout" @closed="destroyDom">
|
<mk-window ref="window" width="500px" height="560px" :popout-url="popout" @closed="destroyDom">
|
||||||
<span slot="header" :class="$style.header"><fa icon="gamepad"/>{{ $t('game') }}</span>
|
<span slot="header" :class="$style.header"><fa icon="gamepad"/>{{ $t('game') }}</span>
|
||||||
<x-reversi :class="$style.content" @gamed="g => game = g"/>
|
<x-game :class="$style.content" />
|
||||||
</mk-window>
|
</mk-window>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ import { url } from '../../../config';
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
i18n: i18n('desktop/views/components/game-window.vue'),
|
i18n: i18n('desktop/views/components/game-window.vue'),
|
||||||
components: {
|
components: {
|
||||||
XReversi: () => import('../../../common/views/components/games/reversi/reversi.vue').then(m => m.default)
|
XGame: () => import('../../../common/views/components/games/index.vue').then(m => m.default)
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
20
src/client/app/desktop/views/pages/games/index.vue
Normal file
20
src/client/app/desktop/views/pages/games/index.vue
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<template>
|
||||||
|
<component :is="ui ? 'mk-ui' : 'div'">
|
||||||
|
<x-games />
|
||||||
|
</component>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
components: {
|
||||||
|
XGames: () => import('../../../../common/views/components/games/index.vue').then(m => m.default)
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
ui: {
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -27,6 +27,7 @@ import MkFollowing from './views/pages/following.vue';
|
||||||
import MkFavorites from './views/pages/favorites.vue';
|
import MkFavorites from './views/pages/favorites.vue';
|
||||||
import MkUserLists from './views/pages/user-lists.vue';
|
import MkUserLists from './views/pages/user-lists.vue';
|
||||||
import MkUserList from './views/pages/user-list.vue';
|
import MkUserList from './views/pages/user-list.vue';
|
||||||
|
import MkGames from './views/pages/games/index.vue';
|
||||||
import MkReversi from './views/pages/games/reversi.vue';
|
import MkReversi from './views/pages/games/reversi.vue';
|
||||||
import MkTag from './views/pages/tag.vue';
|
import MkTag from './views/pages/tag.vue';
|
||||||
import MkShare from './views/pages/share.vue';
|
import MkShare from './views/pages/share.vue';
|
||||||
|
@ -135,6 +136,7 @@ init((launch) => {
|
||||||
{ path: '/search', component: MkSearch },
|
{ path: '/search', component: MkSearch },
|
||||||
{ path: '/tags/:tag', component: MkTag },
|
{ path: '/tags/:tag', component: MkTag },
|
||||||
{ path: '/share', component: MkShare },
|
{ path: '/share', component: MkShare },
|
||||||
|
{ path: '/games', component: MkGames },
|
||||||
{ path: '/games/reversi/:game?', name: 'reversi', component: MkReversi },
|
{ path: '/games/reversi/:game?', name: 'reversi', component: MkReversi },
|
||||||
{ path: '/@:user', component: () => import('./views/pages/user.vue').then(m => m.default) },
|
{ path: '/@:user', component: () => import('./views/pages/user.vue').then(m => m.default) },
|
||||||
{ path: '/@:user/followers', component: MkFollowers },
|
{ path: '/@:user/followers', component: MkFollowers },
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<li><router-link to="/i/notifications" :data-active="$route.name == 'notifications'"><i><fa :icon="['far', 'bell']" fixed-width/></i>{{ $t('notifications') }}<i v-if="hasUnreadNotification" class="circle"><fa icon="circle"/></i><i><fa icon="angle-right"/></i></router-link></li>
|
<li><router-link to="/i/notifications" :data-active="$route.name == 'notifications'"><i><fa :icon="['far', 'bell']" fixed-width/></i>{{ $t('notifications') }}<i v-if="hasUnreadNotification" class="circle"><fa icon="circle"/></i><i><fa icon="angle-right"/></i></router-link></li>
|
||||||
<li><router-link to="/i/messaging" :data-active="$route.name == 'messaging'"><i><fa :icon="['far', 'comments']" fixed-width/></i>{{ $t('@.messaging') }}<i v-if="hasUnreadMessagingMessage" class="circle"><fa icon="circle"/></i><i><fa icon="angle-right"/></i></router-link></li>
|
<li><router-link to="/i/messaging" :data-active="$route.name == 'messaging'"><i><fa :icon="['far', 'comments']" fixed-width/></i>{{ $t('@.messaging') }}<i v-if="hasUnreadMessagingMessage" class="circle"><fa icon="circle"/></i><i><fa icon="angle-right"/></i></router-link></li>
|
||||||
<li v-if="$store.getters.isSignedIn && ($store.state.i.isLocked || $store.state.i.carefulBot)"><router-link to="/i/received-follow-requests" :data-active="$route.name == 'received-follow-requests'"><i><fa :icon="['far', 'envelope']" fixed-width/></i>{{ $t('follow-requests') }}<i v-if="$store.getters.isSignedIn && $store.state.i.pendingReceivedFollowRequestsCount" class="circle"><fa icon="circle"/></i><i><fa icon="angle-right"/></i></router-link></li>
|
<li v-if="$store.getters.isSignedIn && ($store.state.i.isLocked || $store.state.i.carefulBot)"><router-link to="/i/received-follow-requests" :data-active="$route.name == 'received-follow-requests'"><i><fa :icon="['far', 'envelope']" fixed-width/></i>{{ $t('follow-requests') }}<i v-if="$store.getters.isSignedIn && $store.state.i.pendingReceivedFollowRequestsCount" class="circle"><fa icon="circle"/></i><i><fa icon="angle-right"/></i></router-link></li>
|
||||||
<li><router-link to="/games/reversi" :data-active="$route.name == 'reversi'"><i><fa icon="gamepad" fixed-width/></i>{{ $t('game') }}<i v-if="hasGameInvitation" class="circle"><fa icon="circle"/></i><i><fa icon="angle-right"/></i></router-link></li>
|
<li><router-link to="/games" :data-active="$route.name == 'game'"><i><fa icon="gamepad" fixed-width/></i>{{ $t('@.games.game') }}<i v-if="hasGameInvitation" class="circle"><fa icon="circle"/></i><i><fa icon="angle-right"/></i></router-link></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul>
|
<ul>
|
||||||
<li><router-link to="/i/widgets" :data-active="$route.name == 'widgets'"><i><fa :icon="['far', 'calendar-alt']" fixed-width/></i>{{ $t('widgets') }}<i><fa icon="angle-right"/></i></router-link></li>
|
<li><router-link to="/i/widgets" :data-active="$route.name == 'widgets'"><i><fa :icon="['far', 'calendar-alt']" fixed-width/></i>{{ $t('widgets') }}<i><fa icon="angle-right"/></i></router-link></li>
|
||||||
|
|
16
src/client/app/mobile/views/pages/games/index.vue
Normal file
16
src/client/app/mobile/views/pages/games/index.vue
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<template>
|
||||||
|
<mk-ui>
|
||||||
|
<span slot="header"><span style="margin-right:4px;"><fa icon="gamepad"/></span>{{ $t('@.games.game') }}</span>
|
||||||
|
<x-games />
|
||||||
|
</mk-ui>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import Vue from 'vue';
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
components: {
|
||||||
|
XGames: () => import('../../../../common/views/components/games/index.vue').then(m => m.default)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
Loading…
Reference in a new issue