Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a483af1b08 | ||
![]() |
01584a6bf9 | ||
![]() |
443f967611 | ||
![]() |
bf931f2c82 | ||
![]() |
5b32b900e4 | ||
![]() |
0bdcb15b3b | ||
![]() |
1b316ab98b | ||
![]() |
4cd79dd530 | ||
![]() |
c204e0518f | ||
![]() |
129d74b463 | ||
![]() |
533540031b | ||
![]() |
5ea0ccea22 | ||
![]() |
d2c12af085 | ||
![]() |
55368c2c38 | ||
![]() |
aa020eedc3 | ||
![]() |
e0874069bd | ||
![]() |
90c8568a3f |
16
CHANGELOG.md
16
CHANGELOG.md
@@ -1,6 +1,22 @@
|
||||
ChangeLog
|
||||
=========
|
||||
|
||||
10.78.3
|
||||
----------
|
||||
* 投票未対応インスタンス向けメッセージをわかりやすく
|
||||
* リバーシが404になる問題を修正
|
||||
* デザインの修正
|
||||
|
||||
10.78.2
|
||||
----------
|
||||
* リバーシが404になる問題を修正
|
||||
* ストリームで流れてくる投稿とAPIでタイムラインを取得したときとの不一致を修正
|
||||
|
||||
10.78.1
|
||||
----------
|
||||
* 「関係のない返信がタイムラインに流れる問題を修正」を取り消し
|
||||
* デザインの修正
|
||||
|
||||
10.78.0
|
||||
----------
|
||||
* 他のインスタンスからアンケートに投票できるように
|
||||
|
20
README.md
20
README.md
@@ -69,6 +69,22 @@ Please see the [Setup and Installation Guide](./docs/setup.en.md).
|
||||
----------------------------------------------------------------
|
||||
Please see the [Contribution Guide](./CONTRIBUTING.md).
|
||||
|
||||
### Collaborators
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="https://avatars3.githubusercontent.com/u/4439005?s=460&v=4" alt="syuilo" width="100"></td>
|
||||
<td><img src="https://avatars0.githubusercontent.com/u/10798641?s=460&v=4" alt="AyaMorisawa" width="100"></td>
|
||||
<td><img src="https://avatars1.githubusercontent.com/u/30769358?s=460&v=4" alt="mei23" width="100"></td>
|
||||
<td><img src="https://avatars2.githubusercontent.com/u/20679825?s=460&v=4" alt="acid-chicken" width="100"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/syuilo">@syuilo</a></td>
|
||||
<td align="center"><a href="https://github.com/AyaMorisawa">@AyaMorisawa</a></td>
|
||||
<td align="center"><a href="https://github.com/mei23">@mei23</a></td>
|
||||
<td align="center"><a href="https://github.com/acid-chicken">@acid-chicken</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
:heart: Backers & Sponsors
|
||||
----------------------------------------------------------------
|
||||
<!-- PATREON_START -->
|
||||
@@ -95,7 +111,7 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
|
||||
<td><img src="https://c8.patreon.com/2/200/16542964" alt="Takumi Sugita" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=2PsbFNw0tnubZzgSXD01R6hIgncfiElG7H7HX2Y3dyo%3D" alt="nemu" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3?token-time=2145916800&token-hash=9JtETp0X8gI280Ne1E8bxn6j4Lw5o2k4mJkICx97V_k%3D" alt="YUKIMOCHI" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/8241184/39e18850e87a449e9c9a71acb3310ebd/2?token-time=2145916800&token-hash=zrInDotuEIFslKphuSiCqr3M-r-rveTXjVKWr-VK6M0%3D" alt="Acid Chicken" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/8241184/39e18850e87a449e9c9a71acb3310ebd/3?token-time=2145916800&token-hash=gMq30aylxu5v3G8pRhWR5jeRBbYWEoRKjGbNeiCQz5g%3D" alt="Acid Chicken" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/2?token-time=2145916800&token-hash=zcwFxb2zopzWwksKVU1YpfAEjsl4yKT02aQ6yiAFRiQ%3D" alt="natalie" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=5T8XcaAf9Zyzfg3QubR06s_kJZkArVEM2dwObrBVAU4%3D" alt="Hiratake" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/10789744/97175095d8f04c0f86225ff47cb98d40/1?token-time=2145916800&token-hash=ubVARikVOg3v7NW6LDhtG-ClE1LTU3I2TJ3js2-5xDs%3D" alt="Naoki Hirayama" width="100"></td>
|
||||
@@ -122,7 +138,7 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
|
||||
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
|
||||
</tr></table>
|
||||
|
||||
**Last updated:** Fri, 18 Jan 2019 11:58:06 UTC
|
||||
**Last updated:** Mon, 21 Jan 2019 06:45:06 UTC
|
||||
<!-- PATREON_END -->
|
||||
|
||||
:four_leaf_clover: Copyright
|
||||
|
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"author": "syuilo <i@syuilo.com>",
|
||||
"version": "10.78.0",
|
||||
"clientVersion": "2.0.13640",
|
||||
"version": "10.78.3",
|
||||
"clientVersion": "2.0.13657",
|
||||
"codename": "nighthike",
|
||||
"main": "./built/index.js",
|
||||
"private": true,
|
||||
|
@@ -26,7 +26,7 @@
|
||||
</section>
|
||||
<section v-if="myGames.length > 0">
|
||||
<h2>{{ $t('my-games') }}</h2>
|
||||
<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="`/games/reversi/${g.id}`">
|
||||
<mk-avatar class="avatar" :user="g.user1"/>
|
||||
<mk-avatar class="avatar" :user="g.user2"/>
|
||||
<span><b><mk-user-name :user="g.user1"/></b> vs <b><mk-user-name :user="g.user2"/></b></span>
|
||||
@@ -36,7 +36,7 @@
|
||||
</section>
|
||||
<section v-if="games.length > 0">
|
||||
<h2>{{ $t('all-games') }}</h2>
|
||||
<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="`/games/reversi/${g.id}`">
|
||||
<mk-avatar class="avatar" :user="g.user1"/>
|
||||
<mk-avatar class="avatar" :user="g.user2"/>
|
||||
<span><b><mk-user-name :user="g.user1"/></b> vs <b><mk-user-name :user="g.user2"/></b></span>
|
||||
|
@@ -23,8 +23,8 @@ export default Vue.extend({
|
||||
computed: {
|
||||
popout(): string {
|
||||
return this.game
|
||||
? `${url}/reversi/${this.game.id}`
|
||||
: `${url}/reversi`;
|
||||
? `${url}/games/reversi/${this.game.id}`
|
||||
: `${url}/games/reversi`;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@@ -19,10 +19,10 @@ export default Vue.extend({
|
||||
methods: {
|
||||
nav(game, actualNav) {
|
||||
if (actualNav) {
|
||||
this.$router.push(`/reversi/${game.id}`);
|
||||
this.$router.push(`/games/reversi/${game.id}`);
|
||||
} else {
|
||||
// TODO: https://github.com/vuejs/vue-router/issues/703
|
||||
this.$router.push(`/reversi/${game.id}`);
|
||||
this.$router.push(`/games/reversi/${game.id}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -50,8 +50,7 @@ export default Vue.extend({
|
||||
text-align center
|
||||
line-height 24px
|
||||
font-size 0.8em
|
||||
color #71afc7
|
||||
background #eefaff
|
||||
color var(--text)
|
||||
border-radius 4px
|
||||
|
||||
> .action-form
|
||||
|
@@ -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/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><router-link to="/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/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>
|
||||
</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>
|
||||
|
@@ -20,10 +20,10 @@ export default Vue.extend({
|
||||
methods: {
|
||||
nav(game, actualNav) {
|
||||
if (actualNav) {
|
||||
this.$router.push(`/reversi/${game.id}`);
|
||||
this.$router.push(`/games/reversi/${game.id}`);
|
||||
} else {
|
||||
// TODO: https://github.com/vuejs/vue-router/issues/703
|
||||
this.$router.push(`/reversi/${game.id}`);
|
||||
this.$router.push(`/games/reversi/${game.id}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -375,7 +375,7 @@ main
|
||||
max-width 600px
|
||||
width 100%
|
||||
|
||||
> .signin-as
|
||||
> .signed-in-as
|
||||
margin 16px
|
||||
padding 16px
|
||||
text-align center
|
||||
|
@@ -892,7 +892,7 @@ export const test4: Map = {
|
||||
]
|
||||
};
|
||||
|
||||
// https://misskey.xyz/reversi/5aaabf7fe126e10b5216ea09 64
|
||||
// https://misskey.xyz/games/reversi/5aaabf7fe126e10b5216ea09 64
|
||||
export const test5: Map = {
|
||||
name: 'Test5',
|
||||
category: 'Test',
|
||||
|
@@ -98,7 +98,7 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
|
||||
if (text == null) text = '';
|
||||
const url = `${config.url}/notes/${note._id}`;
|
||||
// TODO: i18n
|
||||
text += `\n\n[リモートで投票を見る](${url})`;
|
||||
text += `\n[リモートで結果を表示](${url})`;
|
||||
|
||||
question = `${config.url}/questions/${note._id}`;
|
||||
}
|
||||
@@ -109,8 +109,10 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
|
||||
// Provides choices as text for AP
|
||||
if (note.poll != null) {
|
||||
const cs = note.poll.choices.map(c => `${c.id}: ${c.text}`);
|
||||
apText += '\n';
|
||||
apText += '\n----------------------------------------\n';
|
||||
apText += cs.join('\n');
|
||||
apText += '\n----------------------------------------\n';
|
||||
apText += '番号を返信して投票';
|
||||
}
|
||||
|
||||
if (quote) {
|
||||
|
@@ -122,7 +122,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
const followQuery = followings.map(f => ({
|
||||
userId: f.id,
|
||||
|
||||
// リプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める)
|
||||
/*// リプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める)
|
||||
$or: [{
|
||||
// リプライでない
|
||||
replyId: null
|
||||
@@ -137,7 +137,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
}, { // または
|
||||
// 自分(フォロワー)が送信したリプライ
|
||||
userId: user._id
|
||||
}]
|
||||
}]*/
|
||||
}));
|
||||
|
||||
const visibleQuery = user == null ? [{
|
||||
@@ -169,7 +169,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
visibility: 'public',
|
||||
|
||||
// リプライでない
|
||||
replyId: null,
|
||||
//replyId: null,
|
||||
|
||||
// local
|
||||
'_user.host': null
|
||||
|
@@ -97,7 +97,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
visibility: 'public',
|
||||
|
||||
// リプライでない
|
||||
replyId: null,
|
||||
//replyId: null,
|
||||
|
||||
// local
|
||||
'_user.host': null
|
||||
|
@@ -120,7 +120,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
const followQuery = followings.map(f => ({
|
||||
userId: f.id,
|
||||
|
||||
// ストーキングしてないならリプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める)
|
||||
/*// リプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める)
|
||||
$or: [{
|
||||
// リプライでない
|
||||
replyId: null
|
||||
@@ -135,7 +135,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
}, { // または
|
||||
// 自分(フォロワー)が送信したリプライ
|
||||
userId: user._id
|
||||
}]
|
||||
}]*/
|
||||
}));
|
||||
|
||||
const visibleQuery = user == null ? [{
|
||||
|
@@ -133,7 +133,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
const listQuery = list.userIds.map(u => ({
|
||||
userId: u,
|
||||
|
||||
// リプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める)
|
||||
/*// リプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める)
|
||||
$or: [{
|
||||
// リプライでない
|
||||
replyId: null
|
||||
@@ -148,7 +148,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => {
|
||||
}, { // または
|
||||
// 自分(フォロワー)が送信したリプライ
|
||||
userId: user._id
|
||||
}]
|
||||
}]*/
|
||||
}));
|
||||
|
||||
const visibleQuery = [{
|
||||
|
@@ -383,17 +383,11 @@ async function publish(user: IUser, note: INote, noteObj: any, reply: INote, ren
|
||||
|
||||
// Publish note to local and hybrid timeline stream
|
||||
if (note.visibility != 'home') {
|
||||
// Ignore if it is a reply
|
||||
if (note.replyId == null) {
|
||||
publishLocalTimelineStream(noteObj);
|
||||
}
|
||||
publishLocalTimelineStream(noteObj);
|
||||
}
|
||||
|
||||
if (note.visibility == 'public') {
|
||||
// Ignore if it is a reply
|
||||
if (note.replyId == null) {
|
||||
publishHybridTimelineStream(null, noteObj);
|
||||
}
|
||||
publishHybridTimelineStream(null, noteObj);
|
||||
} else {
|
||||
// Publish event to myself's stream
|
||||
publishHybridTimelineStream(note.userId, noteObj);
|
||||
|
@@ -4,7 +4,6 @@ import Watching from '../../../models/note-watching';
|
||||
import watch from '../../../services/note/watch';
|
||||
import { publishNoteStream } from '../../../stream';
|
||||
import notify from '../../../notify';
|
||||
import createNote from '../../../services/note/create';
|
||||
import { isLocalUser, IUser } from '../../../models/user';
|
||||
|
||||
export default (user: IUser, note: INote, choice: number) => new Promise(async (res, rej) => {
|
||||
|
Reference in New Issue
Block a user