mirror of
https://git.joinfirefish.org/firefish/firefish.git
synced 2024-05-20 18:51:12 +02:00
f0a29721c9
* wip * Update note.ts * Update timeline.ts * Update core.ts * wip * Update generate-visibility-query.ts * wip * wip * wip * wip * wip * Update global-timeline.ts * wip * wip * wip * Update vote.ts * wip * wip * Update create.ts * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * Update files.ts * wip * wip * Update CONTRIBUTING.md * wip * wip * wip * wip * wip * wip * wip * wip * Update read-notification.ts * wip * wip * wip * wip * wip * wip * wip * Update cancel.ts * wip * wip * wip * Update show.ts * wip * wip * Update gen-id.ts * Update create.ts * Update id.ts * wip * wip * wip * wip * wip * wip * wip * Docker: Update files about Docker (#4599) * Docker: Use cache if files used by `yarn install` was not updated This patch reduces the number of times to installing node_modules. For example, `yarn install` step will be skipped when only ".config/default.yml" is updated. * Docker: Migrate MongoDB to Postgresql Misskey uses Postgresql as a database instead of Mongodb since version 11. * Docker: Uncomment about data persistence This patch will save a lot of databases. * wip * wip * wip * Update activitypub.ts * wip * wip * wip * Update logs.ts * wip * Update drive-file.ts * Update register.ts * wip * wip * Update mentions.ts * wip * wip * wip * Update recommendation.ts * wip * Update index.ts * wip * Update recommendation.ts * Doc: Update docker.ja.md and docker.en.md (#1) (#4608) Update how to set up misskey. * wip * ✌️ * wip * Update note.ts * Update postgre.ts * wip * wip * wip * wip * Update add-file.ts * wip * wip * wip * Clean up * Update logs.ts * wip * 🍕 * wip * Ad notes * wip * Update api-visibility.ts * Update note.ts * Update add-file.ts * tests * tests * Update postgre.ts * Update utils.ts * wip * wip * Refactor * wip * Refactor * wip * wip * Update show-users.ts * Update update-instance.ts * wip * Update feed.ts * Update outbox.ts * Update outbox.ts * Update user.ts * wip * Update list.ts * Update update-hashtag.ts * wip * Update update-hashtag.ts * Refactor * Update update.ts * wip * wip * ✌️ * clean up * docs * Update push.ts * wip * Update api.ts * wip * ✌️ * Update make-pagination-query.ts * ✌️ * Delete hashtags.ts * Update instances.ts * Update instances.ts * Update create.ts * Update search.ts * Update reversi-game.ts * Update signup.ts * Update user.ts * id * Update example.yml * 🎨 * objectid * fix * reversi * reversi * Fix bug of chart engine * Add test of chart engine * Improve test * Better testing * Improve chart engine * Refactor * Add test of chart engine * Refactor * Add chart test * Fix bug * コミットし忘れ * Refactoring * ✌️ * Add tests * Add test * Extarct note tests * Refactor * 存在しないユーザーにメンションできなくなっていた問題を修正 * Fix bug * Update update-meta.ts * Fix bug * Update mention.vue * Fix bug * Update meta.ts * Update CONTRIBUTING.md * Fix bug * Fix bug * Fix bug * Clean up * Clean up * Update notification.ts * Clean up * Add mute tests * Add test * Refactor * Add test * Fix test * Refactor * Refactor * Add tests * Update utils.ts * Update utils.ts * Fix test * Update package.json * Update update.ts * Update manifest.ts * Fix bug * Fix bug * Add test * 🎨 * Update endpoint permissions * Updaye permisison * Update person.ts #4299 * データベースと同期しないように * Fix bug * Fix bug * Update reversi-game.ts * Use a feature of Node v11.7.0 to extract a public key (#4644) * wip * wip * ✌️ * Refactoring #1540 * test * test * test * test * test * test * test * Fix bug * Fix test * 🍣 * wip * #4471 * Add test for #4335 * Refactor * Fix test * Add tests * 🕓 * Fix bug * Add test * Add test * rename * Fix bug
176 lines
3.2 KiB
Vue
176 lines
3.2 KiB
Vue
<template>
|
|
<div class="vchtoekanapleubgzioubdtmlkribzfd">
|
|
<div v-if="game">
|
|
<x-gameroom :game="game" :self-nav="selfNav" @go-index="goIndex"/>
|
|
</div>
|
|
<div class="matching" v-else-if="matching">
|
|
<h1>{{ this.$t('matching.waiting-for').split('{}')[0] }}<b><mk-user-name :user="matching"/></b>{{ this.$t('matching.waiting-for').split('{}')[1] }}<mk-ellipsis/></h1>
|
|
<div class="cancel">
|
|
<form-button round @click="cancel">{{ $t('matching.cancel') }}</form-button>
|
|
</div>
|
|
</div>
|
|
<div v-else-if="gameId">
|
|
...
|
|
</div>
|
|
<div class="index" v-else>
|
|
<x-index @go="nav" @matching="onMatching"/>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import Vue from 'vue';
|
|
import i18n from '../../../../../i18n';
|
|
import XGameroom from './reversi.gameroom.vue';
|
|
import XIndex from './reversi.index.vue';
|
|
import Progress from '../../../../scripts/loading';
|
|
|
|
export default Vue.extend({
|
|
i18n: i18n('common/views/components/games/reversi/reversi.vue'),
|
|
components: {
|
|
XGameroom,
|
|
XIndex
|
|
},
|
|
|
|
props: {
|
|
gameId: {
|
|
type: String,
|
|
required: false
|
|
},
|
|
selfNav: {
|
|
type: Boolean,
|
|
require: false,
|
|
default: true
|
|
}
|
|
},
|
|
|
|
data() {
|
|
return {
|
|
game: null,
|
|
matching: null,
|
|
connection: null,
|
|
pingClock: null
|
|
};
|
|
},
|
|
|
|
watch: {
|
|
game() {
|
|
this.$emit('gamed', this.game);
|
|
},
|
|
|
|
gameId() {
|
|
this.fetch();
|
|
}
|
|
},
|
|
|
|
mounted() {
|
|
this.fetch();
|
|
|
|
if (this.$store.getters.isSignedIn) {
|
|
this.connection = this.$root.stream.useSharedConnection('gamesReversi');
|
|
|
|
this.connection.on('matched', this.onMatched);
|
|
|
|
this.pingClock = setInterval(() => {
|
|
if (this.matching) {
|
|
this.connection.send('ping', {
|
|
id: this.matching.id
|
|
});
|
|
}
|
|
}, 3000);
|
|
}
|
|
},
|
|
|
|
beforeDestroy() {
|
|
if (this.connection) {
|
|
this.connection.dispose();
|
|
clearInterval(this.pingClock);
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
fetch() {
|
|
if (this.gameId == null) {
|
|
this.game = null;
|
|
} else {
|
|
Progress.start();
|
|
this.$root.api('games/reversi/games/show', {
|
|
gameId: this.gameId
|
|
}).then(game => {
|
|
this.game = game;
|
|
Progress.done();
|
|
});
|
|
}
|
|
},
|
|
|
|
async nav(game, actualNav = true) {
|
|
if (this.selfNav) {
|
|
// 受け取ったゲーム情報が省略されたものなら完全な情報を取得する
|
|
if (game != null && game.map == null) {
|
|
game = await this.$root.api('games/reversi/games/show', {
|
|
gameId: game.id
|
|
});
|
|
}
|
|
|
|
this.game = game;
|
|
} else {
|
|
this.$emit('nav', game, actualNav);
|
|
}
|
|
},
|
|
|
|
onMatching(user) {
|
|
this.matching = user;
|
|
},
|
|
|
|
cancel() {
|
|
this.matching = null;
|
|
this.$root.api('games/reversi/match/cancel');
|
|
},
|
|
|
|
accept(invitation) {
|
|
this.$root.api('games/reversi/match', {
|
|
userId: invitation.parent.id
|
|
}).then(game => {
|
|
if (game) {
|
|
this.matching = null;
|
|
|
|
this.nav(game);
|
|
}
|
|
});
|
|
},
|
|
|
|
onMatched(game) {
|
|
this.matching = null;
|
|
this.game = game;
|
|
this.nav(game, false);
|
|
},
|
|
|
|
goIndex() {
|
|
this.nav(null);
|
|
}
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<style lang="stylus" scoped>
|
|
.vchtoekanapleubgzioubdtmlkribzfd
|
|
color var(--text)
|
|
background var(--bg)
|
|
|
|
> .matching
|
|
> h1
|
|
margin 0
|
|
padding 24px
|
|
font-size 20px
|
|
text-align center
|
|
font-weight normal
|
|
|
|
> .cancel
|
|
margin 0 auto
|
|
padding 24px 0 0 0
|
|
max-width 200px
|
|
text-align center
|
|
border-top dashed 1px #c4cdd4
|
|
|
|
</style>
|