|
23 | 23 |
|
24 | 24 | var DELIMITERS = [KEY_COMMA, KEY_ENTER, KEY_SEMICOLON, KEY_SPACE]; |
25 | 25 |
|
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; |
29 | 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; |
| 29 | + |
| 30 | + var REGEX_EMAIL = /[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/i; |
| 31 | + |
30 | 32 | /** |
31 | 33 | * CKEditor plugin which automatically generates links when user types text which looks like URL. |
32 | 34 | * |
|
56 | 58 |
|
57 | 59 | editor.on('paste', function (event) { |
58 | 60 | 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('<') > -1) { |
62 | 63 | return; |
63 | 64 | } |
64 | 65 |
|
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 | + } |
74 | 75 | } |
75 | | - } |
| 76 | + }); |
76 | 77 | } |
77 | 78 | }.bind(this)); |
78 | 79 | }, |
|
142 | 143 |
|
143 | 144 | return lastWord; |
144 | 145 | }, |
| 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 | + }, |
145 | 160 |
|
146 | 161 | /** |
147 | 162 | * Checks if the given link is a valid URL. |
|
0 commit comments