From f8ddccf23984ee866057ca50064b688c0909ab7a Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 12 Oct 2021 15:16:31 +0200 Subject: [PATCH] Upgrade linkifyjs --- client/angular.json | 1 + client/package.json | 4 +- .../app/core/renderer/linkifier.service.ts | 102 ++---------------- client/yarn.lock | 18 +++- 4 files changed, 27 insertions(+), 98 deletions(-) diff --git a/client/angular.json b/client/angular.json index 69de2e784..1dd745f09 100644 --- a/client/angular.json +++ b/client/angular.json @@ -156,6 +156,7 @@ "chart.js", "htmlparser2", "markdown-it-emoji/light", + "linkifyjs/lib/linkify-html", "sanitize-html", "debug", "@peertube/p2p-media-loader-hlsjs", diff --git a/client/package.json b/client/package.json index 8e06b63d7..ac85366c3 100644 --- a/client/package.json +++ b/client/package.json @@ -102,7 +102,9 @@ "html-webpack-plugin": "^5.3.1", "https-browserify": "^1.0.0", "jschannel": "^1.0.2", - "linkifyjs": "^2.1.5", + "linkify-html": "^3.0.2", + "linkify-plugin-mention": "^3.0.2", + "linkifyjs": "^3.0.2", "lodash-es": "^4.17.4", "markdown-it": "12.2.0", "mini-css-extract-plugin": "^2.2.0", diff --git a/client/src/app/core/renderer/linkifier.service.ts b/client/src/app/core/renderer/linkifier.service.ts index db9326d63..78df92cc9 100644 --- a/client/src/app/core/renderer/linkifier.service.ts +++ b/client/src/app/core/renderer/linkifier.service.ts @@ -12,110 +12,26 @@ export class LinkifierService { className: { mention: LinkifierService.CLASSNAME + '-mention', url: LinkifierService.CLASSNAME + '-url' + }, + formatHref: { + mention: (href: string) => { + return getAbsoluteAPIUrl() + '/services/redirect/accounts/' + href.substr(1) + } } } async linkify (text: string) { if (!this.linkifyModule) { const result = await Promise.all([ - import('linkifyjs'), // ES module - import('linkifyjs/html').then(m => m.default) + import('linkifyjs'), + import('linkify-plugin-mention'), + import('linkify-html').then(m => (m as any).default) ]) this.linkifyModule = result[0] - this.linkifyHtmlModule = result[1] - - this.mentionWithDomainPlugin() + this.linkifyHtmlModule = result[2] } return this.linkifyHtmlModule(text, this.linkifyOptions) } - - private mentionWithDomainPlugin () { - const TT = this.linkifyModule.scanner.TOKENS // Text tokens - const { TOKENS: MT, State } = this.linkifyModule.parser // Multi tokens, state - const MultiToken = MT.Base - const S_START = this.linkifyModule.parser.start - - const TT_AT = TT.AT - const TT_DOMAIN = TT.DOMAIN - const TT_LOCALHOST = TT.LOCALHOST - const TT_NUM = TT.NUM - const TT_COLON = TT.COLON - const TT_SLASH = TT.SLASH - const TT_TLD = TT.TLD - const TT_UNDERSCORE = TT.UNDERSCORE - const TT_DOT = TT.DOT - - function MENTION (this: any, value: any) { - this.v = value - } - - this.linkifyModule.inherits(MultiToken, MENTION, { - type: 'mentionWithDomain', - isLink: true, - toHref () { - return getAbsoluteAPIUrl() + '/services/redirect/accounts/' + this.toString().substr(1) - } - }) - - const S_AT = S_START.jump(TT_AT) // @ - const S_AT_SYMS = new State() - const S_MENTION = new State(MENTION) - const S_MENTION_DIVIDER = new State() - const S_MENTION_DIVIDER_SYMS = new State() - - // @_, - S_AT.on(TT_UNDERSCORE, S_AT_SYMS) - - // @_* - S_AT_SYMS - .on(TT_UNDERSCORE, S_AT_SYMS) - .on(TT_DOT, S_AT_SYMS) - - // Valid mention (not made up entirely of symbols) - S_AT - .on(TT_DOMAIN, S_MENTION) - .on(TT_LOCALHOST, S_MENTION) - .on(TT_TLD, S_MENTION) - .on(TT_NUM, S_MENTION) - - S_AT_SYMS - .on(TT_DOMAIN, S_MENTION) - .on(TT_LOCALHOST, S_MENTION) - .on(TT_TLD, S_MENTION) - .on(TT_NUM, S_MENTION) - - // More valid mentions - S_MENTION - .on(TT_DOMAIN, S_MENTION) - .on(TT_LOCALHOST, S_MENTION) - .on(TT_TLD, S_MENTION) - .on(TT_COLON, S_MENTION) - .on(TT_NUM, S_MENTION) - .on(TT_UNDERSCORE, S_MENTION) - - // Mention with a divider - S_MENTION - .on(TT_AT, S_MENTION_DIVIDER) - .on(TT_SLASH, S_MENTION_DIVIDER) - .on(TT_DOT, S_MENTION_DIVIDER) - - // Mention _ trailing stash plus syms - S_MENTION_DIVIDER.on(TT_UNDERSCORE, S_MENTION_DIVIDER_SYMS) - S_MENTION_DIVIDER_SYMS.on(TT_UNDERSCORE, S_MENTION_DIVIDER_SYMS) - - // Once we get a word token, mentions can start up again - S_MENTION_DIVIDER - .on(TT_DOMAIN, S_MENTION) - .on(TT_LOCALHOST, S_MENTION) - .on(TT_TLD, S_MENTION) - .on(TT_NUM, S_MENTION) - - S_MENTION_DIVIDER_SYMS - .on(TT_DOMAIN, S_MENTION) - .on(TT_LOCALHOST, S_MENTION) - .on(TT_TLD, S_MENTION) - .on(TT_NUM, S_MENTION) - } } diff --git a/client/yarn.lock b/client/yarn.lock index 0bd325ae9..44ec1bfe6 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -7852,6 +7852,11 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +linkify-html@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/linkify-html/-/linkify-html-3.0.2.tgz#d9cd1bbb8afa54560d35427a22dbf2018ea44eb8" + integrity sha512-vHIFhMjEFptdaRqk6wfNmtoBKkFPAkZGUwsThMafSnkqc02gZc6+bfAAxVgMZAn7NTxDYgSW2q04kmVAzYtEaA== + linkify-it@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" @@ -7859,10 +7864,15 @@ linkify-it@^3.0.1: dependencies: uc.micro "^1.0.1" -linkifyjs@^2.1.5: - version "2.1.9" - resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-2.1.9.tgz#af06e45a2866ff06c4766582590d098a4d584702" - integrity sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug== +linkify-plugin-mention@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/linkify-plugin-mention/-/linkify-plugin-mention-3.0.2.tgz#ecb29e5840532e86c33007c54b210e5b5de266e9" + integrity sha512-NWYZLFyZV5uJWETHpNzsFZO+gk22hu5sbj8rndthfv5t+hQTozYkKt13b5nugvk30QSRQ4ULvhsTrEA8ohceOA== + +linkifyjs@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-3.0.2.tgz#f1d300300ef21dab0eaabdd8a661186723f924ba" + integrity sha512-PSHDxSAWkZQ208W4PI/+yo9NHSI6NAHKmazMtyRavyibJgrPOioPIjQn7zyapASQlKoPmAV+tOlqzTqX3XFWXQ== load-ip-set@^2.2.1: version "2.2.1"