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) 12.7 kB
/*! * froala_editor v4.7.0 (https://www.froala.com/wysiwyg-editor) * License https://froala.com/wysiwyg-editor/terms/ * Copyright 2014-2025 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(i){"use strict";function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function C(e){return function t(e){if(Array.isArray(e))return o(e)}(e)||function n(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function a(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e)||function r(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}i=i&&i.hasOwnProperty("default")?i["default"]:i,Object.assign(i.DEFAULTS,{listAdvancedTypes:!0}),i.PLUGINS.lists=function(E){var I=E.$;function h(e){return'<span class="fr-open-'.concat(e.toLowerCase(),'"></span>')}function v(e){return'<span class="fr-close-'.concat(e.toLowerCase(),'"></span>')}function c(e,t){!function S(e,t){for(var n=[],a=0;a<e.length;a++){var r=e[a].parentNode;"LI"==e[a].tagName&&r.tagName!=t&&n.indexOf(r)<0&&n.push(r)}for(var i=n.length-1;0<=i;i--){var o=I(n[i]);o.replaceWith("<".concat(t.toLowerCase()," ").concat(E.node.attributes(o.get(0)),">").concat(o.html(),"</").concat(t.toLowerCase(),">"))}}(e,t);var n,a=E.html.defaultTag(),r=null;e.length&&(n="rtl"==E.opts.direction||"rtl"==I(e[0]).css("direction")?"margin-right":"margin-left");for(var i=0;i<e.length;i++)if("TD"!=e[i].tagName&&"TH"!=e[i].tagName&&"LI"!=e[i].tagName){var o=E.helpers.getPX(I(e[i]).css(n))||0;(e[i].style.marginLeft=null)===r&&(r=o);var l=0<r?"<".concat(t,' style="').concat(n,": ").concat(r,'px ">'):"<".concat(t,">"),s="</".concat(t,">");for(o-=r;0<o/E.opts.indentMargin;)l+="</".concat(t,">"),s+=s,o-=E.opts.indentMargin;var c=function c(e){for(var t=1<arguments.length&&arguments[1]!==undefined?arguments[1]:"next",n="next"===t?e.nextSibling:e.previousSibling;n;){if(n.nodeType!==Node.ELEMENT_NODE||"SPAN"!==n.tagName||!n.classList.contains("fr-marker"))return!0;n="next"===t?n.nextSibling:n.previousSibling}return!1};if(a&&e[i].tagName.toLowerCase()==a){var d=E.node.attributes(e[i]),p=I(e[i]),f=p.find("strong");if(0<f.length&&E.node.blockParent(f[0])===p[0]){for(var g=f[0].previousSibling,m=f[0].nextSibling,u=!g&&!m,h=f.parent();h.is("u")||h.is("em");)h=h.parent();var v=u&&!h.is("span")||m&&"BR"===m.tagName,N=u&&h.is("span")&&!c(h[0],"next")&&!c(h[0],"prev"),L=g&&!c(f[0],"prev"),y=m&&!c(f[0],"next");if(v||N||L&&y){d.includes("style=")?d=d.replace(/style="([^"]*)"/,function(e,t){if(t.includes("font-weight:")){var n=t.replace(/font-weight:\s*[^;]+/,"font-weight: bold");return'style="'.concat(n,'"')}var a=t.trim().endsWith(";")?" ":"; ";return'style="'.concat(t).concat(a,'font-weight: bold;"')}):d+=' style="font-weight: bold;"';var b=f[0];b.replaceWith.apply(b,C(b.childNodes))}}I(e[i]).replaceWith("".concat(l,"<li").concat(d,">").concat(p[0].innerHTML,"</li>").concat(s))}else"STRONG"!==I(e[i]).parent()[0].tagName||c(I(e[i])[0],"next")||c(I(e[i])[0],"prev")?I(e[i]).wrap("".concat(l,"<li></li>").concat(s)):(I(e[i]).unwrap(),I(e[i]).wrap("".concat(l,'<li style="font-weight: bold;"></li>').concat(s)))}E.clean.lists()}function d(p){var f,e,t=[];for(f=p.length-1;0<=f;f--)for(e=f-1;0<=e;e--){if(I(p[e]).find(p[f]).length||p[e]==p[f]){I(p[f]).addClass("fr-removed-block-".concat(f)),t.push(f),p.splice(f,1);break}if(I(p[e]).contains(p[f])){I(p[e]).addClass("fr-removed-block-".concat(e)),t.push(e),p.splice(e,1);break}}var g=[],m=!1,u=function u(){var e=I(p[f]),t=p[f].parentNode,n=e.attr("class"),a=e.attr("style");if(e.is(":first-child")&&(m=!0,I(t.parentNode).removeAttr("start")),e.before(v(t.tagName)),"LI"==t.parentNode.tagName){if(e.is(":last-child")){var r=e.find("> ul, > ol").last();r.length&&r.wrap("<".concat(t.tagName,">"))}e.before(v("LI")),e.after(h("LI"))}else if("OL"==t.parentNode.tagName)m||(e.before(v("OL")),e.after(h("OL")));else if("UL"==t.parentNode.tagName)m||(e.before(v("UL")),e.after(h("UL")));else{var i="",o=!1,l=!1;a&&(i+=a.trim().replace(/;?$/,";"));var s="rtl"===E.opts.direction||"rtl"===e.css("direction")?"margin-right":"margin-left",c=E.helpers.getPX(I(t).css(s));if(c&&(I(t).attr("style")||"").includes("".concat(s,":"))&&(i+="".concat(s,":").concat(c,"px;")),i=(i=(i=i.replace(/font-weight\s*:\s*bold\s*;?/i,function(){return o=!0,""})).replace(/font-style\s*:\s*italic\s*;?/i,function(){return l=!0,""})).trim().length?i.trim().replace(/;{2,}/g,";").replace(/;$/,"")+";":"",o&&(e.prepend(h("STRONG")),e.append(v("STRONG"))),l&&(e.prepend(h("EM")),e.append(v("EM"))),E.html.defaultTag()&&0===e.find(E.html.blockTagsQuery()).length){var d=I(document.createElement(E.html.defaultTag()));d.attr(i?{style:i}:null),n&&d.addClass(n),d.append(e.contents()),e[0].innerHTML=d[0].outerHTML}E.node.isEmpty(e.get(0),!0)||0!==e.find(E.html.blockTagsQuery()).length||("DIV"==t.parentNode.tagName&&E.html.defaultTag()?(e.prepend(h(E.html.defaultTag())),e.append(v(E.html.defaultTag()))):e.append("<br>")),e.append(h("LI")),e.prepend(v("LI"))}e.after(h(t.tagName)),"LI"==t.parentNode.tagName&&(t=t.parentNode.parentNode),g.indexOf(t)<0&&g.push(t)};for(f=0;f<p.length;f++)u();var a=function a(){var e=I(g[f]),t=e.html(),n=E.helpers.getPX(e.css("margin-left"))||0;t=(t=t.replace(/<span class="fr-open-([a-z]*)"><\/span>/g,function(e,t){return 0<n?"<".concat(t,' style="margin-left:').concat(n,'px;">'):"<".concat(t,">")})).replace(/<span class="fr-close-([a-z]*)"><\/span>/g,"</$1>"),e.replaceWith(E.node.openTagString(e.get(0))+t+E.node.closeTagString(e.get(0)))};for(f=0;f<g.length;f++)a();return E.$el.find("li:empty").remove(),E.$el.find("ul:empty, ol:empty").remove(),E.clean.lists(),E.$el.find("ul:empty, ol:empty").remove(),E.html.wrap(),t}function g(e,t){var n=I(document.createElement("li"));if(e.childNodes.length)for(var a=e.childNodes[0].attributes,r=0;r<a.length;r++){var i=a[r];"style"===i.name&&(n[0].style.cssText+=i.value)}I(e).prepend(n),I(e).removeAttr("start");for(var o=E.node.contents(t)[0];o&&!E.node.isList(o);){var l=o.nextSibling;n.append(o),o=l}}function e(e){if("indent"==e||"outdent"==e){var t=!1,n=E.selection.blocks(!1,!0),a=[],r=n[0].previousSibling||n[0].parentElement;if("outdent"==e){if("UL"!=n[0].parentNode.tagName&&"UL"!=r.parentNode.tagName&&"OL"!=r.parentNode.tagName&&"LI"!=r.parentNode.tagName)return;if(!n[0].previousSibling&&"none"==r.parentNode.style.listStyleType)return void function o(e){for(E.selection.save();0<e.childNodes.length;)e.parentNode.parentNode.append(e.childNodes[0]);E.clean.lists(),E.selection.restore()}(r)}else{if("UL"!=n[0].parentElement.tagName&&"OL"!=n[0].parentElement.tagName&&"LI"!=n[0].parentElement.tagName)return;if(E.node.isBlock(n[0])&&"LI"!==n[0].tagName&&0<I(n[0]).parentsUntil(E.$el,"LI").length&&(n[0]=n[0].parentElement,r=n[0].parentElement),!n[0].previousSibling||"LI"!=n[0].previousSibling.tagName){if(r&&["UL","OL"].includes(r.tagName))return void function l(e){E.selection.save();var t="OL"==e.tagName?document.createElement("ol"):document.createElement("ul");for(I(t).css("list-style-type",I(e).css("list-style-type"));0<e.childNodes.length;)t.append(e.childNodes[0]);var n=I(document.createElement("li"));n.css("list-style-type","none"),n.append(t),e.append(n.get(0)),E.clean.lists(),E.selection.restore()}(r);t=!0}}for(var i=0;i<n.length;i++)"LI"==n[i].tagName?(t=!0,a.push(n[i])):"LI"==n[i].parentNode.tagName&&a.indexOf(n[i].parentNode)<0&&(t=!0,a.push(n[i].parentNode));t&&("indent"==e?function f(e){E.selection.save();for(var t=!1,n=0;n<e.length;n++){var a=e[n].previousSibling;if(a&&"LI"==a.tagName&&!t){var r=I(e[n]).find("> ul, > ol").last().get(0);if(r)g(r,e[n]),I(a).append(I(r)),I(e[n]).remove();else{var i=I(a).find("> ul, > ol").last().get(0);if(i)I(i).append(I(e[n]));else{var o=I("<".concat(e[n].parentNode.tagName,">"));I(a).append(o),o.append(I(e[n]))}}}else if(!a||"OL"!=a.tagName&&"UL"!=a.tagName){var l=e[n].parentNode;if(t=!0,"UL"==l.tagName||"OL"==l.tagName){var s=I(e[n]).find("> ol, > ul"),c=null==e[n].previousSibling;if(s.length){var d=s.first().get(0);g(d,e[n]),c?I(l).prepend(I(d)):I(l).append(I(d)),I(e[n]).remove()}else I(e[n]).wrap("<".concat(l.tagName,">"));c&&0<I(l).find("> li").length&&I(l).attr("start","2")}}else{var p=I(e[n]).find("> ol, > ul").first().get(0);p?(g(p,e[n]),I(a).append(I(p).children()),I(e[n]).remove(),I(p).remove()):I(a).append(I(e[n]))}}E.clean.lists(),E.selection.restore()}(a):function s(e){E.selection.save();var t=[];do{t=d(e),e=[];for(var n=0;n<t.length;n++){var a=E.$el.find(".fr-removed-block-".concat(t[n])).first().get(0);I(a).removeClass("fr-removed-block-".concat(t[n])),""==I(a).attr("class")&&I(a).removeAttr("class"),e.push(a)}}while(0<t.length);E.selection.restore()}(a))}}return{_init:function t(){E.events.on("commands.after",e),E.events.on("keydown",function(e){if(e.which==i.KEYCODE.TAB||(e.ctrlKey||e.metaKey)&&"]"===e.key){if(!e.shiftKey&&E.$tb.find('[data-cmd="indent"]').hasClass("fr-disabled"))return e.preventDefault(),e.stopPropagation(),!1;for(var t=E.selection.blocks(),n=[],a=0;a<t.length;a++)"LI"==t[a].tagName?n.push(t[a]):"LI"==t[a].parentNode.tagName&&n.push(t[a].parentNode);if(1<=n.length||n.length&&(E.selection.info(n[0]).atStart||E.node.isEmpty(n[0])))return e.preventDefault(),e.stopPropagation(),e.shiftKey?E.commands.outdent():E.commands.indent(),!1}},!0)},format:function p(e,t){var n,a,r=1<(a=E.selection.blocks(!0)).length&&a[a.length-1],i=E.selection.ranges();if(r&&r.firstChild&&i.length&&E.node.isEmpty(r)&&!i[0].endOffset&&i[0].setEndAfter(r.firstChild,1),E.html.syncInputs(),E.selection.save(),E.browser.safari&&E.helpers.getSafariVersion()<17){var o=E.selection.ranges();if(i&&i[0].endContainer&&o&&o[0].endContainer&&!i[0].endContainer.isSameNode(o[0].endContainer)&&i[0].endContainer.previousSibling&&i[0].endContainer.previousSibling.isSameNode(o[0].endContainer)){var l=I(o[0].endContainer).find('.fr-marker[data-type="false"]');I(i[0].endContainer).append(l[0])}}for(E.html.wrap(!0,!0,!0,!0),E.selection.restore(),a=E.selection.blocks(!0),n=0;n<a.length;n++)"LI"!=a[n].tagName&&"LI"==a[n].parentNode.tagName&&(a[n]=a[n].parentNode);if(E.selection.save(),function s(e,t){for(var n=!0,a=0;a<e.length;a++){if("LI"!=e[a].tagName)return!1;e[a].parentNode.tagName!=t&&(n=!1)}return n}(a,e)?t||d(a):c(a,e),E.html.unwrap(),E.selection.restore(),t=t||"default"){for(a=E.selection.blocks(),n=0;n<a.length;n++)"LI"!=a[n].tagName&&"LI"==a[n].parentNode.tagName&&(a[n]=a[n].parentNode);for(n=0;n<a.length;n++)"LI"==a[n].tagName&&(I(a[n].parentNode).css("list-style-type","default"===t?"":t),0===(I(a[n].parentNode).attr("style")||"").length&&I(a[n].parentNode).removeAttr("style"))}},refresh:function r(e,t){var n=I(E.selection.element());if(n.get(0)!=E.el){var a=n.get(0);(a="LI"!=a.tagName&&a.firstElementChild&&"LI"!=a.firstElementChild.tagName?n.parents("li").get(0):"LI"==a.tagName||a.firstElementChild?a.firstElementChild&&"LI"==a.firstElementChild.tagName?n.get(0).firstChild:n.get(0):n.parents("li").get(0))&&a.parentNode.tagName==t&&E.el.contains(a.parentNode)&&e.addClass("fr-active")}}}},i.DefineIcon("formatOLSimple",{NAME:"list-ol",SVG_KEY:"orderedList"}),i.RegisterCommand("formatOLSimple",{title:"Ordered List",type:"button",options:{"default":"Default",circle:"Circle",disc:"Disc",square:"Square"},refresh:function(e){this.lists.refresh(e,"OL")},callback:function(e,t){this.lists.format("OL",t)},plugin:"lists"}),i.RegisterCommand("formatUL",{title:"Unordered List",type:"button",hasOptions:function(){return this.opts.listAdvancedTypes},options:{"default":"Default",circle:"Circle",disc:"Disc",square:"Square"},refresh:function(e){this.lists.refresh(e,"UL")},callback:function(e,t){this.lists.format("UL",t)},plugin:"lists"}),i.RegisterCommand("formatOL",{title:"Ordered List",hasOptions:function(){return this.opts.listAdvancedTypes},options:{"default":"Default","lower-alpha":"Lower Alpha","lower-greek":"Lower Greek","lower-roman":"Lower Roman","upper-alpha":"Upper Alpha","upper-roman":"Upper Roman"},refresh:function(e){this.lists.refresh(e,"OL")},callback:function(e,t){this.lists.format("OL",t)},plugin:"lists"}),i.DefineIcon("formatUL",{NAME:"list-ul",SVG_KEY:"unorderedList"}),i.DefineIcon("formatOL",{NAME:"list-ol",SVG_KEY:"orderedList"})});