froala-editor
Version:
The next generation Javascript WYSIWYG HTML rich text editor made by devs for devs. High performance and modern design make it easy to use for developers and loved by users.
7 lines (6 loc) • 3.87 kB
JavaScript
/*!
* froala_editor v4.1.0 (https://www.froala.com/wysiwyg-editor)
* License https://froala.com/wysiwyg-editor/terms/
* Copyright 2014-2023 Froala Labs
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(r){"use strict";(r=r&&r.hasOwnProperty("default")?r["default"]:r).URLRegEx="(^| |\\u00A0)(".concat(r.LinkRegEx,"|([a-z0-9+-_.]{1,}@[a-z0-9+-_.]{1,}\\.[a-z0-9+-_]{1,}))$"),r.PLUGINS.url=function(f){var s=f.$,o=null;function t(e,t,n){for(var r="";n.length&&"."==n[n.length-1];)r+=".",n=n.substring(0,n.length-1);var a=n;if(f.opts.linkConvertEmailAddress)f.helpers.isEmail(a)&&!/^mailto:.*/i.test(a)&&(a="mailto:".concat(a));else if(f.helpers.isEmail(a))return t+n;return/^((http|https|ftp|ftps|mailto|tel|sms|notes|data)\:)/i.test(a)||(a="//".concat(a)),(t||"")+"<a".concat(f.opts.linkAlwaysBlank?' target="_blank"':"").concat(o?' rel="'.concat(o,'"'):"",' data-fr-linked="true" href="').concat(a,'">').concat(n.replace(/&/g,"&").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),"</a>").concat(r)}var p=function p(){return new RegExp(r.URLRegEx,"gi")};function u(e){return f.opts.linkAlwaysNoFollow&&(o="nofollow"),f.opts.linkAlwaysBlank&&(f.opts.linkNoOpener&&(o?o+=" noopener":o="noopener"),f.opts.linkNoReferrer&&(o?o+=" noreferrer":o="noreferrer")),e.replace(p(),t)}function c(e){var t=e.split(" ");return t[t.length-1]}function n(){var e=f.selection.ranges(0),t=e.startContainer;if(t.nodeType!==Node.TEXT_NODE)return!1;if(!t||e.startOffset!==(t.textContent||"").length){f.markers.insert();var n=f.$el.find(".fr-marker"),r=t.textContent.match(/(^| |\u00A0)(((([a-z\u0080-\u009f\u00a1-\uffff0-9-_\.]{1,})(\.(com|net|org|edu|mil|gov|co|biz|info|me|dev)))|((ftp|http|https):\/\/[a-z\u0080-\u009f\u00a1-\uffff0-9-_\.]{1,})|(www\.[a-z\u0080-\u009f\u00a1-\uffff0-9-_\.]{1,}\.[a-z0-9-]{2,24})|((ftp|http|https):\/\/[\u0021-\uffff]{1,}@[a-z\u0080-\u009f\u00a1-\uffff0-9-_\.]{1,}))((:[0-9]{1,5})|)(((\/|\?|#)[a-z\u00a1-\uffff0-9@?\|!^=%&\/~+#-\'*-_{}]*)|())|([a-z0-9+-_.]{1,}@[a-z0-9+-_.]{1,}\.[a-z0-9+-_]{1,}))$/gi);if(n.remove(),!r)return!1}if(function l(e){return!!e&&("A"===e.tagName||!(!e.parentNode||e.parentNode==f.el)&&l(e.parentNode))}(t))return!1;if(p().test(c(t.textContent))){s(t).before(u(t.textContent));var a=s(t.parentNode).find("a[data-fr-linked]");a.removeAttr("data-fr-linked"),t.parentNode.removeChild(t),f.events.trigger("url.linked",[a.get(0)])}else if(t.textContent.split(" ").length<=2&&t.previousSibling&&"A"===t.previousSibling.tagName){var o=t.previousSibling.innerText+t.textContent;if(p().test(c(o))){var i=(new DOMParser).parseFromString(u(o),"text/html").body.childNodes;t.parentNode.replaceChild(i[0],t.previousSibling),i.length&&s(t).before(i[0]),t.parentNode.removeChild(t)}}}return{_init:function e(){f.events.on("keypress",function(e){!f.selection.isCollapsed()||")"!=e.key&&"("!=e.key||n()},!0),f.events.on("keydown",function(e){var t=e.which;!f.selection.isCollapsed()||t!=r.KEYCODE.ENTER&&t!=r.KEYCODE.SPACE||n()},!0),f.events.on("paste.beforeCleanup",function(e){if(f.helpers.isURL(e)&&!f.$el[0].getAttribute("plainpaste")){var t=null;return f.opts.linkAlwaysBlank&&(f.opts.linkNoOpener&&(t?t+=" noopener":t="noopener"),f.opts.linkNoReferrer&&(t?t+=" noreferrer":t="noreferrer")),"<a".concat(f.opts.linkAlwaysBlank?' target="_blank"':"").concat(t?' rel="'.concat(t,'"'):"",' href="').concat(e,'" >').concat(e,"</a>")}if(f.$el[0].getAttribute("plainpaste"))return function n(e){if("string"==typeof e)return e.replace(/(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$])/gim,u).replace(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/gim,u)}(e)})}}}});