diff --git a/addon/helpers/linkify.js b/addon/helpers/linkify.js
index bbb8d5e..6bae11d 100644
--- a/addon/helpers/linkify.js
+++ b/addon/helpers/linkify.js
@@ -1,14 +1,15 @@
import Ember from 'ember';
-import { urlRegex , shortenUrl } from 'ember-linkify/utils/url-regex';
+import { urlRegex , shortenUrl, delimiterBuilder } from 'ember-linkify/utils/url-regex';
const ALLOWED_ATTRIBUTE_NAMES = [ 'rel', 'class' ];
-export function linkify( params, options ) {
+export function linkify( params, options={} ) {
let textToLinkify = Ember.Handlebars.Utils.escapeExpression(params[0]);
const windowTarget = params[1] || "_self";
const sharedAttributes = opts2attrs( options );
+ const urlParser = options.delimiter ? delimiterBuilder(options.delimiter.trim()) : urlRegex();
- textToLinkify = textToLinkify.replace(urlRegex(), function (s) {
+ textToLinkify = textToLinkify.replace(urlParser, function (s) {
let url;
let displayText = s.trim();
diff --git a/addon/utils/url-regex.js b/addon/utils/url-regex.js
index 6401f33..459995f 100644
--- a/addon/utils/url-regex.js
+++ b/addon/utils/url-regex.js
@@ -15,4 +15,15 @@ function shortenUrl ( url , length ) {
return url;
}
-export { urlRegex, shortenUrl };
+// Builds a regex with the escapes for a given delimiter
+function delimiterBuilder (delimiter) {
+
+ let urlHeadPattern = /(["'])?(?:(?:(?:(?:https?|ftp|\w):)?\/\/)|(?:www.))(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:1\d\d|2[0-4]\d|25[0-4]|[1-9]\d?))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?/ig,
+ urlTailPattern = /[a-z0-9\-._~:/?#%[\]@!$&'()*+;=`,"]/;
+
+ urlTailPattern = new RegExp(urlTailPattern.source.replace(delimiter,""),"ig");
+
+ return new RegExp(`${urlHeadPattern.source}(?:\/${urlTailPattern.source}*)?\\1`, "ig");
+}
+
+export { urlRegex, shortenUrl, delimiterBuilder };
\ No newline at end of file
diff --git a/tests/dummy/app/templates/application.hbs b/tests/dummy/app/templates/application.hbs
index 3d969cf..39230b8 100644
--- a/tests/dummy/app/templates/application.hbs
+++ b/tests/dummy/app/templates/application.hbs
@@ -1,6 +1,8 @@
Linkify
-
+
{{textarea value=text placeholder='Enter some text with a url'}}
-{{linkify text }}
+Period delimited: {{linkify text delimiter="."}}
+Comma delimited: {{linkify text delimiter=","}}
+Default delimiters: {{linkify text}}
{{outlet}}
diff --git a/tests/unit/helpers/linkify-test.js b/tests/unit/helpers/linkify-test.js
index 5983fd7..3328fde 100644
--- a/tests/unit/helpers/linkify-test.js
+++ b/tests/unit/helpers/linkify-test.js
@@ -15,6 +15,16 @@ test('it should turn a ip address into a link', function(assert) {
assert.equal(result, 'My link: https://62.123.123.123/test and some more text');
});
+test('it should turn a url with multiple slashes into a link', function(assert) {
+ var result = linkify(['My link: http://google.com/my/name//is///slimshady and some more text']).toString().trim();
+ assert.equal(result, 'My link: http://google.com/my/name//is///slimshady and some more text');
+});
+
+test('it should turn a url with encoded characters into a link', function(assert) {
+ var result = linkify(['My link: https://www.google.ca/maps/search/oops%2Bi%2Bdid%2Bit%2Bagain/ and some more text']).toString().trim();
+ assert.equal(result, 'My link: https://www.google.ca/maps/search/oops%2Bi%2Bdid%2Bit%2Bagain/ and some more text');
+});
+
test('it should turn a url with www. into a link', function(assert) {
var result = linkify(['www.johnotander.com']).toString().trim();
assert.equal(result, 'www.johnotander.com');
@@ -103,4 +113,41 @@ test('it should turn a url into a link with a class of "amilkey" and a rel of "n
test('it should turn a space delimited list of urls into seperate links', function(assert) {
var result = linkify(['My link: http://google.com http://bing.com www.altavista.com']).toString().trim();
assert.equal(result, 'My link: http://google.com http://bing.com www.altavista.com');
-});
\ No newline at end of file
+});
+
+test('it should turn a comma delimited list of urls without slashes into seperate links by default', function(assert) {
+ var result = linkify(['My link: http://google.com, http://bing.com,www.altavista.com']).toString().trim();
+ assert.equal(result, 'My link: http://google.com, http://bing.com,www.altavista.com');
+});
+
+test('it should turn a comma delimited list of urls with slashes into seperate links', function(assert) {
+ var options = {
+ delimiter : ","
+ };
+ var result = linkify(["http://emberjs.com/,http://emberjs.com/really", "_blank"] , options ).toString().trim();
+ assert.equal(result , 'http://emberjs.com/,http://emberjs.com/really' );
+});
+
+test('it should turn a period delimited list of urls with slashes into seperate links', function(assert) {
+ var options = {
+ delimiter : "."
+ };
+ var result = linkify(["http://emberjs.com/.http://emberjs.com/really.www.yes.really/", "_blank"] , options ).toString().trim();
+ assert.equal(result , 'http://emberjs.com/.http://emberjs.com/really.www.yes.really/' );
+});
+
+test('it should turn a space delimited list of urls with slashes into seperate links even with delimiter . passed', function(assert) {
+ var options = {
+ delimiter : "."
+ };
+ var result = linkify(["http://emberjs.com/ http://emberjs.com/really www.yes.really/. www.yes.seriously", "_blank"] , options ).toString().trim();
+ assert.equal(result , 'http://emberjs.com/ http://emberjs.com/really www.yes.really/. www.yes.seriously' );
+});
+
+test('it should turn a space delimited list of urls with slashes into seperate links even with delimiter , passed', function(assert) {
+ var options = {
+ delimiter : ","
+ };
+ var result = linkify(["http://emberjs.com/ http://emberjs.com/really www.yes.really/, www.yes.seriously", "_blank"] , options ).toString().trim();
+ assert.equal(result , 'http://emberjs.com/ http://emberjs.com/really www.yes.really/, www.yes.seriously' );
+});