Skip to content

Commit 4b9ce86

Browse files
author
Roland Pákai
committed
Fixes #885 | Fix editor.on paste function and enhance REGEX_URL
1 parent 9d744e4 commit 4b9ce86

File tree

1 file changed

+31
-16
lines changed

1 file changed

+31
-16
lines changed

src/plugins/autolink.js

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@
2323

2424
var DELIMITERS = [KEY_COMMA, KEY_ENTER, KEY_SEMICOLON, KEY_SPACE];
2525

26-
var REGEX_LAST_WORD = /[^\s]+/mg;
27-
28-
var REGEX_URL = /((([A - Za - z]{ 3, 9}: (?: \/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(https?\:\/\/|www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))((.*):(\d*)\/?(.*))?)/i;
26+
var REGEX_LAST_WORD = /[^\s]+/gim;
2927

28+
var REGEX_URL = /((([A - Za - z]{ 3, 9}: (?: \/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(https?\:\/\/|www.|[-;:&=.\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))((.*):(\d*)\/?(.*))?)/i;
29+
30+
var REGEX_EMAIL = /[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/i;
31+
3032
/**
3133
* CKEditor plugin which automatically generates links when user types text which looks like URL.
3234
*
@@ -56,23 +58,22 @@
5658

5759
editor.on('paste', function (event) {
5860
if (event.data.method === 'paste') {
59-
var data = event.data.dataValue;
60-
61-
if ( data.indexOf( '<' ) > -1 ) {
61+
62+
if (event.data.dataValue.indexOf('<') > -1 || event.data.dataValue.indexOf('&lt;') > -1) {
6263
return;
6364
}
6465

65-
var match = data.match(REGEX_URL);
66-
67-
if (match && match.length) {
68-
match = match[0];
69-
70-
var remainder = data.replace(match, '');
71-
72-
if (this._isValidURL(match)) {
73-
event.data.dataValue = '<a href=\"' + match + '\">' + match + '</a>' + remainder;
66+
var instance = this;
67+
68+
event.data.dataValue = event.data.dataValue.replace(RegExp(REGEX_URL, 'gim'), function (url) {
69+
if (instance._isValidURL(url)) {
70+
if (instance._isValidEmail(url)) {
71+
return '<a href=\"mailto:' + url + '\">' + url + '</a>';
72+
} else {
73+
return '<a href=\"' + url + '\">' + url + '</a>';
74+
}
7475
}
75-
}
76+
});
7677
}
7778
}.bind(this));
7879
},
@@ -142,6 +143,20 @@
142143

143144
return lastWord;
144145
},
146+
147+
/**
148+
* Checks if the given link is a valid Email.
149+
*
150+
* @instance
151+
* @memberof CKEDITOR.plugins.ae_autolink
152+
* @method isValidEmail
153+
* @param {String} link The email we want to know if it is a valid Email
154+
* @protected
155+
* @return {Boolean} Returns true if the email is a valid Email, false otherwise
156+
*/
157+
_isValidEmail: function(email) {
158+
return REGEX_EMAIL.test(email);
159+
},
145160

146161
/**
147162
* Checks if the given link is a valid URL.

0 commit comments

Comments
 (0)