Merge branch 'master' into l10n_master

This commit is contained in:
syuilo 2018-08-02 10:05:41 +09:00 committed by GitHub
commit 3fa8433a0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 43 additions and 67 deletions

View File

@ -148,7 +148,7 @@ common/views/components/games/reversi/reversi.vue:
playing: "進行中" playing: "進行中"
matching: matching:
waiting-for: "{}を待っています" waiting-for: "{}を待っています"
cacnel: "キャンセル" cancel: "キャンセル"
common/views/components/games/reversi/reversi.room.vue: common/views/components/games/reversi/reversi.room.vue:
settings-of-the-game: "ゲームの設定" settings-of-the-game: "ゲームの設定"
@ -318,14 +318,9 @@ common/views/widgets/broadcast.vue:
next: "次" next: "次"
common/views/widgets/calendar.vue: common/views/widgets/calendar.vue:
year-english: "" year: "{}年"
year-japanese: "年" month: "{}月"
month-english: "" day: "{}日"
month-japanese: "月"
day-english: ""
day-japanese: "日"
weekday-english: ""
weekday-japanese: "曜日"
today: "今日:" today: "今日:"
this-month: "今月:" this-month: "今月:"
this-year: "今年:" this-year: "今年:"
@ -872,20 +867,14 @@ desktop/views/pages/selectdrive.vue:
desktop/views/pages/search.vue: desktop/views/pages/search.vue:
not-available: "検索機能を利用することができません。" not-available: "検索機能を利用することができません。"
not-found-quotes1: "「" not-found: "「{}」に関する投稿は見つかりませんでした。"
not-found-quotes2: "」"
not-found-text-english: ""
not-found-text-japanese: "に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue: desktop/views/pages/share.vue:
share-with: "Misskeyで共有" share-with: "Misskeyで共有"
close: "閉じる" close: "閉じる"
desktop/views/pages/tag.vue: desktop/views/pages/tag.vue:
no-posts-found-english: "" no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
no-posts-found-japanese: "に関する投稿は見つかりませんでした。"
left-quote: "「"
right-quote: "」"
desktop/views/pages/user-list.users.vue: desktop/views/pages/user-list.users.vue:
users: "ユーザー" users: "ユーザー"
@ -1131,10 +1120,7 @@ mobile/views/pages/home.vue:
global: "グローバル" global: "グローバル"
mobile/views/pages/tag.vue: mobile/views/pages/tag.vue:
no-posts-found-japanese: "に関する投稿は見つかりませんでした。" no-posts-found: "ハッシュタグ「{}」が付けられた投稿は見つかりませんでした。"
no-posts-found-english: ""
left-quote: "「"
right-quote: "」"
mobile/views/pages/welcome.vue: mobile/views/pages/welcome.vue:
signup: "新規登録" signup: "新規登録"

View File

@ -1,8 +1,8 @@
{ {
"name": "misskey", "name": "misskey",
"author": "syuilo <i@syuilo.com>", "author": "syuilo <i@syuilo.com>",
"version": "5.9.0", "version": "5.10.0",
"clientVersion": "1.0.7726", "clientVersion": "1.0.7828",
"codename": "nighthike", "codename": "nighthike",
"main": "./built/index.js", "main": "./built/index.js",
"private": true, "private": true,

View File

@ -1,14 +1,14 @@
<template> <template>
<div class="root"> <div class="root">
<header><b>{{ blackUser.name }}</b>(%i18n:common.reversi.black%) vs <b>{{ whiteUser.name }}</b>(%i18n:common.reversi.white%)</header> <header><b>{{ blackUser | userName }}</b>(%i18n:common.reversi.black%) vs <b>{{ whiteUser | userName }}</b>(%i18n:common.reversi.white%)</header>
<div style="overflow: hidden"> <div style="overflow: hidden">
<p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', turnUser.name) }}<mk-ellipsis/></p> <p class="turn" v-if="!iAmPlayer && !game.isEnded">{{ '%i18n:common.reversi.turn-of%'.replace('{}', turnUser | userName) }}<mk-ellipsis/></p>
<p class="turn" v-if="logPos != logs.length">{{ '%i18n:common.reversi.past-turn-of%'.replace('{}', turnUser.name) }}</p> <p class="turn" v-if="logPos != logs.length">{{ '%i18n:common.reversi.past-turn-of%'.replace('{}', turnUser | userName) }}</p>
<p class="turn1" v-if="iAmPlayer && !game.isEnded && !isMyTurn">%i18n:common.reversi.opponent-turn%<mk-ellipsis/></p> <p class="turn1" v-if="iAmPlayer && !game.isEnded && !isMyTurn">%i18n:common.reversi.opponent-turn%<mk-ellipsis/></p>
<p class="turn2" v-if="iAmPlayer && !game.isEnded && isMyTurn" v-animate-css="{ classes: 'tada', iteration: 'infinite' }">%i18n:common.reversi.my-turn%</p> <p class="turn2" v-if="iAmPlayer && !game.isEnded && isMyTurn" v-animate-css="{ classes: 'tada', iteration: 'infinite' }">%i18n:common.reversi.my-turn%</p>
<p class="result" v-if="game.isEnded && logPos == logs.length"> <p class="result" v-if="game.isEnded && logPos == logs.length">
<template v-if="game.winner">{{ '%i18n:common.reversi.won%'.replace('{}', game.winner.name) }}{{ game.settings.isLlotheo ? ' (ロセオ)' : '' }}</template> <template v-if="game.winner">{{ '%i18n:common.reversi.won%'.replace('{}', game.winner | userName) }}{{ game.settings.isLlotheo ? ' (ロセオ)' : '' }}</template>
<template v-else>%i18n:common.reversi.drawn%</template> <template v-else>%i18n:common.reversi.drawn%</template>
</p> </p>
</div> </div>

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="root"> <div class="root">
<header><b>{{ game.user1.name }}</b> vs <b>{{ game.user2.name }}</b></header> <header><b>{{ game.user1 | userName }}</b> vs <b>{{ game.user2 | userName }}</b></header>
<div> <div>
<p>%i18n:@settings-of-the-game%</p> <p>%i18n:@settings-of-the-game%</p>
@ -33,8 +33,8 @@
<span>%i18n:@black-or-white%</span> <span>%i18n:@black-or-white%</span>
</div> </div>
<el-radio v-model="game.settings.bw" label="random" @change="updateSettings">%i18n:@random%</el-radio> <el-radio v-model="game.settings.bw" label="random" @change="updateSettings">%i18n:@random%</el-radio>
<el-radio v-model="game.settings.bw" :label="1" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user1.name }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio> <el-radio v-model="game.settings.bw" :label="1" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user1 | userName }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio>
<el-radio v-model="game.settings.bw" :label="2" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user2.name }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio> <el-radio v-model="game.settings.bw" :label="2" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user2 | userName }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio>
</el-card> </el-card>
<el-card class="rules"> <el-card class="rules">

View File

@ -4,7 +4,7 @@
<x-gameroom :game="game"/> <x-gameroom :game="game"/>
</div> </div>
<div class="matching" v-else-if="matching"> <div class="matching" v-else-if="matching">
<h1>{{ '%i18n:@matching.waiting-for%'.split('{}')[0] }}<b>{{ matching.name }}</b>{{ '%i18n:@matching.waiting-for%'.split('{}')[1] }}<mk-ellipsis/></h1> <h1>{{ '%i18n:@matching.waiting-for%'.split('{}')[0] }}<b>{{ matching | userName }}</b>{{ '%i18n:@matching.waiting-for%'.split('{}')[1] }}<mk-ellipsis/></h1>
<div class="cancel"> <div class="cancel">
<el-button round @click="cancel">%i18n:@matching.cancel%</el-button> <el-button round @click="cancel">%i18n:@matching.cancel%</el-button>
</div> </div>
@ -30,7 +30,7 @@
<h2>%i18n:@invitations%</h2> <h2>%i18n:@invitations%</h2>
<div class="invitation" v-for="i in invitations" tabindex="-1" @click="accept(i)"> <div class="invitation" v-for="i in invitations" tabindex="-1" @click="accept(i)">
<mk-avatar class="avatar" :user="i.parent"/> <mk-avatar class="avatar" :user="i.parent"/>
<span class="name"><b>{{ i.parent.name }}</b></span> <span class="name"><b>{{ i.parent | userName }}</b></span>
<span class="username">@{{ i.parent.username }}</span> <span class="username">@{{ i.parent.username }}</span>
<mk-time :time="i.createdAt"/> <mk-time :time="i.createdAt"/>
</div> </div>
@ -40,7 +40,7 @@
<a class="game" v-for="g in myGames" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`"> <a class="game" v-for="g in myGames" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
<mk-avatar class="avatar" :user="g.user1"/> <mk-avatar class="avatar" :user="g.user1"/>
<mk-avatar class="avatar" :user="g.user2"/> <mk-avatar class="avatar" :user="g.user2"/>
<span><b>{{ g.user1.name }}</b> vs <b>{{ g.user2.name }}</b></span> <span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span> <span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
</a> </a>
</section> </section>
@ -49,7 +49,7 @@
<a class="game" v-for="g in games" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`"> <a class="game" v-for="g in games" tabindex="-1" @click.prevent="go(g)" :href="`/reversi/${g.id}`">
<mk-avatar class="avatar" :user="g.user1"/> <mk-avatar class="avatar" :user="g.user1"/>
<mk-avatar class="avatar" :user="g.user2"/> <mk-avatar class="avatar" :user="g.user2"/>
<span><b>{{ g.user1.name }}</b> vs <b>{{ g.user2.name }}</b></span> <span><b>{{ g.user1 | userName }}</b> vs <b>{{ g.user2 | userName }}</b></span>
<span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span> <span class="state">{{ g.isEnded ? '%i18n:@game-state.ended%' : '%i18n:@game-state.playing%' }}</span>
</a> </a>
</section> </section>

View File

@ -79,7 +79,8 @@ root(isDark)
> .content > .content
> .balloon > .balloon
display block display flex
align-items center
padding 0 padding 0
max-width calc(100% - 16px) max-width calc(100% - 16px)
min-height 38px min-height 38px
@ -254,7 +255,7 @@ root(isDark)
font-size 11px font-size 11px
&[data-is-deleted] &[data-is-deleted]
> .baloon > .balloon
opacity 0.5 opacity 0.5
.message[data-darkmode] .message[data-darkmode]

View File

@ -4,10 +4,10 @@
<div class="mkw-calendar--body"> <div class="mkw-calendar--body">
<div class="calendar" :data-is-holiday="isHoliday"> <div class="calendar" :data-is-holiday="isHoliday">
<p class="month-and-year"> <p class="month-and-year">
<span class="year">%i18n:@year-english%{{ year }}%i18n:@year-japanese%</span> <span class="year">{{ '%i18n:@year%'.split('{}')[0] }}{{ year }}{{ '%i18n:@year%'.split('{}')[1] }}</span>
<span class="month">%i18n:@month-english%{{ month }}%i18n:@month-japanese%</span> <span class="month">{{ '%i18n:@month%'.split('{}')[0] }}{{ month }}{{ '%i18n:@month%'.split('{}')[1] }}</span>
</p> </p>
<p class="day">%i18n:@day-english%{{ day }}%i18n:@day-japanese%</p> <p class="day">{{ '%i18n:@day%'.split('{}')[0] }}{{ day }}{{ '%i18n:@day%'.split('{}')[1] }}</p>
<p class="week-day">{{ weekDay }}</p> <p class="week-day">{{ weekDay }}</p>
</div> </div>
<div class="info"> <div class="info">

View File

@ -7,7 +7,7 @@
<mk-ellipsis-icon/> <mk-ellipsis-icon/>
</div> </div>
<p :class="$style.notAvailable" v-if="!fetching && notAvailable">%i18n:@not-available%</p> <p :class="$style.notAvailable" v-if="!fetching && notAvailable">%i18n:@not-available%</p>
<p :class="$style.empty" v-if="!fetching && empty">%fa:search%%i18n:@not-found-text-english%%i18n:@not-found-quotes1%{{ q }}%i18n:@not-found-quotes2%%i18n:@not-found-text-japanese%</p> <p :class="$style.empty" v-if="!fetching && empty">%fa:search% {{ '%i18n:not-found%'.split('{}')[0] }}{{ q }}{{ '%i18n:not-found%'.split('{}')[1] }}</p>
<mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/> <mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/>
</mk-ui> </mk-ui>
</template> </template>

View File

@ -6,7 +6,7 @@
<div :class="$style.loading" v-if="fetching"> <div :class="$style.loading" v-if="fetching">
<mk-ellipsis-icon/> <mk-ellipsis-icon/>
</div> </div>
<p :class="$style.empty" v-if="!fetching && empty">%i18n:no-posts-found-english%%fa:search%%i18n:left-quote%{{ q }}%i18n:right-quote%%i18n:no-posts-found-japanese%</p> <p :class="$style.empty" v-if="!fetching && empty">%fa:search% {{ '%i18n:no-posts-found%'.split('{}')[0] }}{{ q }}{{ '%i18n:no-posts-found%'.split('{}')[1] }}</p>
<mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/> <mk-notes ref="timeline" :class="$style.notes" :more="existMore ? more : null"/>
</mk-ui> </mk-ui>
</template> </template>

View File

@ -3,7 +3,7 @@
<span slot="header">%fa:hashtag%{{ $route.params.tag }}</span> <span slot="header">%fa:hashtag%{{ $route.params.tag }}</span>
<main> <main>
<p v-if="!fetching && empty">%fa:search%%i18n:@no-posts-found-english%%i18n:@left-quote%{{ q }}%i18n:@right-quote%%i18n:@no-posts-found-japanese%</p> <p v-if="!fetching && empty">%fa:search% {{ '%i18n:no-posts-found%'.split('{}')[0] }}{{ q }}{{ '%i18n:no-posts-found%'.split('{}')[1] }}</p>
<mk-notes ref="timeline" :more="existMore ? more : null"/> <mk-notes ref="timeline" :more="existMore ? more : null"/>
</main> </main>
</mk-ui> </mk-ui>

View File

@ -1,5 +1,5 @@
import { IUser } from '../models/user'; import { IUser } from '../models/user';
export default function(user: IUser): string { export default function(user: IUser): string {
return user.name || '名無し'; return user.name || user.username;
} }

View File

@ -5,6 +5,7 @@ import { IUser, pack as packUser } from './user';
import { pack as packNote } from './note'; import { pack as packNote } from './note';
const Notification = db.get<INotification>('notifications'); const Notification = db.get<INotification>('notifications');
Notification.createIndex('notifieeId');
export default Notification; export default Notification;
export interface INotification { export interface INotification {

View File

@ -19,10 +19,6 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
const [markAsRead = true, markAsReadErr] = $.bool.optional.get(params.markAsRead); const [markAsRead = true, markAsReadErr] = $.bool.optional.get(params.markAsRead);
if (markAsReadErr) return rej('invalid markAsRead param'); if (markAsReadErr) return rej('invalid markAsRead param');
// Get 'type' parameter
const [type, typeErr] = $.arr($.str).optional.unique().get(params.type);
if (typeErr) return rej('invalid type param');
// Get 'limit' parameter // Get 'limit' parameter
const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit); const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit);
if (limitErr) return rej('invalid limit param'); if (limitErr) return rej('invalid limit param');
@ -41,8 +37,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
} }
const mute = await Mute.find({ const mute = await Mute.find({
muterId: user._id, muterId: user._id
deletedAt: { $exists: false }
}); });
const query = { const query = {
@ -69,12 +64,6 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
}); });
} }
if (type) {
query.type = {
$in: type
};
}
if (sinceId) { if (sinceId) {
sort._id = 1; sort._id = 1;
query._id = { query._id = {

View File

@ -164,14 +164,19 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
} }
// 通知 // 通知
if (isLocalUser(data.reply._user)) {
nm.push(data.reply.userId, 'reply'); nm.push(data.reply.userId, 'reply');
} }
}
// If it is renote // If it is renote
if (data.renote) { if (data.renote) {
// Notify
const type = data.text ? 'quote' : 'renote'; const type = data.text ? 'quote' : 'renote';
// Notify
if (isLocalUser(data.renote._user)) {
nm.push(data.renote.userId, type); nm.push(data.renote.userId, type);
}
// Fetch watchers // Fetch watchers
nmRelatedPromises.push(notifyToWatchersOfRenotee(data.renote, user, nm, type)); nmRelatedPromises.push(notifyToWatchersOfRenotee(data.renote, user, nm, type));
@ -181,17 +186,11 @@ export default async (user: IUser, data: Option, silent = false) => new Promise<
watch(user._id, data.renote); watch(user._id, data.renote);
} }
// If it is quote renote
if (data.text) {
// Add mention
nm.push(data.renote.userId, 'quote');
} else {
// Publish event // Publish event
if (!user._id.equals(data.renote.userId)) { if (!user._id.equals(data.renote.userId)) {
publishUserStream(data.renote.userId, 'renote', noteObj); publishUserStream(data.renote.userId, 'renote', noteObj);
} }
} }
}
if (!silent) { if (!silent) {
publish(user, note, noteObj, data.reply, data.renote, data.visibleUsers, noteActivity); publish(user, note, noteObj, data.reply, data.renote, data.visibleUsers, noteActivity);