Skip to content

Commit

Permalink
Added option for detecting ports
Browse files Browse the repository at this point in the history
  • Loading branch information
nfrasser committed Apr 10, 2014
1 parent c592b6f commit 34207b3
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 8 deletions.
6 changes: 3 additions & 3 deletions dist/jquery.linkify.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,17 @@
for (prop in defaults) settings[prop] || (settings[prop] = defaults[prop]);
for (prop in options) settings[prop] = options[prop];
return settings;
}, Linkified.linkMatch = new RegExp([ "(", '\\s|[^a-zA-Z0-9.\\+_\\/"\\>\\-]|^', ")(?:", "(", "[a-zA-Z0-9\\+_\\-]+", "(?:", "\\.[a-zA-Z0-9\\+_\\-]+", ")*@", ")?(", "http:\\/\\/|https:\\/\\/|ftp:\\/\\/", ")?(", "(?:(?:[a-z0-9][a-z0-9_%\\-_+]*\\.)+)", ")(", "(?:com|ca|co|edu|gov|net|org|dev|biz|cat|int|pro|tel|mil|aero|asia|coop|info|jobs|mobi|museum|name|post|travel|local|[a-z]{2})", ")(", "(?:", "[\\/|\\?]", "(?:", "[\\-a-zA-Z0-9_%#*&+=~!?,;:.\\/]*", ")*", ")", "[\\-\\/a-zA-Z0-9_%#*&+=~]", "|", "\\/?", ")?", ")(", '[^a-zA-Z0-9\\+_\\/"\\<\\-]|$', ")" ].join(""), "g"),
}, Linkified.linkMatch = new RegExp([ "(", '\\s|[^a-zA-Z0-9.\\+_\\/"\\>\\-]|^', ")(?:", "(", "[a-zA-Z0-9\\+_\\-]+", "(?:", "\\.[a-zA-Z0-9\\+_\\-]+", ")*@", ")?(", "http:\\/\\/|https:\\/\\/|ftp:\\/\\/", ")?(", "(?:(?:[a-z0-9][a-z0-9_%\\-_+]*\\.)+)", ")(", "(?:com|ca|co|edu|gov|net|org|dev|biz|cat|int|pro|tel|mil|aero|asia|coop|info|jobs|mobi|museum|name|post|travel|local|[a-z]{2})", ")(", "(?::\\d{1,5})", ")?(", "(?:", "[\\/|\\?]", "(?:", "[\\-a-zA-Z0-9_%#*&+=~!?,;:.\\/]*", ")*", ")", "[\\-\\/a-zA-Z0-9_%#*&+=~]", "|", "\\/?", ")?", ")(", '[^a-zA-Z0-9\\+_\\/"\\<\\-]|$', ")" ].join(""), "g"),
Linkified.emailLinkMatch = /(<[a-z]+ href=\")(http:\/\/)([a-zA-Z0-9\+_\-]+(?:\.[a-zA-Z0-9\+_\-]+)*@)/g,
Linkified.linkify = function(text, options) {
var attr, settings, linkClasses, linkReplace = [];
this.constructor === Linkified && this.settings ? (settings = this.settings, options && (settings = Linkified.extendSettings(options, settings))) : settings = Linkified.extendSettings(options),
linkClasses = settings.linkClass ? settings.linkClass.split(/\s+/) : [], linkClasses.push.apply(linkClasses, settings.linkClasses),
text = text.replace(/</g, "&lt;").replace(/(\s)/g, "$1$1"), linkReplace.push("$1<" + settings.tagName, 'href="http://$2$4$5$6"'),
text = text.replace(/</g, "&lt;").replace(/(\s)/g, "$1$1"), linkReplace.push("$1<" + settings.tagName, 'href="http://$2$4$5$6$7"'),
linkReplace.push('class="linkified' + (linkClasses.length > 0 ? " " + linkClasses.join(" ") : "") + '"'),
settings.target && linkReplace.push('target="' + settings.target + '"');
for (attr in settings.linkAttributes) linkReplace.push([ attr, '="', settings.linkAttributes[attr].replace(/\"/g, "&quot;").replace(/\$/g, "&#36;"), '"' ].join(""));
return linkReplace.push(">$2$3$4$5$6</" + settings.tagName + ">$7"), text = text.replace(Linkified.linkMatch, linkReplace.join(" ")),
return linkReplace.push(">$2$3$4$5$6$7</" + settings.tagName + ">$8"), text = text.replace(Linkified.linkMatch, linkReplace.join(" ")),
text = text.replace(Linkified.emailLinkMatch, "$1mailto:$3"), text = text.replace(/(\s){2}/g, "$1"),
text = text.replace(/\n/g, settings.newLine);
}, Linkified.linkifyNode = function(node) {
Expand Down
2 changes: 1 addition & 1 deletion dist/jquery.linkify.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 5 additions & 3 deletions src/linkified.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,9 @@ Linkified.linkMatch = new RegExp([
'(?:(?:[a-z0-9][a-z0-9_%\\-_+]*\\.)+)',
')(', // 5. Top-level domain - http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
'(?:com|ca|co|edu|gov|net|org|dev|biz|cat|int|pro|tel|mil|aero|asia|coop|info|jobs|mobi|museum|name|post|travel|local|[a-z]{2})',
')(', // 6. Query string (optional)
')(', // 6. Port (optional)
'(?::\\d{1,5})',
')?(', // 7. Query string (optional)
'(?:',
'[\\/|\\?]',
'(?:',
Expand Down Expand Up @@ -201,7 +203,7 @@ Linkified.linkify = function (text, options) {

linkReplace.push(
'$1<' + settings.tagName,
'href="http://$2$4$5$6"'
'href="http://$2$4$5$6$7"'
);

// Add classes
Expand Down Expand Up @@ -229,7 +231,7 @@ Linkified.linkify = function (text, options) {
}

// Finish off
linkReplace.push('>$2$3$4$5$6</' + settings.tagName + '>$7');
linkReplace.push('>$2$3$4$5$6$7</' + settings.tagName + '>$8');

// Create the link
text = text.replace(Linkified.linkMatch, linkReplace.join(' '));
Expand Down
7 changes: 6 additions & 1 deletion tests/js/linkified.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@ test("linkify string basics", function () {
input: 't.c.com/sadqad is a great domain, so is ftp://i.am.a.b.ca/ okay?',
output: '<a href="http://t.c.com/sadqad" class="linkified" target="_blank" >t.c.com/sadqad</a> is a great domain, so is <a href="http://i.am.a.b.ca/" class="linkified" target="_blank" >ftp://i.am.a.b.ca/</a> okay?',
options: null
}, {
name: 'Port numbers',
input: 'This port is too short someport.com: this port is too long http://googgle.com:789023/myQuery this port is just right https://github.com:8080/SoapBox/jQuery-linkify/',
output: 'This port is too short <a href="http://someport.com" class="linkified" target="_blank" >someport.com</a>: this port is too long <a href="http://googgle.com" class="linkified" target="_blank" >http://googgle.com</a>:789023/myQuery this port is just right <a href="http://github.com:8080/SoapBox/jQuery-linkify/" class="linkified" target="_blank" >https://github.com:8080/SoapBox/jQuery-linkify/</a>',
options: null
}];

for (var i = 0; i < linkifyTests.length; i++) {
Expand All @@ -86,4 +91,4 @@ test("linkify string basics", function () {
);
}

});
});

0 comments on commit 34207b3

Please sign in to comment.