@firestitch/froala
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.
3 lines (2 loc) • 5.64 kB
JavaScript
!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(m){"use strict";m=m&&m.hasOwnProperty("default")?m.default:m,Object.assign(m.DEFAULTS,{lineBreakerTags:["table","hr","form","dl","span.fr-video",".fr-embedly","img"],lineBreakerOffset:15,lineBreakerHorizontalOffset:10}),m.PLUGINS.lineBreaker=function(s){var f,t,l,p=s.$;function u(e,t){var n,r;if(null==e)o=(a=t.parent()).offset().top,n=(n=t.offset().top)-Math.min((n-o)/2,s.opts.lineBreakerOffset);else if(null==t)(o=(a=e.parent()).offset().top+a.outerHeight())<(i=e.offset().top+e.outerHeight())&&(o=(a=p(a).parent()).offset().top+a.outerHeight()),n=i+Math.min(Math.abs(o-i)/2,s.opts.lineBreakerOffset);else{var a=e.parent(),o=e.offset().top+e.height(),i=t.offset().top;if(i<o)return;n=(o+i)/2}o=a.outerWidth(),i=a.offset().left,s.opts.iframe&&(a=s.helpers.getPX(s.$wp.find(".fr-iframe").css("padding-top")),r=s.helpers.getPX(s.$wp.find(".fr-iframe").css("padding-left")),i+=s.$iframe.offset().left-s.helpers.scrollLeft()+r,n+=s.$iframe.offset().top-s.helpers.scrollTop()+a),s.$box.append(f),f.css("top",n-s.win.pageYOffset),f.css("left",i-s.win.pageXOffset),f.css("width",o),f.data("tag1",e),f.data("tag2",t),f.addClass("fr-visible").data("instance",s)}function c(e){if(e){var t=p(e);if(0===s.$el.find(t).length)return null;if(e.nodeType!=Node.TEXT_NODE&&t.is(s.opts.lineBreakerTags.join(",")))return t;if(0<t.parents(s.opts.lineBreakerTags.join(",")).length)return e=t.parents(s.opts.lineBreakerTags.join(",")).get(0),0!==s.$el.find(p(e)).length&&p(e).is(s.opts.lineBreakerTags.join(","))?p(e):null}return null}function o(e,t){e=s.doc.elementFromPoint(e,t);return e&&!p(e).closest(".fr-line-breaker").length&&!s.node.isElement(e)&&e!=s.$wp.get(0)&&function(e){if(void 0!==e.inFroalaWrapper)return e.inFroalaWrapper;for(var t=e;e.parentNode&&e.parentNode!==s.$wp.get(0);)e=e.parentNode;return t.inFroalaWrapper=e.parentNode==s.$wp.get(0),t.inFroalaWrapper}(e)?e:null}function g(e,t,n){for(var r=n,a=null;r<=s.opts.lineBreakerOffset&&!a;)a=(a=o(e,t-r))||o(e,t+r),r+=n;return a}function d(e,t,n){for(var r=null,a=100;!r&&e>s.$box.offset().left&&e<s.$box.offset().left+s.$box.outerWidth()&&0<a;)r=(r=o(e,t))||g(e,t,5),"left"==n?e-=s.opts.lineBreakerHorizontalOffset:e+=s.opts.lineBreakerHorizontalOffset,a-=s.opts.lineBreakerHorizontalOffset;return r}function n(e){l=null;var t=s.doc.elementFromPoint(e.pageX-s.win.pageXOffset,e.pageY-s.win.pageYOffset);if(t=t&&("HTML"==t.tagName||"BODY"==t.tagName||s.node.isElement(t)||0<=(t.getAttribute("class")||"").indexOf("fr-line-breaker"))?c(g(e.pageX-s.win.pageXOffset,e.pageY-s.win.pageYOffset,1)||d(e.pageX-s.win.pageXOffset-s.opts.lineBreakerHorizontalOffset,e.pageY-s.win.pageYOffset,"left")||d(e.pageX-s.win.pageXOffset+s.opts.lineBreakerHorizontalOffset,e.pageY-s.win.pageYOffset,"right")):c(t)){var n,r,e=e.pageY,a=t.offset().top,o=t.offset().top+t.outerHeight();if(Math.abs(o-e)<=s.opts.lineBreakerOffset||Math.abs(e-a)<=s.opts.lineBreakerOffset)if(Math.abs(o-e)<Math.abs(e-a)){var i=null;for((r=t.get(0)).nextSibling&&(i=r.nextSibling.offsetParent?r.nextSibling:null);i&&i.nodeType==Node.TEXT_NODE&&0===i.textContent.length;)i=i.nextSibling;if(!i)return void u(t,null);if(n=c(i))return void u(t,n)}else{if(!(r=t.get(0)).previousSibling)return void u(null,t);if(n=c(r.previousSibling))return void u(n,t)}f.removeClass("fr-visible").removeData("instance")}else s.core.sameInstance(f)&&f.removeClass("fr-visible").removeData("instance")}function e(e){return!(f.hasClass("fr-visible")&&!s.core.sameInstance(f))&&(s.popups.areVisible()||s.el.querySelector(".fr-selected-cell")?(f.removeClass("fr-visible"),!0):void(!1!==t||s.edit.isDisabled()||(l&&clearTimeout(l),l=setTimeout(n,30,e))))}function r(){l&&clearTimeout(l),f&&f.hasClass("fr-visible")&&f.removeClass("fr-visible").removeData("instance")}function a(){t=!0,r()}function i(){t=!1}function v(e){e.preventDefault();var e=f.data("instance")||s,t=(f.removeClass("fr-visible").removeData("instance"),f.data("tag1")),n=f.data("tag2"),r=s.html.defaultTag();null==t?r&&"TD"!=n.parent().get(0).tagName&&0===n.parents(r).length?n.before("<".concat(r,">").concat(m.MARKERS,"<br></").concat(r,">")):n.before("".concat(m.MARKERS,"<br>")):r&&"TD"!=t.parent().get(0).tagName&&0===t.parents(r).length?t.after("<".concat(r,">").concat(m.MARKERS,"<br></").concat(r,">")):t.after("".concat(m.MARKERS,"<br>")),e.selection.restore(),s.toolbar.enable()}return{_init:function(){if(!s.$wp)return!1;s.shared.$line_breaker||(s.shared.$line_breaker=p(document.createElement("div")).attr("class","fr-line-breaker").html('<a class="fr-floating-btn" role="button" tabIndex="-1" title="'.concat(s.language.translate("Break"),'"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><rect x="17" y="7" width="2" height="8"/><rect x="10" y="13" width="7" height="2"/><path d="M10.000,10.000 L10.000,18.013 L5.000,14.031 L10.000,10.000 Z"/></svg></a>'))),f=s.shared.$line_breaker,s.events.on("shared.destroy",function(){f.html("").removeData().remove(),f=null},!0),s.events.on("destroy",function(){f.removeData("instance").removeClass("fr-visible"),p("body").first().append(f),clearTimeout(l)},!0),s.events.$on(f,"mousemove",function(e){e.stopPropagation()},!0),s.events.bindClick(f,"a",v),t=!1,s.events.$on(s.$win,"mousemove",e),s.events.$on(p(s.win),"scroll",r),s.events.on("popups.show.table.edit",r),s.events.on("commands.after",r),s.events.$on(p(s.win),"mousedown",a),s.events.$on(p(s.win),"mouseup",i)}}}});
//# sourceMappingURL=line_breaker.min.min.js.map