thelounge/client/js/libs/handlebars/ircmessageparser/findLinks.js
2018-06-09 13:46:46 -04:00

54 lines
965 B
JavaScript

"use strict";
const LinkifyIt = require("linkify-it");
LinkifyIt.prototype.normalize = function normalize(match) {
if (!match.schema) {
match.schema = "http:";
match.url = "http://" + match.url;
}
if (match.schema === "//") {
match.schema = "http:";
match.url = "http:" + match.url;
}
if (match.schema === "mailto:" && !/^mailto:/i.test(match.url)) {
match.url = "mailto:" + match.url;
}
};
const linkify = LinkifyIt()
.tlds(require("tlds"))
.tlds("onion", true);
// Known schemes to detect in text
const commonSchemes = [
"sftp",
"smb", "file",
"irc", "ircs",
"svn", "git",
"steam", "mumble", "ts3server",
"svn+ssh", "ssh",
];
for (const schema of commonSchemes) {
linkify.add(schema + ":", "http:");
}
function findLinks(text) {
const matches = linkify.match(text);
if (!matches) {
return [];
}
return matches.map((url) => ({
start: url.index,
end: url.lastIndex,
link: url.url,
}));
}
module.exports = findLinks;