wip
This commit is contained in:
		
							parent
							
								
									346c2959e0
								
							
						
					
					
						commit
						71c3e11708
					
				
					 7 changed files with 65 additions and 7 deletions
				
			
		|  | @ -21,7 +21,8 @@ module.exports = async (params, user) => new Promise(async (res, rej) => { | |||
| 	const channel = await Channel.insert({ | ||||
| 		created_at: new Date(), | ||||
| 		user_id: user._id, | ||||
| 		title: title | ||||
| 		title: title, | ||||
| 		index: 0 | ||||
| 	}); | ||||
| 
 | ||||
| 	// Response
 | ||||
|  |  | |||
|  | @ -153,6 +153,16 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => { | |||
| 		if (repost && !isQuote) { | ||||
| 			return rej('チャンネル内部では引用ではないRepostをすることはできません'); | ||||
| 		} | ||||
| 	} else { | ||||
| 		// 返信対象の投稿がチャンネルへの投稿だったらダメ
 | ||||
| 		if (inReplyToPost && inReplyToPost.channel_id != null) { | ||||
| 			return rej('チャンネル外部からチャンネル内部の投稿に返信することはできません'); | ||||
| 		} | ||||
| 
 | ||||
| 		// Repost対象の投稿がチャンネルへの投稿だったらダメ
 | ||||
| 		if (repost && repost.channel_id != null) { | ||||
| 			return rej('チャンネル外部からチャンネル内部の投稿をRepostすることはできません'); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Get 'poll' parameter
 | ||||
|  | @ -199,6 +209,7 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => { | |||
| 	const post = await Post.insert({ | ||||
| 		created_at: new Date(), | ||||
| 		channel_id: channel ? channel._id : undefined, | ||||
| 		index: channel ? channel.index + 1 : undefined, | ||||
| 		media_ids: files ? files.map(file => file._id) : undefined, | ||||
| 		reply_to_id: inReplyToPost ? inReplyToPost._id : undefined, | ||||
| 		repost_id: repost ? repost._id : undefined, | ||||
|  | @ -217,6 +228,12 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => { | |||
| 	// -----------------------------------------------------------
 | ||||
| 	// Post processes
 | ||||
| 
 | ||||
| 	Channel.update({ _id: channel._id }, { | ||||
| 		$inc: { | ||||
| 			index: 1 | ||||
| 		} | ||||
| 	}); | ||||
| 
 | ||||
| 	User.update({ _id: user._id }, { | ||||
| 		$set: { | ||||
| 			latest_post: post | ||||
|  |  | |||
|  | @ -10,4 +10,5 @@ export type IChannel = { | |||
| 	created_at: Date; | ||||
| 	title: string; | ||||
| 	user_id: mongo.ObjectID; | ||||
| 	index: number; | ||||
| }; | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ import Reaction from '../models/post-reaction'; | |||
| import { IUser } from '../models/user'; | ||||
| import Vote from '../models/poll-vote'; | ||||
| import serializeApp from './app'; | ||||
| import serializeChannel from './channel'; | ||||
| import serializeUser from './user'; | ||||
| import serializeDriveFile from './drive-file'; | ||||
| import parse from '../common/text'; | ||||
|  | @ -76,8 +77,13 @@ const self = ( | |||
| 		_post.app = await serializeApp(_post.app_id); | ||||
| 	} | ||||
| 
 | ||||
| 	// Populate channel
 | ||||
| 	if (_post.channel_id) { | ||||
| 		_post.channel = await serializeChannel(_post.channel_id); | ||||
| 	} | ||||
| 
 | ||||
| 	// Populate media
 | ||||
| 	if (_post.media_ids) { | ||||
| 		// Populate media
 | ||||
| 		_post.media = await Promise.all(_post.media_ids.map(async fileId => | ||||
| 			await serializeDriveFile(fileId) | ||||
| 		)); | ||||
|  |  | |||
|  | @ -2,8 +2,9 @@ | |||
| 	<mk-ui ref="ui"> | ||||
| 		<main if={ !parent.fetching }> | ||||
| 			<h1>{ parent.channel.title }</h1> | ||||
| 			<mk-channel-post each={ parent.posts } post={ this }/> | ||||
| 			<mk-channel-form channel={ parent.channel }/> | ||||
| 			<mk-channel-post if={ parent.posts } each={ parent.posts.reverse() } post={ this } form={ parent.refs.form }/> | ||||
| 			<hr> | ||||
| 			<mk-channel-form channel={ parent.channel } ref="form"/> | ||||
| 		</main> | ||||
| 	</mk-ui> | ||||
| 	<style> | ||||
|  | @ -11,6 +12,8 @@ | |||
| 			display block | ||||
| 
 | ||||
| 			main | ||||
| 				padding 8px | ||||
| 
 | ||||
| 				> h1 | ||||
| 					color #f00 | ||||
| 	</style> | ||||
|  | @ -57,9 +60,13 @@ | |||
| 
 | ||||
| <mk-channel-post> | ||||
| 	<header> | ||||
| 		<b>{ post.user.name }</b> | ||||
| 		<a class="index" onclick={ reply }>{ post.index }:</a> | ||||
| 		<a class="name" href={ '/' + post.user.username }><b>{ post.user.name }</b></a> | ||||
| 		<mk-time time={ post.created_at } mode="detail"/> | ||||
| 		<span>ID:<i>{ post.user.username }</i></span> | ||||
| 	</header> | ||||
| 	<div> | ||||
| 		<a if={ post.reply_to }>>>{ post.reply_to.index }</a> | ||||
| 		{ post.text } | ||||
| 	</div> | ||||
| 	<style> | ||||
|  | @ -69,17 +76,35 @@ | |||
| 			padding 0 | ||||
| 
 | ||||
| 			> header | ||||
| 				> b | ||||
| 				> .index | ||||
| 					margin-right 0.25em | ||||
| 					color #000 | ||||
| 
 | ||||
| 				> .name | ||||
| 					margin-right 0.5em | ||||
| 					color #008000 | ||||
| 
 | ||||
| 				> mk-time | ||||
| 					margin-right 0.5em | ||||
| 
 | ||||
| 			> div | ||||
| 				padding 0 0 1em 2em | ||||
| 
 | ||||
| 	</style> | ||||
| 	<script> | ||||
| 		this.post = this.opts.post; | ||||
| 		this.form = this.opts.form; | ||||
| 
 | ||||
| 		this.reply = () => { | ||||
| 			this.form.update({ | ||||
| 				reply: this.post | ||||
| 			}); | ||||
| 		}; | ||||
| 	</script> | ||||
| </mk-channel-post> | ||||
| 
 | ||||
| <mk-channel-form> | ||||
| 	<p if={ reply }>{ reply.user.name }への返信: (or <a onclick={ clearReply }>キャンセル</a>)</p> | ||||
| 	<p if={ reply }><b>>>{ reply.index }</b> ({ reply.user.name }): <a onclick={ clearReply }>[x]</a></p> | ||||
| 	<textarea ref="text" disabled={ wait }></textarea> | ||||
| 	<button class={ wait: wait } ref="submit" disabled={ wait || (refs.text.value.length == 0) } onclick={ post }> | ||||
| 		{ wait ? 'やってます' : 'やる' }<mk-ellipsis if={ wait }/> | ||||
|  |  | |||
|  | @ -112,6 +112,7 @@ | |||
| 			</header> | ||||
| 			<div class="body"> | ||||
| 				<div class="text" ref="text"> | ||||
| 					<p class="channel" if={ p.channel != null }><a href={ '/channel/' + p.channel.id }>{ p.channel.title }</a>:</p> | ||||
| 					<a class="reply" if={ p.reply_to }> | ||||
| 						<i class="fa fa-reply"></i> | ||||
| 					</a> | ||||
|  | @ -333,6 +334,9 @@ | |||
| 									font-weight 400 | ||||
| 									font-style normal | ||||
| 
 | ||||
| 							> .channel | ||||
| 								margin 0 | ||||
| 
 | ||||
| 							> .reply | ||||
| 								margin-right 8px | ||||
| 								color #717171 | ||||
|  |  | |||
|  | @ -164,6 +164,7 @@ | |||
| 			</header> | ||||
| 			<div class="body"> | ||||
| 				<div class="text" ref="text"> | ||||
| 					<p class="channel" if={ p.channel != null }><a href={ '/channel/' + p.channel.id }>{ p.channel.title }</a>:</p> | ||||
| 					<a class="reply" if={ p.reply_to }> | ||||
| 						<i class="fa fa-reply"></i> | ||||
| 					</a> | ||||
|  | @ -373,6 +374,9 @@ | |||
| 							mk-url-preview | ||||
| 								margin-top 8px | ||||
| 
 | ||||
| 							> .channel | ||||
| 								margin 0 | ||||
| 
 | ||||
| 							> .reply | ||||
| 								margin-right 8px | ||||
| 								color #717171 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue