summaryrefslogtreecommitdiff
path: root/src/client/app/common
diff options
context:
space:
mode:
authorgutfuckllc <40531868+gutfuckllc@users.noreply.github.com>2018-08-05 16:54:54 -0400
committergutfuckllc <40531868+gutfuckllc@users.noreply.github.com>2018-08-05 16:54:54 -0400
commit752186066b69c7cb13b6fc0db7fc69469e845d21 (patch)
treecaed5ac8ffd0b81a548b16c5ee79fd8e2af81907 /src/client/app/common
parentRemoved start.sh (diff)
parent非公開の投稿に自分以外が返信したりRenoteしたりできな... (diff)
downloadmisskey-752186066b69c7cb13b6fc0db7fc69469e845d21.tar.gz
misskey-752186066b69c7cb13b6fc0db7fc69469e845d21.tar.bz2
misskey-752186066b69c7cb13b6fc0db7fc69469e845d21.zip
Merge remote-tracking branch 'upstream/master' into devel
Diffstat (limited to 'src/client/app/common')
-rw-r--r--src/client/app/common/views/components/games/reversi/reversi.game.vue30
-rw-r--r--src/client/app/common/views/components/games/reversi/reversi.gameroom.vue16
-rw-r--r--src/client/app/common/views/components/games/reversi/reversi.index.vue6
-rw-r--r--src/client/app/common/views/components/games/reversi/reversi.vue33
-rw-r--r--src/client/app/common/views/components/misskey-flavored-markdown.ts68
-rw-r--r--src/client/app/common/views/components/ui/form/button.vue3
6 files changed, 123 insertions, 33 deletions
diff --git a/src/client/app/common/views/components/games/reversi/reversi.game.vue b/src/client/app/common/views/components/games/reversi/reversi.game.vue
index 66973e1970..d1809d741f 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.game.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.game.vue
@@ -1,8 +1,9 @@
<template>
<div class="xqnhankfuuilcwvhgsopeqncafzsquya">
+ <button class="go-index" v-if="selfNav" @click="goIndex">%fa:arrow-left%</button>
<header><b><router-link :to="blackUser | userPage">{{ blackUser | userName }}</router-link></b>(%i18n:common.reversi.black%) vs <b><router-link :to="whiteUser | userPage">{{ whiteUser | userName }}</router-link></b>(%i18n:common.reversi.white%)</header>
- <div style="overflow: hidden">
+ <div style="overflow: hidden; line-height: 28px;">
<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}<mk-ellipsis/></p>
<p class="turn" v-if="logPos != logs.length">{{ '%i18n:common.reversi.past-turn-of%'.replace('{}', $options.filters.userName(turnUser)) }}</p>
<p class="turn1" v-if="iAmPlayer && !game.isEnded && !isMyTurn">%i18n:common.reversi.opponent-turn%<mk-ellipsis/></p>
@@ -69,7 +70,20 @@ import Reversi, { Color } from '../../../../../../../games/reversi/core';
import { url } from '../../../../../config';
export default Vue.extend({
- props: ['initGame', 'connection'],
+ props: {
+ initGame: {
+ type: Object,
+ require: true
+ },
+ connection: {
+ type: Object,
+ require: true
+ },
+ selfNav: {
+ type: Boolean,
+ require: true
+ }
+ },
data() {
return {
@@ -276,6 +290,10 @@ export default Vue.extend({
(this as any).api('games/reversi/games/surrender', {
gameId: this.game.id
});
+ },
+
+ goIndex() {
+ this.$emit('go-index');
}
}
});
@@ -287,6 +305,14 @@ export default Vue.extend({
root(isDark)
text-align center
+ > .go-index
+ position absolute
+ top 0
+ left 0
+ z-index 1
+ width 42px
+ height 42px
+
> header
padding 8px
border-bottom dashed 1px isDark ? #4c5761 : #c4cdd4
diff --git a/src/client/app/common/views/components/games/reversi/reversi.gameroom.vue b/src/client/app/common/views/components/games/reversi/reversi.gameroom.vue
index 4969a9347e..1539c88de0 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.gameroom.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.gameroom.vue
@@ -1,7 +1,7 @@
<template>
<div>
<x-room v-if="!g.isStarted" :game="g" :connection="connection"/>
- <x-game v-else :init-game="g" :connection="connection"/>
+ <x-game v-else :init-game="g" :connection="connection" :self-nav="selfNav" @go-index="goIndex"/>
</div>
</template>
@@ -16,7 +16,16 @@ export default Vue.extend({
XGame,
XRoom
},
- props: ['game'],
+ props: {
+ game: {
+ type: Object,
+ required: true
+ },
+ selfNav: {
+ type: Boolean,
+ require: true
+ }
+ },
data() {
return {
connection: null,
@@ -36,6 +45,9 @@ export default Vue.extend({
onStarted(game) {
Object.assign(this.g, game);
this.$forceUpdate();
+ },
+ goIndex() {
+ this.$emit('go-index');
}
}
});
diff --git a/src/client/app/common/views/components/games/reversi/reversi.index.vue b/src/client/app/common/views/components/games/reversi/reversi.index.vue
index 026159a0fd..d4d35f6a86 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.index.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.index.vue
@@ -96,11 +96,7 @@ export default Vue.extend({
methods: {
go(game) {
- (this as any).api('games/reversi/games/show', {
- gameId: game.id
- }).then(game => {
- this.$emit('go', game);
- });
+ this.$emit('go', game);
},
match() {
diff --git a/src/client/app/common/views/components/games/reversi/reversi.vue b/src/client/app/common/views/components/games/reversi/reversi.vue
index d99634a950..223ec4597a 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.vue
@@ -1,7 +1,7 @@
<template>
<div class="vchtoekanapleubgzioubdtmlkribzfd">
<div v-if="game">
- <x-gameroom :game="game"/>
+ <x-gameroom :game="game" :self-nav="selfNav" @go-index="goIndex"/>
</div>
<div class="matching" v-else-if="matching">
<h1>{{ '%i18n:@matching.waiting-for%'.split('{}')[0] }}<b>{{ matching | userName }}</b>{{ '%i18n:@matching.waiting-for%'.split('{}')[1] }}<mk-ellipsis/></h1>
@@ -34,6 +34,11 @@ export default Vue.extend({
gameId: {
type: String,
required: false
+ },
+ selfNav: {
+ type: Boolean,
+ require: false,
+ default: true
}
},
@@ -95,18 +100,24 @@ export default Vue.extend({
(this as any).api('games/reversi/games/show', {
gameId: this.gameId
}).then(game => {
- this.nav(game, true);
+ this.game = game;
Progress.done();
});
}
},
- nav(game, silent) {
- this.matching = null;
- this.game = game;
+ async nav(game, actualNav = true) {
+ if (this.selfNav) {
+ // 受け取ったゲーム情報が省略されたものなら完全な情報を取得する
+ if (game != null && (game.settings == null || game.settings.map == null)) {
+ game = await (this as any).api('games/reversi/games/show', {
+ gameId: game.id
+ });
+ }
- if (!silent) {
- this.$emit('nav', this.game);
+ this.game = game;
+ } else {
+ this.$emit('nav', game, actualNav);
}
},
@@ -125,7 +136,8 @@ export default Vue.extend({
}).then(game => {
if (game) {
this.matching = null;
- this.game = game;
+
+ this.nav(game);
}
});
},
@@ -133,6 +145,11 @@ export default Vue.extend({
onMatched(game) {
this.matching = null;
this.game = game;
+ this.nav(game, false);
+ },
+
+ goIndex() {
+ this.nav(null);
}
}
});
diff --git a/src/client/app/common/views/components/misskey-flavored-markdown.ts b/src/client/app/common/views/components/misskey-flavored-markdown.ts
index f9c97bd35a..e97da4302c 100644
--- a/src/client/app/common/views/components/misskey-flavored-markdown.ts
+++ b/src/client/app/common/views/components/misskey-flavored-markdown.ts
@@ -1,5 +1,6 @@
import Vue from 'vue';
import * as emojilib from 'emojilib';
+import { length } from 'stringz';
import parse from '../../../../../mfm/parse';
import getAcct from '../../../../../misc/acct/render';
import { url } from '../../../config';
@@ -40,10 +41,13 @@ export default Vue.component('misskey-flavored-markdown', {
ast = this.ast;
}
+ let bigCount = 0;
+ let motionCount = 0;
+
// Parse ast to DOM
const els = flatten(ast.map(token => {
switch (token.type) {
- case 'text':
+ case 'text': {
const text = token.content.replace(/(\r\n|\n|\r)/g, '\n');
if (this.shouldBreak) {
@@ -54,30 +58,52 @@ export default Vue.component('misskey-flavored-markdown', {
} else {
return createElement('span', text.replace(/\n/g, ' '));
}
+ }
- case 'bold':
+ case 'bold': {
return createElement('b', token.bold);
+ }
- case 'big':
+ case 'big': {
+ bigCount++;
+ const isLong = length(token.big) > 10;
+ const isMany = bigCount > 3;
return (createElement as any)('strong', {
attrs: {
- style: 'display: inline-block; font-size: 200%;'
+ style: `display: inline-block; font-size: ${ isMany ? '100%' : '150%' };`
},
- directives: [this.$store.state.settings.disableAnimatedMfm ? {} : {
+ directives: [this.$store.state.settings.disableAnimatedMfm || isLong || isMany ? {} : {
name: 'animate-css',
value: { classes: 'tada', iteration: 'infinite' }
}]
}, token.big);
+ }
- case 'url':
+ case 'motion': {
+ motionCount++;
+ const isLong = length(token.motion) > 10;
+ const isMany = motionCount > 3;
+ return (createElement as any)('span', {
+ attrs: {
+ style: 'display: inline-block;'
+ },
+ directives: [this.$store.state.settings.disableAnimatedMfm || isLong || isMany ? {} : {
+ name: 'animate-css',
+ value: { classes: 'rubberBand', iteration: 'infinite' }
+ }]
+ }, token.motion);
+ }
+
+ case 'url': {
return createElement(MkUrl, {
props: {
url: token.content,
target: '_blank'
}
});
+ }
- case 'link':
+ case 'link': {
return createElement('a', {
attrs: {
class: 'link',
@@ -86,8 +112,9 @@ export default Vue.component('misskey-flavored-markdown', {
title: token.url
}
}, token.title);
+ }
- case 'mention':
+ case 'mention': {
return (createElement as any)('a', {
attrs: {
href: `${url}/@${getAcct(token)}`,
@@ -99,16 +126,18 @@ export default Vue.component('misskey-flavored-markdown', {
value: token.content
}]
}, token.content);
+ }
- case 'hashtag':
+ case 'hashtag': {
return createElement('a', {
attrs: {
href: `${url}/tags/${encodeURIComponent(token.hashtag)}`,
target: '_blank'
}
}, token.content);
+ }
- case 'code':
+ case 'code': {
return createElement('pre', {
class: 'code'
}, [
@@ -118,15 +147,17 @@ export default Vue.component('misskey-flavored-markdown', {
}
})
]);
+ }
- case 'inline-code':
+ case 'inline-code': {
return createElement('code', {
domProps: {
innerHTML: token.html
}
});
+ }
- case 'quote':
+ case 'quote': {
const text2 = token.quote.replace(/(\r\n|\n|\r)/g, '\n');
if (this.shouldBreak) {
@@ -145,27 +176,32 @@ export default Vue.component('misskey-flavored-markdown', {
}
}, text2.replace(/\n/g, ' '));
}
+ }
- case 'title':
+ case 'title': {
return createElement('div', {
attrs: {
class: 'title'
}
}, token.title);
+ }
- case 'emoji':
+ case 'emoji': {
const emoji = emojilib.lib[token.emoji];
return createElement('span', emoji ? emoji.char : token.content);
+ }
- case 'search':
+ case 'search': {
return createElement(MkGoogle, {
props: {
q: token.query
}
});
+ }
- default:
+ default: {
console.log('unknown ast type:', token.type);
+ }
}
}));
diff --git a/src/client/app/common/views/components/ui/form/button.vue b/src/client/app/common/views/components/ui/form/button.vue
index 6e1475bc38..9c37b3118b 100644
--- a/src/client/app/common/views/components/ui/form/button.vue
+++ b/src/client/app/common/views/components/ui/form/button.vue
@@ -45,6 +45,9 @@ root(isDark)
color isDark ? #fff : #606266
transition 0.1s
+ *
+ pointer-events none
+
&:hover
&:focus
color $theme-color