summaryrefslogtreecommitdiff
path: root/src/web
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-03-10 01:48:16 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-03-10 01:48:16 +0900
commitf5fec3d008f6414d43606205457e5477b4abb6cd (patch)
treecc33cbfaadb64f42464550c8a540c8de282a1bbe /src/web
parentv4061 (diff)
downloadsharkey-f5fec3d008f6414d43606205457e5477b4abb6cd.tar.gz
sharkey-f5fec3d008f6414d43606205457e5477b4abb6cd.tar.bz2
sharkey-f5fec3d008f6414d43606205457e5477b4abb6cd.zip
:v:
Diffstat (limited to 'src/web')
-rw-r--r--src/web/app/common/views/components/othello.vue12
-rw-r--r--src/web/app/desktop/script.ts3
-rw-r--r--src/web/app/desktop/views/components/game-window.vue19
-rw-r--r--src/web/app/desktop/views/pages/othello.vue50
-rw-r--r--src/web/app/mobile/script.ts3
-rw-r--r--src/web/app/mobile/views/components/ui.nav.vue2
-rw-r--r--src/web/app/mobile/views/pages/othello.vue36
7 files changed, 119 insertions, 6 deletions
diff --git a/src/web/app/common/views/components/othello.vue b/src/web/app/common/views/components/othello.vue
index d4157eb761..70bb6b2ef5 100644
--- a/src/web/app/common/views/components/othello.vue
+++ b/src/web/app/common/views/components/othello.vue
@@ -67,6 +67,7 @@ export default Vue.extend({
components: {
XGameroom
},
+ props: ['initGame'],
data() {
return {
game: null,
@@ -80,6 +81,16 @@ export default Vue.extend({
connectionId: null
};
},
+ watch: {
+ game(g) {
+ this.$emit('gamed', g);
+ }
+ },
+ created() {
+ if (this.initGame) {
+ this.game = this.initGame;
+ }
+ },
mounted() {
this.connection = (this as any).os.streams.othelloStream.getConnection();
this.connectionId = (this as any).os.streams.othelloStream.use();
@@ -162,6 +173,7 @@ export default Vue.extend({
.mk-othello
color #677f84
+ background #fff
> .matching
> h1
diff --git a/src/web/app/desktop/script.ts b/src/web/app/desktop/script.ts
index 78549741b0..25a60d7ecc 100644
--- a/src/web/app/desktop/script.ts
+++ b/src/web/app/desktop/script.ts
@@ -28,6 +28,7 @@ import MkHomeCustomize from './views/pages/home-customize.vue';
import MkMessagingRoom from './views/pages/messaging-room.vue';
import MkPost from './views/pages/post.vue';
import MkSearch from './views/pages/search.vue';
+import MkOthello from './views/pages/othello.vue';
/**
* init
@@ -80,6 +81,8 @@ init(async (launch) => {
{ path: '/i/drive/folder/:folder', component: MkDrive },
{ path: '/selectdrive', component: MkSelectDrive },
{ path: '/search', component: MkSearch },
+ { path: '/othello', component: MkOthello },
+ { path: '/othello/:game', component: MkOthello },
{ path: '/:user', component: MkUser },
{ path: '/:user/:post', component: MkPost }
]);
diff --git a/src/web/app/desktop/views/components/game-window.vue b/src/web/app/desktop/views/components/game-window.vue
index bf339092aa..3c8bf40e12 100644
--- a/src/web/app/desktop/views/components/game-window.vue
+++ b/src/web/app/desktop/views/components/game-window.vue
@@ -1,14 +1,27 @@
<template>
-<mk-window ref="window" width="500px" height="560px" @closed="$destroy">
+<mk-window ref="window" width="500px" height="560px" :popout-url="popout" @closed="$destroy">
<span slot="header" :class="$style.header">%fa:gamepad%オセロ</span>
- <mk-othello :class="$style.content"/>
+ <mk-othello :class="$style.content" @gamed="g => game = g"/>
</mk-window>
</template>
<script lang="ts">
import Vue from 'vue';
-export default Vue.extend({
+import { url } from '../../../config';
+export default Vue.extend({
+ data() {
+ return {
+ game: null
+ };
+ },
+ computed: {
+ popout(): string {
+ return this.game
+ ? `${url}/othello/${this.game.id}`
+ : `${url}/othello`;
+ }
+ }
});
</script>
diff --git a/src/web/app/desktop/views/pages/othello.vue b/src/web/app/desktop/views/pages/othello.vue
new file mode 100644
index 0000000000..160dd9a354
--- /dev/null
+++ b/src/web/app/desktop/views/pages/othello.vue
@@ -0,0 +1,50 @@
+<template>
+<component :is="ui ? 'mk-ui' : 'div'">
+ <mk-othello v-if="!fetching" :init-game="game" @gamed="onGamed"/>
+</component>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import Progress from '../../../common/scripts/loading';
+
+export default Vue.extend({
+ props: {
+ ui: {
+ default: false
+ }
+ },
+ data() {
+ return {
+ fetching: false,
+ game: null
+ };
+ },
+ watch: {
+ $route: 'fetch'
+ },
+ created() {
+ this.fetch();
+ },
+ methods: {
+ fetch() {
+ if (this.$route.params.game == null) return;
+
+ Progress.start();
+ this.fetching = true;
+
+ (this as any).api('othello/games/show', {
+ game_id: this.$route.params.game
+ }).then(game => {
+ this.game = game;
+ this.fetching = false;
+
+ Progress.done();
+ });
+ },
+ onGamed(game) {
+ history.pushState(null, null, '/othello/' + game.id);
+ }
+ }
+});
+</script>
diff --git a/src/web/app/mobile/script.ts b/src/web/app/mobile/script.ts
index 27c18c5ae1..2b57b78ada 100644
--- a/src/web/app/mobile/script.ts
+++ b/src/web/app/mobile/script.ts
@@ -69,7 +69,8 @@ init((launch) => {
{ path: '/i/drive/file/:file', component: MkDrive },
{ path: '/selectdrive', component: MkSelectDrive },
{ path: '/search', component: MkSearch },
- { path: '/game/othello', component: MkOthello },
+ { path: '/othello', component: MkOthello },
+ { path: '/othello/:game', component: MkOthello },
{ path: '/:user', component: MkUser },
{ path: '/:user/followers', component: MkFollowers },
{ path: '/:user/following', component: MkFollowing },
diff --git a/src/web/app/mobile/views/components/ui.nav.vue b/src/web/app/mobile/views/components/ui.nav.vue
index a58225a172..ba35a2783d 100644
--- a/src/web/app/mobile/views/components/ui.nav.vue
+++ b/src/web/app/mobile/views/components/ui.nav.vue
@@ -18,7 +18,7 @@
<li><router-link to="/">%fa:home%%i18n:mobile.tags.mk-ui-nav.home%%fa:angle-right%</router-link></li>
<li><router-link to="/i/notifications">%fa:R bell%%i18n:mobile.tags.mk-ui-nav.notifications%<template v-if="hasUnreadNotifications">%fa:circle%</template>%fa:angle-right%</router-link></li>
<li><router-link to="/i/messaging">%fa:R comments%%i18n:mobile.tags.mk-ui-nav.messaging%<template v-if="hasUnreadMessagingMessages">%fa:circle%</template>%fa:angle-right%</router-link></li>
- <li><router-link to="/game/othello">%fa:gamepad%ゲーム%fa:angle-right%</router-link></li>
+ <li><router-link to="/othello">%fa:gamepad%ゲーム%fa:angle-right%</router-link></li>
</ul>
<ul>
<li><a :href="chUrl" target="_blank">%fa:tv%%i18n:mobile.tags.mk-ui-nav.ch%%fa:angle-right%</a></li>
diff --git a/src/web/app/mobile/views/pages/othello.vue b/src/web/app/mobile/views/pages/othello.vue
index 67f4add07f..b110bf309e 100644
--- a/src/web/app/mobile/views/pages/othello.vue
+++ b/src/web/app/mobile/views/pages/othello.vue
@@ -1,16 +1,50 @@
<template>
<mk-ui>
<span slot="header">%fa:gamepad%オセロ</span>
- <mk-othello/>
+ <mk-othello v-if="!fetching" :init-game="game" @gamed="onGamed"/>
</mk-ui>
</template>
<script lang="ts">
import Vue from 'vue';
+import Progress from '../../../common/scripts/loading';
+
export default Vue.extend({
+ data() {
+ return {
+ fetching: false,
+ game: null
+ };
+ },
+ watch: {
+ $route: 'fetch'
+ },
+ created() {
+ this.fetch();
+ },
mounted() {
document.title = 'Misskey オセロ';
document.documentElement.style.background = '#fff';
+ },
+ methods: {
+ fetch() {
+ if (this.$route.params.game == null) return;
+
+ Progress.start();
+ this.fetching = true;
+
+ (this as any).api('othello/games/show', {
+ game_id: this.$route.params.game
+ }).then(game => {
+ this.game = game;
+ this.fetching = false;
+
+ Progress.done();
+ });
+ },
+ onGamed(game) {
+ history.pushState(null, null, '/othello/' + game.id);
+ }
}
});
</script>