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.25 kB
JavaScript
/*!
* 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";(i=i&&i.hasOwnProperty("default")?i["default"]:i).PLUGINS.align=function(y){var v=y.$;return{apply:function b(n){var e,t,i=y.selection.ranges(0),l=i.commonAncestorContainer,a=l.nodeType===Node.TEXT_NODE?y.selection.element():l,r=v(a).closest("table.fr-selection-handle-selected"),o=v(a).parents("TD, TH"),s=!y.selection.isCollapsed(),c="TD"===a.tagName||"TH"===a.tagName,g=s&&c,f=g&&(null===(e=a.textContent)||void 0===e?void 0:e.trim())===(null===(t=i.toString())||void 0===t?void 0:t.trim()),h=y.table.selectedCells(),u=c||0<h.length||o.length&&y.el.contains(o.get(0))&&"BR"===a.tagName;if(v(a).parents(".fr-img-caption").length)v(a).css("text-align",n);else if(r.length&&y.el.contains(r[0]))r.find("td").css("text-align",n);else if(u&&!g||f)if(h.length)h.forEach(function(e){var t=v(e);t.css("text-align",n),t.children().css("text-align","")});else{var d=["TD","TH"].includes(a.tagName)?v(a):o;d.css("text-align",n),d.children().css("text-align","")}else{y.selection.save(),h.length||y.html.wrap(!0,!0,!0,!0),y.selection.restore();for(var p=y.selection.blocks(),m=0;m<p.length;m++)v(p[m]).css("text-align",n).removeClass("fr-temp-div"),""===v(p[m]).attr("class")&&v(p[m]).removeAttr("class"),""===v(p[m]).attr("style")&&v(p[m]).removeAttr("style");y.selection.save(),y.html.unwrap(),y.selection.restore()}},refresh:function i(e){var t=y.selection.blocks();if(t.length){var n=y.helpers.getAlignment(v(t[0]));e.find("> *").first().replaceWith(y.icon.create("align-".concat(n)))}},refreshOnShow:function l(e,t){var n=y.selection.blocks();if(n.length){var i=y.helpers.getAlignment(v(n[0]));t.find('a.fr-command[data-param1="'.concat(i,'"]')).addClass("fr-active").attr("aria-selected",!0)}},refreshForToolbar:function a(e){var t=y.selection.blocks();if(t.length){var n=y.helpers.getAlignment(v(t[0]));n=n.charAt(0).toUpperCase()+n.slice(1),"align".concat(n)===e.attr("data-cmd")&&e.addClass("fr-active")}}}},i.DefineIcon("align",{NAME:"align-left",SVG_KEY:"alignLeft"}),i.DefineIcon("align-left",{NAME:"align-left",SVG_KEY:"alignLeft"}),i.DefineIcon("align-right",{NAME:"align-right",SVG_KEY:"alignRight"}),i.DefineIcon("align-center",{NAME:"align-center",SVG_KEY:"alignCenter"}),i.DefineIcon("align-justify",{NAME:"align-justify",SVG_KEY:"alignJustify"}),i.RegisterCommand("align",{type:"dropdown",title:"Align",options:{left:"Align Left",center:"Align Center",right:"Align Right",justify:"Align Justify"},html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=i.COMMANDS.align.options;for(var n in t)t.hasOwnProperty(n)&&(e+='<li role="presentation"><a class="fr-command fr-title" tabIndex="-1" role="option" data-cmd="align"data-param1="\n '.concat(n,'" title="').concat(this.language.translate(t[n]),'">').concat(this.icon.create("align-".concat(n)),'<span class="fr-sr-only">\n ').concat(this.language.translate(t[n]),"</span></a></li>"));return e+="</ul>"},callback:function(e,t){this.align.apply(t)},refresh:function(e){this.align.refresh(e)},refreshOnShow:function(e,t){this.align.refreshOnShow(e,t)},plugin:"align"}),i.RegisterCommand("alignLeft",{type:"button",icon:"align-left",title:"Align Left",callback:function(){this.align.apply("left")},refresh:function(e){this.align.refreshForToolbar(e)},plugin:"align"}),i.RegisterCommand("alignRight",{type:"button",icon:"align-right",title:"Align Right",callback:function(){this.align.apply("right")},refresh:function(e){this.align.refreshForToolbar(e)},plugin:"align"}),i.RegisterCommand("alignCenter",{type:"button",icon:"align-center",title:"Align Center",callback:function(){this.align.apply("center")},refresh:function(e){this.align.refreshForToolbar(e)},plugin:"align"}),i.RegisterCommand("alignJustify",{type:"button",icon:"align-justify",title:"Align Justify",callback:function(){this.align.apply("justify")},refresh:function(e){this.align.refreshForToolbar(e)},plugin:"align"})});