add heuristics to hide URL previews other than for URLs where the user has explicitly identified the target as a link: i.e. by including a URI scheme prefix, or by including URI path components, or by doing an explicit markdown hyperlink. ignore previews of URLs within pre or code blocks

This commit is contained in:
Matthew Hodgson 2016-04-21 17:14:27 +01:00
parent e18e5f1425
commit c5a76dec1c

View file

@ -87,9 +87,32 @@ module.exports = React.createClass({
if (node.tagName === "A" && node.getAttribute("href") &&
(node.getAttribute("href").startsWith("http://") ||
node.getAttribute("href").startsWith("https://")))
{
// as a random heuristic to avoid highlighting things like "foo.pl"
// we require the linked text to either include a / (either from http:// )
// or from a full foo.bar/baz style schemeless URL - or be a markdown-style
// link, in which case we check the target text differs from the link value.
// TODO: make this configurable?
if (node.textContent.indexOf("/") > -1)
{
return node;
}
else {
var url = node.getAttribute("href");
var host = url.match(/^https?:\/\/(.*?)(\/|$)/)[1];
if (node.textContent.trim().startsWith(host)) {
// it's a "foo.pl" style link
return;
}
else {
// it's a [foo bar](http://foo.com) style link
return node;
}
}
}
else if (node.tagName === "PRE" || node.tagName === "CODE") {
return;
}
else if (node.children && node.children.length) {
return this.findLink(node.children)
}