UNPKG

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) 4.69 kB
/*! * froala_editor v5.0.1 (https://www.froala.com/wysiwyg-editor) * License https://froala.com/wysiwyg-editor/terms/ * Copyright 2014-2026 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(("undefined"!=typeof globalThis?globalThis:e||self).FroalaEditor)}(this,function(r){"use strict";r.URLRegEx="(^| |\\u00A0)(".concat(r.LinkRegEx,"|([a-zA-Z\x80-\x9f\xa1-\uffff0-9+_.'-]{1,}@[a-zA-Z\x80-\x9f\xa1-\uffff0-9+-_.]{1,}\\.[a-zA-Z\x80-\x9f\xa1-\uffff0-9+-_]{2,}))$"),r.PLUGINS.url=function(o){var f=o.$,i=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(o.opts.linkConvertEmailAddress)o.helpers.isEmail(a)&&!/^mailto:.*/i.test(a)&&(a="mailto:".concat(a));else if(o.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(o.opts.linkAlwaysBlank?' target="_blank"':"").concat(i?' rel="'.concat(i,'"'):"",' data-fr-linked="true" href="').concat(a,'">').concat(n.replace(/&amp;/g,"&").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),"</a>").concat(r)}var l=function l(){return new RegExp(r.URLRegEx,"gi")};function u(e){return o.opts.linkAlwaysNoFollow&&(i="nofollow"),o.opts.linkAlwaysBlank&&(o.opts.linkNoOpener&&(i?i+=" noopener":i="noopener"),o.opts.linkNoReferrer)&&(i?i+=" noreferrer":i="noreferrer"),e.replace(l(),t)}function s(e){e=e.split(" ");return e[e.length-1]}function n(){var e,t=o.selection.ranges(0),n=t.startContainer;if(n.nodeType===Node.TEXT_NODE){if(!n||t.startOffset!==(n.textContent||"").length){o.markers.insert();var t=o.$el.find(".fr-marker"),r=n.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@?\|!^=%&amp;\/~+#-\'*-_{}]*)|())|([a-z\u0080-\u009f\u00a1-\uffff0-9+-_.]{1,}@[a-z\u0080-\u009f\u00a1-\uffff0-9+-_.]{1,}\.[a-z\u0080-\u009f\u00a1-\uffff0-9+-_]{1,}))$/gi);if(t.remove(),!r)return}!function a(e){return!!e&&("A"===e.tagName||!(!e.parentNode||e.parentNode==o.el)&&a(e.parentNode))}(n)&&(l().test(s(n.textContent))?(0<(t=n.textContent.length)&&","===n.textContent.charAt(t-1)?(f(n).before(u(n.textContent.substring(0,t-1))),(e=f(n.parentNode).find("a[data-fr-linked]")).removeAttr("data-fr-linked"),n.textContent=",",(r=o.win.getSelection().getRangeAt(0)).setStart(n,1),r.setEnd(n,1)):(f(n).before(u(n.textContent)),(e=f(n.parentNode).find("a[data-fr-linked]")).removeAttr("data-fr-linked"),n.parentNode.removeChild(n)),o.events.trigger("url.linked",[e.get(0)])):n.textContent.split(" ").length<=2&&n.previousSibling&&"A"===n.previousSibling.tagName&&(t=n.previousSibling.innerText+n.textContent,r=n.textContent.length,l().test(s(t)))&&","!==n.textContent.charAt(r-1)&&(e=(new DOMParser).parseFromString(u(t),"text/html").body.childNodes,n.parentNode.replaceChild(e[0],n.previousSibling),e.length&&f(n).before(e[0]),n.parentNode.removeChild(n)))}}return{_init:function(){o.events.on("keypress",function(e){!o.selection.isCollapsed()||")"!=e.key&&"("!=e.key||n()},!0),o.events.on("keydown",function(e){e=e.which;!o.selection.isCollapsed()||e!=r.KEYCODE.ENTER&&e!=r.KEYCODE.SPACE||n()},!0),o.events.on("paste.beforeCleanup",function(e){if(o.helpers.isURL(e)&&!o.$el[0].getAttribute("plainpaste"))return t=null,o.opts.linkAlwaysBlank&&(o.opts.linkNoOpener&&(t?t+=" noopener":t="noopener"),o.opts.linkNoReferrer)&&(t?t+=" noreferrer":t="noreferrer"),"<a".concat(o.opts.linkAlwaysBlank?' target="_blank"':"").concat(t?' rel="'.concat(t,'"'):"",' href="').concat(e,'" >').concat(e,"</a>");if(o.$el[0].getAttribute("plainpaste")){var t=e;if("string"==typeof t)return(t=t.replace(/&amp;/g,"&")).replace(/(?:https?|ftp|file):\/\/(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.'\u2019"`()[\]{}\\]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.'\u2019"`()[\]{}\\])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.'\u2019"`()[\]{}\\]*\)|[-A-Z0-9+&@#\/%=~_|$'\u2019"`()[\]{}\\])|www\.(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.'\u2019"`()[\]{}\\]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.'\u2019"`()[\]{}\\])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.'\u2019"`()[\]{}\\]*\)|[-A-Z0-9+&@#\/%=~_|$'\u2019"`()[\]{}\\])|(?:[a-zA-Z0-9\u0080-\u009f\u00a1-\uffff._-]+@[a-zA-Z0-9\u0080-\u009f\u00a1-\uffff._-]+\.[a-zA-Z\u0080-\u009f\u00a1-\uffff]{2,})|(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}(?:\/[^\s<]*)?/gim,u)}})}}}});