From 5b9f3701f58ca00c151498d16b6a839a91ba8643 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Mon, 2 Apr 2018 12:58:53 +0900 Subject: Abolish common and misc directories --- src/text/parse/elements/bold.ts | 14 ++++++++++++++ src/text/parse/elements/code.ts | 17 +++++++++++++++++ src/text/parse/elements/emoji.ts | 14 ++++++++++++++ src/text/parse/elements/hashtag.ts | 19 +++++++++++++++++++ src/text/parse/elements/inline-code.ts | 17 +++++++++++++++++ src/text/parse/elements/link.ts | 19 +++++++++++++++++++ src/text/parse/elements/mention.ts | 17 +++++++++++++++++ src/text/parse/elements/quote.ts | 14 ++++++++++++++ src/text/parse/elements/url.ts | 14 ++++++++++++++ 9 files changed, 145 insertions(+) create mode 100644 src/text/parse/elements/bold.ts create mode 100644 src/text/parse/elements/code.ts create mode 100644 src/text/parse/elements/emoji.ts create mode 100644 src/text/parse/elements/hashtag.ts create mode 100644 src/text/parse/elements/inline-code.ts create mode 100644 src/text/parse/elements/link.ts create mode 100644 src/text/parse/elements/mention.ts create mode 100644 src/text/parse/elements/quote.ts create mode 100644 src/text/parse/elements/url.ts (limited to 'src/text/parse/elements') diff --git a/src/text/parse/elements/bold.ts b/src/text/parse/elements/bold.ts new file mode 100644 index 0000000000..ce25764457 --- /dev/null +++ b/src/text/parse/elements/bold.ts @@ -0,0 +1,14 @@ +/** + * Bold + */ + +module.exports = text => { + const match = text.match(/^\*\*(.+?)\*\*/); + if (!match) return null; + const bold = match[0]; + return { + type: 'bold', + content: bold, + bold: bold.substr(2, bold.length - 4) + }; +}; diff --git a/src/text/parse/elements/code.ts b/src/text/parse/elements/code.ts new file mode 100644 index 0000000000..4821e95fe2 --- /dev/null +++ b/src/text/parse/elements/code.ts @@ -0,0 +1,17 @@ +/** + * Code (block) + */ + +import genHtml from '../core/syntax-highlighter'; + +module.exports = text => { + const match = text.match(/^```([\s\S]+?)```/); + if (!match) return null; + const code = match[0]; + return { + type: 'code', + content: code, + code: code.substr(3, code.length - 6).trim(), + html: genHtml(code.substr(3, code.length - 6).trim()) + }; +}; diff --git a/src/text/parse/elements/emoji.ts b/src/text/parse/elements/emoji.ts new file mode 100644 index 0000000000..e24231a223 --- /dev/null +++ b/src/text/parse/elements/emoji.ts @@ -0,0 +1,14 @@ +/** + * Emoji + */ + +module.exports = text => { + const match = text.match(/^:[a-zA-Z0-9+-_]+:/); + if (!match) return null; + const emoji = match[0]; + return { + type: 'emoji', + content: emoji, + emoji: emoji.substr(1, emoji.length - 2) + }; +}; diff --git a/src/text/parse/elements/hashtag.ts b/src/text/parse/elements/hashtag.ts new file mode 100644 index 0000000000..ee57b140b8 --- /dev/null +++ b/src/text/parse/elements/hashtag.ts @@ -0,0 +1,19 @@ +/** + * Hashtag + */ + +module.exports = (text, i) => { + if (!(/^\s#[^\s]+/.test(text) || (i == 0 && /^#[^\s]+/.test(text)))) return null; + const isHead = text[0] == '#'; + const hashtag = text.match(/^\s?#[^\s]+/)[0]; + const res: any[] = !isHead ? [{ + type: 'text', + content: text[0] + }] : []; + res.push({ + type: 'hashtag', + content: isHead ? hashtag : hashtag.substr(1), + hashtag: isHead ? hashtag.substr(1) : hashtag.substr(2) + }); + return res; +}; diff --git a/src/text/parse/elements/inline-code.ts b/src/text/parse/elements/inline-code.ts new file mode 100644 index 0000000000..9f9ef51a2b --- /dev/null +++ b/src/text/parse/elements/inline-code.ts @@ -0,0 +1,17 @@ +/** + * Code (inline) + */ + +import genHtml from '../core/syntax-highlighter'; + +module.exports = text => { + const match = text.match(/^`(.+?)`/); + if (!match) return null; + const code = match[0]; + return { + type: 'inline-code', + content: code, + code: code.substr(1, code.length - 2).trim(), + html: genHtml(code.substr(1, code.length - 2).trim()) + }; +}; diff --git a/src/text/parse/elements/link.ts b/src/text/parse/elements/link.ts new file mode 100644 index 0000000000..35563ddc3d --- /dev/null +++ b/src/text/parse/elements/link.ts @@ -0,0 +1,19 @@ +/** + * Link + */ + +module.exports = text => { + const match = text.match(/^\??\[([^\[\]]+?)\]\((https?:\/\/[\w\/:%#@\$&\?!\(\)\[\]~\.=\+\-]+?)\)/); + if (!match) return null; + const silent = text[0] == '?'; + const link = match[0]; + const title = match[1]; + const url = match[2]; + return { + type: 'link', + content: link, + title: title, + url: url, + silent: silent + }; +}; diff --git a/src/text/parse/elements/mention.ts b/src/text/parse/elements/mention.ts new file mode 100644 index 0000000000..732554d8be --- /dev/null +++ b/src/text/parse/elements/mention.ts @@ -0,0 +1,17 @@ +/** + * Mention + */ +import parseAcct from '../../../user/parse-acct'; + +module.exports = text => { + const match = text.match(/^(?:@[a-zA-Z0-9\-]+){1,2}/); + if (!match) return null; + const mention = match[0]; + const { username, host } = parseAcct(mention.substr(1)); + return { + type: 'mention', + content: mention, + username, + host + }; +}; diff --git a/src/text/parse/elements/quote.ts b/src/text/parse/elements/quote.ts new file mode 100644 index 0000000000..cc8cfffdc4 --- /dev/null +++ b/src/text/parse/elements/quote.ts @@ -0,0 +1,14 @@ +/** + * Quoted text + */ + +module.exports = text => { + const match = text.match(/^"([\s\S]+?)\n"/); + if (!match) return null; + const quote = match[0]; + return { + type: 'quote', + content: quote, + quote: quote.substr(1, quote.length - 2).trim(), + }; +}; diff --git a/src/text/parse/elements/url.ts b/src/text/parse/elements/url.ts new file mode 100644 index 0000000000..1003aff9c3 --- /dev/null +++ b/src/text/parse/elements/url.ts @@ -0,0 +1,14 @@ +/** + * URL + */ + +module.exports = text => { + const match = text.match(/^https?:\/\/[\w\/:%#@\$&\?!\(\)\[\]~\.=\+\-]+/); + if (!match) return null; + const url = match[0]; + return { + type: 'url', + content: url, + url: url + }; +}; -- cgit v1.2.3-freya From aa94035987926f47b037c32b3c89ac470a40dc40 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Mon, 2 Apr 2018 13:44:32 +0900 Subject: Introduce acct directory --- src/acct/parse.ts | 4 ++++ src/acct/render.ts | 3 +++ src/client/app/ch/tags/channel.tag | 2 +- src/client/app/common/views/components/autocomplete.vue | 2 +- src/client/app/common/views/components/messaging-room.message.vue | 2 +- src/client/app/common/views/components/messaging.vue | 2 +- src/client/app/common/views/components/post-html.ts | 2 +- src/client/app/common/views/components/welcome-timeline.vue | 2 +- src/client/app/desktop/views/components/friends-maker.vue | 2 +- src/client/app/desktop/views/components/messaging-room-window.vue | 2 +- src/client/app/desktop/views/components/notifications.vue | 2 +- src/client/app/desktop/views/components/post-detail.sub.vue | 2 +- src/client/app/desktop/views/components/post-detail.vue | 2 +- src/client/app/desktop/views/components/post-preview.vue | 2 +- src/client/app/desktop/views/components/posts.post.sub.vue | 2 +- src/client/app/desktop/views/components/posts.post.vue | 2 +- src/client/app/desktop/views/components/settings.mute.vue | 2 +- src/client/app/desktop/views/components/user-preview.vue | 4 ++-- src/client/app/desktop/views/components/users-list.item.vue | 2 +- src/client/app/desktop/views/pages/messaging-room.vue | 2 +- src/client/app/desktop/views/pages/user/user.followers-you-know.vue | 2 +- src/client/app/desktop/views/pages/user/user.friends.vue | 2 +- src/client/app/desktop/views/pages/user/user.header.vue | 2 +- src/client/app/desktop/views/pages/user/user.vue | 2 +- src/client/app/desktop/views/pages/welcome.vue | 2 +- src/client/app/desktop/views/widgets/channel.channel.post.vue | 2 +- src/client/app/desktop/views/widgets/polls.vue | 2 +- src/client/app/desktop/views/widgets/trends.vue | 2 +- src/client/app/desktop/views/widgets/users.vue | 2 +- src/client/app/mobile/views/components/notification.vue | 2 +- src/client/app/mobile/views/components/post-card.vue | 2 +- src/client/app/mobile/views/components/post-detail.sub.vue | 2 +- src/client/app/mobile/views/components/post-detail.vue | 2 +- src/client/app/mobile/views/components/post-preview.vue | 2 +- src/client/app/mobile/views/components/post.sub.vue | 2 +- src/client/app/mobile/views/components/post.vue | 2 +- src/client/app/mobile/views/components/user-card.vue | 2 +- src/client/app/mobile/views/components/user-preview.vue | 2 +- src/client/app/mobile/views/pages/followers.vue | 2 +- src/client/app/mobile/views/pages/following.vue | 2 +- src/client/app/mobile/views/pages/messaging-room.vue | 2 +- src/client/app/mobile/views/pages/messaging.vue | 2 +- src/client/app/mobile/views/pages/user.vue | 4 ++-- src/client/app/mobile/views/pages/user/home.followers-you-know.vue | 2 +- src/client/app/mobile/views/pages/user/home.photos.vue | 2 +- src/drive/add-file.ts | 2 +- src/renderers/get-user-summary.ts | 2 +- src/server/activitypub/inbox.ts | 2 +- src/server/activitypub/post.ts | 2 +- src/server/activitypub/with-user.ts | 2 +- src/server/api/bot/core.ts | 2 +- src/server/api/bot/interfaces/line.ts | 4 ++-- src/server/api/endpoints/posts/create.ts | 4 ++-- src/server/api/limitter.ts | 2 +- src/server/webfinger.ts | 2 +- src/text/parse/elements/mention.ts | 2 +- src/user/get-acct.ts | 3 --- src/user/parse-acct.ts | 4 ---- 58 files changed, 65 insertions(+), 65 deletions(-) create mode 100644 src/acct/parse.ts create mode 100644 src/acct/render.ts delete mode 100644 src/user/get-acct.ts delete mode 100644 src/user/parse-acct.ts (limited to 'src/text/parse/elements') diff --git a/src/acct/parse.ts b/src/acct/parse.ts new file mode 100644 index 0000000000..ef1f55405d --- /dev/null +++ b/src/acct/parse.ts @@ -0,0 +1,4 @@ +export default acct => { + const splitted = acct.split('@', 2); + return { username: splitted[0], host: splitted[1] || null }; +}; diff --git a/src/acct/render.ts b/src/acct/render.ts new file mode 100644 index 0000000000..9afb03d88b --- /dev/null +++ b/src/acct/render.ts @@ -0,0 +1,3 @@ +export default user => { + return user.host === null ? user.username : `${user.username}@${user.host}`; +}; diff --git a/src/client/app/ch/tags/channel.tag b/src/client/app/ch/tags/channel.tag index 0c139ba267..1ebc3ccebc 100644 --- a/src/client/app/ch/tags/channel.tag +++ b/src/client/app/ch/tags/channel.tag @@ -229,7 +229,7 @@