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) • 8.67 kB
JavaScript
/*!
* froala_editor v4.2.2 (https://www.froala.com/wysiwyg-editor)
* License https://froala.com/wysiwyg-editor/terms/
* Copyright 2014-2024 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(o){"use strict";o=o&&o.hasOwnProperty("default")?o["default"]:o,Object.assign(o.DEFAULTS,{listAdvancedTypes:!0}),o.PLUGINS.lists=function(m){var g=m.$;function p(e){return'<span class="fr-open-'.concat(e.toLowerCase(),'"></span>')}function f(e){return'<span class="fr-close-'.concat(e.toLowerCase(),'"></span>')}function c(e,t){!function c(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 o=n.length-1;0<=o;o--){var i=g(n[o]);i.replaceWith("<".concat(t.toLowerCase()," ").concat(m.node.attributes(i.get(0)),">").concat(i.html(),"</").concat(t.toLowerCase(),">"))}}(e,t);var n,a=m.html.defaultTag(),r=null;e.length&&(n="rtl"==m.opts.direction||"rtl"==g(e[0]).css("direction")?"margin-right":"margin-left");for(var o=0;o<e.length;o++)if("TD"!=e[o].tagName&&"TH"!=e[o].tagName&&"LI"!=e[o].tagName){var i=m.helpers.getPX(g(e[o]).css(n))||0;(e[o].style.marginLeft=null)===r&&(r=i);var l=0<r?"<".concat(t,' style="').concat(n,": ").concat(r,'px ">'):"<".concat(t,">"),s="</".concat(t,">");for(i-=r;0<i/m.opts.indentMargin;)l+="</".concat(t,">"),s+=s,i-=m.opts.indentMargin;a&&e[o].tagName.toLowerCase()==a?g(e[o]).replaceWith("".concat(l,"<li").concat(m.node.attributes(e[o]),">").concat(g(e[o]).html(),"</li>").concat(s)):g(e[o]).wrap("".concat(l,"<li></li>").concat(s))}m.clean.lists()}function d(e){var t,n;for(t=e.length-1;0<=t;t--)for(n=t-1;0<=n;n--){if(g(e[n]).find(e[t]).length||e[n]==e[t]){e.splice(t,1);break}if(g(e[n]).contains(e[t])){e.splice(n,1);break}}var a=[];for(t=0;t<e.length;t++){var r=g(e[t]),o=e[t].parentNode,i=r.attr("class");if(r.before(f(o.tagName)),"LI"==o.parentNode.tagName)r.before(f("LI")),r.after(p("LI"));else if("OL"==o.parentNode.tagName)r.before(f("OL")),r.after(p("OL"));else if("UL"==o.parentNode.tagName)r.before(f("UL")),r.after(p("UL"));else{var l="";i&&(l+=' class="'.concat(i,'"'));var s="rtl"==m.opts.direction||"rtl"==r.css("direction")?"margin-right":"margin-left";m.helpers.getPX(g(o).css(s))&&0<=(g(o).attr("style")||"").indexOf("".concat(s,":"))&&(l+=' style="'.concat(s,":").concat(m.helpers.getPX(g(o).css(s)),'px;"')),m.html.defaultTag()&&0===r.find(m.html.blockTagsQuery()).length&&r.wrapInner(m.html.defaultTag()+l),m.node.isEmpty(r.get(0),!0)||0!==r.find(m.html.blockTagsQuery()).length||("DIV"==o.parentNode.tagName&&m.html.defaultTag()?(r.prepend(p(m.html.defaultTag())),r.append(f(m.html.defaultTag()))):r.append("<br>")),r.append(p("LI")),r.prepend(f("LI"))}r.after(p(o.tagName)),"LI"==o.parentNode.tagName&&(o=o.parentNode.parentNode),a.indexOf(o)<0&&a.push(o)}for(t=0;t<a.length;t++){var c=g(a[t]),d=c.html();d=(d=d.replace(/<span class="fr-close-([a-z]*)"><\/span>/g,"</$1>")).replace(/<span class="fr-open-([a-z]*)"><\/span>/g,"<$1>"),c.replaceWith(m.node.openTagString(c.get(0))+d+m.node.closeTagString(c.get(0)))}m.$el.find("li:empty").remove(),m.$el.find("ul:empty, ol:empty").remove(),m.clean.lists(),m.$el.find("ul:empty, ol:empty").remove(),m.html.wrap()}function e(e){if("indent"==e||"outdent"==e){var t=!1,n=m.selection.blocks(),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 i(e){for(m.selection.save();0<e.childNodes.length;)e.parentNode.parentNode.append(e.childNodes[0]);m.clean.lists(),m.selection.restore()}(r)}else{if("UL"!=n[0].parentElement.tagName&&"OL"!=n[0].parentElement.tagName&&"LI"!=n[0].parentElement.tagName)return;if(m.node.isBlock(n[0])&&"LI"!==n[0].tagName&&0<g(n[0]).parentsUntil(m.$el,"LI").length&&(n[0]=n[0].parentElement,r=n[0].parentElement),!n[0].previousSibling||"LI"!=n[0].previousSibling.tagName)return void function l(e){m.selection.save();for(var t="OL"==e.tagName?document.createElement("ol"):document.createElement("ul");0<e.childNodes.length;)t.append(e.childNodes[0]);var n=document.createElement("li");t.append(n),e.append(t),m.clean.lists(),m.selection.restore()}(r)}for(var o=0;o<n.length;o++)"LI"==n[o].tagName?(t=!0,a.push(n[o])):"LI"==n[o].parentNode.tagName&&(t=!0,a.push(n[o].parentNode));t&&("indent"==e?function f(e){m.selection.save();for(var t=0;t<e.length;t++){var n=e[t].previousSibling;if(n){var a=g(e[t]).find("> ul, > ol").last().get(0);if(a){var r=g(document.createElement("li"));if(a.childNodes.length)for(var o=a.childNodes[0].attributes,i=0;i<o.length;i++){var l=o[i];"style"===l.name&&(r[0].style.cssText+=l.value)}g(a).prepend(r);for(var s=m.node.contents(e[t])[0];s&&!m.node.isList(s);){var c=s.nextSibling;r.append(s),s=c}g(n).append(g(a)),g(e[t]).remove()}else{var d=g(n).find("> ul, > ol").last().get(0);if(d)g(d).append(g(e[t]));else{var p=g("<".concat(e[t].parentNode.tagName,">"));g(n).append(p),p.append(g(e[t]))}}}}m.clean.lists(),m.selection.restore()}(a):function s(e){m.selection.save(),d(e),m.selection.restore()}(a))}}return{_init:function t(){m.events.on("commands.after",e),m.events.on("keydown",function(e){if(e.which==o.KEYCODE.TAB){for(var t=m.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&&(m.selection.info(n[0]).atStart||m.node.isEmpty(n[0])))return e.preventDefault(),e.stopPropagation(),e.shiftKey?m.commands.outdent():m.commands.indent(),!1}},!0)},format:function u(e,t){var n,a,r=1<(a=m.selection.blocks(!0)).length&&a[a.length-1],o=m.selection.ranges();if(r&&o.length&&m.node.isEmpty(r)&&!o[0].endOffset&&o[0].setEndAfter(r.firstChild,1),m.html.syncInputs(),m.selection.save(),m.browser.safari&&m.helpers.getSafariVersion()<17){var i=m.selection.ranges();if(o&&o[0].endContainer&&i&&i[0].endContainer&&!o[0].endContainer.isSameNode(i[0].endContainer)&&o[0].endContainer.previousSibling&&o[0].endContainer.previousSibling.isSameNode(i[0].endContainer)){var l=g(i[0].endContainer).find('.fr-marker[data-type="false"]');g(o[0].endContainer).append(l[0])}}for(m.html.wrap(!0,!0,!0,!0),m.selection.restore(),a=m.selection.blocks(!0),n=0;n<a.length;n++)"LI"!=a[n].tagName&&"LI"==a[n].parentNode.tagName&&(a[n]=a[n].parentNode);if(m.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),m.html.unwrap(),m.selection.restore(),t=t||"default"){for(a=m.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&&(g(a[n].parentNode).css("list-style-type","default"===t?"":t),0===(g(a[n].parentNode).attr("style")||"").length&&g(a[n].parentNode).removeAttr("style"))}},refresh:function r(e,t){var n=g(m.selection.element());if(n.get(0)!=m.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&&m.el.contains(a.parentNode)&&e.addClass("fr-active")}}}},o.DefineIcon("formatOLSimple",{NAME:"list-ol",SVG_KEY:"orderedList"}),o.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"}),o.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"}),o.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"}),o.DefineIcon("formatUL",{NAME:"list-ul",SVG_KEY:"unorderedList"}),o.DefineIcon("formatOL",{NAME:"list-ol",SVG_KEY:"orderedList"})});