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) • 21.3 kB
JavaScript
/*!
* 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(w){"use strict";Object.assign(w.POPUP_TEMPLATES,{"link.edit":"[_BUTTONS_]","link.insert":"[_BUTTONS_][_INPUT_LAYER_]"}),Object.assign(w.DEFAULTS,{linkEditButtons:["linkOpen","linkStyle","linkEdit","linkRemove"],linkInsertButtons:["linkBack","|","linkList"],linkAttributes:{},linkAutoPrefix:"http://",linkStyles:{"fr-green":"Green","fr-strong":"Thick"},linkMultipleStyles:!0,linkConvertEmailAddress:!0,linkAlwaysBlank:!1,linkAlwaysNoFollow:!1,linkNoOpener:!0,linkNoReferrer:!0,linkList:[{text:"Froala",href:"https://froala.com",target:"_blank"},{text:"Google",href:"https://google.com",target:"_blank"},{displayText:"Facebook",href:"https://facebook.com"}],linkText:!0}),w.PLUGINS.link=function(b){var A=b.$;function E(){var e=b.image?b.image.get():null;if(e||!b.$wp)return"A"==b.el.tagName?b.el:e&&e.get(0).parentNode&&"A"==e.get(0).parentNode.tagName?e.get(0).parentNode:void 0;e=b.selection.ranges(0).commonAncestorContainer;try{e&&(e.contains&&e.contains(b.el)||!b.el.contains(e)||b.el==e)&&(e=null)}catch(i){e=null}if(e&&"A"===e.tagName)return e;var t,e=b.selection.element(),n=b.selection.endElement();"A"==e.tagName||b.node.isElement(e)||(e=b.opts.iframe&&null!=(t=b.markdown)&&t.isEnabled()?null:A(e).parentsUntil(b.$el,"a").first().get(0)),"A"==n.tagName||b.node.isElement(n)||(n=b.opts.iframe&&null!=(t=b.markdown)&&t.isEnabled()?null:A(n).parentsUntil(b.$el,"a").first().get(0));try{n&&(n.contains&&n.contains(b.el)||!b.el.contains(n)||b.el==n)&&(n=null)}catch(i){n=null}try{e&&(e.contains&&e.contains(b.el)||!b.el.contains(e)||b.el==e)&&(e=null)}catch(i){e=null}return!n||n!=e||"A"!=n.tagName||(b.browser.msie||b.helpers.isMobile())&&(b.selection.info(e).atEnd||b.selection.info(e).atStart)?null:e}function y(){var e,t,n=b.image?b.image.get():null,i=[];if(n)"A"==n.get(0).parentNode.tagName&&i.push(n.get(0).parentNode);else if(b.win.getSelection){var r=b.win.getSelection();if(r.getRangeAt&&r.rangeCount)for(var a=b.doc.createRange(),l=0;l<r.rangeCount;++l)if((t=(t=(e=r.getRangeAt(l)).commonAncestorContainer)&&1!=t.nodeType?t.parentNode:t)&&"a"==t.nodeName.toLowerCase())i.push(t);else for(var o=t.getElementsByTagName("a"),s=0;s<o.length;++s)a.selectNodeContents(o[s]),a.compareBoundaryPoints(e.END_TO_START,e)<1&&-1<a.compareBoundaryPoints(e.START_TO_END,e)&&i.push(o[s])}else if(b.doc.selection&&"Control"!=b.doc.selection.type)if("a"==(t=(e=b.doc.selection.createRange()).parentElement()).nodeName.toLowerCase())i.push(t);else{o=t.getElementsByTagName("a"),a=b.doc.body.createTextRange();for(var c=0;c<o.length;++c)a.moveToElementText(o[c]),-1<a.compareEndPoints("StartToEnd",e)&&a.compareEndPoints("EndToStart",e)<1&&i.push(o[c])}return i}function C(n){if(b.core.hasFocus()||b.opts.iframe&&(!document.hasFocus||document.hasFocus())){if(r(),n&&"keyup"===n.type&&(n.altKey||n.which==w.KEYCODE.ALT))return!0;setTimeout(function(){if(!n||1==n.which||"mouseup"!=n.type){var e=E(),t=b.image?b.image.get():null;if(e&&!t){if(b.image){var t=b.node.contents(e);if(1==t.length&&"IMG"==t[0].tagName)return 0===(t=b.selection.ranges(0)).startOffset&&0===t.endOffset?A(e).before(w.INVISIBLE_SPACE+w.MARKERS):A(e).after(w.INVISIBLE_SPACE+w.MARKERS),b.selection.restore(),!1}n&&n.stopPropagation(),A(e).hasClass("fr-anchor")||i(e)}}},b.helpers.isIOS()?100:0)}}function i(e){b.popups.get("link.edit")||function(){var e="";1<=b.opts.linkEditButtons.length&&("A"==b.el.tagName&&0<=b.opts.linkEditButtons.indexOf("linkRemove")&&b.opts.linkEditButtons.splice(b.opts.linkEditButtons.indexOf("linkRemove"),1),e='<div class="fr-buttons">'.concat(b.button.buildList(b.opts.linkEditButtons),"</div>"));e={buttons:e},e=b.popups.create("link.edit",e);b.$wp&&b.events.$on(b.$wp,"scroll.link-edit",function(){var e=E();e&&b.popups.isVisible("link.edit")&&(A(e).hasClass("fr-anchor")||i(e))})}();var e=A(e),t=(b.popups.isVisible("link.edit")||b.popups.refresh("link.edit"),b.popups.setContainer("link.edit",b.$sc),e.offset().left+e.outerWidth()/2),n=e.offset().top+e.outerHeight();b.popups.show("link.edit",t,n,e.outerHeight(),!0)}function r(){b.popups.hide("link.edit")}function l(){var e=b.popups.get("link.insert"),t=E();if(t){for(var n=A(t),i=e.find('input.fr-link-attr[type="text"]'),r=e.find('input.fr-link-attr[type="checkbox"]'),a=0;a<i.length;a++){var l,o=(l=A(i[a])).attr("name")||"",o="href"===o?decodeURI(n.attr(o)):n.attr(o);l.val(o)}for(r.attr("checked",!1),a=0;a<r.length;a++)l=A(r[a]),n.attr(l.attr("name"))==l.data("checked")&&l.attr("checked",!0);e.find('input.fr-link-attr[type="text"][name="text"]').val(n.text())}else e.find('input.fr-link-attr[type="text"]').val(""),e.find('input.fr-link-attr[type="checkbox"]').attr("checked",!1),e.find('input.fr-link-attr[type="text"][name="text"]').val(b.selection.text());e.find("input.fr-link-attr").trigger("change"),(b.image?b.image.get():null)?e.find('.fr-link-attr[name="text"]').parent().hide():e.find('.fr-link-attr[name="text"]').parent().show()}function a(e){if(e)return b.popups.onRefresh("link.insert",l),!0;var t,n,e="",i=(1<=b.opts.linkInsertButtons.length&&(e='<div class="fr-buttons fr-tabs">'.concat(b.button.buildList(b.opts.linkInsertButtons),"</div>")),""),r=0,a=b.button.buildList(["anchorList"]),i='<div class="fr-link-insert-layer fr-layer fr-active" id="fr-link-insert-layer-'.concat(b.id,'">');for(t in i+='<div class="fr-link-input-layer"><div class="fr-input-line"><input id="fr-link-insert-layer-url-'.concat(b.id,'" name="href" type="text" class="fr-link-attr" placeholder="').concat(b.language.translate("URL"),'" tabIndex="').concat(++r,'"></div><div class="fr-buttons">').concat(a,"</div></div>"),b.opts.linkText&&(i+='<div class="fr-input-line"><input id="fr-link-insert-layer-text-'.concat(b.id,'" name="text" type="text" class="fr-link-attr" placeholder="').concat(b.language.translate("Text"),'" tabIndex="').concat(++r,'"></div>')),b.opts.linkAttributes)b.opts.linkAttributes.hasOwnProperty(t)&&(n=b.opts.linkAttributes[t],i+='<div class="fr-input-line"><input name="'.concat(t,'" type="text" class="fr-link-attr" placeholder="').concat(b.language.translate(n),'" tabIndex="').concat(++r,'"></div>'));b.opts.linkAlwaysBlank||(i+='<div class="fr-checkbox-line"><span class="fr-checkbox"><input name="target" class="fr-link-attr" data-checked="_blank" type="checkbox" id="fr-link-target-'.concat(b.id,'" tabIndex="').concat(++r,'"><span>').concat('<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10" height="10" viewBox="0 0 32 32"><path d="M27 4l-15 15-7-7-5 5 12 12 20-20z" fill="#FFF"></path></svg>','</span></span><label id="fr-label-target-').concat(b.id,'">').concat(b.language.translate("Open in new tab"),"</label></div>")),i+='<div class="fr-action-buttons"><button class="fr-command fr-submit" role="button" data-cmd="linkInsert" href="#" tabIndex="'.concat(++r,'" type="button">').concat(b.language.translate("Insert"),"</button></div></div>");a=b.popups.create("link.insert",{buttons:e,input_layer:i});return b.$wp&&b.events.$on(b.$wp,"scroll.link-insert",function(){(b.image?b.image.get():null)&&b.popups.isVisible("link.insert")&&c(),b.popups.isVisible("link.insert")&&o()}),a}function s(e,t,n){if(b.opts.trackChangesEnabled){if(b.edit.on(),b.events.focus(!0),b.undo.saveStep(),b.markers.insert(),b.html.wrap(),!b.$el.find(".fr-marker").length)return void b.popups.hide("link.insert");b.markers.remove()}if(!1===b.events.trigger("link.beforeInsert",[e,t,n=void 0===n?{}:n]))return!1;var i=b.image?b.image.get():null,r=(i||"A"==b.el.tagName?"A"==b.el.tagName&&b.$el.focus():(b.selection.restore(),b.popups.hide("link.insert")),e);b.opts.linkConvertEmailAddress&&b.helpers.isEmail(e)&&!/^mailto:.*/i.test(e)&&(e="mailto:".concat(e));""===b.opts.linkAutoPrefix||new RegExp("^("+w.LinkProtocols.join("|")+"):.","i").test(e)||/^data:image.*/i.test(e)||/^(https?:|ftps?:|file:|)\/\//i.test(e)||/^([A-Za-z]:(\\){1,2}|[A-Za-z]:((\\){1,2}[^\\]+)+)(\\)?$/i.test(e)||["/","{","[","#","(",".",'"',"\\"].indexOf((e||"")[0])<0&&(e=b.opts.linkAutoPrefix+e),e=b.helpers.sanitizeURL(e);try{e===decodeURIComponent(e)&&(e=encodeURI(e))}catch(v){e=encodeURI(e)}if(b.opts.linkAlwaysBlank&&(n.target="_blank"),b.opts.linkAlwaysNoFollow&&(n.rel="nofollow"),b.helpers.isEmail(r)&&(n.target=null,n.rel=null),"_blank"==n.target?(b.opts.linkNoOpener&&(n.rel?n.rel+=" noopener":n.rel="noopener"),b.opts.linkNoReferrer&&(n.rel?n.rel+=" noreferrer":n.rel="noreferrer")):null==n.target&&(n.rel?n.rel=n.rel.replace(/noopener/,"").replace(/noreferrer/,""):n.rel=null),t=t||"",e===b.opts.linkAutoPrefix)return b.popups.get("link.insert").find('input[name="href"]').addClass("fr-error"),b.events.trigger("link.bad",[r]),!1;var a,l=E();if(l){if((a=A(l)).attr("href",e),0<t.length&&a.text()!=t&&!i){b.opts.trackChangesEnabled&&((l=A(a.get(0).outerHTML)).insertBefore(a.parent()),l=b.track_changes.wrapLinkInTracking(l,b.track_changes.getPendingChanges().length-1),l=b.track_changes.wrapInDelete(l),a.parent().append(l));for(var o=a.get(0);1===o.childNodes.length&&o.childNodes[0].nodeType==Node.ELEMENT_NODE;)o=o.childNodes[0];A(o).text(t)}for(var s in i||a.prepend(w.START_MARKER).append(w.END_MARKER),n)n[s]?a.attr(s,n[s]):a.removeAttr(s);i||b.selection.restore()}else{if(i)i.wrap('<a href="'.concat(e,'"></a>')),b.image.hasCaption()&&i.parent().append(i.parents(".fr-img-caption").find(".fr-inner"));else if(b.format.remove("a"),b.selection.isCollapsed())t=0===t.length?r:t,b.html.insert('<a href="'.concat(e,'">').concat(w.START_MARKER).concat(t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")).concat(w.END_MARKER,"</a>")),b.selection.restore();else if(0<t.length&&t!=b.selection.text().replace(/\n/g,""))b.selection.remove(),b.html.insert('<a href="'.concat(e,'">').concat(w.START_MARKER).concat(t.replace(/&/g,"&")).concat(w.END_MARKER,"</a>")),b.selection.restore();else{if(!b.selection.isCollapsed()){b.selection.save();for(var c=b.$el.find(".fr-marker").addClass("fr-unprocessed").toArray();c.length;){var p=A(c.pop()),d=(p.removeClass("fr-unprocessed"),b.node.deepestParent(p.get(0)));if(d){for(var f=p.get(0),u="",h="";f=f.parentNode,b.node.isBlock(f)||(u+=b.node.closeTagString(f),h=b.node.openTagString(f)+h),f!=d;);var g=b.node.openTagString(p.get(0))+p.html()+b.node.closeTagString(p.get(0)),p=(p.replaceWith('<span id="fr-break"></span>'),d.outerHTML);p=(p=p.replace(/<span id="fr-break"><\/span>/g,u+g+h)).replace(h+u,""),d.outerHTML=p}c=b.$el.find(".fr-marker.fr-unprocessed").toArray()}b.html.cleanEmptyTags(),b.selection.restore()}b.format.apply("a",{href:e})}for(var k=y(),m=0;m<k.length;m++)(a=A(k[m])).attr(n),a.removeAttr("_moz_dirty");1==k.length&&b.$wp&&!i&&(A(k[0]).prepend(w.START_MARKER).append(w.END_MARKER),b.selection.restore())}i?((l=b.popups.get("link.insert"))&&l.find("input:focus").blur(),b.image.edit(i)):C()}function o(){r();var e,t,n=E();n&&(b.popups.get("link.insert")||a(),b.popups.isVisible("link.insert")||(b.popups.refresh("link.insert"),b.selection.save(),b.helpers.isMobile()&&(b.events.disableBlur(),b.$el.blur(),b.events.enableBlur())),b.popups.setContainer("link.insert",b.$sc),e=(n=(b.image?b.image.get():null)||A(n)).offset().left+n.outerWidth()/2,t=n.offset().top+n.outerHeight(),b.popups.show("link.insert",e,t,n.outerHeight(),!0))}function c(){var e,t,n,i=b.image?b.image.getEl():null;i&&(t=b.popups.get("link.insert"),i.outerWidth(),b.image.hasCaption()&&(i=i.find(".fr-img-wrap"),A(i))&&A(i).find("img")&&A(i).find("img").outerWidth(),t=t||a(),l(),b.popups.setContainer("link.insert",b.$sc),e=(t=b.helpers.getImagePopupPosition(i)).top,t=t.left,n=i.outerHeight(),b.opts.iframe&&b.image.hasCaption()&&A(i)&&A(i).find("img")&&(n=A(i).find("img").outerHeight()),b.popups.show("link.insert",t,e,n,!0))}return{_init:function(){b.events.on("keyup",function(e){e.which!=w.KEYCODE.ESC&&C(e)}),b.events.on("window.mouseup",C),b.events.$on(b.$el,"click","a",function(e){b.edit.isDisabled()&&e.preventDefault()}),b.helpers.isMobile()&&b.events.$on(b.$doc,"selectionchange",C),a(!0),b.events.on("popups.show.link.insert",function(){var e=b.popups.get("link.insert").find('input.fr-link-attr[name="href"]');e.length&&e.trigger("focus")}),"A"==b.el.tagName&&b.$el.addClass("fr-view"),b.events.on("toolbar.esc",function(){if(b.popups.isVisible("link.edit"))return b.events.disableBlur(),b.events.focus(),!1},!0)},remove:function(){var e,t=E(),n=b.image?b.image.get():null;if(!1===b.events.trigger("link.beforeRemove",[t]))return!1;n&&t?b.image.hasCaption()?(n.addClass("img-link-caption"),A(t).replaceWith(A(t).html()),e=document.querySelectorAll("img.img-link-caption"),b.image.edit(A(e[0])),A(e[0]).removeClass("img-link-caption")):(n.unwrap(),b.image.edit(n)):t&&(b.selection.save(),A(t).replaceWith(A(t).html()),b.selection.restore(),r())},showInsertPopup:function(){var e,t,n=b.$tb.find('.fr-command[data-cmd="insertLink"]'),i=b.popups.get("link.insert");(i=i||a()).hasClass("fr-active")||(b.popups.refresh("link.insert"),b.popups.setContainer("link.insert",b.$tb||b.$sc),b.selection.save(),n.isVisible()?(t=(e=b.button.getPosition(n)).left,b.popups.show("link.insert",t,e.top,n.outerHeight())):(b.position.forSelection(i),b.popups.show("link.insert")),(t=i.find('button[data-cmd="anchorList"]')).isVisible()&&b.button.click(t))},usePredefined:function(e,t){var n,i,r=b.opts.linkList[e]||t,a=(e=b.popups.get("link.insert")).find('input.fr-link-attr[type="text"]'),l=e.find('input.fr-link-attr[type="checkbox"]');for(r.rel&&(e.rel=r.rel),i=0;i<a.length;i++)r[(n=A(a[i])).attr("name")]?(n.val(r[n.attr("name")]),n.toggleClass("fr-not-empty",!0)):"text"!=n.attr("name")&&n.val("");for(i=0;i<l.length;i++)(n=A(l[i])).attr("checked",n.data("checked")==r[n.attr("name")]);b.accessibility.focusPopup(e)},insertCallback:function(){for(var e,t=b.popups.get("link.insert"),n=t.find('input.fr-link-attr[type="text"]'),i=t.find('input.fr-link-attr[type="checkbox"]'),r=(n.filter('[name="href"]').val()||"").trim(),a=b.opts.linkText?n.filter('[name="text"]').val():"",l={},o=0;o<n.length;o++)e=A(n[o]),["href","text"].indexOf(e.attr("name"))<0&&(l[e.attr("name")]=e.val());for(o=0;o<i.length;o++)(e=A(i[o])).is(":checked")?l[e.attr("name")]=e.data("checked"):l[e.attr("name")]=e.data("unchecked")||null;t.rel&&(l.rel=t.rel),t=b.helpers.scrollTop(),s(r,a,l),A(b.o_win).scrollTop(t)},insert:s,update:o,get:E,allSelected:y,back:function(){(b.image?b.image.get():null)?b.image.back():(b.events.disableBlur(),b.selection.restore(),b.events.enableBlur(),E()&&b.$wp?(b.selection.restore(),r(),C()):"A"==b.el.tagName?(b.$el.focus(),C()):(b.popups.hide("link.insert"),b.toolbar.showInline()))},imageLink:c,applyStyle:function(e,t,n){void 0===n&&(n=b.opts.linkMultipleStyles),void 0===t&&(t=b.opts.linkStyles);var i=E();if(!i)return!1;n||((n=Object.keys(t)).splice(n.indexOf(e),1),A(i).removeClass(n.join(" "))),A(i).toggleClass(e),C()},getAllAnchorList:function(){var e=b.$el.find('[data-cmd="anchor"]').get().map(function(e){return e.name}),t='<ul class="fr-dropdown-list" role="presentation">';if(!e.length)return!1;var n=b.icon.create("anchorListIcon");A(n).find("path").css("fill","dimgray");for(var i=0;i<e.length;i++)t+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="anchorList" data-param1="#'.concat(e[i],'">').concat(n).concat(e[i],"</a></li>");return t+="</ul>"},scrollToAnchor:function(e){var t,e=e.startsWith("#")?e.slice(1):e;return!!(e=b.$el.get(0).querySelector('[name="'.concat(e,'"]')))&&(e.scrollIntoView({behavior:"smooth",block:"center"}),b.linkToAnchor?b.linkToAnchor.focusOnAnchor(e):(t=b.doc.createRange(),b.selection.get().removeAllRanges(),t.selectNode(e),b.selection.get().addRange(t),$anchor.trigger("mousedown"),$anchor.trigger("mouseup")),!0)}}},w.DefineIcon("insertLink",{NAME:"link",SVG_KEY:"insertLink"}),w.RegisterShortcut(w.KEYCODE.K,"insertLink",null,"K"),w.RegisterCommand("insertLink",{title:"Insert Link",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible("link.insert")?(this.$el.find(".fr-marker").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide("link.insert")):this.link.showInsertPopup()},plugin:"link"}),w.DefineIcon("linkOpen",{NAME:"external-link",FA5NAME:"external-link-alt",SVG_KEY:"openLink"}),w.RegisterCommand("linkOpen",{title:"Open Link",undo:!1,refresh:function(e){var t,n=this.link.get();n?(e.removeClass("fr-hidden"),t="Open Link",n.href.includes("#")&&(t="Scroll to target"),e.attr("title",this.language.translate(t))):e.addClass("fr-hidden")},callback:function(){var e,t,n=this.link.get();n&&((e=n.getAttribute("href"))&&e.startsWith("#_mso")?(t='a[href="#'.concat(n.name,'"]'),(t=this.$el.find(t)).length&&t.get(0).scrollIntoView({behavior:"smooth",block:"center"})):e&&e.startsWith("#")?this.link.scrollToAnchor(e):-1!==n.href.indexOf("mailto:")?this.o_win.open(n.href).close():(n.target||(n.target="_self"),this.browser.msie||this.browser.edge?this.o_win.open(n.href,n.target):this.o_win.open(n.href,n.target,"noopener")),this.popups.hide("link.edit"))},plugin:"link"}),w.DefineIcon("linkEdit",{NAME:"edit",SVG_KEY:"edit"}),w.RegisterCommand("linkEdit",{title:"Edit Link",undo:!1,refreshAfterCallback:!1,popup:!0,callback:function(){this.link.update()},refresh:function(e){this.link.get()?e.removeClass("fr-hidden"):e.addClass("fr-hidden")},plugin:"link"}),w.DefineIcon("linkRemove",{NAME:"unlink",SVG_KEY:"unlink"}),w.RegisterCommand("linkRemove",{title:"Unlink",callback:function(){this.link.remove()},refresh:function(e){this.link.get()?e.removeClass("fr-hidden"):e.addClass("fr-hidden")},plugin:"link"}),w.DefineIcon("linkBack",{NAME:"arrow-left",SVG_KEY:"back"}),w.RegisterCommand("linkBack",{title:"Back",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.link.back()},refresh:function(e){var t=this.link.get()&&this.doc.hasFocus();(this.image?this.image.get():null)||t||this.opts.toolbarInline?(e.removeClass("fr-hidden"),e.next(".fr-separator").removeClass("fr-hidden")):(e.addClass("fr-hidden"),e.next(".fr-separator").addClass("fr-hidden"))},plugin:"link"}),w.DefineIcon("linkList",{NAME:"search",SVG_KEY:"search"}),w.RegisterCommand("linkList",{title:"Choose Link",type:"dropdown",focus:!1,undo:!1,refreshAfterCallback:!1,html:function(){for(var e='<ul class="fr-dropdown-list" role="presentation">',t=this.opts.linkList,n=0;n<t.length;n++)e+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="linkList" data-param1="'.concat(n,'">').concat(t[n].displayText||t[n].text,"</a></li>");return e+="</ul>"},callback:function(e,t){this.link.usePredefined(t)},plugin:"link"}),w.RegisterCommand("linkInsert",{focus:!1,refreshAfterCallback:!1,callback:function(){this.link.insertCallback()},refresh:function(e){this.link.get()?e.text(this.language.translate("Update")):e.text(this.language.translate("Insert"))},plugin:"link"}),w.DefineIcon("imageLink",{NAME:"link",SVG_KEY:"insertLink"}),w.RegisterCommand("imageLink",{title:"Insert Link",undo:!1,focus:!1,popup:!0,callback:function(){this.link.imageLink()},refresh:function(e){var t;this.link.get()?((t=e.prev()).hasClass("fr-separator")&&t.removeClass("fr-hidden"),e.addClass("fr-hidden")):((t=e.prev()).hasClass("fr-separator")&&t.addClass("fr-hidden"),e.removeClass("fr-hidden"))},plugin:"link"}),w.DefineIcon("linkStyle",{NAME:"magic",SVG_KEY:"linkStyles"}),w.RegisterCommand("linkStyle",{title:"Style",type:"dropdown",html:function(){var e,t='<ul class="fr-dropdown-list" role="presentation">',n=this.opts.linkStyles;for(e in n)n.hasOwnProperty(e)&&(t+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="linkStyle" data-param1="'.concat(e,'">').concat(this.language.translate(n[e]),"</a></li>"));return t+="</ul>"},callback:function(e,t){this.link.applyStyle(t)},refreshOnShow:function(e,t){var n,i=this.$,r=this.link.get();r&&(n=i(r),t.find(".fr-command").each(function(){var e=i(this).data("param1"),e=n.hasClass(e);i(this).toggleClass("fr-active",e).attr("aria-selected",e)}))},refresh:function(e){this.link.get()?e.removeClass("fr-hidden"):e.addClass("fr-hidden")},plugin:"link"}),w.DefineIcon("anchorList",{}),w.RegisterCommand("anchorList",{title:"Anchor Link",type:"dropdown",focus:!0,undo:!1,icon:"",refreshAfterCallback:!0,html:function(){return this.link.getAllAnchorList()},callback:function(e,t){this.link.usePredefined(!1,{href:t,target:"_self",text:""})},refresh:function(e){this.link.getAllAnchorList()?e.show():e.hide()},refreshOnShow:function(e,t){t.find(".fr-dropdown-content")[0].innerHTML=this.link.getAllAnchorList();var n=t.parents(".fr-link-input-layer"),i=n.find(".fr-input-line");setTimeout(function(){t.css("top",i.height()-parseInt(i.css("padding-bottom"))),t.css("left",0),t.css("margin-left",0),t.css("width",n.width()),t.css("bottom","auto")},10)},plugin:"link"}),w.DefineIcon("anchorListIcon",{NAME:"bookmark",SVG_KEY:"bookmark",VIEWBOX:"-10 -10 35 35"})});