wip
This commit is contained in:
		
							parent
							
								
									1acc30822d
								
							
						
					
					
						commit
						71065077f6
					
				|  | @ -53,7 +53,6 @@ module.exports = (params) => new Promise(async (res, rej) => { | |||
| 			model: os.cpus()[0].model, | ||||
| 			cores: os.cpus().length | ||||
| 		}, | ||||
| 		top_image: meta.top_image, | ||||
| 		broadcasts: meta.broadcasts | ||||
| 	}); | ||||
| }); | ||||
|  |  | |||
|  | @ -3,9 +3,9 @@ import OthelloGame, { pack } from '../../../models/othello-game'; | |||
| import Othello from '../../../../common/othello/core'; | ||||
| 
 | ||||
| module.exports = (params, user) => new Promise(async (res, rej) => { | ||||
| 	// Get 'game_id' parameter
 | ||||
| 	const [gameId, gameIdErr] = $(params.game_id).id().$; | ||||
| 	if (gameIdErr) return rej('invalid game_id param'); | ||||
| 	// Get 'gameId' parameter
 | ||||
| 	const [gameId, gameIdErr] = $(params.gameId).id().$; | ||||
| 	if (gameIdErr) return rej('invalid gameId param'); | ||||
| 
 | ||||
| 	const game = await OthelloGame.findOne({ _id: gameId }); | ||||
| 
 | ||||
|  |  | |||
|  | @ -211,12 +211,12 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => { | |||
| 
 | ||||
| 	// 直近の投稿と重複してたらエラー
 | ||||
| 	// TODO: 直近の投稿が一日前くらいなら重複とは見なさない
 | ||||
| 	if (user.latest_post) { | ||||
| 	if (user.latestPost) { | ||||
| 		if (deepEqual({ | ||||
| 			text: user.latest_post.text, | ||||
| 			reply: user.latest_post.replyId ? user.latest_post.replyId.toString() : null, | ||||
| 			repost: user.latest_post.repostId ? user.latest_post.repostId.toString() : null, | ||||
| 			mediaIds: (user.latest_post.mediaIds || []).map(id => id.toString()) | ||||
| 			text: user.latestPost.text, | ||||
| 			reply: user.latestPost.replyId ? user.latestPost.replyId.toString() : null, | ||||
| 			repost: user.latestPost.repostId ? user.latestPost.repostId.toString() : null, | ||||
| 			mediaIds: (user.latestPost.mediaIds || []).map(id => id.toString()) | ||||
| 		}, { | ||||
| 			text: text, | ||||
| 			reply: reply ? reply._id.toString() : null, | ||||
|  | @ -277,7 +277,7 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => { | |||
| 
 | ||||
| 	User.update({ _id: user._id }, { | ||||
| 		$set: { | ||||
| 			latest_post: post | ||||
| 			latestPost: post | ||||
| 		} | ||||
| 	}); | ||||
| 
 | ||||
|  | @ -362,7 +362,7 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => { | |||
| 		// Increment replies count
 | ||||
| 		Post.update({ _id: reply._id }, { | ||||
| 			$inc: { | ||||
| 				replies_count: 1 | ||||
| 				repliesCount: 1 | ||||
| 			} | ||||
| 		}); | ||||
| 
 | ||||
|  | @ -457,7 +457,7 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => { | |||
| 			// Update repostee status
 | ||||
| 			Post.update({ _id: repost._id }, { | ||||
| 				$inc: { | ||||
| 					repost_count: 1 | ||||
| 					repostCount: 1 | ||||
| 				} | ||||
| 			}); | ||||
| 		} | ||||
|  |  | |||
|  | @ -73,7 +73,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { | |||
| 	res(); | ||||
| 
 | ||||
| 	const inc = {}; | ||||
| 	inc[`reaction_counts.${reaction}`] = 1; | ||||
| 	inc[`reactionCounts.${reaction}`] = 1; | ||||
| 
 | ||||
| 	// Increment reactions count
 | ||||
| 	await Post.update({ _id: post._id }, { | ||||
|  |  | |||
|  | @ -51,7 +51,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { | |||
| 	res(); | ||||
| 
 | ||||
| 	const dec = {}; | ||||
| 	dec[`reaction_counts.${exist.reaction}`] = -1; | ||||
| 	dec[`reactionCounts.${exist.reaction}`] = -1; | ||||
| 
 | ||||
| 	// Decrement reactions count
 | ||||
| 	Post.update({ _id: post._id }, { | ||||
|  |  | |||
|  | @ -21,21 +21,21 @@ module.exports = (params, me) => new Promise(async (res, rej) => { | |||
| 	const [text, textError] = $(params.text).optional.string().$; | ||||
| 	if (textError) return rej('invalid text param'); | ||||
| 
 | ||||
| 	// Get 'include_userIds' parameter
 | ||||
| 	const [includeUserIds = [], includeUserIdsErr] = $(params.include_userIds).optional.array('id').$; | ||||
| 	if (includeUserIdsErr) return rej('invalid include_userIds param'); | ||||
| 	// Get 'includeUserIds' parameter
 | ||||
| 	const [includeUserIds = [], includeUserIdsErr] = $(params.includeUserIds).optional.array('id').$; | ||||
| 	if (includeUserIdsErr) return rej('invalid includeUserIds param'); | ||||
| 
 | ||||
| 	// Get 'exclude_userIds' parameter
 | ||||
| 	const [excludeUserIds = [], excludeUserIdsErr] = $(params.exclude_userIds).optional.array('id').$; | ||||
| 	if (excludeUserIdsErr) return rej('invalid exclude_userIds param'); | ||||
| 
 | ||||
| 	// Get 'include_user_usernames' parameter
 | ||||
| 	const [includeUserUsernames = [], includeUserUsernamesErr] = $(params.include_user_usernames).optional.array('string').$; | ||||
| 	if (includeUserUsernamesErr) return rej('invalid include_user_usernames param'); | ||||
| 	// Get 'includeUserUsernames' parameter
 | ||||
| 	const [includeUserUsernames = [], includeUserUsernamesErr] = $(params.includeUserUsernames).optional.array('string').$; | ||||
| 	if (includeUserUsernamesErr) return rej('invalid includeUserUsernames param'); | ||||
| 
 | ||||
| 	// Get 'exclude_user_usernames' parameter
 | ||||
| 	const [excludeUserUsernames = [], excludeUserUsernamesErr] = $(params.exclude_user_usernames).optional.array('string').$; | ||||
| 	if (excludeUserUsernamesErr) return rej('invalid exclude_user_usernames param'); | ||||
| 	// Get 'exclude_userUsernames' parameter
 | ||||
| 	const [excludeUserUsernames = [], excludeUserUsernamesErr] = $(params.exclude_userUsernames).optional.array('string').$; | ||||
| 	if (excludeUserUsernamesErr) return rej('invalid exclude_userUsernames param'); | ||||
| 
 | ||||
| 	// Get 'following' parameter
 | ||||
| 	const [following = null, followingErr] = $(params.following).optional.nullable.boolean().$; | ||||
|  |  | |||
|  | @ -41,7 +41,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { | |||
| 		createdAt: { | ||||
| 			$gte: new Date(Date.now() - ms('1days')) | ||||
| 		}, | ||||
| 		repost_count: { | ||||
| 		repostCount: { | ||||
| 			$gt: 0 | ||||
| 		} | ||||
| 	} as any; | ||||
|  | @ -68,7 +68,7 @@ module.exports = (params, user) => new Promise(async (res, rej) => { | |||
| 			limit: limit, | ||||
| 			skip: offset, | ||||
| 			sort: { | ||||
| 				repost_count: -1, | ||||
| 				repostCount: -1, | ||||
| 				_id: -1 | ||||
| 			} | ||||
| 		}); | ||||
|  |  | |||
|  | @ -18,7 +18,7 @@ import User from '../models/user'; | |||
|  *             postsCount: | ||||
|  *               description: count of all posts of misskey | ||||
|  *               type: number | ||||
|  *             users_count: | ||||
|  *             usersCount: | ||||
|  *               description: count of all users of misskey | ||||
|  *               type: number | ||||
|  * | ||||
|  | @ -43,6 +43,6 @@ module.exports = params => new Promise(async (res, rej) => { | |||
| 
 | ||||
| 	res({ | ||||
| 		postsCount: postsCount, | ||||
| 		users_count: usersCount | ||||
| 		usersCount: usersCount | ||||
| 	}); | ||||
| }); | ||||
|  |  | |||
|  | @ -34,13 +34,13 @@ module.exports = (params, me) => new Promise(async (res, rej) => { | |||
| 		return rej('userId or pair of username and host is required'); | ||||
| 	} | ||||
| 
 | ||||
| 	// Get 'include_replies' parameter
 | ||||
| 	const [includeReplies = true, includeRepliesErr] = $(params.include_replies).optional.boolean().$; | ||||
| 	if (includeRepliesErr) return rej('invalid include_replies param'); | ||||
| 	// Get 'includeReplies' parameter
 | ||||
| 	const [includeReplies = true, includeRepliesErr] = $(params.includeReplies).optional.boolean().$; | ||||
| 	if (includeRepliesErr) return rej('invalid includeReplies param'); | ||||
| 
 | ||||
| 	// Get 'with_media' parameter
 | ||||
| 	const [withMedia = false, withMediaErr] = $(params.with_media).optional.boolean().$; | ||||
| 	if (withMediaErr) return rej('invalid with_media param'); | ||||
| 	// Get 'withMedia' parameter
 | ||||
| 	const [withMedia = false, withMediaErr] = $(params.withMedia).optional.boolean().$; | ||||
| 	if (withMediaErr) return rej('invalid withMedia param'); | ||||
| 
 | ||||
| 	// Get 'limit' parameter
 | ||||
| 	const [limit = 10, limitErr] = $(params.limit).optional.number().range(1, 100).$; | ||||
|  |  | |||
|  | @ -96,7 +96,7 @@ export const pack = ( | |||
| 				limit: 1 | ||||
| 			}); | ||||
| 
 | ||||
| 		_app.is_authorized = exist === 1; | ||||
| 		_app.isAuthorized = exist === 1; | ||||
| 	} | ||||
| 
 | ||||
| 	resolve(_app); | ||||
|  |  | |||
|  | @ -67,7 +67,7 @@ export const pack = ( | |||
| 			deletedAt: { $exists: false } | ||||
| 		}); | ||||
| 
 | ||||
| 		_channel.is_watching = watch !== null; | ||||
| 		_channel.isWatching = watch !== null; | ||||
| 		//#endregion
 | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -62,8 +62,8 @@ export const pack = ( | |||
| 			'metadata.folderId': _folder.id | ||||
| 		}); | ||||
| 
 | ||||
| 		_folder.folders_count = childFoldersCount; | ||||
| 		_folder.files_count = childFilesCount; | ||||
| 		_folder.foldersCount = childFoldersCount; | ||||
| 		_folder.filesCount = childFilesCount; | ||||
| 	} | ||||
| 
 | ||||
| 	if (opts.detail && _folder.parentId) { | ||||
|  |  | |||
|  | @ -30,6 +30,10 @@ export type IPost = { | |||
| 	userId: mongo.ObjectID; | ||||
| 	appId: mongo.ObjectID; | ||||
| 	viaMobile: boolean; | ||||
| 	repostCount: number; | ||||
| 	repliesCount: number; | ||||
| 	reactionCounts: any; | ||||
| 	mentions: mongo.ObjectID[]; | ||||
| 	geo: { | ||||
| 		latitude: number; | ||||
| 		longitude: number; | ||||
|  | @ -184,7 +188,7 @@ export const pack = async ( | |||
| 					const myChoice = poll.choices | ||||
| 						.filter(c => c.id == vote.choice)[0]; | ||||
| 
 | ||||
| 					myChoice.is_voted = true; | ||||
| 					myChoice.isVoted = true; | ||||
| 				} | ||||
| 
 | ||||
| 				return poll; | ||||
|  |  | |||
|  | @ -88,7 +88,7 @@ export type IUser = { | |||
| 	bannerId: mongo.ObjectID; | ||||
| 	data: any; | ||||
| 	description: string; | ||||
| 	latest_post: IPost; | ||||
| 	latestPost: IPost; | ||||
| 	pinnedPostId: mongo.ObjectID; | ||||
| 	isSuspended: boolean; | ||||
| 	keywords: string[]; | ||||
|  | @ -167,7 +167,7 @@ export const pack = ( | |||
| 	delete _user._id; | ||||
| 
 | ||||
| 	// Remove needless properties
 | ||||
| 	delete _user.latest_post; | ||||
| 	delete _user.latestPost; | ||||
| 
 | ||||
| 	if (!_user.host) { | ||||
| 		// Remove private properties
 | ||||
|  | @ -212,7 +212,7 @@ export const pack = ( | |||
| 
 | ||||
| 	if (meId && !meId.equals(_user.id)) { | ||||
| 		// Whether the user is following
 | ||||
| 		_user.is_following = (async () => { | ||||
| 		_user.isFollowing = (async () => { | ||||
| 			const follow = await Following.findOne({ | ||||
| 				followerId: meId, | ||||
| 				followeeId: _user.id, | ||||
|  | @ -222,7 +222,7 @@ export const pack = ( | |||
| 		})(); | ||||
| 
 | ||||
| 		// Whether the user is followed
 | ||||
| 		_user.is_followed = (async () => { | ||||
| 		_user.isFollowed = (async () => { | ||||
| 			const follow2 = await Following.findOne({ | ||||
| 				followerId: _user.id, | ||||
| 				followeeId: meId, | ||||
|  | @ -232,7 +232,7 @@ export const pack = ( | |||
| 		})(); | ||||
| 
 | ||||
| 		// Whether the user is muted
 | ||||
| 		_user.is_muted = (async () => { | ||||
| 		_user.isMuted = (async () => { | ||||
| 			const mute = await Mute.findOne({ | ||||
| 				muterId: meId, | ||||
| 				muteeId: _user.id, | ||||
|  | @ -254,14 +254,14 @@ export const pack = ( | |||
| 			const myFollowingIds = await getFriends(meId); | ||||
| 
 | ||||
| 			// Get following you know count
 | ||||
| 			_user.following_you_know_count = Following.count({ | ||||
| 			_user.followingYouKnowCount = Following.count({ | ||||
| 				followeeId: { $in: myFollowingIds }, | ||||
| 				followerId: _user.id, | ||||
| 				deletedAt: { $exists: false } | ||||
| 			}); | ||||
| 
 | ||||
| 			// Get followers you know count
 | ||||
| 			_user.followers_you_know_count = Following.count({ | ||||
| 			_user.followersYouKnowCount = Following.count({ | ||||
| 				followeeId: _user.id, | ||||
| 				followerId: { $in: myFollowingIds }, | ||||
| 				deletedAt: { $exists: false } | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ | |||
| 			<p>このアプリがあなたのアカウントにアクセスすることはありません。</p> | ||||
| 		</div> | ||||
| 		<div class="accepted" v-if="state == 'accepted'"> | ||||
| 			<h1>{{ session.app.is_authorized ? 'このアプリは既に連携済みです' : 'アプリケーションの連携を許可しました'}}</h1> | ||||
| 			<h1>{{ session.app.isAuthorized ? 'このアプリは既に連携済みです' : 'アプリケーションの連携を許可しました' }}</h1> | ||||
| 			<p v-if="session.app.callbackUrl">アプリケーションに戻っています<mk-ellipsis/></p> | ||||
| 			<p v-if="!session.app.callbackUrl">アプリケーションに戻って、やっていってください。</p> | ||||
| 		</div> | ||||
|  | @ -61,7 +61,7 @@ export default Vue.extend({ | |||
| 			this.fetching = false; | ||||
| 
 | ||||
| 			// 既に連携していた場合 | ||||
| 			if (this.session.app.is_authorized) { | ||||
| 			if (this.session.app.isAuthorized) { | ||||
| 				this.$root.$data.os.api('auth/accept', { | ||||
| 					token: this.session.token | ||||
| 				}).then(() => { | ||||
|  |  | |||
|  | @ -5,8 +5,8 @@ | |||
| 		<h1>{ channel.title }</h1> | ||||
| 
 | ||||
| 		<div v-if="$root.$data.os.isSignedIn"> | ||||
| 			<p v-if="channel.is_watching">このチャンネルをウォッチしています <a @click="unwatch">ウォッチ解除</a></p> | ||||
| 			<p v-if="!channel.is_watching"><a @click="watch">このチャンネルをウォッチする</a></p> | ||||
| 			<p v-if="channel.isWatching">このチャンネルをウォッチしています <a @click="unwatch">ウォッチ解除</a></p> | ||||
| 			<p v-if="!channel.isWatching"><a @click="watch">このチャンネルをウォッチする</a></p> | ||||
| 		</div> | ||||
| 
 | ||||
| 		<div class="share"> | ||||
|  | @ -142,7 +142,7 @@ | |||
| 			this.$root.$data.os.api('channels/watch', { | ||||
| 				channelId: this.id | ||||
| 			}).then(() => { | ||||
| 				this.channel.is_watching = true; | ||||
| 				this.channel.isWatching = true; | ||||
| 				this.update(); | ||||
| 			}, e => { | ||||
| 				alert('error'); | ||||
|  | @ -153,7 +153,7 @@ | |||
| 			this.$root.$data.os.api('channels/unwatch', { | ||||
| 				channelId: this.id | ||||
| 			}).then(() => { | ||||
| 				this.channel.is_watching = false; | ||||
| 				this.channel.isWatching = false; | ||||
| 				this.update(); | ||||
| 			}, e => { | ||||
| 				alert('error'); | ||||
|  |  | |||
|  | @ -8,10 +8,10 @@ export default function(qs: string) { | |||
| 			const [key, value] = x.split(':'); | ||||
| 			switch (key) { | ||||
| 				case 'user': | ||||
| 					q['include_user_usernames'] = value.split(','); | ||||
| 					q['includeUserUsernames'] = value.split(','); | ||||
| 					break; | ||||
| 				case 'exclude_user': | ||||
| 					q['exclude_user_usernames'] = value.split(','); | ||||
| 					q['exclude_userUsernames'] = value.split(','); | ||||
| 					break; | ||||
| 				case 'follow': | ||||
| 					q['following'] = value == 'null' ? null : value == 'true'; | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ | |||
| 			<button class="delete-button" v-if="isMe" title="%i18n:common.delete%"> | ||||
| 				<img src="/assets/desktop/messaging/delete.png" alt="Delete"/> | ||||
| 			</button> | ||||
| 			<div class="content" v-if="!message.is_deleted"> | ||||
| 			<div class="content" v-if="!message.isDeleted"> | ||||
| 				<mk-post-html class="text" v-if="message.ast" :ast="message.ast" :i="os.i"/> | ||||
| 				<div class="file" v-if="message.file"> | ||||
| 					<a :href="message.file.url" target="_blank" :title="message.file.name"> | ||||
|  | @ -18,7 +18,7 @@ | |||
| 					</a> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 			<div class="content" v-if="message.is_deleted"> | ||||
| 			<div class="content" v-if="message.isDeleted"> | ||||
| 				<p class="is-deleted">%i18n:common.tags.mk-messaging-message.deleted%</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  |  | |||
|  | @ -133,7 +133,7 @@ export default Vue.extend({ | |||
| 	methods: { | ||||
| 		go(game) { | ||||
| 			(this as any).api('othello/games/show', { | ||||
| 				game_id: game.id | ||||
| 				gameId: game.id | ||||
| 			}).then(game => { | ||||
| 				this.matching = null; | ||||
| 				this.game = game; | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
| 		<li v-for="choice in poll.choices" :key="choice.id" @click="vote(choice.id)" :class="{ voted: choice.voted }" :title="!isVoted ? '%i18n:common.tags.mk-poll.vote-to%'.replace('{}', choice.text) : ''"> | ||||
| 			<div class="backdrop" :style="{ 'width': (showResult ? (choice.votes / total * 100) : 0) + '%' }"></div> | ||||
| 			<span> | ||||
| 				<template v-if="choice.is_voted">%fa:check%</template> | ||||
| 				<template v-if="choice.isVoted">%fa:check%</template> | ||||
| 				<span>{{ choice.text }}</span> | ||||
| 				<span class="votes" v-if="showResult">({{ '%i18n:common.tags.mk-poll.vote-count%'.replace('{}', choice.votes) }})</span> | ||||
| 			</span> | ||||
|  | @ -36,7 +36,7 @@ export default Vue.extend({ | |||
| 			return this.poll.choices.reduce((a, b) => a + b.votes, 0); | ||||
| 		}, | ||||
| 		isVoted(): boolean { | ||||
| 			return this.poll.choices.some(c => c.is_voted); | ||||
| 			return this.poll.choices.some(c => c.isVoted); | ||||
| 		} | ||||
| 	}, | ||||
| 	created() { | ||||
|  | @ -47,7 +47,7 @@ export default Vue.extend({ | |||
| 			this.showResult = !this.showResult; | ||||
| 		}, | ||||
| 		vote(id) { | ||||
| 			if (this.poll.choices.some(c => c.is_voted)) return; | ||||
| 			if (this.poll.choices.some(c => c.isVoted)) return; | ||||
| 			(this as any).api('posts/polls/vote', { | ||||
| 				postId: this.post.id, | ||||
| 				choice: id | ||||
|  | @ -55,7 +55,7 @@ export default Vue.extend({ | |||
| 				this.poll.choices.forEach(c => { | ||||
| 					if (c.id == id) { | ||||
| 						c.votes++; | ||||
| 						Vue.set(c, 'is_voted', true); | ||||
| 						Vue.set(c, 'isVoted', true); | ||||
| 					} | ||||
| 				}); | ||||
| 				this.showResult = true; | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ export default Vue.extend({ | |||
| 	props: ['post'], | ||||
| 	computed: { | ||||
| 		reactions(): number { | ||||
| 			return this.post.reaction_counts; | ||||
| 			return this.post.reactionCounts; | ||||
| 		} | ||||
| 	} | ||||
| }); | ||||
|  |  | |||
|  | @ -1,15 +1,15 @@ | |||
| <template> | ||||
| <button class="mk-follow-button" | ||||
| 	:class="{ wait, follow: !user.is_following, unfollow: user.is_following, big: size == 'big' }" | ||||
| 	:class="{ wait, follow: !user.isFollowing, unfollow: user.isFollowing, big: size == 'big' }" | ||||
| 	@click="onClick" | ||||
| 	:disabled="wait" | ||||
| 	:title="user.is_following ? 'フォロー解除' : 'フォローする'" | ||||
| 	:title="user.isFollowing ? 'フォロー解除' : 'フォローする'" | ||||
| > | ||||
| 	<template v-if="!wait && user.is_following"> | ||||
| 	<template v-if="!wait && user.isFollowing"> | ||||
| 		<template v-if="size == 'compact'">%fa:minus%</template> | ||||
| 		<template v-if="size == 'big'">%fa:minus%フォロー解除</template> | ||||
| 	</template> | ||||
| 	<template v-if="!wait && !user.is_following"> | ||||
| 	<template v-if="!wait && !user.isFollowing"> | ||||
| 		<template v-if="size == 'compact'">%fa:plus%</template> | ||||
| 		<template v-if="size == 'big'">%fa:plus%フォロー</template> | ||||
| 	</template> | ||||
|  | @ -53,23 +53,23 @@ export default Vue.extend({ | |||
| 
 | ||||
| 		onFollow(user) { | ||||
| 			if (user.id == this.user.id) { | ||||
| 				this.user.is_following = user.is_following; | ||||
| 				this.user.isFollowing = user.isFollowing; | ||||
| 			} | ||||
| 		}, | ||||
| 
 | ||||
| 		onUnfollow(user) { | ||||
| 			if (user.id == this.user.id) { | ||||
| 				this.user.is_following = user.is_following; | ||||
| 				this.user.isFollowing = user.isFollowing; | ||||
| 			} | ||||
| 		}, | ||||
| 
 | ||||
| 		onClick() { | ||||
| 			this.wait = true; | ||||
| 			if (this.user.is_following) { | ||||
| 			if (this.user.isFollowing) { | ||||
| 				(this as any).api('following/delete', { | ||||
| 					userId: this.user.id | ||||
| 				}).then(() => { | ||||
| 					this.user.is_following = false; | ||||
| 					this.user.isFollowing = false; | ||||
| 				}).catch(err => { | ||||
| 					console.error(err); | ||||
| 				}).then(() => { | ||||
|  | @ -79,7 +79,7 @@ export default Vue.extend({ | |||
| 				(this as any).api('following/create', { | ||||
| 					userId: this.user.id | ||||
| 				}).then(() => { | ||||
| 					this.user.is_following = true; | ||||
| 					this.user.isFollowing = true; | ||||
| 				}).catch(err => { | ||||
| 					console.error(err); | ||||
| 				}).then(() => { | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| <mk-users-list | ||||
| 	:fetch="fetch" | ||||
| 	:count="user.followersCount" | ||||
| 	:you-know-count="user.followers_you_know_count" | ||||
| 	:you-know-count="user.followersYouKnowCount" | ||||
| > | ||||
| 	フォロワーはいないようです。 | ||||
| </mk-users-list> | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| <mk-users-list | ||||
| 	:fetch="fetch" | ||||
| 	:count="user.followingCount" | ||||
| 	:you-know-count="user.following_you_know_count" | ||||
| 	:you-know-count="user.followingYouKnowCount" | ||||
| > | ||||
| 	フォロー中のユーザーはいないようです。 | ||||
| </mk-users-list> | ||||
|  |  | |||
|  | @ -56,10 +56,10 @@ | |||
| 		<footer> | ||||
| 			<mk-reactions-viewer :post="p"/> | ||||
| 			<button @click="reply" title="返信"> | ||||
| 				%fa:reply%<p class="count" v-if="p.replies_count > 0">{{ p.replies_count }}</p> | ||||
| 				%fa:reply%<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p> | ||||
| 			</button> | ||||
| 			<button @click="repost" title="Repost"> | ||||
| 				%fa:retweet%<p class="count" v-if="p.repost_count > 0">{{ p.repost_count }}</p> | ||||
| 				%fa:retweet%<p class="count" v-if="p.repostCount > 0">{{ p.repostCount }}</p> | ||||
| 			</button> | ||||
| 			<button :class="{ reacted: p.my_reaction != null }" @click="react" ref="reactButton" title="リアクション"> | ||||
| 				%fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p> | ||||
|  | @ -122,9 +122,9 @@ export default Vue.extend({ | |||
| 			return this.isRepost ? this.post.repost : this.post; | ||||
| 		}, | ||||
| 		reactionsCount(): number { | ||||
| 			return this.p.reaction_counts | ||||
| 				? Object.keys(this.p.reaction_counts) | ||||
| 					.map(key => this.p.reaction_counts[key]) | ||||
| 			return this.p.reactionCounts | ||||
| 				? Object.keys(this.p.reactionCounts) | ||||
| 					.map(key => this.p.reactionCounts[key]) | ||||
| 					.reduce((a, b) => a + b) | ||||
| 				: 0; | ||||
| 		}, | ||||
|  |  | |||
|  | @ -58,10 +58,10 @@ | |||
| 			<footer> | ||||
| 				<mk-reactions-viewer :post="p" ref="reactionsViewer"/> | ||||
| 				<button @click="reply" title="%i18n:desktop.tags.mk-timeline-post.reply%"> | ||||
| 					%fa:reply%<p class="count" v-if="p.replies_count > 0">{{ p.replies_count }}</p> | ||||
| 					%fa:reply%<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p> | ||||
| 				</button> | ||||
| 				<button @click="repost" title="%i18n:desktop.tags.mk-timeline-post.repost%"> | ||||
| 					%fa:retweet%<p class="count" v-if="p.repost_count > 0">{{ p.repost_count }}</p> | ||||
| 					%fa:retweet%<p class="count" v-if="p.repostCount > 0">{{ p.repostCount }}</p> | ||||
| 				</button> | ||||
| 				<button :class="{ reacted: p.my_reaction != null }" @click="react" ref="reactButton" title="%i18n:desktop.tags.mk-timeline-post.add-reaction%"> | ||||
| 					%fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p> | ||||
|  | @ -129,9 +129,9 @@ export default Vue.extend({ | |||
| 			return this.isRepost ? this.post.repost : this.post; | ||||
| 		}, | ||||
| 		reactionsCount(): number { | ||||
| 			return this.p.reaction_counts | ||||
| 				? Object.keys(this.p.reaction_counts) | ||||
| 					.map(key => this.p.reaction_counts[key]) | ||||
| 			return this.p.reactionCounts | ||||
| 				? Object.keys(this.p.reactionCounts) | ||||
| 					.map(key => this.p.reactionCounts[key]) | ||||
| 					.reduce((a, b) => a + b) | ||||
| 				: 0; | ||||
| 		}, | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ | |||
| 			<span class="username">@{{ acct }}</span> | ||||
| 		</header> | ||||
| 		<div class="body"> | ||||
| 			<p class="followed" v-if="user.is_followed">フォローされています</p> | ||||
| 			<p class="followed" v-if="user.isFollowed">フォローされています</p> | ||||
| 			<div class="description">{{ user.description }}</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ export default Vue.extend({ | |||
| 			this.fetching = true; | ||||
| 
 | ||||
| 			(this as any).api('othello/games/show', { | ||||
| 				game_id: this.$route.params.game | ||||
| 				gameId: this.$route.params.game | ||||
| 			}).then(game => { | ||||
| 				this.game = game; | ||||
| 				this.fetching = false; | ||||
|  |  | |||
|  | @ -24,7 +24,7 @@ export default Vue.extend({ | |||
| 	mounted() { | ||||
| 		(this as any).api('users/posts', { | ||||
| 			userId: this.user.id, | ||||
| 			with_media: true, | ||||
| 			withMedia: true, | ||||
| 			limit: 9 | ||||
| 		}).then(posts => { | ||||
| 			posts.forEach(post => { | ||||
|  |  | |||
|  | @ -2,9 +2,9 @@ | |||
| <div class="profile"> | ||||
| 	<div class="friend-form" v-if="os.isSignedIn && os.i.id != user.id"> | ||||
| 		<mk-follow-button :user="user" size="big"/> | ||||
| 		<p class="followed" v-if="user.is_followed">%i18n:desktop.tags.mk-user.follows-you%</p> | ||||
| 		<p v-if="user.is_muted">%i18n:desktop.tags.mk-user.muted% <a @click="unmute">%i18n:desktop.tags.mk-user.unmute%</a></p> | ||||
| 		<p v-if="!user.is_muted"><a @click="mute">%i18n:desktop.tags.mk-user.mute%</a></p> | ||||
| 		<p class="followed" v-if="user.isFollowed">%i18n:desktop.tags.mk-user.follows-you%</p> | ||||
| 		<p v-if="user.isMuted">%i18n:desktop.tags.mk-user.muted% <a @click="unmute">%i18n:desktop.tags.mk-user.unmute%</a></p> | ||||
| 		<p v-if="!user.isMuted"><a @click="mute">%i18n:desktop.tags.mk-user.mute%</a></p> | ||||
| 	</div> | ||||
| 	<div class="description" v-if="user.description">{{ user.description }}</div> | ||||
| 	<div class="birthday" v-if="user.host === null && user.account.profile.birthday"> | ||||
|  | @ -51,7 +51,7 @@ export default Vue.extend({ | |||
| 			(this as any).api('mute/create', { | ||||
| 				userId: this.user.id | ||||
| 			}).then(() => { | ||||
| 				this.user.is_muted = true; | ||||
| 				this.user.isMuted = true; | ||||
| 			}, () => { | ||||
| 				alert('error'); | ||||
| 			}); | ||||
|  | @ -61,7 +61,7 @@ export default Vue.extend({ | |||
| 			(this as any).api('mute/delete', { | ||||
| 				userId: this.user.id | ||||
| 			}).then(() => { | ||||
| 				this.user.is_muted = false; | ||||
| 				this.user.isMuted = false; | ||||
| 			}, () => { | ||||
| 				alert('error'); | ||||
| 			}); | ||||
|  |  | |||
|  | @ -19,10 +19,10 @@ | |||
| 	<div class="browser" :class="{ fetching }" v-if="file == null"> | ||||
| 		<div class="info" v-if="info"> | ||||
| 			<p v-if="folder == null">{{ (info.usage / info.capacity * 100).toFixed(1) }}% %i18n:mobile.tags.mk-drive.used%</p> | ||||
| 			<p v-if="folder != null && (folder.folders_count > 0 || folder.files_count > 0)"> | ||||
| 				<template v-if="folder.folders_count > 0">{{ folder.folders_count }} %i18n:mobile.tags.mk-drive.folder-count%</template> | ||||
| 				<template v-if="folder.folders_count > 0 && folder.files_count > 0">%i18n:mobile.tags.mk-drive.count-separator%</template> | ||||
| 				<template v-if="folder.files_count > 0">{{ folder.files_count }} %i18n:mobile.tags.mk-drive.file-count%</template> | ||||
| 			<p v-if="folder != null && (folder.foldersCount > 0 || folder.filesCount > 0)"> | ||||
| 				<template v-if="folder.foldersCount > 0">{{ folder.foldersCount }} %i18n:mobile.tags.mk-drive.folder-count%</template> | ||||
| 				<template v-if="folder.foldersCount > 0 && folder.filesCount > 0">%i18n:mobile.tags.mk-drive.count-separator%</template> | ||||
| 				<template v-if="folder.filesCount > 0">{{ folder.filesCount }} %i18n:mobile.tags.mk-drive.file-count%</template> | ||||
| 			</p> | ||||
| 		</div> | ||||
| 		<div class="folders" v-if="folders.length > 0"> | ||||
|  |  | |||
|  | @ -1,13 +1,13 @@ | |||
| <template> | ||||
| <button class="mk-follow-button" | ||||
| 	:class="{ wait: wait, follow: !user.is_following, unfollow: user.is_following }" | ||||
| 	:class="{ wait: wait, follow: !user.isFollowing, unfollow: user.isFollowing }" | ||||
| 	@click="onClick" | ||||
| 	:disabled="wait" | ||||
| > | ||||
| 	<template v-if="!wait && user.is_following">%fa:minus%</template> | ||||
| 	<template v-if="!wait && !user.is_following">%fa:plus%</template> | ||||
| 	<template v-if="!wait && user.isFollowing">%fa:minus%</template> | ||||
| 	<template v-if="!wait && !user.isFollowing">%fa:plus%</template> | ||||
| 	<template v-if="wait">%fa:spinner .pulse .fw%</template> | ||||
| 	{{ user.is_following ? '%i18n:mobile.tags.mk-follow-button.unfollow%' : '%i18n:mobile.tags.mk-follow-button.follow%' }} | ||||
| 	{{ user.isFollowing ? '%i18n:mobile.tags.mk-follow-button.unfollow%' : '%i18n:mobile.tags.mk-follow-button.follow%' }} | ||||
| </button> | ||||
| </template> | ||||
| 
 | ||||
|  | @ -43,23 +43,23 @@ export default Vue.extend({ | |||
| 
 | ||||
| 		onFollow(user) { | ||||
| 			if (user.id == this.user.id) { | ||||
| 				this.user.is_following = user.is_following; | ||||
| 				this.user.isFollowing = user.isFollowing; | ||||
| 			} | ||||
| 		}, | ||||
| 
 | ||||
| 		onUnfollow(user) { | ||||
| 			if (user.id == this.user.id) { | ||||
| 				this.user.is_following = user.is_following; | ||||
| 				this.user.isFollowing = user.isFollowing; | ||||
| 			} | ||||
| 		}, | ||||
| 
 | ||||
| 		onClick() { | ||||
| 			this.wait = true; | ||||
| 			if (this.user.is_following) { | ||||
| 			if (this.user.isFollowing) { | ||||
| 				(this as any).api('following/delete', { | ||||
| 					userId: this.user.id | ||||
| 				}).then(() => { | ||||
| 					this.user.is_following = false; | ||||
| 					this.user.isFollowing = false; | ||||
| 				}).catch(err => { | ||||
| 					console.error(err); | ||||
| 				}).then(() => { | ||||
|  | @ -69,7 +69,7 @@ export default Vue.extend({ | |||
| 				(this as any).api('following/create', { | ||||
| 					userId: this.user.id | ||||
| 				}).then(() => { | ||||
| 					this.user.is_following = true; | ||||
| 					this.user.isFollowing = true; | ||||
| 				}).catch(err => { | ||||
| 					console.error(err); | ||||
| 				}).then(() => { | ||||
|  |  | |||
|  | @ -59,10 +59,10 @@ | |||
| 		<footer> | ||||
| 			<mk-reactions-viewer :post="p"/> | ||||
| 			<button @click="reply" title="%i18n:mobile.tags.mk-post-detail.reply%"> | ||||
| 				%fa:reply%<p class="count" v-if="p.replies_count > 0">{{ p.replies_count }}</p> | ||||
| 				%fa:reply%<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p> | ||||
| 			</button> | ||||
| 			<button @click="repost" title="Repost"> | ||||
| 				%fa:retweet%<p class="count" v-if="p.repost_count > 0">{{ p.repost_count }}</p> | ||||
| 				%fa:retweet%<p class="count" v-if="p.repostCount > 0">{{ p.repostCount }}</p> | ||||
| 			</button> | ||||
| 			<button :class="{ reacted: p.my_reaction != null }" @click="react" ref="reactButton" title="%i18n:mobile.tags.mk-post-detail.reaction%"> | ||||
| 				%fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p> | ||||
|  | @ -122,9 +122,9 @@ export default Vue.extend({ | |||
| 			return this.isRepost ? this.post.repost : this.post; | ||||
| 		}, | ||||
| 		reactionsCount(): number { | ||||
| 			return this.p.reaction_counts | ||||
| 				? Object.keys(this.p.reaction_counts) | ||||
| 					.map(key => this.p.reaction_counts[key]) | ||||
| 			return this.p.reactionCounts | ||||
| 				? Object.keys(this.p.reactionCounts) | ||||
| 					.map(key => this.p.reactionCounts[key]) | ||||
| 					.reduce((a, b) => a + b) | ||||
| 				: 0; | ||||
| 		}, | ||||
|  |  | |||
|  | @ -58,10 +58,10 @@ | |||
| 			<footer> | ||||
| 				<mk-reactions-viewer :post="p" ref="reactionsViewer"/> | ||||
| 				<button @click="reply"> | ||||
| 					%fa:reply%<p class="count" v-if="p.replies_count > 0">{{ p.replies_count }}</p> | ||||
| 					%fa:reply%<p class="count" v-if="p.repliesCount > 0">{{ p.repliesCount }}</p> | ||||
| 				</button> | ||||
| 				<button @click="repost" title="Repost"> | ||||
| 					%fa:retweet%<p class="count" v-if="p.repost_count > 0">{{ p.repost_count }}</p> | ||||
| 					%fa:retweet%<p class="count" v-if="p.repostCount > 0">{{ p.repostCount }}</p> | ||||
| 				</button> | ||||
| 				<button :class="{ reacted: p.my_reaction != null }" @click="react" ref="reactButton"> | ||||
| 					%fa:plus%<p class="count" v-if="p.reactions_count > 0">{{ p.reactions_count }}</p> | ||||
|  | @ -110,9 +110,9 @@ export default Vue.extend({ | |||
| 			return this.isRepost ? this.post.repost : this.post; | ||||
| 		}, | ||||
| 		reactionsCount(): number { | ||||
| 			return this.p.reaction_counts | ||||
| 				? Object.keys(this.p.reaction_counts) | ||||
| 					.map(key => this.p.reaction_counts[key]) | ||||
| 			return this.p.reactionCounts | ||||
| 				? Object.keys(this.p.reactionCounts) | ||||
| 					.map(key => this.p.reactionCounts[key]) | ||||
| 					.reduce((a, b) => a + b) | ||||
| 				: 0; | ||||
| 		}, | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ export default Vue.extend({ | |||
| 	mounted() { | ||||
| 		(this as any).api('users/posts', { | ||||
| 			userId: this.user.id, | ||||
| 			with_media: this.withMedia, | ||||
| 			withMedia: this.withMedia, | ||||
| 			limit: limit + 1 | ||||
| 		}).then(posts => { | ||||
| 			if (posts.length == limit + 1) { | ||||
|  | @ -51,7 +51,7 @@ export default Vue.extend({ | |||
| 			this.moreFetching = true; | ||||
| 			(this as any).api('users/posts', { | ||||
| 				userId: this.user.id, | ||||
| 				with_media: this.withMedia, | ||||
| 				withMedia: this.withMedia, | ||||
| 				limit: limit + 1, | ||||
| 				untilId: this.posts[this.posts.length - 1].id | ||||
| 			}).then(posts => { | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ | |||
| 		v-if="!fetching" | ||||
| 		:fetch="fetchUsers" | ||||
| 		:count="user.followersCount" | ||||
| 		:you-know-count="user.followers_you_know_count" | ||||
| 		:you-know-count="user.followersYouKnowCount" | ||||
| 		@loaded="onLoaded" | ||||
| 	> | ||||
| 		%i18n:mobile.tags.mk-user-followers.no-users% | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ | |||
| 		v-if="!fetching" | ||||
| 		:fetch="fetchUsers" | ||||
| 		:count="user.followingCount" | ||||
| 		:you-know-count="user.following_you_know_count" | ||||
| 		:you-know-count="user.followingYouKnowCount" | ||||
| 		@loaded="onLoaded" | ||||
| 	> | ||||
| 		%i18n:mobile.tags.mk-user-following.no-users% | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ export default Vue.extend({ | |||
| 			this.fetching = true; | ||||
| 
 | ||||
| 			(this as any).api('othello/games/show', { | ||||
| 				game_id: this.$route.params.game | ||||
| 				gameId: this.$route.params.game | ||||
| 			}).then(game => { | ||||
| 				this.game = game; | ||||
| 				this.fetching = false; | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ | |||
| 				<div class="title"> | ||||
| 					<h1>{{ user.name }}</h1> | ||||
| 					<span class="username">@{{ acct }}</span> | ||||
| 					<span class="followed" v-if="user.is_followed">%i18n:mobile.tags.mk-user.follows-you%</span> | ||||
| 					<span class="followed" v-if="user.isFollowed">%i18n:mobile.tags.mk-user.follows-you%</span> | ||||
| 				</div> | ||||
| 				<div class="description">{{ user.description }}</div> | ||||
| 				<div class="info"> | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ export default Vue.extend({ | |||
| 	mounted() { | ||||
| 		(this as any).api('users/posts', { | ||||
| 			userId: this.user.id, | ||||
| 			with_media: true, | ||||
| 			withMedia: true, | ||||
| 			limit: 6 | ||||
| 		}).then(posts => { | ||||
| 			posts.forEach(post => { | ||||
|  |  | |||
|  | @ -83,7 +83,7 @@ | |||
| </mk-posts> | ||||
| 
 | ||||
| <mk-users> | ||||
| 	<h2>%i18n:stats.users-count% <b>{ stats.users_count }</b></h2> | ||||
| 	<h2>%i18n:stats.users-count% <b>{ stats.usersCount }</b></h2> | ||||
| 	<mk-users-chart v-if="!initializing" data={ data }/> | ||||
| 	<style lang="stylus" scoped> | ||||
| 		:scope | ||||
|  |  | |||
|  | @ -59,7 +59,7 @@ props: | |||
|     desc: | ||||
|       ja: "この投稿に対する自分の<a href='/docs/api/reactions'>リアクション</a>" | ||||
|       en: "The your <a href='/docs/api/reactions'>reaction</a> of this post" | ||||
|   - name: "reaction_counts" | ||||
|   - name: "reactionCounts" | ||||
|     type: "object" | ||||
|     optional: false | ||||
|     desc: | ||||
|  | @ -110,7 +110,7 @@ props: | |||
|             desc: | ||||
|               ja: "選択肢ID" | ||||
|               en: "The ID of this choice" | ||||
|           - name: "is_voted" | ||||
|           - name: "isVoted" | ||||
|             type: "boolean" | ||||
|             optional: true | ||||
|             desc: | ||||
|  |  | |||
|  | @ -65,17 +65,17 @@ props: | |||
|     desc: | ||||
|       ja: "フォローしているユーザーの数" | ||||
|       en: "The number of the following users for this user" | ||||
|   - name: "is_following" | ||||
|   - name: "isFollowing" | ||||
|     type: "boolean" | ||||
|     optional: true | ||||
|     desc: | ||||
|       ja: "自分がこのユーザーをフォローしているか" | ||||
|   - name: "is_followed" | ||||
|   - name: "isFollowed" | ||||
|     type: "boolean" | ||||
|     optional: true | ||||
|     desc: | ||||
|       ja: "自分がこのユーザーにフォローされているか" | ||||
|   - name: "is_muted" | ||||
|   - name: "isMuted" | ||||
|     type: "boolean" | ||||
|     optional: true | ||||
|     desc: | ||||
|  |  | |||
|  | @ -176,6 +176,9 @@ db.posts.update({}, { | |||
| 		reply_id: 'replyId', | ||||
| 		repost_id: 'repostId', | ||||
| 		via_mobile: 'viaMobile', | ||||
| 		reaction_counts: 'reactionCounts', | ||||
| 		replies_count: 'repliesCount', | ||||
| 		repost_count: 'repostCount', | ||||
| 		'_reply.user_id': '_reply.userId', | ||||
| 		'_repost.user_id': '_repost.userId', | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue