From f2ee4b80e604dc58105190e61b983efe82baa8c9 Mon Sep 17 00:00:00 2001 From: AleksandarFa Date: Fri, 2 Jul 2021 14:26:39 +0200 Subject: [PATCH] Limited colon replacement --- src/rules/link.js | 20 +++++++++++++------- src/rules/linkify.js | 23 ++++++++++++++--------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/rules/link.js b/src/rules/link.js index 696d1e0..d3c5caa 100644 --- a/src/rules/link.js +++ b/src/rules/link.js @@ -1,12 +1,18 @@ -const LINK_REGEX = /\[(.+?)\]\(((?:(?:http[s]?|ftp):\/{2})?)([\w\/\-+?#=.:;!%&]+)\)/g +const LINK_REGEX = + /\[(.+?)\]\(((?:(?:http[s]?|ftp):\/{2})?)([\w\/\-+?#=.:;!%&]+)\)/g export class Link { - static get RULE_NAME () { return 'link' } + static get RULE_NAME () { + return 'link' + } static parse (source) { - return source.replace(LINK_REGEX, (match, linkName, urlProtocolDomain, urlPath) => { - const url = urlProtocolDomain.trim() + urlPath.trim().replace(/:/g, '%3A') - - return `${linkName}` - }) + return source.replace( + LINK_REGEX, + (match, linkName, urlProtocolDomain, urlPath) => { + const url = + urlProtocolDomain.trim() + urlPath.trim().replace(/:/g, '%3A') + return `${linkName}` + } + ) } } diff --git a/src/rules/linkify.js b/src/rules/linkify.js index 1686db6..f22d0c5 100644 --- a/src/rules/linkify.js +++ b/src/rules/linkify.js @@ -1,13 +1,18 @@ -const LINK_REGEX = /(^|\s|>)((?:http(?:s)?:\/\/.)(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6})\b([-a-zA-Z0-9@:;%_\+.~#?!&//=]*)/g +const LINK_REGEX = + /(^|\s|>)((?:http(?:s)?:\/\/.)(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6})\b([-a-zA-Z0-9@:;%_\+.~#?!&//=]*)/g; export class Linkify { - static get RULE_NAME () { return 'linkify' } - - static parse (source) { - return source.replace(LINK_REGEX, (all, before, urlProtocolDomain, urlPath) => { - const url = urlProtocolDomain.trim() + urlPath.trim().replace(/:/g, '%3A') - const href = url.substr(0, 4) !== 'http' ? `http://${url}` : url + static get RULE_NAME() { + return "linkify"; + } - return `${before}${url}` - }) + static parse(source) { + return source.replace( + LINK_REGEX, + (all, before, urlProtocolDomain, urlPath) => { + const url = new URL(source); + url.pathname = url.pathname.replace(/:/g, "%3A"); + return `${before}${url.href}`; + } + ); } }