diff options
| author | marihachi <marihachi0620@gmail.com> | 2021-04-10 17:50:18 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-10 17:50:18 +0900 |
| commit | 3a6331693a2c165fa6bb1a377ad7bf471f2b5550 (patch) | |
| tree | 64f5f0ca0b3d5edd894a310030ff21126104517a /src/misc | |
| parent | Tweak UI (diff) | |
| download | misskey-3a6331693a2c165fa6bb1a377ad7bf471f2b5550.tar.gz misskey-3a6331693a2c165fa6bb1a377ad7bf471f2b5550.tar.bz2 misskey-3a6331693a2c165fa6bb1a377ad7bf471f2b5550.zip | |
refactor mfm extract (#7434)
* refactor extractCustomEmojisFromMfm()
* refactor extract-hashtags
* refactor extract-mentions
* refactor extract-hashtags
* refactor extract-url-from-mfm
* refactor extract-mentions
Diffstat (limited to 'src/misc')
| -rw-r--r-- | src/misc/extract-custom-emojis-from-mfm.ts | 14 | ||||
| -rw-r--r-- | src/misc/extract-hashtags.ts | 16 | ||||
| -rw-r--r-- | src/misc/extract-mentions.ts | 17 | ||||
| -rw-r--r-- | src/misc/extract-url-from-mfm.ts | 28 |
4 files changed, 28 insertions, 47 deletions
diff --git a/src/misc/extract-custom-emojis-from-mfm.ts b/src/misc/extract-custom-emojis-from-mfm.ts index f1477a79f0..ef2cb1fd6c 100644 --- a/src/misc/extract-custom-emojis-from-mfm.ts +++ b/src/misc/extract-custom-emojis-from-mfm.ts @@ -2,17 +2,13 @@ import * as mfm from 'mfm-js'; import { unique } from '@/prelude/array'; export function extractCustomEmojisFromMfm(nodes: mfm.MfmNode[]): string[] { - const emojiNodes = [] as mfm.MfmEmojiCode[]; + const emojis = [] as string[]; - function scan(nodes: mfm.MfmNode[]) { - for (const node of nodes) { - if (node.type === 'emojiCode') emojiNodes.push(node); - else if (node.children) scan(node.children); + mfm.inspect(nodes, (node) => { + if (node.type === 'emojiCode' && node.props.name.length <= 100) { + emojis.push(node.props.name); } - } + }); - scan(nodes); - - const emojis = emojiNodes.filter(x => x.props.name.length <= 100).map(x => x.props.name!); return unique(emojis); } diff --git a/src/misc/extract-hashtags.ts b/src/misc/extract-hashtags.ts index 9961755ccd..f89b699a94 100644 --- a/src/misc/extract-hashtags.ts +++ b/src/misc/extract-hashtags.ts @@ -1,18 +1,14 @@ import * as mfm from 'mfm-js'; import { unique } from '@/prelude/array'; -export default function(nodes: mfm.MfmNode[]): string[] { - const hashtagNodes = [] as mfm.MfmHashtag[]; +export function extractHashtags(nodes: mfm.MfmNode[]): string[] { + const hashtags = [] as string[]; - function scan(nodes: mfm.MfmNode[]) { - for (const node of nodes) { - if (node.type === 'hashtag') hashtagNodes.push(node); - else if (node.children) scan(node.children); + mfm.inspect(nodes, (node) => { + if (node.type === 'hashtag') { + hashtags.push(node.props.hashtag); } - } + }); - scan(nodes); - - const hashtags = hashtagNodes.map(x => x.props.hashtag); return unique(hashtags); } diff --git a/src/misc/extract-mentions.ts b/src/misc/extract-mentions.ts index a9d4b378f3..a0e2fb6d57 100644 --- a/src/misc/extract-mentions.ts +++ b/src/misc/extract-mentions.ts @@ -2,18 +2,15 @@ import * as mfm from 'mfm-js'; -export default function(nodes: mfm.MfmNode[]): mfm.MfmMention['props'][] { +export function extractMentions(nodes: mfm.MfmNode[]): mfm.MfmMention['props'][] { // TODO: 重複を削除 - const mentionNodes = [] as mfm.MfmMention[]; + const mentions = [] as mfm.MfmMention['props'][]; - function scan(nodes: mfm.MfmNode[]) { - for (const node of nodes) { - if (node.type === 'mention') mentionNodes.push(node); - else if (node.children) scan(node.children); + mfm.inspect(nodes, (node) => { + if (node.type === 'mention') { + mentions.push(node.props); } - } + }); - scan(nodes); - - return mentionNodes.map(x => x.props); + return mentions; } diff --git a/src/misc/extract-url-from-mfm.ts b/src/misc/extract-url-from-mfm.ts index aa7f5f2540..ec3b019ea5 100644 --- a/src/misc/extract-url-from-mfm.ts +++ b/src/misc/extract-url-from-mfm.ts @@ -6,29 +6,21 @@ import { unique } from '@/prelude/array'; const removeHash = (x: string) => x.replace(/#[^#]*$/, ''); export function extractUrlFromMfm(nodes: mfm.MfmNode[], respectSilentFlag = true): string[] { - const urlNodes = [] as (mfm.MfmUrl | mfm.MfmLink)[]; + let urls = [] as string[]; - function scan(nodes: mfm.MfmNode[]) { - for (const node of nodes) { - if (node.type === 'url') { - urlNodes.push(node); - } else if (node.type === 'link') { - if (!respectSilentFlag || !node.props.silent) { - urlNodes.push(node); - } - } else if (node.children) { - scan(node.children); - } + mfm.inspect(nodes, (node) => { + if (node.type === 'url') { + urls.push(node.props.url); + } else if (node.type === 'link' && (!respectSilentFlag || !node.props.silent)) { + urls.push(node.props.url); } - } + }); - scan(nodes); - - const urls = unique(urlNodes.map(x => x.props.url)); + urls = unique(urls); return urls.reduce((array, url) => { - const removed = removeHash(url); - if (!array.map(x => removeHash(x)).includes(removed)) array.push(url); + const urlWithoutHash = removeHash(url); + if (!array.map(x => removeHash(x)).includes(urlWithoutHash)) array.push(url); return array; }, [] as string[]); } |