From dba2833fe9a38946f15f3fc3f1bd25eaf96ce919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Thu, 24 Jan 2019 20:00:23 +0900 Subject: [PATCH] Fix bug --- src/models/note.ts | 34 +++++++++++++++++++--------------- src/services/note/create.ts | 11 ++++++----- test/api.ts | 4 ++-- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/src/models/note.ts b/src/models/note.ts index 9945ee42a..e8a29bf33 100644 --- a/src/models/note.ts +++ b/src/models/note.ts @@ -378,14 +378,14 @@ export const pack = async ( //#endregion const nyamap: { [x: string]: string } = { - //#region nyanize: ja-JP + //#region nyaize: ja-JP 'な': 'にゃ', 'ナ': 'ニャ', 'ナ': 'ニャ' //#endregion }; - //#region nyanize: ko-KR + //#region nyaize: ko-KR const diffKoKr = '냐'.charCodeAt(0) - '나'.charCodeAt(0); for (let i = '나'.charCodeAt(0); i <= '낳'.charCodeAt(0); i++) nyamap[String.fromCharCode(i)] = String.fromCharCode(i + diffKoKr); @@ -393,24 +393,28 @@ export const pack = async ( const raw: string = _note.text; const stack = [!!_note.user.isCat]; - for (let i = 0; i < raw.length; i++) { - const head = raw[i]; + if (raw) { + _note.text = ''; - if (head === '<') { - const [, tag, state] = raw.slice(i).match(/^<((\/?!?)nya>)/i) || [, , , ]; + for (let i = 0; i < raw.length; i++) { + const head = raw[i]; - if (typeof state === 'string') { - if (state[0] === '/') - stack.shift(); - else - stack.unshift(!state); + if (head === '<') { + const [, tag, state] = raw.slice(i).match(/^<((\/?!?)nya>)/i) || [, , , ]; - i += tag.length; - continue; + if (typeof state === 'string') { + if (state[0] === '/') + stack.shift(); + else + stack.unshift(!state); + + i += tag.length; + continue; + } } - } - _note.text += stack[0] && nyamap[head] || head; + _note.text += stack[0] && nyamap[head] || head; + } } if (!opts.skipHide) { diff --git a/src/services/note/create.ts b/src/services/note/create.ts index c6c72269e..25462164f 100644 --- a/src/services/note/create.ts +++ b/src/services/note/create.ts @@ -148,16 +148,17 @@ export default async (user: IUser, data: Option, silent = false) => new Promise< if (data.text) { data.text = data.text.trim(); + const match = data.text.match(/<\/?!?nya>/ig) || []; const stack: string[] = []; - for (const tag of [...data.text.match(/<\/?!?nya>/ig)] + for (const tag of [...match] .map(x => x.toLocaleLowerCase())) if (tag.includes('/')) { if (stack.pop() !== tag.replace('/', '')) - return rej('Invalid nyanize syntax'); + return rej('Invalid nyaize syntax'); } else stack.push(tag); if (stack.length) - return rej('Invalid nyanize syntax'); + return rej('Invalid nyaize syntax'); } let tags = data.apHashtags; @@ -170,7 +171,7 @@ export default async (user: IUser, data: Option, silent = false) => new Promise< const tokens = text ? parse(text) : []; const cwTokens = data.cw ? parse(data.cw) : []; const choiceTokens = data.poll && data.poll.choices - ? concat((data.poll.choices as IChoice[]).map(choice => parse(choice.text.replace(/^<\/?!?nya>/ig, '')))) + ? concat((data.poll.choices as IChoice[]).map(choice => parse(choice.text && choice.text.replace(/^<\/?!?nya>/ig, '')))) : []; const combinedTokens = tokens.concat(cwTokens).concat(choiceTokens); @@ -351,7 +352,7 @@ export default async (user: IUser, data: Option, silent = false) => new Promise< async function renderActivity(data: Option, note: INote) { if (data.localOnly) return null; - const content = data.renote && !data.text && !data.text.replace(/^<\/?!?nya>/ig, '') && !data.poll && (!data.files || !data.files.length) + const content = data.renote && (!data.text || !data.text.replace(/^<\/?!?nya>/ig, '')) && !data.poll && (!data.files || !data.files.length) ? renderAnnounce(data.renote.uri ? data.renote.uri : `${config.url}/notes/${data.renote._id}`, note) : renderCreate(await renderNote(note, false), note); diff --git a/test/api.ts b/test/api.ts index 7f26b95bf..22962bfbe 100644 --- a/test/api.ts +++ b/test/api.ts @@ -369,7 +369,7 @@ describe('API', () => { expect(res).have.status(400); })); - it('can make nyanize enable', async(async () => { + it('can make nyaize enable', async(async () => { const me = await signup(); const post = { @@ -384,7 +384,7 @@ describe('API', () => { expect(res.body.createdNote).have.property('text').eql('なんにゃんなんにゃんなん'); })); - it('can make nyanize disable', async(async () => { + it('can make nyaize disable', async(async () => { const me = await signup(); await request('/i/update', {