mirror of
https://github.com/thelounge/thelounge
synced 2024-11-23 04:23:13 +00:00
Wrap withinString in try/catch
This commit is contained in:
parent
0d6ff2535e
commit
9a8c1b2fd0
1 changed files with 33 additions and 29 deletions
|
@ -22,41 +22,45 @@ function findLinks(text) {
|
|||
// <a>-Tags.
|
||||
// See https://medialize.github.io/URI.js/docs.html#static-withinString
|
||||
// In our case, we store each URI encountered in a result array.
|
||||
URI.withinString(text, function(url, start, end) {
|
||||
let parsedScheme;
|
||||
try {
|
||||
URI.withinString(text, function(url, start, end) {
|
||||
let parsedScheme;
|
||||
|
||||
try {
|
||||
// Extract the scheme of the URL detected, if there is one
|
||||
parsedScheme = URI(url).scheme().toLowerCase();
|
||||
} catch (e) {
|
||||
// URI may throw an exception for malformed urls,
|
||||
// as to why withinString finds these in the first place is a mystery
|
||||
return;
|
||||
}
|
||||
try {
|
||||
// Extract the scheme of the URL detected, if there is one
|
||||
parsedScheme = URI(url).scheme().toLowerCase();
|
||||
} catch (e) {
|
||||
// URI may throw an exception for malformed urls,
|
||||
// as to why withinString finds these in the first place is a mystery
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the scheme of the detected URL matches a common one above.
|
||||
// In a URL like `foo..http://example.com`, the scheme would be `foo..http`,
|
||||
// so we need to clean up the end of the scheme and filter out the rest.
|
||||
const matchedScheme = commonSchemes.find((scheme) => parsedScheme.endsWith(scheme));
|
||||
// Check if the scheme of the detected URL matches a common one above.
|
||||
// In a URL like `foo..http://example.com`, the scheme would be `foo..http`,
|
||||
// so we need to clean up the end of the scheme and filter out the rest.
|
||||
const matchedScheme = commonSchemes.find((scheme) => parsedScheme.endsWith(scheme));
|
||||
|
||||
// A known scheme was found, extract the unknown part from the URL
|
||||
if (matchedScheme) {
|
||||
const prefix = parsedScheme.length - matchedScheme.length;
|
||||
start += prefix;
|
||||
url = url.slice(prefix);
|
||||
}
|
||||
// A known scheme was found, extract the unknown part from the URL
|
||||
if (matchedScheme) {
|
||||
const prefix = parsedScheme.length - matchedScheme.length;
|
||||
start += prefix;
|
||||
url = url.slice(prefix);
|
||||
}
|
||||
|
||||
// The URL matched but does not start with a scheme (`www.foo.com`), add it
|
||||
if (!parsedScheme.length) {
|
||||
url = "http://" + url;
|
||||
}
|
||||
// The URL matched but does not start with a scheme (`www.foo.com`), add it
|
||||
if (!parsedScheme.length) {
|
||||
url = "http://" + url;
|
||||
}
|
||||
|
||||
result.push({
|
||||
start: start,
|
||||
end: end,
|
||||
link: url
|
||||
result.push({
|
||||
start: start,
|
||||
end: end,
|
||||
link: url
|
||||
});
|
||||
});
|
||||
});
|
||||
} catch (e) {
|
||||
// withinString is wrapped in a try/catch due to https://github.com/medialize/URI.js/issues/359
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue