Skip to content

Commit 983961d

Browse files
committed
Use linkify to match links
Closes draft-js-plugins#18
1 parent 8f51e4e commit 983961d

File tree

3 files changed

+13
-16
lines changed

3 files changed

+13
-16
lines changed

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@
9191
"classnames": "^2.2.3",
9292
"draft-js": "^0.1.0",
9393
"extract-text-webpack-plugin": "^1.0.1",
94-
"immutable": "^3.7.6"
94+
"immutable": "^3.7.6",
95+
"linkify-it": "1.2.0",
96+
"tlds": "1.96.0"
9597
}
9698
}

src/linkifyPlugin/findWithRegex.js

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/linkifyPlugin/linkStrategy.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
/* @flow */
22

3-
import findWithRegex from './findWithRegex';
3+
import linkifyIt from 'linkify-it';
4+
import tlds from 'tlds';
45

5-
// http://stackoverflow.com/a/19696443/837709
6-
const LINK_REGEX = /((?:(http|https|Http|Https|rtsp|Rtsp):\/\/(?:(?:[a-zA-Z0-9\$\-\_\.\+\!\*\'\(\)\,\;\?\&\=]|(?:\%[a-fA-F0-9]{2})){1,64}(?:\:(?:[a-zA-Z0-9\$\-\_\.\+\!\*\'\(\)\,\;\?\&\=]|(?:\%[a-fA-F0-9]{2})){1,25})?\@)?)?((?:(?:[a-zA-Z0-9][a-zA-Z0-9\-]{0,64}\.)+(?:(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop])|k[eghimnrwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdghklmnopqrstuvwxyz])|(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r[eouw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]))|(?:(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])))(?:\:\d{1,5})?)(\/(?:(?:[a-zA-Z0-9\;\/\?\:\@\&\=\#\~\-\.\+\!\*\'\(\)\,\_])|(?:\%[a-fA-F0-9]{2}))*)?(?:\b|$)/gi;
6+
const linkify = linkifyIt();
7+
linkify.tlds(tlds);
78

89
export default (contentBlock: Object, callback: Function) => {
9-
findWithRegex(LINK_REGEX, contentBlock, callback);
10+
const links = linkify.match(contentBlock.get('text'));
11+
if (typeof links !== 'undefined' && links !== null) {
12+
for (let i = 0; i < links.length; i++) {
13+
callback(links[i].index, links[i].lastIndex);
14+
}
15+
}
1016
};

0 commit comments

Comments
 (0)