AP: 投票をレンダリング
This commit is contained in:
		
							parent
							
								
									45dcfc8a00
								
							
						
					
					
						commit
						20e77196f2
					
				
					 10 changed files with 21 additions and 22 deletions
				
			
		| 
						 | 
					@ -36,7 +36,7 @@
 | 
				
			||||||
				</p>
 | 
									</p>
 | 
				
			||||||
				<div class="text">
 | 
									<div class="text">
 | 
				
			||||||
					<a class="reply" v-if="p.reply">%fa:reply%</a>
 | 
										<a class="reply" v-if="p.reply">%fa:reply%</a>
 | 
				
			||||||
					<mk-note-html v-if="p.textHtml" :text="p.text" :i="os.i" :class="$style.text"/>
 | 
										<mk-note-html v-if="p.text" :text="p.text" :i="os.i" :class="$style.text"/>
 | 
				
			||||||
					<a class="rp" v-if="p.renote">RP:</a>
 | 
										<a class="rp" v-if="p.renote">RP:</a>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<div class="media" v-if="p.media.length > 0">
 | 
									<div class="media" v-if="p.media.length > 0">
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,12 +29,6 @@ props:
 | 
				
			||||||
    desc:
 | 
					    desc:
 | 
				
			||||||
      ja: "投稿の本文 (ローカルの場合Markdown風のフォーマット)"
 | 
					      ja: "投稿の本文 (ローカルの場合Markdown風のフォーマット)"
 | 
				
			||||||
      en: "The text of this note (in Markdown like format if local)"
 | 
					      en: "The text of this note (in Markdown like format if local)"
 | 
				
			||||||
  - name: "textHtml"
 | 
					 | 
				
			||||||
    type: "string"
 | 
					 | 
				
			||||||
    optional: true
 | 
					 | 
				
			||||||
    desc:
 | 
					 | 
				
			||||||
      ja: "投稿の本文 (HTML) (投稿時は無視)"
 | 
					 | 
				
			||||||
      en: "The text of this note (in HTML. Ignored when posting.)"
 | 
					 | 
				
			||||||
  - name: "mediaIds"
 | 
					  - name: "mediaIds"
 | 
				
			||||||
    type: "id(DriveFile)[]"
 | 
					    type: "id(DriveFile)[]"
 | 
				
			||||||
    optional: true
 | 
					    optional: true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,12 +29,6 @@ props:
 | 
				
			||||||
    desc:
 | 
					    desc:
 | 
				
			||||||
      ja: "投稿の本文 (ローカルの場合Markdown風のフォーマット)"
 | 
					      ja: "投稿の本文 (ローカルの場合Markdown風のフォーマット)"
 | 
				
			||||||
      en: "The text of this note (in Markdown like format if local)"
 | 
					      en: "The text of this note (in Markdown like format if local)"
 | 
				
			||||||
  - name: "textHtml"
 | 
					 | 
				
			||||||
    type: "string"
 | 
					 | 
				
			||||||
    optional: true
 | 
					 | 
				
			||||||
    desc:
 | 
					 | 
				
			||||||
      ja: "投稿の本文 (HTML) (投稿時は無視)"
 | 
					 | 
				
			||||||
      en: "The text of this note (in HTML. Ignored when posting.)"
 | 
					 | 
				
			||||||
  - name: "mediaIds"
 | 
					  - name: "mediaIds"
 | 
				
			||||||
    type: "id(DriveFile)[]"
 | 
					    type: "id(DriveFile)[]"
 | 
				
			||||||
    optional: true
 | 
					    optional: true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,6 @@ export interface IMessagingMessage {
 | 
				
			||||||
	_id: mongo.ObjectID;
 | 
						_id: mongo.ObjectID;
 | 
				
			||||||
	createdAt: Date;
 | 
						createdAt: Date;
 | 
				
			||||||
	text: string;
 | 
						text: string;
 | 
				
			||||||
	textHtml: string;
 | 
					 | 
				
			||||||
	userId: mongo.ObjectID;
 | 
						userId: mongo.ObjectID;
 | 
				
			||||||
	recipientId: mongo.ObjectID;
 | 
						recipientId: mongo.ObjectID;
 | 
				
			||||||
	isRead: boolean;
 | 
						isRead: boolean;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,7 +38,6 @@ export type INote = {
 | 
				
			||||||
	poll: any; // todo
 | 
						poll: any; // todo
 | 
				
			||||||
	text: string;
 | 
						text: string;
 | 
				
			||||||
	tags: string[];
 | 
						tags: string[];
 | 
				
			||||||
	textHtml: string;
 | 
					 | 
				
			||||||
	cw: string;
 | 
						cw: string;
 | 
				
			||||||
	userId: mongo.ObjectID;
 | 
						userId: mongo.ObjectID;
 | 
				
			||||||
	appId: mongo.ObjectID;
 | 
						appId: mongo.ObjectID;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,6 @@ export default async function(actor: IRemoteUser, uri: string): Promise<void> {
 | 
				
			||||||
		$set: {
 | 
							$set: {
 | 
				
			||||||
			deletedAt: new Date(),
 | 
								deletedAt: new Date(),
 | 
				
			||||||
			text: null,
 | 
								text: null,
 | 
				
			||||||
			textHtml: null,
 | 
					 | 
				
			||||||
			mediaIds: [],
 | 
								mediaIds: [],
 | 
				
			||||||
			poll: null
 | 
								poll: null
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										18
									
								
								src/remote/activitypub/misc/get-note-html.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/remote/activitypub/misc/get-note-html.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					import { INote } from "../../../models/note";
 | 
				
			||||||
 | 
					import toHtml from '../../../text/html';
 | 
				
			||||||
 | 
					import parse from '../../../text/parse';
 | 
				
			||||||
 | 
					import config from '../../../config';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default function(note: INote) {
 | 
				
			||||||
 | 
						if (note.text == null) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						let html = toHtml(parse(note.text));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (note.poll != null) {
 | 
				
			||||||
 | 
							const url = `${config.url}/notes/${note._id}`;
 | 
				
			||||||
 | 
							// TODO: i18n
 | 
				
			||||||
 | 
							html += `<p>【投票】<br />${url}</p>`;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return html;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import config from '../../../config';
 | 
				
			||||||
import DriveFile from '../../../models/drive-file';
 | 
					import DriveFile from '../../../models/drive-file';
 | 
				
			||||||
import Note, { INote } from '../../../models/note';
 | 
					import Note, { INote } from '../../../models/note';
 | 
				
			||||||
import User from '../../../models/user';
 | 
					import User from '../../../models/user';
 | 
				
			||||||
 | 
					import toHtml from '../misc/get-note-html';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default async function renderNote(note: INote, dive = true) {
 | 
					export default async function renderNote(note: INote, dive = true) {
 | 
				
			||||||
	const promisedFiles = note.mediaIds
 | 
						const promisedFiles = note.mediaIds
 | 
				
			||||||
| 
						 | 
					@ -48,7 +49,7 @@ export default async function renderNote(note: INote, dive = true) {
 | 
				
			||||||
		id: `${config.url}/notes/${note._id}`,
 | 
							id: `${config.url}/notes/${note._id}`,
 | 
				
			||||||
		type: 'Note',
 | 
							type: 'Note',
 | 
				
			||||||
		attributedTo,
 | 
							attributedTo,
 | 
				
			||||||
		content: note.textHtml,
 | 
							content: toHtml(note),
 | 
				
			||||||
		published: note.createdAt.toISOString(),
 | 
							published: note.createdAt.toISOString(),
 | 
				
			||||||
		to: 'https://www.w3.org/ns/activitystreams#Public',
 | 
							to: 'https://www.w3.org/ns/activitystreams#Public',
 | 
				
			||||||
		cc: `${attributedTo}/followers`,
 | 
							cc: `${attributedTo}/followers`,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,8 +12,6 @@ import { pack } from '../../../../../models/messaging-message';
 | 
				
			||||||
import publishUserStream from '../../../../../publishers/stream';
 | 
					import publishUserStream from '../../../../../publishers/stream';
 | 
				
			||||||
import { publishMessagingStream, publishMessagingIndexStream } from '../../../../../publishers/stream';
 | 
					import { publishMessagingStream, publishMessagingIndexStream } from '../../../../../publishers/stream';
 | 
				
			||||||
import pushSw from '../../../../../publishers/push-sw';
 | 
					import pushSw from '../../../../../publishers/push-sw';
 | 
				
			||||||
import html from '../../../../../text/html';
 | 
					 | 
				
			||||||
import parse from '../../../../../text/parse';
 | 
					 | 
				
			||||||
import config from '../../../../../config';
 | 
					import config from '../../../../../config';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -77,7 +75,6 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
 | 
				
			||||||
		fileId: file ? file._id : undefined,
 | 
							fileId: file ? file._id : undefined,
 | 
				
			||||||
		recipientId: recipient._id,
 | 
							recipientId: recipient._id,
 | 
				
			||||||
		text: text ? text : undefined,
 | 
							text: text ? text : undefined,
 | 
				
			||||||
		textHtml: text ? html(parse(text)) : undefined,
 | 
					 | 
				
			||||||
		userId: user._id,
 | 
							userId: user._id,
 | 
				
			||||||
		isRead: false
 | 
							isRead: false
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,6 @@ import Mute from '../../models/mute';
 | 
				
			||||||
import pushSw from '../../publishers/push-sw';
 | 
					import pushSw from '../../publishers/push-sw';
 | 
				
			||||||
import event from '../../publishers/stream';
 | 
					import event from '../../publishers/stream';
 | 
				
			||||||
import parse from '../../text/parse';
 | 
					import parse from '../../text/parse';
 | 
				
			||||||
import html from '../../text/html';
 | 
					 | 
				
			||||||
import { IApp } from '../../models/app';
 | 
					import { IApp } from '../../models/app';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default async (user: IUser, data: {
 | 
					export default async (user: IUser, data: {
 | 
				
			||||||
| 
						 | 
					@ -63,7 +62,6 @@ export default async (user: IUser, data: {
 | 
				
			||||||
		replyId: data.reply ? data.reply._id : null,
 | 
							replyId: data.reply ? data.reply._id : null,
 | 
				
			||||||
		renoteId: data.renote ? data.renote._id : null,
 | 
							renoteId: data.renote ? data.renote._id : null,
 | 
				
			||||||
		text: data.text,
 | 
							text: data.text,
 | 
				
			||||||
		textHtml: tokens === null ? null : html(tokens),
 | 
					 | 
				
			||||||
		poll: data.poll,
 | 
							poll: data.poll,
 | 
				
			||||||
		cw: data.cw,
 | 
							cw: data.cw,
 | 
				
			||||||
		tags,
 | 
							tags,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue