diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2023-10-28 12:41:17 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-28 12:41:17 +0900 |
| commit | 481db8aba42c098d06af8382b1ff7eefa6d4ba48 (patch) | |
| tree | da154614ed33226784ee7fa12a9e670bd5850491 /packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts | |
| parent | update deps (diff) | |
| download | misskey-481db8aba42c098d06af8382b1ff7eefa6d4ba48.tar.gz misskey-481db8aba42c098d06af8382b1ff7eefa6d4ba48.tar.bz2 misskey-481db8aba42c098d06af8382b1ff7eefa6d4ba48.zip | |
fix(frontend): MFMパース時に意図せずnyaizeされる問題を修正 (#12161)
* Update MkMisskeyFlavoredMarkdown.ts
* Update MkMisskeyFlavoredMarkdown.ts
* Update MkMisskeyFlavoredMarkdown.ts
* Update MkNote.vue
* (fix) にゃいずをノートでのみ適用
* fix
* Fix lint
Diffstat (limited to 'packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts')
| -rw-r--r-- | packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts index f937b5f9e1..102aa0db34 100644 --- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts +++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts @@ -17,7 +17,7 @@ import MkSparkle from '@/components/MkSparkle.vue'; import MkA from '@/components/global/MkA.vue'; import { host } from '@/config.js'; import { defaultStore } from '@/store.js'; -import { nyaize } from '@/scripts/nyaize.js'; +import { nyaize as doNyaize } from '@/scripts/nyaize.js'; const QUOTE_STYLE = ` display: block; @@ -28,21 +28,27 @@ border-left: solid 3px var(--fg); opacity: 0.7; `.split('\n').join(' '); -export default function(props: { +type MfmProps = { text: string; plain?: boolean; nowrap?: boolean; author?: Misskey.entities.UserLite; - i?: Misskey.entities.UserLite; + i?: Misskey.entities.UserLite | null; isNote?: boolean; emojiUrls?: string[]; rootScale?: number; -}) { - const isNote = props.isNote !== undefined ? props.isNote : true; + nyaize: boolean | 'account'; +}; +// eslint-disable-next-line import/no-default-export +export default function(props: MfmProps) { + const isNote = props.isNote ?? true; + const shouldNyaize = props.nyaize ? props.nyaize === 'account' ? props.author?.isCat : false : false; + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (props.text == null || props.text === '') return; - const ast = (props.plain ? mfm.parseSimple : mfm.parse)(props.text); + const rootAst = (props.plain ? mfm.parseSimple : mfm.parse)(props.text); const validTime = (t: string | null | undefined) => { if (t == null) return null; @@ -55,13 +61,14 @@ export default function(props: { * Gen Vue Elements from MFM AST * @param ast MFM AST * @param scale How times large the text is + * @param disableNyaize Whether nyaize is disabled or not */ const genEl = (ast: mfm.MfmNode[], scale: number, disableNyaize = false) => ast.map((token): VNode | string | (VNode | string)[] => { switch (token.type) { case 'text': { let text = token.props.text.replace(/(\r\n|\n|\r)/g, '\n'); - if (!disableNyaize && props.author?.isCat) { - text = nyaize(text); + if (!disableNyaize && shouldNyaize) { + text = doNyaize(text); } if (!props.plain) { @@ -377,5 +384,5 @@ export default function(props: { return h('span', { // https://codeday.me/jp/qa/20190424/690106.html style: props.nowrap ? 'white-space: pre; word-wrap: normal; overflow: hidden; text-overflow: ellipsis;' : 'white-space: pre-wrap;', - }, genEl(ast, props.rootScale ?? 1)); + }, genEl(rootAst, props.rootScale ?? 1)); } |