UNPKG

froala-editor

Version:

A beautiful Javascript WYSIWYG HTML rich text editor. High performance and modern design make it easy to use for developers and loved by users.

7 lines (6 loc) 6.15 kB
/*! * froala_editor v2.8.3 (https://www.froala.com/wysiwyg-editor) * License https://froala.com/wysiwyg-editor/terms/ * Copyright 2014-2018 Froala Labs */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):t(e.jQuery)}(this,function(e){"use strict";var m=(e=e&&e.hasOwnProperty("default")?e["default"]:e).FE;Object.assign(m.DEFAULTS,{dragInline:!0}),m.PLUGINS.draggable=function(f){var g,d=f.$;function e(e){return!(!e.originalEvent||!e.originalEvent.target||e.originalEvent.target.nodeType!=Node.TEXT_NODE)||(e.target&&"A"==e.target.tagName&&1==e.target.childNodes.length&&"IMG"==e.target.childNodes[0].tagName&&(e.target=e.target.childNodes[0]),d(e.target).hasClass("fr-draggable")?(f.undo.canDo()||f.undo.saveStep(),f.opts.dragInline?f.$el.attr("contenteditable",!0):f.$el.attr("contenteditable",!1),f.opts.toolbarInline&&f.toolbar.hide(),d(e.target).addClass("fr-dragging"),f.browser.msie||f.browser.edge||f.selection.clear(),void e.originalEvent.dataTransfer.setData("text","Froala")):(e.preventDefault(),!1))}function p(e){return!(e&&("HTML"==e.tagName||"BODY"==e.tagName||f.node.isElement(e)))}function v(e,t,n){f.opts.iframe&&(e+=f.$iframe.offset().top,t+=f.$iframe.offset().left),g.offset().top!=e&&g.css("top",e),g.offset().left!=t&&g.css("left",t),g.width()!=n&&g.css("width",n)}function t(e){e.originalEvent.dataTransfer.dropEffect="move",f.opts.dragInline?function(){for(var e=null,t=0;t<m.INSTANCES.length;t++)if((e=m.INSTANCES[t].$el.find(".fr-dragging")).length)return e.get(0)}()||!f.browser.msie&&!f.browser.edge||e.preventDefault():(e.preventDefault(),function(e){var t=f.doc.elementFromPoint(e.originalEvent.pageX-f.win.pageXOffset,e.originalEvent.pageY-f.win.pageYOffset);if(!p(t)){for(var n=0,r=t;!p(r)&&r==t&&0<e.originalEvent.pageY-f.win.pageYOffset-n;)n++,r=f.doc.elementFromPoint(e.originalEvent.pageX-f.win.pageXOffset,e.originalEvent.pageY-f.win.pageYOffset-n);(!p(r)||g&&0===f.$el.find(r).length&&r!=g.get(0))&&(r=null);for(var a=0,o=t;!p(o)&&o==t&&e.originalEvent.pageY-f.win.pageYOffset+a<d(f.doc).height();)a++,o=f.doc.elementFromPoint(e.originalEvent.pageX-f.win.pageXOffset,e.originalEvent.pageY-f.win.pageYOffset+a);(!p(o)||g&&0===f.$el.find(o).length&&o!=g.get(0))&&(o=null),t=null==o&&r?r:o&&null==r?o:o&&r?n<a?r:o:null}if(d(t).hasClass("fr-drag-helper"))return;if(t&&!f.node.isBlock(t)&&(t=f.node.blockParent(t)),t&&0<=["TD","TH","TR","THEAD","TBODY"].indexOf(t.tagName)&&(t=d(t).parents("table").get(0)),t&&0<=["LI"].indexOf(t.tagName)&&(t=d(t).parents("UL, OL").get(0)),t&&!d(t).hasClass("fr-drag-helper")){var i;g||(m.$draggable_helper||(m.$draggable_helper=d('<div class="fr-drag-helper"></div>')),g=m.$draggable_helper,f.events.on("shared.destroy",function(){g.html("").removeData().remove(),g=null},!0)),i=e.originalEvent.pageY<d(t).offset().top+d(t).outerHeight()/2;var s=d(t),l=0;i||0!==s.next().length?(i||(s=s.next()),"before"==g.data("fr-position")&&s.is(g.data("fr-tag"))||(0<s.prev().length&&(l=parseFloat(s.prev().css("margin-bottom"))||0),l=Math.max(l,parseFloat(s.css("margin-top"))||0),v(s.offset().top-l/2-f.$box.offset().top,s.offset().left-f.win.pageXOffset-f.$box.offset().left,s.width()),g.data("fr-position","before"))):"after"==g.data("fr-position")&&s.is(g.data("fr-tag"))||(l=parseFloat(s.css("margin-bottom"))||0,v(s.offset().top+d(t).height()+l/2-f.$box.offset().top,s.offset().left-f.win.pageXOffset-f.$box.offset().left,s.width()),g.data("fr-position","after")),g.data("fr-tag",s),g.addClass("fr-visible"),g.appendTo(f.$box)}else g&&0<f.$box.find(g).length&&g.removeClass("fr-visible")}(e))}function n(e){e.originalEvent.dataTransfer.dropEffect="move",f.opts.dragInline||e.preventDefault()}function r(e){f.$el.attr("contenteditable",!0);var t=f.$el.find(".fr-dragging");g&&g.hasClass("fr-visible")&&f.$box.find(g).length?a(e):t.length&&(e.preventDefault(),e.stopPropagation()),g&&f.$box.find(g).length&&g.removeClass("fr-visible"),t.removeClass("fr-dragging")}function a(e){for(var t,n,r=0;r<m.INSTANCES.length;r++)if((t=m.INSTANCES[r].$el.find(".fr-dragging")).length){n=m.INSTANCES[r];break}if(t.length){if(e.preventDefault(),e.stopPropagation(),g&&g.hasClass("fr-visible")&&f.$box.find(g).length)g.data("fr-tag")[g.data("fr-position")]('<span class="fr-marker"></span>'),g.removeClass("fr-visible");else if(!1===f.markers.insertAtPoint(e.originalEvent))return!1;if(t.removeClass("fr-dragging"),!1===(t=f.events.chainTrigger("element.beforeDrop",t)))return!1;var a=t;if(t.parent().is("A")&&1==t.parent().get(0).childNodes.length&&(a=t.parent()),f.core.isEmpty())f.events.focus();else f.$el.find(".fr-marker").replaceWith(m.MARKERS),f.selection.restore();if(n==f||f.undo.canDo()||f.undo.saveStep(),f.core.isEmpty())f.$el.html(a);else{var o=f.markers.insert();a.contains(o)?t.contains(o)||d(o).replaceWith(t):d(o).replaceWith(a),t.after(m.MARKERS),f.selection.restore()}return f.popups.hideAll(),f.selection.save(),f.$el.find(f.html.emptyBlockTagsQuery()).not("TD, TH, LI, .fr-inner").not(f.opts.htmlAllowedEmptyTags.join(",")).remove(),f.html.wrap(),f.html.fillEmptyBlocks(),f.selection.restore(),f.undo.saveStep(),f.opts.iframe&&f.size.syncIframe(),n!=f&&(n.popups.hideAll(),n.$el.find(n.html.emptyBlockTagsQuery()).not("TD, TH, LI, .fr-inner").remove(),n.html.wrap(),n.html.fillEmptyBlocks(),n.undo.saveStep(),n.events.trigger("element.dropped"),n.opts.iframe&&n.size.syncIframe()),f.events.trigger("element.dropped",[a]),!1}g&&g.removeClass("fr-visible"),f.undo.canDo()||f.undo.saveStep(),setTimeout(function(){f.undo.saveStep()},0)}function o(e){if(e&&"DIV"==e.tagName&&f.node.hasClass(e,"fr-drag-helper"))e.parentNode.removeChild(e);else if(e&&e.nodeType==Node.ELEMENT_NODE)for(var t=e.querySelectorAll("div.fr-drag-helper"),n=0;n<t.length;n++)t[n].parentNode.removeChild(t[n])}return{_init:function(){f.opts.enter==m.ENTER_BR&&(f.opts.dragInline=!0),f.events.on("dragstart",e,!0),f.events.on("dragover",t,!0),f.events.on("dragenter",n,!0),f.events.on("document.dragend",r,!0),f.events.on("document.drop",r,!0),f.events.on("drop",a,!0),f.events.on("html.processGet",o)}}}});