From 4b9ce860d870a10f00d9f02112e7ce66c02879e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20P=C3=A1kai?= Date: Fri, 28 Sep 2018 13:23:25 +0200 Subject: [PATCH] Fixes #885 | Fix editor.on paste function and enhance REGEX_URL --- src/plugins/autolink.js | 47 +++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/src/plugins/autolink.js b/src/plugins/autolink.js index 118a66eefc..5526633957 100644 --- a/src/plugins/autolink.js +++ b/src/plugins/autolink.js @@ -23,10 +23,12 @@ var DELIMITERS = [KEY_COMMA, KEY_ENTER, KEY_SEMICOLON, KEY_SPACE]; - var REGEX_LAST_WORD = /[^\s]+/mg; - - 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; + var REGEX_LAST_WORD = /[^\s]+/gim; + 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; + + var REGEX_EMAIL = /[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/i; + /** * CKEditor plugin which automatically generates links when user types text which looks like URL. * @@ -56,23 +58,22 @@ editor.on('paste', function (event) { if (event.data.method === 'paste') { - var data = event.data.dataValue; - - if ( data.indexOf( '<' ) > -1 ) { + + if (event.data.dataValue.indexOf('<') > -1 || event.data.dataValue.indexOf('<') > -1) { return; } - var match = data.match(REGEX_URL); - - if (match && match.length) { - match = match[0]; - - var remainder = data.replace(match, ''); - - if (this._isValidURL(match)) { - event.data.dataValue = '' + match + '' + remainder; + var instance = this; + + event.data.dataValue = event.data.dataValue.replace(RegExp(REGEX_URL, 'gim'), function (url) { + if (instance._isValidURL(url)) { + if (instance._isValidEmail(url)) { + return '' + url + ''; + } else { + return '' + url + ''; + } } - } + }); } }.bind(this)); }, @@ -142,6 +143,20 @@ return lastWord; }, + + /** + * Checks if the given link is a valid Email. + * + * @instance + * @memberof CKEDITOR.plugins.ae_autolink + * @method isValidEmail + * @param {String} link The email we want to know if it is a valid Email + * @protected + * @return {Boolean} Returns true if the email is a valid Email, false otherwise + */ + _isValidEmail: function(email) { + return REGEX_EMAIL.test(email); + }, /** * Checks if the given link is a valid URL.