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) 5.49 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(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],e):e(("undefined"!=typeof globalThis?globalThis:t||self).FroalaEditor)}(this,function(t){"use strict";Object.assign(t.POPUP_TEMPLATES,{"forms.edit":"[_BUTTONS_]","forms.update":"[_BUTTONS_][_TEXT_LAYER_]"}),Object.assign(t.DEFAULTS,{formEditButtons:["inputStyle","inputEdit"],formStyles:{"fr-rounded":"Rounded","fr-large":"Large"},formMultipleStyles:!0,formUpdateButtons:["inputBack","|"]}),t.PLUGINS.forms=function(s){var n,i=s.$;function t(t){s.selection.clear(),i(this).data("mousedown",!0)}function e(t){i(this).data("mousedown")&&(t.stopPropagation(),i(this).removeData("mousedown"),p(n=this)),t.preventDefault()}function o(){s.$el.find("input, textarea, button").removeData("mousedown")}function a(){i(this).removeData("mousedown")}function u(){return n||null}function p(t){var e,o;-1==["checkbox","radio"].indexOf(t.type)&&(s.popups.get("forms.edit")||(e="",e={buttons:e=0<s.opts.formEditButtons.length?'<div class="fr-buttons">'.concat(s.button.buildList(s.opts.formEditButtons),"</div>"):e},e=s.popups.create("forms.edit",e),s.$wp&&s.events.$on(s.$wp,"scroll.link-edit",function(){n&&s.popups.isVisible("forms.edit")&&p(u())})),e=i(n=t),s.popups.refresh("forms.edit"),s.popups.setContainer("forms.edit",s.$sc),t=e.offset().left+e.outerWidth()/2,o=e.offset().top+e.outerHeight(),s.popups.show("forms.edit",t,o,e.outerHeight()))}function r(){var t=s.popups.get("forms.update"),e=u();e&&((e=i(e)).is("button")?t.find('input[type="text"][name="text"]').val(e.text()):e.is("input[type=button]")||e.is("input[type=submit]")||e.is("input[type=reset]")?t.find('input[type="text"][name="text"]').val(e.val()):t.find('input[type="text"][name="text"]').val(e.attr("placeholder"))),t.find('input[type="text"][name="text"]').trigger("change")}function f(){n=null}function d(t){var e,o;return t?(s.popups.onRefresh("forms.update",r),s.popups.onHide("forms.update",f),!0):(t="",1<=s.opts.formUpdateButtons.length&&(t='<div class="fr-buttons">'.concat(s.button.buildList(s.opts.formUpdateButtons),"</div>")),o="",e=0,o='<div class="fr-forms-text-layer fr-layer fr-active"> \n <div class="fr-input-line"><input name="text" type="text" placeholder="Text" tabIndex=" '.concat(++e,' "></div>\n <div class="fr-action-buttons"><button class="fr-command fr-submit" data-cmd="updateInput" href="#" tabIndex="').concat(2,'" type="button">').concat(s.language.translate("Update"),"</button></div></div>"),s.popups.create("forms.update",{buttons:t,text_layer:o}))}return{_init:function(){s.events.$on(s.$el,s._mousedown,"input, textarea, button",t),s.events.$on(s.$el,s._mouseup,"input, textarea, button",e),s.events.$on(s.$el,"touchmove","input, textarea, button",a),s.events.$on(s.$el,s._mouseup,o),s.events.$on(s.$win,s._mouseup,o),d(!0),s.events.$on(s.$el,"submit","form",function(t){return t.preventDefault(),!1})},updateInput:function(){var t,e=s.popups.get("forms.update"),o=u();o&&(t=i(o),e=e.find('input[type="text"][name="text"]').val()||"",t.is("button")?e.length?t.text(e):t.text("\u200b"):-1!=["button","submit","reset"].indexOf(o.type)?t.attr("value",e):t.attr("placeholder",e),s.popups.hide("forms.update"),p(o))},getInput:u,applyStyle:function(t,e,o){void 0===e&&(e=s.opts.formStyles),void 0===o&&(o=s.opts.formMultipleStyles);var n=u();if(!n)return!1;o||((o=Object.keys(e)).splice(o.indexOf(t),1),i(n).removeClass(o.join(" "))),i(n).toggleClass(t)},showUpdatePopup:function(){var t,e,o=u();o&&(o=i(o),s.popups.get("forms.update")||d(),s.popups.isVisible("forms.update")||s.popups.refresh("forms.update"),s.popups.setContainer("forms.update",s.$sc),t=o.offset().left+o.outerWidth()/2,e=o.offset().top+o.outerHeight(),s.popups.show("forms.update",t,e,o.outerHeight()))},showEditPopup:p,back:function(){s.events.disableBlur(),s.selection.restore(),s.events.enableBlur();var t=u();t&&s.$wp&&("BUTTON"===t.tagName&&s.selection.restore(),p(t))}}},t.RegisterCommand("updateInput",{undo:!1,focus:!1,title:"Update",callback:function(){this.forms.updateInput()}}),t.DefineIcon("inputStyle",{NAME:"magic",SVG_KEY:"inlineStyle"}),t.RegisterCommand("inputStyle",{title:"Style",type:"dropdown",html:function(){var t,e='<ul class="fr-dropdown-list">',o=this.opts.formStyles;for(t in o)o.hasOwnProperty(t)&&(e+='<li><a class="fr-command" tabIndex="-1" data-cmd="inputStyle" data-param1="'.concat(t,'">').concat(this.language.translate(o[t]),"</a></li>"));return e+="</ul>"},callback:function(t,e){var o=this.forms.getInput();o&&(this.forms.applyStyle(e),this.forms.showEditPopup(o))},refreshOnShow:function(t,e){var o,n=this.$,s=this.forms.getInput();s&&(o=n(s),e.find(".fr-command").each(function(){var t=n(this).data("param1");n(this).toggleClass("fr-active",o.hasClass(t))}))}}),t.DefineIcon("inputEdit",{NAME:"edit",SVG_KEY:"edit"}),t.RegisterCommand("inputEdit",{title:"Edit Button",undo:!1,refreshAfterCallback:!1,callback:function(){this.forms.showUpdatePopup()}}),t.DefineIcon("inputBack",{NAME:"arrow-left",SVG_KEY:"back"}),t.RegisterCommand("inputBack",{title:"Back",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.forms.back()}}),t.RegisterCommand("updateInput",{undo:!1,focus:!1,title:"Update",callback:function(){this.forms.updateInput()}})});