',containerSettingEnabled:!1,containerSettingInitFunction:null,containerSettingShowFunction:null,containerSettingHideFunction:null,onReady:function(){},onInitFrame:function(t,e,n){},onSidebarToggled:function(t){},onInitContentArea:function(t){},onContentChanged:function(t){},onInitContainer:function(t){},onBeforeContainerDeleted:function(t,e){},onContainerDeleted:function(t,e){},onContainerChanged:function(t,e){},onContainerDuplicated:function(t,e,n){},onContainerSelected:function(t,e){},onContainerSnippetDropped:function(t,e,n){},onComponentReady:function(t){},onInitComponent:function(t){},onBeforeComponentDeleted:function(t,e){},onComponentDeleted:function(t,e){},onComponentChanged:function(t,e){},onComponentDuplicated:function(t,e,n){},onComponentSelected:function(t,e){},onComponentSnippetDropped:function(t,e,n){},onBeforeDynamicContentLoad:function(t,e){},onDynamicContentLoaded:function(t,e,n,o){},onDynamicContentError:function(t,e,n,o){}},o.components={blank:{settingEnabled:!1}},o.log=e,o.error=n,o.prototype={init:function(n){var o=this,i=o.options;if(i.iframeMode)n=o.initFrame(n);else if(o.body=t(document.body),n.is("textarea")){e("Target is textarea",n);var a=n.val(),r=t(""),s=o.generateId("wrapper");n.after(r),r.attr({id:s,"class":"keditor-wrapper"}),e('Id for keditor wrapper is: "'+s+'"'),r.html(a),n.css("display","none"),n.attr("data-keditor-wrapper","#"+s),n=r}var d,c=o.body;c.hasClass("initialized-snippets-list")?e("Snippets list is already initialized!"):(d=o.initSidebar(),c.addClass("initialized-snippets-list")),c.hasClass("initialized-click-event-handlers")?e("CLick event handlers is already initialized!"):(o.initKEditorClicks(),c.addClass("initialized-click-event-handlers")),o.initContentAreas(n),d||"function"!=typeof i.onReady||i.onReady.call(o)},generateId:function(t){var e=(new Date).getTime();return"keditor-"+t+"-"+e},initNiceScroll:function(n){e("initNiceScroll",n),t.fn.niceScroll?(e("Initialize $.fn.niceScroll"),n.niceScroll({cursorcolor:"#999",cursorwidth:6,railpadding:{top:0,right:0,left:0,bottom:0},cursorborder:"",disablemutationobserver:!0})):e("$.fn.niceScroll does not exist. Use default sidebar.")},initFrame:function(n){e("initFrame",n);var i=this,a=i.options,r=n.html(),s=t(""),d=i.generateId("frame");n.after(s),s.attr({id:d,"class":"keditor-frame"}),e('Id for keditor frame is: "'+d+'"'),n.css("display","none"),n.attr("data-keditor-frame","#"+d);var c=s.contents(),l=c.find("head"),p=c.find("body");e("Adding styles to iframe...");var f="";t('[data-type="keditor-style"]').each(function(){var e=t(this),n=e.attr("href")||e.attr("data-href")||"";f+=n?'\n':'\n"}),e("Styles: \n"+f),l.append(f),e("All styles are added"),e("Adding original content to iframe...");var g;return a.contentAreasWrapper?(g=t(a.contentAreasWrapper),p.append(g),g.html(r)):p.html(r),a.snippetsListId=o.DEFAULTS.snippetsListId,i.body=p,"function"==typeof a.onInitFrame&&a.onInitFrame.call(s,s,l,p),g||p},initSidebar:function(){e("initSidebar");var i=this,a=i.options,r=i.body;return r.addClass("opened-keditor-sidebar"),a.snippetsListId===o.DEFAULTS.snippetsListId?(e("Render default KEditor snippet container"),r.append('
'),i.initSidebarToggler()):(e('Render KEditor snippets content after custom snippets list with id="'+a.snippetsListId+'"'),r.find("#"+a.snippetsListId).after('')),"string"==typeof a.snippetsUrl&&a.snippetsUrl.length>0?(e('Getting snippets form "'+a.snippetsUrl+'"...'),t.ajax({type:"get",dataType:"html",url:a.snippetsUrl,success:function(t){e("Success in getting snippets",t),i.renderSnippets(t),i.initSnippets(),i.initTabs(),i.initTabsSwitcher(),i.initSettingPanel(),a.snippetsFilterEnabled&&(i.initSnippetsFilter("Container"),i.initSnippetsFilter("Component")),(a.snippetsTooltipEnabled||a.tabTooltipEnabled)&&(e("Initialize Bootstrap tooltip plugin"),r.find("#"+a.snippetsListId).find('[data-toggle="tooltip"]').tooltip()),"function"==typeof a.onReady&&a.onReady.call(i)},error:function(t){e("Error when getting snippets",t)}})):void n('"snippetsUrl" must be not null!')},initSnippetsFilter:function(n){e("initSnippetsFilter");var o=this,i=o.options,a=o.body,r=n.toLowerCase(),s=o["snippets"+n+"Categories"],d="";d+='
")}}n.initNiceScroll(r.find(".keditor-snippets-inner"))},initTabsSwitcher:function(){e("initTabsSwitcher");var n=this,o=n.body,i=o.find("#keditor-snippets-type-switcher li"),a=o.find("#keditor-snippets-container .tab-pane");i.find("a").on("click",function(e){e.preventDefault();var n=t(this),r=n.parent(),s=n.attr("href");if(!r.hasClass("active")){var d=i.filter(".active"),c=a.filter(".active"),l=o.find(s);if(d.removeClass("active"),c.removeClass("active"),r.addClass("active"),l.addClass("active"),t.fn.niceScroll){c.getNiceScroll().hide();var p=l.getNiceScroll();p.show(),p.resize()}}})},initSettingPanel:function(){e("initSettingPanel");var o=this,i=o.options,a=o.body;a.find("#keditor-setting-closer").on("click",function(t){t.preventDefault(),o.hideSettingPanel()});var r=a.find("#keditor-setting-forms");if(o.initNiceScroll(r),i.containerSettingEnabled===!0)if("function"==typeof i.containerSettingInitFunction){var s=t('');r.append(s),e("Initialize container setting panel"),i.containerSettingInitFunction.call(o,s,o)}else n('"containerSettingInitFunction" is not function!')},setSettingContainer:function(t){e("setSettingContainer",t);var n=this,o=n.body;if(t){var i=t.attr("id");o.attr("data-setting-container",i)}else o.removeAttr("data-setting-container")},getSettingContainer:function(){e("getSettingContainer");var t=this,n=t.body,o=n.attr("data-setting-container");return n.find("#"+o)},setSettingComponent:function(t){e("setSettingComponent",t);var n=this,o=n.body;if(t){var i=t.attr("id");o.attr("data-setting-component",i)}else o.removeAttr("data-setting-component")},getSettingComponent:function(){e("getSettingComponent");var t=this,n=t.body,o=n.attr("data-setting-component");return n.find("#"+o)},showSettingPanel:function(n){e("showSettingPanel",n);var i=this,a=i.options,r=i.body,s=n.is(".keditor-component"),d=r.find("#keditor-setting-forms").children(".active");if(d.removeClass("active"),s){i.setSettingComponent(n),i.setSettingContainer(null);var c=i.getComponentType(n),l=o.components[c];r.find("#keditor-setting-title").html(l.settingTitle);var p=r.find("#keditor-setting-forms"),f=r.find("#keditor-setting-"+c);if(0===f.length){var l=o.components[c];if("function"==typeof l.initSettingForm){f=t('');var g=t("").html("Loading...");p.append(f),f.append(g),e('Initializing setting form for component type "'+c+'"');var C=l.initSettingForm.call(l,f,i);t.when(C).done(function(){e('Initialized setting form for component type "'+c+'"'),setTimeout(function(){g.remove(),"function"==typeof l.showSettingForm?(e('Show setting form of component type "'+c+'"'),l.showSettingForm.call(l,f,n,i)):e('"showSettingForm" function of component type "'+c+'" does not exist')},100)})}else e('"initSettingForm" function of component type "'+c+'" does not exist')}else"function"==typeof l.showSettingForm?(e('Show setting form of component type "'+c+'"'),l.showSettingForm.call(l,f,n,i)):e('"showSettingForm" function of component type "'+c+'" does not exist'),f.addClass("active")}else{i.setSettingContainer(n),i.setSettingComponent(null),r.find("#keditor-setting-title").html("Container Settings");var f=r.find("#keditor-container-setting");"function"==typeof a.containerSettingShowFunction?(e("Show setting form of container"),a.containerSettingShowFunction.call(i,f,n,i)):e('"containerSettingShowFunction" does not exist'),f.addClass("active")}i.toggleSidebar(!0),r.addClass("opened-keditor-setting")},hideSettingPanel:function(){e("hideSettingPanel");var t=this,n=t.options,i=t.body;i.removeClass("opened-keditor-setting");var a=i.find("#keditor-setting-forms").children(".active");if(a.length>0){if(a.is("#keditor-container-setting"))"function"==typeof n.containerSettingHideFunction?(e("Hide setting form of container"),n.containerSettingHideFunction.call(t,a,t)):e('"containerSettingHideFunction" does not exist');else{var r=a.attr("data-type"),s=o.components[r];"function"==typeof s.hideSettingForm?(e('Hide setting form of component type "'+r+'"'),s.hideSettingForm.call(s,a,t)):e('"hideSettingForm" function of component type "'+r+'" does not exist')}a.removeClass("active")}i.removeClass("opened-keditor-setting"),t.setSettingComponent(null),t.setSettingContainer(null)},getContentAreas:function(n){e("getContentAreas",n);var o,i=this,a=i.options;if(a.contentAreasSelector&&(o=n.find(a.contentAreasSelector)),!o||0===o.length){e("Do not find any content area. Creating default content area..."),o=t("");var r=n.html();o.html(r),n.empty().append(o)}return o},initContentAreas:function(n){e("initContentAreas",n);var o=this,i=o.getContentAreas(n);i.each(function(){var n=t(this),i=n.attr("id")||"";0===i.length&&(e("Content area does not contain Id. Generating id for content area..."),i=o.generateId("content-area"),n.attr("id",i),e('Id for content are is: "'+i+'"')),o.initContentArea(n),n.data("keditor",o)})},initContentArea:function(n){e("initContentArea",n);var o=this,i=o.options,a=o.body;if(n.addClass("keditor-content-area"),e("Initialize $.fn.droppable for content area"),n.droppable({accept:".keditor-snippet[data-type=container]",tolerance:"pointer",greedy:!0}),e("Initialize $.fn.sortable for content area"),n.sortable({handle:".btn-container-reposition",items:"> section",connectWith:".keditor-content-area",axis:"y",tolerance:"pointer",sort:function(){t(this).removeClass("ui-state-default")},receive:function(r,s){e("On received snippet",r,s);var d=s.helper,c=s.item;if(c.is(".keditor-snippet")){var l=a.find(c.attr("data-snippet")).html();e("Snippet content",l);var p=t(''+l+"");d.replaceWith(p),p.hasClass("showed-keditor-toolbar")||(t(".keditor-container.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),p.addClass("showed-keditor-toolbar")),"function"==typeof i.onContainerSnippetDropped&&i.onContainerSnippetDropped.call(n,r,p,s.item),o.initContainer(n,p)}o.hideSettingPanel(),"function"==typeof i.onContentChanged&&i.onContentChanged.call(n,r)}}),e("Initialize existing containers in content area"),n.children("section").each(function(){o.convertToContainer(n,t(this))}),"function"==typeof i.onInitContentArea){var r=i.onInitContentArea.call(n,n);r&&r.length>0&&t.each(r,function(){o.convertToContainer(n,t(this))})}},convertToContainer:function(t,n){e("convertToContainer",t,n);var o,i=this,a=n.is("section");a?(n.addClass("keditor-container"),n.wrapInner(''),o=n):(n.wrap(''),o=n.parent().parent()),i.initContainer(t,o)},initContainer:function(n,o){e("initContainer",n,o);var i=this,a=i.options;if(o.hasClass("keditor-initialized-container")&&o.hasClass("keditor-initializing-container"))e(o.hasClass("keditor-initialized-container")?"Container is already initialized!":"Container is initializing...");else{o.addClass("keditor-initializing-container");var r="";a.containerSettingEnabled===!0&&(r=''+a.btnSettingContainerText+""),e("Render KEditor toolbar for container",o),o.append('
");var s=i.generateId("container");e("Id for container is: "+s),o.attr("id",s);var d=o.find('[data-type="container-content"]');e("Initialize "+d.length+" container content(s)"),d.each(function(){var e=t(this);i.initContainerContent(n,o,e)}),"function"==typeof a.onInitContainer&&a.onInitContainer.call(n,o),o.addClass("keditor-initialized-container"),o.removeClass("keditor-initializing-container")}},initContainerContent:function(n,o,i){e("initContainerContent",n,o,i);var a=this,r=a.options,s=a.body,d=a.generateId("container-content");i.addClass("keditor-container-content"),e("Id for container content id: "+d,i),i.attr("id",d),e("Initialize $.fn.droppable for container content"),i.droppable({accept:".keditor-snippet[data-type=component]",tolerance:"pointer",greedy:!0}),e("Initialize $.fn.sortable for container content"),i.sortable({handle:".btn-component-reposition",items:"> section",connectWith:".keditor-container-content",tolerance:"pointer",sort:function(){t(this).removeClass("ui-state-default")},receive:function(o,i){e("On received snippet",o,i);var d,c=i.helper,l=i.item;if(l.is(".keditor-snippet")){var p=s.find(l.attr("data-snippet")),f=p.html(),g=l.attr("data-type");e("Snippet content",f);var C=a.getDataAttributes(p,null,!0),m=t(''+f+"");c.replaceWith(m),d=m.closest(".keditor-container"),"function"==typeof r.onComponentSnippetDropped&&r.onComponentSnippetDropped.call(n,o,m,i.item),a.initComponent(n,d,m)}else d=l.closest(".keditor-container");d.hasClass("showed-keditor-toolbar")||(t(".keditor-container.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),d.addClass("showed-keditor-toolbar")),"function"==typeof r.onContainerChanged&&r.onContainerChanged.call(n,o,d),"function"==typeof r.onContentChanged&&r.onContentChanged.call(n,o)}}),e("Initialize existing components inside container content"),i.children().each(function(){var e=t(this);a.convertToComponent(n,o,e,!0)})},convertToComponent:function(t,n,o,i){e("convertToComponent",t,n,o,i);var a,r=this,s=o.is("section");s?(o.addClass("keditor-component"),o.wrapInner(''),a=o):(o.wrap(''),a=o.parent().parent()),i&&a.addClass("existing-component"),r.initComponent(t,n,a)},getDataAttributes:function(n,o,i){e("getDataAttributes",n,o,i);var a=i?[]:{};return o||(o=[]),t.each(n.get(0).attributes,function(e,n){0===n.name.indexOf("data-")&&-1===t.inArray(n.name,o)&&(i?a.push(n.name+'="'+n.value+'"'):a[n.name]=n.value)}),a},getComponentType:function(t){e("getComponentType",t);var i=this,a=i.options,r=t.attr("data-type"),s=r?r.replace("component-",""):"";return s&&s in o.components?s:(e(s?'Component type "'+s+'" does not exist':"This component does not contain data-type attribute"),"string"==typeof a.defaultComponentType?s=a.defaultComponentType:"function"==typeof a.defaultComponentType&&(s=a.defaultComponentType.call(t,t)),s||n("Component type is undefined!"),e("Fallback to defaultComponentType: "+s),s)},initComponent:function(n,i,a){e("initComponent",n,i,a);var r=this,s=r.options,d=r.body;if(a.hasClass("keditor-initialized-component")&&a.hasClass("keditor-initializing-component"))e(a.hasClass("keditor-initialized-component")?"Component is already initialized!":"Component is initializing...");else{a.addClass("keditor-initializing-component");var c=r.generateId("component");e("Id for component is: "+c),a.attr("id",c);var l=a.children(".keditor-component-content"),p=r.generateId("component-content");e("Id for component content is: "+p),l.attr("id",p);var f=r.getComponentType(a);e("Component type: "+f);var g=o.components[f],C=g.settingEnabled,m="";C&&(m=''+s.btnSettingComponentText+""),e("Render KEditor toolbar for component",a),a.append('
");var h=[];a.find("[data-dynamic-href]").each(function(){var e=t(this);h.push(r.initDynamicContent(e))}),t.when.apply(null,h).then(function(){"function"==typeof g.init?g.init.call(g,n,i,a,r):(d.removeClass("highlighted-container-content"),e('"init" function of component type "'+f+'" does not exist')),"function"==typeof s.onInitComponent&&s.onInitComponent.call(n,a),a.addClass("keditor-initialized-component"),a.removeClass("keditor-initializing-component")})}},getClickedElement:function(e,n){var o=t(e.target),i=o.closest(n);return o.is(n)?o:i.length>0?i:null},initKEditorClicks:function(){e("initKEditorClicks");var n=this,o=n.options,i=n.body;i.on("click",function(t){var a=n.getClickedElement(t,"#keditor-sidebar"),r=n.getClickedElement(t,".keditor-container");if(r){if(e("Click on .keditor-container",r),!r.hasClass("showed-keditor-toolbar")){i.find(".keditor-container.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),i.find(".keditor-component.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),r.addClass("showed-keditor-toolbar");var s=r.parent();"function"==typeof o.onContainerSelected&&o.onContainerSelected.call(s,t,r)}}else a||(i.find(".keditor-container.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),i.find(".keditor-component.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"));var d=n.getClickedElement(t,".keditor-component");if(d){if(e("Click on .keditor-component",d),!d.hasClass("showed-keditor-toolbar")){i.find(".keditor-component.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),d.addClass("showed-keditor-toolbar");var s=d.parent();"function"==typeof o.onComponentSelected&&o.onComponentSelected.call(s,t,d)}}else a||i.find(".keditor-component.showed-keditor-toolbar").removeClass("showed-keditor-toolbar")}),i.on("click",".btn-container-setting",function(o){o.preventDefault();var a=t(this);e("Click on .btn-container-setting",a);var r=a.closest(".keditor-container");i.hasClass("opened-keditor-setting")&&i.hasClass("opened-keditor-sidebar")&&r.is(n.getSettingContainer())?n.hideSettingPanel():n.showSettingPanel(r)}),i.on("click",".btn-container-duplicate",function(a){a.preventDefault();var r=t(this);e("Click on .btn-container-duplicate",r);var s=r.closest(".keditor-container"),d=s.parent(),c=t(n.getContainerContent(s));s.after(c),n.convertToContainer(d,c);var l=i.find("#"+o.snippetsListId),p=l.find(".keditor-snippet[data-type^=component]"),f=p.draggable("option","connectToSortable");p.draggable("option","connectToSortable",f.add(c.find(".keditor-container-content"))),e("Container is duplicated"),"function"==typeof o.onContainerDuplicated&&o.onContainerDuplicated.call(d,s,c),"function"==typeof o.onContentChanged&&o.onContentChanged.call(d,a)}),i.on("click",".btn-container-delete",function(i){i.preventDefault();var a=t(this);if(e("Click on .btn-container-delete",a),confirm("Are you sure that you want to delete this container? This action can not be undo!")){var r=a.closest(".keditor-container"),s=r.find(".keditor-component"),d=r.parent();"function"==typeof o.onBeforeContainerDeleted&&o.onBeforeContainerDeleted.call(d,i,r);var c=n.getSettingComponent();if(c){var l=c.closest(".keditor-container");l.is(r)&&(e("Deleting container is container of setting container. Close setting panel for this setting component",c),n.hideSettingPanel())}else n.getSettingContainer().is(r)&&(e("Deleting container is setting container. Close setting panel for this container",r),n.hideSettingPanel());s.length>0&&s.each(function(){n.deleteComponent(t(this))}),r.remove(),"function"==typeof o.onContainerDeleted&&o.onContainerDeleted.call(d,i,r),"function"==typeof o.onContentChanged&&o.onContentChanged.call(d,i)}}),i.on("click",".btn-component-setting",function(o){o.preventDefault();var a=t(this);e("Click on .btn-component-setting",a);var r=a.closest(".keditor-component");i.hasClass("opened-keditor-setting")&&i.hasClass("opened-keditor-sidebar")&&r.is(n.getSettingComponent())?n.hideSettingPanel():n.showSettingPanel(r)}),i.on("click",".btn-component-duplicate",function(i){i.preventDefault();var a=t(this);e("Click on .btn-component-duplicate",a);var r=a.closest(".keditor-component"),s=r.closest(".keditor-container"),d=s.parent(),c=t(n.getComponentContent(r));r.after(c),n.convertToComponent(d,s,c),e("Component is duplicated"),"function"==typeof o.onComponentDuplicated&&o.onComponentDuplicated.call(d,r,c),"function"==typeof o.onContainerChanged&&o.onContainerChanged.call(d,i,s),"function"==typeof o.onContentChanged&&o.onContentChanged.call(d,i)}),i.on("click",".btn-component-delete",function(i){i.preventDefault();var a=t(this);if(e("Click on .btn-component-delete",a),confirm("Are you sure that you want to delete this component? This action can not be undo!")){var r=a.closest(".keditor-component"),s=r.closest(".keditor-content-area");"function"==typeof o.onBeforeComponentDeleted&&o.onBeforeComponentDeleted.call(s,i,r),n.getSettingComponent().is(r)&&n.hideSettingPanel(),n.deleteComponent(r),"function"==typeof o.onComponentDeleted&&o.onComponentDeleted.call(s,i,r),"function"==typeof o.onContainerChanged&&o.onContainerChanged.call(s,i,r),"function"==typeof o.onContentChanged&&o.onContentChanged.call(s,i)}})},deleteComponent:function(t){e("deleteComponent",t);var n=this,i=n.getComponentType(t),a=o.components[i];"function"==typeof a.destroy?a.destroy.call(a,t,n):e('"destroy" function of component type "'+i+'" does not exist'),t.remove()},initDynamicContent:function(n){e("initDynamicContent",n);var o=this,i=o.options,a=n.closest(".keditor-component"),r=n.closest(".keditor-content-area");"function"==typeof i.onBeforeDynamicContentLoad&&i.onBeforeDynamicContentLoad.call(r,n,a);var s=n.attr("data-dynamic-href"),d=o.getDataAttributes(a,["data-type","data-dynamic-href"],!1);return d=t.param(d),e("Dynamic href: "+s,"Data: "+d),t.ajax({url:s,data:d,type:"GET",dataType:"HTML",success:function(t,o,a){e("Dynamic content is loaded",n,t,o,a),n.html(t),"function"==typeof i.onDynamicContentLoaded&&i.onDynamicContentLoaded.call(r,n,t,o,a)},error:function(t,o,a){e("Error when loading dynamic content",n,t,o,a),"function"==typeof i.onDynamicContentError&&i.onDynamicContentError.call(r,n,t,o,a)}})},getComponentContent:function(n){e("getComponentContent",n);var i,a=this,r=a.getComponentType(n),s=o.components[r],d=a.getDataAttributes(n,null,!0);if("function"==typeof s.getContent)i=s.getContent.call(s,n,a);else{e('"getContent" function of component type "'+r+'" does not exist. Using default getContent method');var c=n.children(".keditor-component-content");i=c.html()}var l=t("").html(i);return l.find("[data-dynamic-href]").each(function(){t(this).html("")}),i=l.html(),""+i+""},getContainerContent:function(n){e("getContainerContent",n);var o=this,i=(o.options,n.children(".keditor-container-inner").clone());return i.find("[data-type=container-content]").each(function(){var e=t(this);e.removeClass("keditor-container-content ui-droppable ui-sortable").removeAttr("id"),e.children(".keditor-component").each(function(){var e=t(this);e.replaceWith(o.getComponentContent(e))})}),""+i.html()+""}};var i={__init:function(n){return t(this).each(function(){var i=t(this);if(i.data("keditor"))e("KEditor is already initialized!");else{e("Initialze KEditor",i,n);var a=new o(i,n);i.data("keditor",a)}})},getContent:function(e){var n=t(this),o=n.data("keditor"),i=o.options,a=[];return n=i.iframeMode?o.body:n,n.find(".keditor-content-area").each(function(){var e="";t(this).children(".keditor-container").each(function(){var n=t(this);e+=o.getContainerContent(n,i)}),a.push(e)}),e?a:a.join("\n")},getOptions:function(){var e=t(this).data("keditor");return e.options}};t.keditor=o,t.fn.keditor=function(t){return i[t]&&"init"!==t?i[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void n("Method "+t+" does not exist on $.fn.keditor"):i.__init.apply(this,arguments);
-}}(jQuery);
-//# sourceMappingURL=keditor-1.1.3.min.js.map
diff --git a/dist/js/keditor-1.1.3.min.js.map b/dist/js/keditor-1.1.3.min.js.map
deleted file mode 100644
index 521df343..00000000
--- a/dist/js/keditor-1.1.3.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["keditor-1.1.3.js"],"names":["$","flog","KEditor","debug","navigator","appName","arguments","length","console","log","error","msg","Error","fn","draggable","droppable","sortable","target","options","this","extend","DEFAULTS","init","version","btnMoveContainerText","btnMoveComponentText","btnSettingContainerText","btnSettingComponentText","btnDuplicateContainerText","btnDuplicateComponentText","btnDeleteContainerText","btnDeleteComponentText","tabContainersText","tabContainersTitle","tabComponentsText","tabComponentsTitle","tabTooltipEnabled","extraTabs","defaultComponentType","snippetsUrl","snippetsListId","snippetsTooltipEnabled","snippetsTooltipPosition","snippetsFilterEnabled","snippetsCategoriesSeparator","iframeMode","contentAreasSelector","contentAreasWrapper","containerSettingEnabled","containerSettingInitFunction","containerSettingShowFunction","containerSettingHideFunction","onReady","onInitFrame","frame","frameHead","frameBody","onSidebarToggled","isOpened","onInitContentArea","contentArea","onContentChanged","event","onInitContainer","container","onBeforeContainerDeleted","selectedContainer","onContainerDeleted","onContainerChanged","changedContainer","onContainerDuplicated","originalContainer","newContainer","onContainerSelected","onContainerSnippetDropped","droppedContainer","onComponentReady","component","onInitComponent","onBeforeComponentDeleted","selectedComponent","onComponentDeleted","onComponentChanged","changedComponent","onComponentDuplicated","originalComponent","newComponent","onComponentSelected","onComponentSnippetDropped","droppedComponent","onBeforeDynamicContentLoad","dynamicElement","onDynamicContentLoaded","response","status","xhr","onDynamicContentError","components","blank","settingEnabled","prototype","self","initFrame","body","document","is","htmlContent","val","keditorWrapper","keditorWrapperId","generateId","after","attr","id","class","html","css","ajaxRequest","hasClass","initSidebar","addClass","initKEditorClicks","initContentAreas","call","type","timestamp","Date","getTime","initNiceScroll","niceScroll","cursorcolor","cursorwidth","railpadding","top","right","left","bottom","cursorborder","disablemutationobserver","originalContent","iframe","iframeId","iframeDoc","contents","iframeHead","find","iframeBody","styles","each","style","href","append","initSidebarToggler","ajax","dataType","url","success","resp","renderSnippets","initSnippets","initTabs","initTabsSwitcher","initSettingPanel","initSnippetsFilter","tooltip","jqXHR","lowerCaseType","toLowerCase","categories","filterHtml","i","tab","snippets","prepend","snippet","split","data","on","selectedCategory","value","filter","matched","dataCategories","inArray","removeClass","toggleSidebar","showSidebar","icon","e","preventDefault","snippetsContainerHtml","snippetsComponentHtml","snippetsContentHtml","snippetsContainerCategories","snippetsComponentCategories","content","trim","previewUrl","title","snippetHtml","concat","indexOf","dataAttributes","getDataAttributes","join","beautifyCategories","newArray","category","push","sort","snippetsList","helper","revert","connectToSortable","start","blur","stop","switcherWrapper","tabPaneWrapper","isPlainObject","tabName","tabData","text","switcherLis","tabPane","a","li","parent","activatedLi","activatedPane","targetDiv","getNiceScroll","hide","targetNiceScroll","show","resize","hideSettingPanel","settingForms","form","setSettingContainer","idSettingContainer","removeAttr","getSettingContainer","setSettingComponent","idSettingComponent","getSettingComponent","showSettingPanel","isComponent","activeForm","children","componentType","getComponentType","componentData","settingTitle","settingForm","initSettingForm","loadingText","initFunction","when","done","setTimeout","remove","showSettingForm","activeType","hideSettingForm","getContentAreas","contentAreas","empty","initContentArea","accept","tolerance","greedy","handle","items","connectWith","axis","receive","ui","item","snippetContent","replaceWith","initContainer","convertToContainer","contentData","isSection","wrapInner","wrap","settingBtn","containerId","containerContents","containerContent","initContainerContent","contentId","snippetContentElement","closest","initComponent","convertToComponent","isExisting","ignoreAttributes","isArray","get","attributes","name","replace","componentId","componentContent","isSettingEnabled","dynamicContentRequests","initDynamicContent","apply","then","getClickedElement","selector","sidebar","btn","getContainerContent","componentSnippets","currentLinkedContainerContents","add","confirm","settingComponent","settingComponentParent","deleteComponent","getComponentContent","destroy","dynamicHref","param","getContent","tempDiv","containerInner","clone","methods","__init","keditor","result","getOptions","method","Array","slice","jQuery"],"mappings":"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","file":"keditor-1.1.3.min.js","sourcesContent":["/**!\r\n * KEditor - Kademi content editor\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.3\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n *\r\n * Configuration:\r\n * @option {String} btnMoveContainerText Text content for move button of container\r\n * @option {String} btnMoveComponentText Text content for move button of component\r\n * @option {String} btnSettingContainerText Text content for setting button of container\r\n * @option {String} btnSettingComponentText Text content for setting button of component\r\n * @option {String} btnDuplicateContainerText Text content for duplicate button of container\r\n * @option {String} btnDuplicateComponentText Text content for duplicate button of component\r\n * @option {String} btnDeleteContainerText Text content for delete button of container\r\n * @option {String} btnDeleteComponentText Text content for delete button of component\r\n * @option {String} tabContainersText Text for Containers tab\r\n * @option {String} tabContainersTitle Title for Containers tab\r\n * @option {String} tabComponentsText Text for Components tab\r\n * @option {String} tabComponentsTitle Title for Components tab\r\n * @option {Boolean} tabTooltipEnabled Bootstrap Tooltip is enabled for Component and Container tab or not\r\n * @option {Object} extraTabs Extra tabs besides Containers and Components tabs in sidebar\r\n * Example: {\r\n * tabName: {\r\n * text: 'My Extra Tab #1',\r\n * title: 'My Extra Tab #1',\r\n * content: 'Here is content of My Extra Tab #1'\r\n * }\r\n * }\r\n * @option {String|Function} defaultComponentType Default component type of component. If type of component does not exist in KEditor.components, will be used 'defaultComponentType' as type of this component. If is function, argument is component - jQuery object of component\r\n * @option {String} snippetsUrl Url to snippets file\r\n * @option {String} snippetsListId Id of element which contains snippets. As default, value is \"keditor-snippets-list\" and KEditor will render snippets sidebar automatically. If you specific other id, only snippets will rendered and put into your element\r\n * @option {Boolean} snippetsTooltipEnabled Bootstrap tooltip is enable for snippet or not\r\n * @option {String} snippetsTooltipPosition Position of Bootstrap tooltip for snippet. Can be 'left', 'right', 'top' and 'bottom'\r\n * @option {Boolean} snippetsFilterEnabled Enable filtering snippets by categories or not\r\n * @option {String} snippetsCategoriesSeparator The separator character between each categories\r\n * @option {Boolean} iframeMode KEditor is created inside an iframe or not. Keditor will add all elements which have 'data-type=keditor-style' for iframe stylesheet. These elements can be 'link', 'style' or any tags. If these elements have 'href' attribute, will create link tag with href. If these elements do not have 'href' attribute, will create style tag with css rule is html code inside element\r\n * @option {String} contentAreasSelector Selector of content areas. If is null or selector does not match any elements, will create default content area and wrap all content inside it.\r\n * @option {String} contentAreasWrapper The wrapper element for all contents inside iframe. It's just for displaying purpose. If you want all contents inside iframe are appended into body tag\r\n * @option {Boolean} containerSettingEnabled Enable setting panel for container\r\n * @option {Function} containerSettingInitFunction Method will be called when initializing setting panel for container\r\n * @option {Function} containerSettingShowFunction Method will be called when setting panel for container is showed\r\n * @option {Function} containerSettingHideFunction Method will be called when setting panel for container is hidden\r\n * @option {Function} onReady Callback will be called after keditor instance is ready\r\n * @option {Function} onInitFrame Callback will be called after iframe and content areas wrapper inside it are created. Arguments: frame, frameHead, frameBody\r\n * @option {Function} onSidebarToggled Callback will be called after toggled sidebar. Arguments: isOpened\r\n * @option {Function} onInitContentArea Callback will be called when initializing content area. It can return array of jQuery objects which will be initialized as container in content area. By default, all first level sections under content area will be initialized. Arguments: contentArea\r\n * @option {Function} onContentChanged Callback will be called when content is changed. Includes add, delete, duplicate container or component. Or content of a component is changed. Arguments: event\r\n * @option {Function} onInitContainer Callback will be called when initializing container. It can return array of jQuery objects which will be initialized as editable components in container content (NOTE: these objects MUST be under elements which have attribute data-type=\"container-content\"). By default, all first level sections under container content will be initialized. Arguments: container\r\n * @option {Function} onBeforeContainerDeleted Callback will be called before container is deleted. Arguments: event, selectedContainer\r\n * @option {Function} onContainerDeleted Callback will be called after container and its components are already deleted. Arguments: event, selectedContainer\r\n * @option {Function} onContainerChanged Callback will be called when content of container is changed. It can be when container received new component from snippet or from other container. Or content of any components are changed or any components are deleted or duplicated. Arguments: event, changedContainer\r\n * @option {Function} onContainerDuplicated Callback will be called when a container is duplicated. Arguments: event, originalContainer, newContainer\r\n * @option {Function} onContainerSelected Callback will be called when a container is selected. Arguments: event, selectedContainer\r\n * @option {Function} onContainerSnippetDropped Callback will be called when a container snippet is dropped into content area. Arguments: event, newContainer, droppedContainer\r\n * @option {Function} onComponentReady Callback will be called after component is initialized. This callback is available or not is depend on component type handler.\r\n * @option {Function} onInitComponent Callback will be called when initializing component. Arguments: component\r\n * @option {Function} onBeforeComponentDeleted Callback will be called before a component is deleted. Arguments: event, selectedComponent\r\n * @option {Function} onComponentDeleted Callback will be called after a component is deleted. Arguments: event, selectedComponent\r\n * @option {Function} onComponentChanged Callback will be called when content of a component is changed. Arguments: event, changedComponent\r\n * @option {Function} onComponentDuplicated Callback will be called when a component is duplicated. Arguments: event, originalComponent, newComponent\r\n * @option {Function} onComponentSelected Callback will be called when a component is selected. Arguments: event, selectedComponent\r\n * @option {Function} onComponentSnippetDropped Callback will be called after a component snippet is dropped into a container. Arguments: event, newComponent, droppedComponent\r\n * @option {Function} onBeforeDynamicContentLoad Callback will be called before loading dynamic content. Arguments: dynamicElement, component\r\n * @option {Function} onDynamicContentLoaded Callback will be called after dynamic content is loaded. Arguments: dynamicElement, response, status, xhr\r\n * @option {Function} onDynamicContentError Callback will be called if loading dynamic content is error, abort or timeout. Arguments: dynamicElement, response, status, xhr\r\n */\r\n(function ($) {\r\n // Log function will print log message when \"KEditor.debug\" equals \"true\"\r\n var flog = function () {\r\n if (typeof (console) !== 'undefined' && KEditor.debug === true) {\r\n if (navigator.appName == 'Microsoft Internet Explorer') {\r\n // BM: Previous used JSON, but that crashed IE sometimes. So this is pretty crap, but at least safer\r\n if (arguments.length == 1) {\r\n console.log('[KEditor]', arguments[0]);\r\n } else if (arguments.length == 2) {\r\n console.log('[KEditor]', arguments[0], arguments[1]);\r\n } else if (arguments.length > 2) {\r\n console.log('[KEditor]', arguments[0], arguments[1], arguments[2]);\r\n }\r\n } else {\r\n console.log(['KEditor'], arguments);\r\n }\r\n }\r\n };\r\n\r\n // Throw error message\r\n var error = function (msg) {\r\n throw new Error('[KEditor] ' + msg);\r\n };\r\n\r\n // Check dependencies\r\n if (!$.fn.draggable) {\r\n error('$.fn.draggable does not exist. Please import $.fn.draggable into your document for continue using KEditor.');\r\n }\r\n if (!$.fn.droppable) {\r\n error('$.fn.droppable does not exist. Please import $.fn.droppable into your document for continue using KEditor.');\r\n }\r\n if (!$.fn.sortable) {\r\n error('$.fn.sortable does not exist. Please import $.fn.sortable into your document for continue using KEditor.');\r\n }\r\n\r\n // KEditor class\r\n var KEditor = function (target, options) {\r\n this.options = $.extend({}, KEditor.DEFAULTS, options);\r\n this.init(target);\r\n };\r\n\r\n // Turn on/off debug mode\r\n KEditor.debug = true;\r\n\r\n // Version of KEditor\r\n KEditor.version = '1.1.3';\r\n\r\n // Default configuration of KEditor\r\n KEditor.DEFAULTS = {\r\n btnMoveContainerText: '',\r\n btnMoveComponentText: '',\r\n btnSettingContainerText: '',\r\n btnSettingComponentText: '',\r\n btnDuplicateContainerText: '',\r\n btnDuplicateComponentText: '',\r\n btnDeleteContainerText: '',\r\n btnDeleteComponentText: '',\r\n tabContainersText: 'Containers',\r\n tabContainersTitle: 'Containers',\r\n tabComponentsText: 'Components',\r\n tabComponentsTitle: 'Components',\r\n tabTooltipEnabled: true,\r\n extraTabs: null,\r\n defaultComponentType: 'blank',\r\n snippetsUrl: 'snippets/default/snippets.html',\r\n snippetsListId: 'keditor-snippets-list',\r\n snippetsTooltipEnabled: true,\r\n snippetsTooltipPosition: 'left',\r\n snippetsFilterEnabled: true,\r\n snippetsCategoriesSeparator: ';',\r\n iframeMode: false,\r\n contentAreasSelector: null,\r\n contentAreasWrapper: '',\r\n containerSettingEnabled: false,\r\n containerSettingInitFunction: null,\r\n containerSettingShowFunction: null,\r\n containerSettingHideFunction: null,\r\n onReady: function () {\r\n },\r\n onInitFrame: function (frame, frameHead, frameBody) {\r\n },\r\n onSidebarToggled: function (isOpened) {\r\n },\r\n onInitContentArea: function (contentArea) {\r\n },\r\n onContentChanged: function (event) {\r\n },\r\n onInitContainer: function (container) {\r\n },\r\n onBeforeContainerDeleted: function (event, selectedContainer) {\r\n },\r\n onContainerDeleted: function (event, selectedContainer) {\r\n },\r\n onContainerChanged: function (event, changedContainer) {\r\n },\r\n onContainerDuplicated: function (event, originalContainer, newContainer) {\r\n },\r\n onContainerSelected: function (event, selectedContainer) {\r\n },\r\n onContainerSnippetDropped: function (event, newContainer, droppedContainer) {\r\n },\r\n onComponentReady: function (component) {\r\n },\r\n onInitComponent: function (component) {\r\n },\r\n onBeforeComponentDeleted: function (event, selectedComponent) {\r\n },\r\n onComponentDeleted: function (event, selectedComponent) {\r\n },\r\n onComponentChanged: function (event, changedComponent) {\r\n },\r\n onComponentDuplicated: function (event, originalComponent, newComponent) {\r\n },\r\n onComponentSelected: function (event, selectedComponent) {\r\n },\r\n onComponentSnippetDropped: function (event, newComponent, droppedComponent) {\r\n },\r\n onBeforeDynamicContentLoad: function (dynamicElement, component) {\r\n },\r\n onDynamicContentLoaded: function (dynamicElement, response, status, xhr) {\r\n },\r\n onDynamicContentError: function (dynamicElement, response, status, xhr) {\r\n }\r\n };\r\n\r\n // Component types\r\n KEditor.components = {\r\n blank: {\r\n settingEnabled: false\r\n }\r\n };\r\n\r\n // Export log methods;\r\n KEditor.log = flog;\r\n KEditor.error = error;\r\n\r\n KEditor.prototype = {\r\n init: function (target) {\r\n var self = this;\r\n var options = self.options;\r\n\r\n if (options.iframeMode) {\r\n target = self.initFrame(target);\r\n } else {\r\n self.body = $(document.body);\r\n\r\n if (target.is('textarea')) {\r\n flog('Target is textarea', target);\r\n\r\n var htmlContent = target.val();\r\n var keditorWrapper = $('');\r\n var keditorWrapperId = self.generateId('wrapper');\r\n\r\n target.after(keditorWrapper);\r\n keditorWrapper.attr({\r\n id: keditorWrapperId,\r\n class: 'keditor-wrapper'\r\n });\r\n flog('Id for keditor wrapper is: \"' + keditorWrapperId + '\"');\r\n\r\n keditorWrapper.html(htmlContent);\r\n target.css('display', 'none');\r\n target.attr('data-keditor-wrapper', '#' + keditorWrapperId);\r\n\r\n target = keditorWrapper;\r\n }\r\n }\r\n\r\n var body = self.body;\r\n var ajaxRequest;\r\n if (body.hasClass('initialized-snippets-list')) {\r\n flog('Snippets list is already initialized!');\r\n } else {\r\n ajaxRequest = self.initSidebar();\r\n body.addClass('initialized-snippets-list');\r\n }\r\n if (body.hasClass('initialized-click-event-handlers')) {\r\n flog('CLick event handlers is already initialized!');\r\n } else {\r\n self.initKEditorClicks();\r\n body.addClass('initialized-click-event-handlers');\r\n }\r\n\r\n self.initContentAreas(target);\r\n\r\n if (!ajaxRequest && typeof options.onReady === 'function') {\r\n options.onReady.call(self);\r\n }\r\n },\r\n\r\n generateId: function (type) {\r\n var timestamp = (new Date()).getTime();\r\n return 'keditor-' + type + '-' + timestamp;\r\n },\r\n\r\n initNiceScroll: function (target) {\r\n flog('initNiceScroll', target);\r\n\r\n if ($.fn.niceScroll) {\r\n flog('Initialize $.fn.niceScroll');\r\n target.niceScroll({\r\n cursorcolor: '#999',\r\n cursorwidth: 6,\r\n railpadding: {\r\n top: 0,\r\n right: 0,\r\n left: 0,\r\n bottom: 0\r\n },\r\n cursorborder: '',\r\n disablemutationobserver: true\r\n });\r\n } else {\r\n flog('$.fn.niceScroll does not exist. Use default sidebar.');\r\n }\r\n },\r\n\r\n initFrame: function (target) {\r\n flog('initFrame', target);\r\n\r\n var self = this;\r\n var options = self.options;\r\n var originalContent = target.html();\r\n var iframe = $('');\r\n var iframeId = self.generateId('frame');\r\n\r\n target.after(iframe);\r\n iframe.attr({\r\n 'id': iframeId,\r\n 'class': 'keditor-frame'\r\n });\r\n flog('Id for keditor frame is: \"' + iframeId + '\"');\r\n\r\n target.css('display', 'none');\r\n target.attr('data-keditor-frame', '#' + iframeId);\r\n\r\n var iframeDoc = iframe.contents();\r\n var iframeHead = iframeDoc.find('head');\r\n var iframeBody = iframeDoc.find('body');\r\n\r\n flog('Adding styles to iframe...');\r\n var styles = '';\r\n $('[data-type=\"keditor-style\"]').each(function () {\r\n var style = $(this);\r\n var href = style.attr('href') || style.attr('data-href') || '';\r\n\r\n if (href) {\r\n styles += '\\n';\r\n } else {\r\n styles += '\\n';\r\n }\r\n });\r\n flog('Styles: \\n' + styles);\r\n\r\n iframeHead.append(styles);\r\n flog('All styles are added');\r\n\r\n flog('Adding original content to iframe...');\r\n var contentAreasWrapper;\r\n if (options.contentAreasWrapper) {\r\n contentAreasWrapper = $(options.contentAreasWrapper);\r\n iframeBody.append(contentAreasWrapper);\r\n contentAreasWrapper.html(originalContent);\r\n } else {\r\n iframeBody.html(originalContent);\r\n }\r\n\r\n // In frame, have to use default snippets container\r\n options.snippetsListId = KEditor.DEFAULTS.snippetsListId;\r\n\r\n self.body = iframeBody;\r\n\r\n if (typeof options.onInitFrame === 'function') {\r\n options.onInitFrame.call(iframe, iframe, iframeHead, iframeBody);\r\n }\r\n\r\n return contentAreasWrapper || iframeBody;\r\n },\r\n\r\n initSidebar: function () {\r\n flog('initSidebar');\r\n\r\n var self = this;\r\n var options = self.options;\r\n var body = self.body;\r\n body.addClass('opened-keditor-sidebar');\r\n\r\n if (options.snippetsListId === KEditor.DEFAULTS.snippetsListId) {\r\n flog('Render default KEditor snippet container');\r\n\r\n body.append(\r\n '
' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
'\r\n );\r\n self.initSidebarToggler();\r\n } else {\r\n flog('Render KEditor snippets content after custom snippets list with id=\"' + options.snippetsListId + '\"');\r\n body.find('#' + options.snippetsListId).after('');\r\n }\r\n\r\n if (typeof options.snippetsUrl === 'string' && options.snippetsUrl.length > 0) {\r\n flog('Getting snippets form \"' + options.snippetsUrl + '\"...');\r\n\r\n return $.ajax({\r\n type: 'get',\r\n dataType: 'html',\r\n url: options.snippetsUrl,\r\n success: function (resp) {\r\n flog('Success in getting snippets', resp);\r\n\r\n self.renderSnippets(resp);\r\n self.initSnippets();\r\n self.initTabs();\r\n self.initTabsSwitcher();\r\n self.initSettingPanel();\r\n \r\n if (options.snippetsFilterEnabled) {\r\n self.initSnippetsFilter('Container');\r\n self.initSnippetsFilter('Component');\r\n }\r\n\r\n if (options.snippetsTooltipEnabled || options.tabTooltipEnabled) {\r\n flog('Initialize Bootstrap tooltip plugin');\r\n body.find('#' + options.snippetsListId).find('[data-toggle=\"tooltip\"]').tooltip();\r\n }\r\n\r\n if (typeof options.onReady === 'function') {\r\n options.onReady.call(self);\r\n }\r\n },\r\n error: function (jqXHR) {\r\n flog('Error when getting snippets', jqXHR);\r\n }\r\n });\r\n } else {\r\n error('\"snippetsUrl\" must be not null!');\r\n }\r\n },\r\n\r\n initSnippetsFilter: function (type) {\r\n flog('initSnippetsFilter');\r\n\r\n var self = this;\r\n var options = self.options;\r\n var body = self.body;\r\n var lowerCaseType = type.toLowerCase();\r\n var categories = self['snippets' + type + 'Categories'];\r\n\r\n var filterHtml = '';\r\n filterHtml += '
';\r\n filterHtml += ' ';\r\n filterHtml += '
';\r\n\r\n var tab = body.find('#keditor-' + lowerCaseType + '-snippets-tab');\r\n var snippets = tab.find('.keditor-snippet');\r\n tab.prepend(filterHtml);\r\n\r\n snippets.each(function () {\r\n var snippet = $(this);\r\n var categories = snippet.attr('data-categories') || '';\r\n categories = categories.split(options.snippetsCategoriesSeparator);\r\n\r\n snippet.data('categories', categories);\r\n });\r\n\r\n tab.find('.keditor-snippets-filter').on('change', function () {\r\n var selectedCategory = this.value;\r\n\r\n if (selectedCategory) {\r\n snippets.filter(function () {\r\n var snippet = $(this);\r\n var matched = false;\r\n var dataCategories = snippet.data('categories');\r\n\r\n if ($.inArray(selectedCategory, dataCategories) !== -1) {\r\n matched = true;\r\n }\r\n\r\n snippet[matched ? 'removeClass': 'addClass']('not-matched');\r\n\r\n return matched;\r\n });\r\n } else {\r\n snippets.removeClass('not-matched');\r\n }\r\n });\r\n },\r\n\r\n toggleSidebar: function (showSidebar) {\r\n flog('toggleSidebar', showSidebar);\r\n\r\n var self = this;\r\n var options = self.options;\r\n var body = self.body;\r\n var icon = body.find('#keditor-sidebar-toggler i');\r\n\r\n if (showSidebar) {\r\n body.addClass('opened-keditor-sidebar');\r\n icon.attr('class', 'fa fa-chevron-right')\r\n } else {\r\n body.removeClass('opened-keditor-sidebar');\r\n icon.attr('class', 'fa fa-chevron-left')\r\n }\r\n\r\n if (typeof options.onSidebarToggled === 'function') {\r\n options.onSidebarToggled.call(null, showSidebar);\r\n }\r\n },\r\n\r\n initSidebarToggler: function () {\r\n flog('initSidebarToggler');\r\n\r\n var self = this;\r\n var body = self.body;\r\n\r\n body.find('#keditor-sidebar-toggler').on('click', function (e) {\r\n e.preventDefault();\r\n\r\n self.toggleSidebar(!body.hasClass('opened-keditor-sidebar'));\r\n });\r\n },\r\n\r\n renderSnippets: function (resp) {\r\n flog('renderSnippets', resp);\r\n\r\n var self = this;\r\n var options = self.options;\r\n var body = self.body;\r\n\r\n var snippetsContainerHtml = '';\r\n var snippetsComponentHtml = '';\r\n var snippetsContentHtml = '';\r\n\r\n self.snippetsContainerCategories = [];\r\n self.snippetsComponentCategories = [];\r\n\r\n $('').html(resp).find('> div').each(function (i) {\r\n var snippet = $(this);\r\n var content = snippet.html().trim();\r\n var previewUrl = snippet.attr('data-preview');\r\n var type = snippet.attr('data-type');\r\n var title = snippet.attr('data-title');\r\n var snippetHtml = '';\r\n var categories = snippet.attr('data-categories') || '';\r\n\r\n flog('Snippet #' + i + ' type=' + type + ' categories=' + categories, previewUrl, content);\r\n\r\n snippetHtml += '';\r\n snippetHtml += ' ';\r\n snippetHtml += '';\r\n\r\n categories = categories.split(options.snippetsCategoriesSeparator);\r\n\r\n if (type === 'container') {\r\n snippetsContainerHtml += snippetHtml;\r\n self.snippetsContainerCategories = self.snippetsContainerCategories.concat(categories);\r\n } else if (type.indexOf('component') !== -1) {\r\n snippetsComponentHtml += snippetHtml;\r\n self.snippetsComponentCategories = self.snippetsComponentCategories.concat(categories);\r\n }\r\n\r\n var dataAttributes = self.getDataAttributes(snippet, ['data-preview', 'data-type', 'data-title'], true);\r\n snippetsContentHtml += '';\r\n });\r\n\r\n self.snippetsContainerCategories = self.beautifyCategories(self.snippetsContainerCategories);\r\n self.snippetsComponentCategories = self.beautifyCategories(self.snippetsComponentCategories);\r\n\r\n body.find('#' + options.snippetsListId).html(\r\n '
'
);
-
+
var dynamicContentRequests = [];
component.find('[data-dynamic-href]').each(function () {
var dynamicElement = $(this);
-
+
dynamicContentRequests.push(self.initDynamicContent(dynamicElement));
});
-
+
$.when.apply(null, dynamicContentRequests).then(function () {
if (typeof componentData.init === 'function') {
componentData.init.call(componentData, contentArea, container, component, self);
@@ -1271,11 +1289,11 @@
body.removeClass('highlighted-container-content');
flog('"init" function of component type "' + componentType + '" does not exist');
}
-
+
if (typeof options.onInitComponent === 'function') {
options.onInitComponent.call(contentArea, component);
}
-
+
component.addClass('keditor-initialized-component');
component.removeClass('keditor-initializing-component');
});
@@ -1287,11 +1305,11 @@
}
}
},
-
+
getClickedElement: function (event, selector) {
var target = $(event.target);
var closest = target.closest(selector);
-
+
if (target.is(selector)) {
return target;
} else if (closest.length > 0) {
@@ -1300,26 +1318,26 @@
return null;
}
},
-
+
initKEditorClicks: function () {
flog('initKEditorClicks');
-
+
var self = this;
var options = self.options;
var body = self.body;
-
+
body.on('click', function (e) {
var sidebar = self.getClickedElement(e, '#keditor-sidebar');
-
+
var container = self.getClickedElement(e, '.keditor-container');
if (container) {
flog('Click on .keditor-container', container);
-
+
if (!container.hasClass('showed-keditor-toolbar')) {
body.find('.keditor-container.showed-keditor-toolbar').removeClass('showed-keditor-toolbar');
body.find('.keditor-component.showed-keditor-toolbar').removeClass('showed-keditor-toolbar');
container.addClass('showed-keditor-toolbar');
-
+
var contentArea = container.parent();
if (typeof options.onContainerSelected === 'function') {
options.onContainerSelected.call(contentArea, e, container);
@@ -1331,15 +1349,15 @@
body.find('.keditor-component.showed-keditor-toolbar').removeClass('showed-keditor-toolbar');
}
}
-
+
var component = self.getClickedElement(e, '.keditor-component');
if (component) {
flog('Click on .keditor-component', component);
-
+
if (!component.hasClass('showed-keditor-toolbar')) {
body.find('.keditor-component.showed-keditor-toolbar').removeClass('showed-keditor-toolbar');
component.addClass('showed-keditor-toolbar');
-
+
var contentArea = component.parent();
if (typeof options.onComponentSelected === 'function') {
options.onComponentSelected.call(contentArea, e, component);
@@ -1351,14 +1369,14 @@
}
}
});
-
-
+
+
body.on('click', '.btn-container-setting', function (e) {
e.preventDefault();
-
+
var btn = $(this);
flog('Click on .btn-container-setting', btn);
-
+
var container = btn.closest('.keditor-container');
if (body.hasClass('opened-keditor-setting') && body.hasClass('opened-keditor-sidebar')) {
if (!container.is(self.getSettingContainer())) {
@@ -1370,51 +1388,51 @@
self.showSettingPanel(container);
}
});
-
+
body.on('click', '.btn-container-duplicate', function (e) {
e.preventDefault();
-
+
var btn = $(this);
flog('Click on .btn-container-duplicate', btn);
-
+
var container = btn.closest('.keditor-container');
var contentArea = container.parent();
var newContainer = $(self.getContainerContent(container));
-
+
container.after(newContainer);
self.convertToContainer(contentArea, newContainer);
-
+
var snippetsList = body.find('#' + options.snippetsListId);
var componentSnippets = snippetsList.find('.keditor-snippet[data-type^=component]');
var currentLinkedContainerContents = componentSnippets.draggable('option', 'connectToSortable');
componentSnippets.draggable('option', 'connectToSortable', currentLinkedContainerContents.add(newContainer.find('.keditor-container-content')));
-
+
flog('Container is duplicated');
-
+
if (typeof options.onContainerDuplicated === 'function') {
options.onContainerDuplicated.call(contentArea, container, newContainer);
}
-
+
if (typeof options.onContentChanged === 'function') {
options.onContentChanged.call(contentArea, e);
}
});
-
+
body.on('click', '.btn-container-delete', function (e) {
e.preventDefault();
-
+
var btn = $(this);
flog('Click on .btn-container-delete', btn);
-
+
if (confirm('Are you sure that you want to delete this container? This action can not be undo!')) {
var container = btn.closest('.keditor-container');
var components = container.find('.keditor-component');
var contentArea = container.parent();
-
+
if (typeof options.onBeforeContainerDeleted === 'function') {
options.onBeforeContainerDeleted.call(contentArea, e, container);
}
-
+
var settingComponent = self.getSettingComponent();
if (settingComponent) {
var settingComponentParent = settingComponent.closest('.keditor-container');
@@ -1426,31 +1444,31 @@
flog('Deleting container is setting container. Close setting panel for this container', container);
self.hideSettingPanel();
}
-
+
if (components.length > 0) {
components.each(function () {
self.deleteComponent($(this));
});
}
-
+
container.remove();
-
+
if (typeof options.onContainerDeleted === 'function') {
options.onContainerDeleted.call(contentArea, e, container);
}
-
+
if (typeof options.onContentChanged === 'function') {
options.onContentChanged.call(contentArea, e);
}
}
});
-
+
body.on('click', '.btn-component-setting', function (e) {
e.preventDefault();
-
+
var btn = $(this);
flog('Click on .btn-component-setting', btn);
-
+
var component = btn.closest('.keditor-component');
if (body.hasClass('opened-keditor-setting') && body.hasClass('opened-keditor-sidebar')) {
if (!component.is(self.getSettingComponent())) {
@@ -1462,76 +1480,76 @@
self.showSettingPanel(component);
}
});
-
+
body.on('click', '.btn-component-duplicate', function (e) {
e.preventDefault();
-
+
var btn = $(this);
flog('Click on .btn-component-duplicate', btn);
-
+
var component = btn.closest('.keditor-component');
var container = component.closest('.keditor-container');
var contentArea = container.parent();
var newComponent = $(self.getComponentContent(component));
-
+
component.after(newComponent);
self.convertToComponent(contentArea, container, newComponent);
-
+
flog('Component is duplicated');
-
+
if (typeof options.onComponentDuplicated === 'function') {
options.onComponentDuplicated.call(contentArea, component, newComponent);
}
-
+
if (typeof options.onContainerChanged === 'function') {
options.onContainerChanged.call(contentArea, e, container);
}
-
+
if (typeof options.onContentChanged === 'function') {
options.onContentChanged.call(contentArea, e);
}
});
-
+
body.on('click', '.btn-component-delete', function (e) {
e.preventDefault();
-
+
var btn = $(this);
flog('Click on .btn-component-delete', btn);
-
+
if (confirm('Are you sure that you want to delete this component? This action can not be undo!')) {
var component = btn.closest('.keditor-component');
var contentArea = component.closest('.keditor-content-area');
-
+
if (typeof options.onBeforeComponentDeleted === 'function') {
options.onBeforeComponentDeleted.call(contentArea, e, component);
}
-
+
if (self.getSettingComponent().is(component)) {
self.hideSettingPanel();
}
-
+
self.deleteComponent(component);
-
+
if (typeof options.onComponentDeleted === 'function') {
options.onComponentDeleted.call(contentArea, e, component);
}
-
+
if (typeof options.onContainerChanged === 'function') {
options.onContainerChanged.call(contentArea, e, component);
}
-
+
if (typeof options.onContentChanged === 'function') {
options.onContentChanged.call(contentArea, e);
}
}
});
},
-
+
deleteComponent: function (component) {
flog('deleteComponent', component);
-
+
var self = this;
-
+
var componentType = self.getComponentType(component);
var componentData = KEditor.components[componentType];
if (typeof componentData.destroy === 'function') {
@@ -1539,27 +1557,31 @@
} else {
flog('"destroy" function of component type "' + componentType + '" does not exist');
}
-
+
component.remove();
},
-
+
initDynamicContent: function (dynamicElement) {
flog('initDynamicContent', dynamicElement);
-
+
var self = this;
var options = self.options;
var component = dynamicElement.closest('.keditor-component');
var contentArea = dynamicElement.closest('.keditor-content-area');
-
+
+ if (!dynamicElement.attr('id')) {
+ dynamicElement.attr('id', self.generateId('dynamic-element'));
+ }
+
if (typeof options.onBeforeDynamicContentLoad === 'function') {
options.onBeforeDynamicContentLoad.call(contentArea, dynamicElement, component);
}
-
+
var dynamicHref = dynamicElement.attr('data-dynamic-href');
var data = self.getDataAttributes(component, ['data-type', 'data-dynamic-href'], false);
data = $.param(data);
flog('Dynamic href: ' + dynamicHref, 'Data: ' + data);
-
+
return $.ajax({
url: dynamicHref,
data: data,
@@ -1568,30 +1590,30 @@
success: function (response, status, xhr) {
flog('Dynamic content is loaded', dynamicElement, response, status, xhr);
dynamicElement.html(response);
-
+
if (typeof options.onDynamicContentLoaded === 'function') {
options.onDynamicContentLoaded.call(contentArea, dynamicElement, response, status, xhr);
}
},
error: function (response, status, xhr) {
flog('Error when loading dynamic content', dynamicElement, response, status, xhr);
-
+
if (typeof options.onDynamicContentError === 'function') {
options.onDynamicContentError.call(contentArea, dynamicElement, response, status, xhr);
}
}
});
},
-
+
getComponentContent: function (component) {
flog('getComponentContent', component);
-
+
var self = this;
var componentType = self.getComponentType(component);
var componentData = KEditor.components[componentType];
var dataAttributes = self.getDataAttributes(component, null, true);
var content;
-
+
if (typeof componentData.getContent === 'function') {
content = componentData.getContent.call(componentData, component, self);
} else {
@@ -1599,45 +1621,45 @@
var componentContent = component.children('.keditor-component-content');
content = componentContent.html();
}
-
+
var tempDiv = $('').html(content);
tempDiv.find('[data-dynamic-href]').each(function () {
$(this).html('');
});
content = tempDiv.html();
-
+
return '' + content + '';
},
-
+
getContainerContent: function (container) {
flog('getContainerContent', container);
-
+
var self = this;
var options = self.options;
var containerInner = container.children('.keditor-container-inner').clone();
-
+
containerInner.find('[data-type=container-content]').each(function () {
var containerContent = $(this);
containerContent.removeClass('keditor-container-content ui-droppable ui-sortable').removeAttr('id');
-
+
containerContent.children('.keditor-component').each(function () {
var component = $(this);
-
+
component.replaceWith(self.getComponentContent(component));
});
});
-
+
return '' + containerInner.html() + '';
}
-
+
};
-
+
// Plugin methods
var methods = {
__init: function (options) {
return $(this).each(function () {
var target = $(this);
-
+
if (target.data('keditor')) {
flog('KEditor is already initialized!');
} else {
@@ -1647,38 +1669,38 @@
}
});
},
-
+
getContent: function (inArray) {
var target = $(this);
var keditor = target.data('keditor');
var options = keditor.options;
var result = [];
target = options.iframeMode ? keditor.body : target;
-
+
target.find('.keditor-content-area').each(function () {
var html = '';
$(this).children('.keditor-container').each(function () {
var container = $(this);
-
+
html += keditor.getContainerContent(container, options);
});
-
+
result.push(html);
});
-
+
return inArray ? result : result.join('\n');
},
-
+
getOptions: function () {
var keditor = $(this).data('keditor');
-
+
return keditor.options;
}
};
-
+
// Export KEditor
$.keditor = KEditor;
-
+
// KEditor plugins
$.fn.keditor = function (method) {
if (methods[method] && method !== 'init') {
@@ -1689,5 +1711,5 @@
error('Method ' + method + ' does not exist on $.fn.keditor');
}
};
-
+
})(jQuery);
diff --git a/dist/js/keditor-1.1.4.min.js b/dist/js/keditor-1.1.4.min.js
new file mode 100644
index 00000000..7119c36e
--- /dev/null
+++ b/dist/js/keditor-1.1.4.min.js
@@ -0,0 +1,3 @@
+!function(t){var e=function(){"undefined"!=typeof console&&i.debug===!0&&("Microsoft Internet Explorer"==navigator.appName?1==arguments.length?console.log("[KEditor]",arguments[0]):2==arguments.length?console.log("[KEditor]",arguments[0],arguments[1]):arguments.length>2&&console.log("[KEditor]",arguments[0],arguments[1],arguments[2]):console.log(["KEditor"],arguments))},n=function(t){throw new Error("[KEditor] "+t)};t.fn.draggable||n("$.fn.draggable does not exist. Please import $.fn.draggable into your document for continue using KEditor."),t.fn.droppable||n("$.fn.droppable does not exist. Please import $.fn.droppable into your document for continue using KEditor."),t.fn.sortable||n("$.fn.sortable does not exist. Please import $.fn.sortable into your document for continue using KEditor.");var i=function(e,n){this.options=t.extend({},i.DEFAULTS,n),this.init(e)};i.debug=!0,i.version="1.1.4",i.DEFAULTS={niceScrollEnabled:!0,btnMoveContainerText:'',btnMoveComponentText:'',btnSettingContainerText:'',btnSettingComponentText:'',btnDuplicateContainerText:'',btnDuplicateComponentText:'',btnDeleteContainerText:'',btnDeleteComponentText:'',tabContainersText:"Containers",tabContainersTitle:"Containers",tabComponentsText:"Components",tabComponentsTitle:"Components",tabTooltipEnabled:!0,extraTabs:null,defaultComponentType:"blank",snippetsUrl:"snippets/default/snippets.html",snippetsListId:"keditor-snippets-list",snippetsTooltipEnabled:!0,snippetsTooltipPosition:"left",snippetsFilterEnabled:!0,snippetsCategoriesSeparator:";",iframeMode:!1,contentAreasSelector:null,contentAreasWrapper:'',containerSettingEnabled:!1,containerSettingInitFunction:null,containerSettingShowFunction:null,containerSettingHideFunction:null,onReady:function(){},onInitFrame:function(t,e,n){},onSidebarToggled:function(t){},onInitContentArea:function(t){},onContentChanged:function(t){},onInitContainer:function(t){},onBeforeContainerDeleted:function(t,e){},onContainerDeleted:function(t,e){},onContainerChanged:function(t,e){},onContainerDuplicated:function(t,e,n){},onContainerSelected:function(t,e){},onContainerSnippetDropped:function(t,e,n){},onComponentReady:function(t){},onInitComponent:function(t){},onBeforeComponentDeleted:function(t,e){},onComponentDeleted:function(t,e){},onComponentChanged:function(t,e){},onComponentDuplicated:function(t,e,n){},onComponentSelected:function(t,e){},onComponentSnippetDropped:function(t,e,n){},onBeforeDynamicContentLoad:function(t,e){},onDynamicContentLoaded:function(t,e,n,i){},onDynamicContentError:function(t,e,n,i){}},i.components={blank:{settingEnabled:!1}},i.log=e,i.error=n,i.prototype={init:function(n){var i=this,o=i.options;if(o.iframeMode)n=i.initFrame(n);else if(i.body=t(document.body),n.is("textarea")){e("Target is textarea",n);var a=n.val(),r=t(""),s=i.generateId("wrapper");n.after(r),r.attr({id:s,"class":"keditor-wrapper"}),r.html(a),n.css("display","none"),n.attr("data-keditor-wrapper","#"+s),n=r}var d,c=i.body;c.hasClass("initialized-snippets-list")?e("Snippets list is already initialized!"):(d=i.initSidebar(),c.addClass("initialized-snippets-list")),c.hasClass("initialized-click-event-handlers")?e("CLick event handlers is already initialized!"):(i.initKEditorClicks(),c.addClass("initialized-click-event-handlers")),i.initContentAreas(n),d||"function"!=typeof o.onReady||o.onReady.call(i)},generateId:function(t){var e=(new Date).getTime();return"keditor-"+t+"-"+e},initNiceScroll:function(n){e("initNiceScroll",n),t.fn.niceScroll&&this.options.niceScrollEnabled?(e("Initialize $.fn.niceScroll"),n.niceScroll({cursorcolor:"#999",cursorwidth:6,railpadding:{top:0,right:0,left:0,bottom:0},cursorborder:"",disablemutationobserver:!0})):e("$.fn.niceScroll does not exist. Use default sidebar.")},initFrame:function(n){e("initFrame",n);var o=this,a=o.options,r=n.html(),s=t(""),d=o.generateId("frame");n.after(s),s.attr({id:d,"class":"keditor-frame"}),n.css("display","none"),n.attr("data-keditor-frame","#"+d);var c=s.contents(),l=c.find("head"),p=c.find("body");e("Adding styles to iframe...");var f="";t('[data-type="keditor-style"]').each(function(){var e=t(this),n=e.attr("href")||e.attr("data-href")||"";f+=n?'\n':'\n"}),e("Styles: \n"+f),l.append(f),e("All styles are added"),e("Adding original content to iframe...");var g;return a.contentAreasWrapper?(g=t(a.contentAreasWrapper),p.append(g),g.html(r)):p.html(r),a.snippetsListId=i.DEFAULTS.snippetsListId,o.body=p,"function"==typeof a.onInitFrame&&a.onInitFrame.call(s,s,l,p),g||p},initSidebar:function(){e("initSidebar");var o=this,a=o.options,r=o.body;return r.addClass("opened-keditor-sidebar"),a.snippetsListId===i.DEFAULTS.snippetsListId?(e("Render default KEditor snippet container"),r.append('
'),o.initSidebarToggler()):(e('Render KEditor snippets content after custom snippets list with id="'+a.snippetsListId+'"'),r.find("#"+a.snippetsListId).after('')),"string"==typeof a.snippetsUrl&&a.snippetsUrl.length>0?(e('Getting snippets form "'+a.snippetsUrl+'"...'),t.ajax({type:"get",dataType:"html",url:a.snippetsUrl,success:function(t){e("Success in getting snippets",t),o.renderSnippets(t),o.initSnippets(),o.initTabs(),o.initTabsSwitcher(),o.initSettingPanel(),a.snippetsFilterEnabled&&(o.initSnippetsFilter("Container"),o.initSnippetsFilter("Component")),(a.snippetsTooltipEnabled||a.tabTooltipEnabled)&&(e("Initialize Bootstrap tooltip plugin"),r.find("#"+a.snippetsListId).find('[data-toggle="tooltip"]').tooltip()),"function"==typeof a.onReady&&a.onReady.call(o)},error:function(t){e("Error when getting snippets",t)}})):void n('"snippetsUrl" must be not null!')},initSnippetsFilter:function(n){e("initSnippetsFilter",n);var i=this,o=i.options,a=i.body,r=n.toLowerCase(),s=i["snippets"+n+"Categories"],d="";d+='
',d+=' ',d+=' ",d+="
";var l=a.find("#keditor-"+r+"-snippets-tab"),p=l.find(".keditor-snippet");l.prepend(d),p.each(function(){var e=t(this),n=e.attr("data-categories")||"",i=n.toLowerCase();n=n.split(o.snippetsCategoriesSeparator),i=i.split(o.snippetsCategoriesSeparator),e.data("categories",n),e.data("categoriesFilter",i)});var f=l.find(".keditor-snippets-search"),g=l.find(".keditor-snippets-filter"),C=function(){var n=(g.val()||"").toLowerCase(),i=(f.val()||"").toLowerCase();e('Do filter with selected category is "'+n+'" and search text is "'+i+'"'),n||i?(e("Filtering snippets"),p.each(function(){var e=t(this),o=e.data("categoriesFilter"),a=o.join(";"),r=0;if(n&&-1===t.inArray(n,o)&&r++,i){var s=e.attr("title").toLowerCase();-1===s.indexOf(i)&&-1===a.indexOf(i)&&r++}e[0===r?"removeClass":"addClass"]("not-matched")})):(e("Show all snippets"),p.removeClass("not-matched"))};g.on("change",function(){C()});var m;f.on("keydown",function(){clearTimeout(m),m=setTimeout(function(){C()},200)})},toggleSidebar:function(t){e("toggleSidebar",t);var n=this,i=n.options,o=n.body,a=o.find("#keditor-sidebar-toggler i");t?(o.addClass("opened-keditor-sidebar"),a.attr("class","fa fa-chevron-right")):(o.removeClass("opened-keditor-sidebar"),a.attr("class","fa fa-chevron-left")),"function"==typeof i.onSidebarToggled&&i.onSidebarToggled.call(null,t)},initSidebarToggler:function(){e("initSidebarToggler");var t=this,n=t.body;n.find("#keditor-sidebar-toggler").on("click",function(e){e.preventDefault(),t.toggleSidebar(!n.hasClass("opened-keditor-sidebar"))})},renderSnippets:function(n){e("renderSnippets",n);var i=this,o=i.options,a=i.body,r="",s="",d="";i.snippetsContainerCategories=[],i.snippetsComponentCategories=[],t("").html(n).find("> div").each(function(n){var a=t(this),c=a.html().trim(),l=a.attr("data-preview"),p=a.attr("data-type"),f=a.attr("data-keditor-title"),g="",C=a.attr("data-categories")||"";e("Snippet #"+n+" type="+p+" categories="+C,l,c),g+='',g+=' ',g+="",C=C.split(o.snippetsCategoriesSeparator),"container"===p?(r+=g,i.snippetsContainerCategories=i.snippetsContainerCategories.concat(C)):-1!==p.indexOf("component")&&(s+=g,i.snippetsComponentCategories=i.snippetsComponentCategories.concat(C));var m=i.getDataAttributes(a,["data-preview","data-type","data-keditor-title","data-categories"],!0);d+='"}),i.snippetsContainerCategories=i.beautifyCategories(i.snippetsContainerCategories),i.snippetsComponentCategories=i.beautifyCategories(i.snippetsComponentCategories),a.find("#"+o.snippetsListId).html('
")}}n.initNiceScroll(r.find(".keditor-snippets-inner"))},initTabsSwitcher:function(){e("initTabsSwitcher");var n=this,i=n.body,o=i.find("#keditor-snippets-type-switcher li"),a=i.find("#keditor-snippets-container .tab-pane");o.find("a").on("click",function(e){e.preventDefault();var r=t(this),s=r.parent(),d=r.attr("href");if(!s.hasClass("active")){var c=o.filter(".active"),l=a.filter(".active"),p=i.find(d);if(c.removeClass("active"),l.removeClass("active"),s.addClass("active"),p.addClass("active"),t.fn.niceScroll&&n.options.niceScrollEnabled){l.getNiceScroll().hide();var f=p.getNiceScroll();f.show(),f.resize()}}})},initSettingPanel:function(){e("initSettingPanel");var i=this,o=i.options,a=i.body;a.find("#keditor-setting-closer").on("click",function(t){t.preventDefault(),i.hideSettingPanel()});var r=a.find("#keditor-setting-forms");if(i.initNiceScroll(r),o.containerSettingEnabled===!0)if("function"==typeof o.containerSettingInitFunction){var s=t('');r.append(s),e("Initialize container setting panel"),o.containerSettingInitFunction.call(i,s,i)}else n('"containerSettingInitFunction" is not function!')},setSettingContainer:function(t){e("setSettingContainer",t);var n=this,i=n.body;if(t){var o=t.attr("id");i.attr("data-setting-container",o)}else i.removeAttr("data-setting-container")},getSettingContainer:function(){e("getSettingContainer");var t=this,n=t.body,i=n.attr("data-setting-container");return n.find("#"+i)},setSettingComponent:function(t){e("setSettingComponent",t);var n=this,i=n.body;if(t){var o=t.attr("id");i.attr("data-setting-component",o)}else i.removeAttr("data-setting-component")},getSettingComponent:function(){e("getSettingComponent");var t=this,n=t.body,i=n.attr("data-setting-component");return n.find("#"+i)},showSettingPanel:function(n){e("showSettingPanel",n);var o=this,a=o.options,r=o.body,s=n.is(".keditor-component"),d=r.find("#keditor-setting-forms").children(".active");if(d.removeClass("active"),s){o.setSettingComponent(n),o.setSettingContainer(null);var c=o.getComponentType(n),l=i.components[c];r.find("#keditor-setting-title").html(l.settingTitle);var p=r.find("#keditor-setting-forms"),f=r.find("#keditor-setting-"+c);if(0===f.length){var l=i.components[c];if("function"==typeof l.initSettingForm){f=t('');var g=t("").html("Loading...");p.append(f),f.append(g),e('Initializing setting form for component type "'+c+'"');var C=l.initSettingForm.call(l,f,o);t.when(C).done(function(){e('Initialized setting form for component type "'+c+'"'),setTimeout(function(){g.remove(),"function"==typeof l.showSettingForm?(e('Show setting form of component type "'+c+'"'),l.showSettingForm.call(l,f,n,o)):e('"showSettingForm" function of component type "'+c+'" does not exist')},100)})}else e('"initSettingForm" function of component type "'+c+'" does not exist')}else"function"==typeof l.showSettingForm?(e('Show setting form of component type "'+c+'"'),l.showSettingForm.call(l,f,n,o)):e('"showSettingForm" function of component type "'+c+'" does not exist'),f.addClass("active")}else{o.setSettingContainer(n),o.setSettingComponent(null),r.find("#keditor-setting-title").html("Container Settings");var f=r.find("#keditor-container-setting");"function"==typeof a.containerSettingShowFunction?(e("Show setting form of container"),a.containerSettingShowFunction.call(o,f,n,o)):e('"containerSettingShowFunction" does not exist'),f.addClass("active")}o.toggleSidebar(!0),r.addClass("opened-keditor-setting")},hideSettingPanel:function(){e("hideSettingPanel");var t=this,n=t.options,o=t.body;o.removeClass("opened-keditor-setting");var a=o.find("#keditor-setting-forms").children(".active");if(a.length>0){if(a.is("#keditor-container-setting"))"function"==typeof n.containerSettingHideFunction?(e("Hide setting form of container"),n.containerSettingHideFunction.call(t,a,t)):e('"containerSettingHideFunction" does not exist');else{var r=a.attr("data-type"),s=i.components[r];"function"==typeof s.hideSettingForm?(e('Hide setting form of component type "'+r+'"'),s.hideSettingForm.call(s,a,t)):e('"hideSettingForm" function of component type "'+r+'" does not exist')}a.removeClass("active")}o.removeClass("opened-keditor-setting"),t.setSettingComponent(null),t.setSettingContainer(null)},getContentAreas:function(n){e("getContentAreas",n);var i,o=this,a=o.options;if(a.contentAreasSelector&&(i=n.find(a.contentAreasSelector)),!i||0===i.length){e("Do not find any content area. Creating default content area..."),i=t("");var r=n.html();i.html(r),n.empty().append(i)}return i},initContentAreas:function(n){e("initContentAreas",n);var i=this,o=i.getContentAreas(n);o.each(function(){var e=t(this);e.attr("id")||e.attr("id",i.generateId("content-area")),i.initContentArea(e),e.data("keditor",i)})},initContentArea:function(n){e("initContentArea",n);var i=this,o=i.options,a=i.body;if(n.addClass("keditor-content-area"),e("Initialize $.fn.droppable for content area"),n.droppable({accept:".keditor-snippet[data-type=container]",tolerance:"pointer",greedy:!0}),e("Initialize $.fn.sortable for content area"),n.sortable({handle:".btn-container-reposition",items:"> section",connectWith:".keditor-content-area",axis:"y",tolerance:"pointer",sort:function(){t(this).removeClass("ui-state-default")},receive:function(r,s){e("On received snippet",r,s);var d=s.helper,c=s.item;if(c.is(".keditor-snippet")){var l=a.find(c.attr("data-snippet")).html();e("Snippet content",l);var p=t(''+l+"");d.replaceWith(p),p.hasClass("showed-keditor-toolbar")||(t(".keditor-container.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),p.addClass("showed-keditor-toolbar")),"function"==typeof o.onContainerSnippetDropped&&o.onContainerSnippetDropped.call(n,r,p,s.item),i.initContainer(n,p)}i.hideSettingPanel(),"function"==typeof o.onContentChanged&&o.onContentChanged.call(n,r)}}),e("Initialize existing containers in content area"),n.children("section").each(function(){i.convertToContainer(n,t(this))}),"function"==typeof o.onInitContentArea){var r=o.onInitContentArea.call(n,n);r&&r.length>0&&t.each(r,function(){i.convertToContainer(n,t(this))})}},convertToContainer:function(t,n){e("convertToContainer",t,n);var i,o=this,a=n.is("section");a?(n.addClass("keditor-container"),n.wrapInner(''),i=n):(n.wrap(''),i=n.parent().parent()),o.initContainer(t,i)},initContainer:function(n,i){e("initContainer",n,i);var o=this,a=o.options;if(i.hasClass("keditor-initialized-container")&&i.hasClass("keditor-initializing-container"))e(i.hasClass("keditor-initialized-container")?"Container is already initialized!":"Container is initializing...");else{i.addClass("keditor-initializing-container");var r="";a.containerSettingEnabled===!0&&(r=''+a.btnSettingContainerText+""),e("Render KEditor toolbar for container",i),i.append('
"),i.attr("id",o.generateId("container"));var s=i.find('[data-type="container-content"]');e("Initialize "+s.length+" container content(s)"),s.each(function(){var e=t(this);o.initContainerContent(n,i,e)}),"function"==typeof a.onInitContainer&&a.onInitContainer.call(n,i),i.addClass("keditor-initialized-container"),i.removeClass("keditor-initializing-container")}},initContainerContent:function(n,i,o){e("initContainerContent",n,i,o);var a=this,r=a.options,s=a.body;o.addClass("keditor-container-content"),o.attr("id",a.generateId("container-content")),e("Initialize $.fn.droppable for container content"),o.droppable({accept:".keditor-snippet[data-type=component]",tolerance:"pointer",greedy:!0}),e("Initialize $.fn.sortable for container content"),o.sortable({handle:".btn-component-reposition",items:"> section",connectWith:".keditor-container-content",tolerance:"pointer",sort:function(){t(this).removeClass("ui-state-default")},receive:function(i,o){e("On received snippet",i,o);var d,c=o.helper,l=o.item;if(l.is(".keditor-snippet")){var p=s.find(l.attr("data-snippet")),f=p.html(),g=l.attr("data-type");e("Snippet content",f);var C=a.getDataAttributes(p,null,!0),m=t(''+f+"");c.replaceWith(m),d=m.closest(".keditor-container"),"function"==typeof r.onComponentSnippetDropped&&r.onComponentSnippetDropped.call(n,i,m,o.item),a.initComponent(n,d,m)}else d=l.closest(".keditor-container");d.hasClass("showed-keditor-toolbar")||(t(".keditor-container.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),d.addClass("showed-keditor-toolbar")),"function"==typeof r.onContainerChanged&&r.onContainerChanged.call(n,i,d),"function"==typeof r.onContentChanged&&r.onContentChanged.call(n,i)}}),e("Initialize existing components inside container content"),o.children().each(function(){var e=t(this);a.convertToComponent(n,i,e,!0)})},convertToComponent:function(t,n,i,o){e("convertToComponent",t,n,i,o);var a,r=this,s=i.is("section");s?(i.addClass("keditor-component"),i.wrapInner(''),a=i):(i.wrap(''),a=i.parent().parent()),o&&a.addClass("existing-component"),r.initComponent(t,n,a)},getDataAttributes:function(n,i,o){e("getDataAttributes",n,i,o);var a=o?[]:{};return i||(i=[]),t.each(n.get(0).attributes,function(e,n){0===n.name.indexOf("data-")&&-1===t.inArray(n.name,i)&&(o?a.push(n.name+'="'+n.value+'"'):a[n.name]=n.value)}),a},getComponentType:function(t){e("getComponentType",t);var o=this,a=o.options,r=t.attr("data-type"),s=r?r.replace("component-",""):"";return s&&s in i.components?s:(e(s?'Component type "'+s+'" does not exist':"This component does not contain data-type attribute"),"string"==typeof a.defaultComponentType?s=a.defaultComponentType:"function"==typeof a.defaultComponentType&&(s=a.defaultComponentType.call(t,t)),s||n("Component type is undefined!"),e("Fallback to defaultComponentType: "+s),s)},initComponent:function(n,o,a){e("initComponent",n,o,a);var r=this,s=r.options,d=r.body;if(a.hasClass("keditor-initialized-component")&&a.hasClass("keditor-initializing-component"))e(a.hasClass("keditor-initialized-component")?"Component is already initialized!":"Component is initializing...");else{a.addClass("keditor-initializing-component"),a.attr("id",r.generateId("component"));var c=a.children(".keditor-component-content");c.attr("id",r.generateId("component-content"));var l=r.getComponentType(a);e("Component type: "+l);var p=i.components[l],f=p.settingEnabled,g="";f&&(g=''+s.btnSettingComponentText+""),e("Render KEditor toolbar for component",a),a.append('
");var C=[];a.find("[data-dynamic-href]").each(function(){var e=t(this);C.push(r.initDynamicContent(e))}),t.when.apply(null,C).then(function(){"function"==typeof p.init?p.init.call(p,n,o,a,r):(d.removeClass("highlighted-container-content"),e('"init" function of component type "'+l+'" does not exist')),"function"==typeof s.onInitComponent&&s.onInitComponent.call(n,a),a.addClass("keditor-initialized-component"),a.removeClass("keditor-initializing-component")})}},getClickedElement:function(e,n){var i=t(e.target),o=i.closest(n);return i.is(n)?i:o.length>0?o:null},initKEditorClicks:function(){e("initKEditorClicks");var n=this,i=n.options,o=n.body;o.on("click",function(t){var a=n.getClickedElement(t,"#keditor-sidebar"),r=n.getClickedElement(t,".keditor-container");if(r){if(e("Click on .keditor-container",r),!r.hasClass("showed-keditor-toolbar")){o.find(".keditor-container.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),o.find(".keditor-component.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),r.addClass("showed-keditor-toolbar");var s=r.parent();"function"==typeof i.onContainerSelected&&i.onContainerSelected.call(s,t,r)}}else a||(o.find(".keditor-container.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),o.find(".keditor-component.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"));var d=n.getClickedElement(t,".keditor-component");if(d){if(e("Click on .keditor-component",d),!d.hasClass("showed-keditor-toolbar")){o.find(".keditor-component.showed-keditor-toolbar").removeClass("showed-keditor-toolbar"),d.addClass("showed-keditor-toolbar");var s=d.parent();"function"==typeof i.onComponentSelected&&i.onComponentSelected.call(s,t,d)}}else a||o.find(".keditor-component.showed-keditor-toolbar").removeClass("showed-keditor-toolbar")}),o.on("click",".btn-container-setting",function(i){i.preventDefault();var a=t(this);e("Click on .btn-container-setting",a);var r=a.closest(".keditor-container");o.hasClass("opened-keditor-setting")&&o.hasClass("opened-keditor-sidebar")&&r.is(n.getSettingContainer())?n.hideSettingPanel():n.showSettingPanel(r)}),o.on("click",".btn-container-duplicate",function(a){a.preventDefault();var r=t(this);e("Click on .btn-container-duplicate",r);var s=r.closest(".keditor-container"),d=s.parent(),c=t(n.getContainerContent(s));s.after(c),n.convertToContainer(d,c);var l=o.find("#"+i.snippetsListId),p=l.find(".keditor-snippet[data-type^=component]"),f=p.draggable("option","connectToSortable");p.draggable("option","connectToSortable",f.add(c.find(".keditor-container-content"))),e("Container is duplicated"),"function"==typeof i.onContainerDuplicated&&i.onContainerDuplicated.call(d,s,c),"function"==typeof i.onContentChanged&&i.onContentChanged.call(d,a)}),o.on("click",".btn-container-delete",function(o){o.preventDefault();var a=t(this);if(e("Click on .btn-container-delete",a),confirm("Are you sure that you want to delete this container? This action can not be undo!")){var r=a.closest(".keditor-container"),s=r.find(".keditor-component"),d=r.parent();"function"==typeof i.onBeforeContainerDeleted&&i.onBeforeContainerDeleted.call(d,o,r);var c=n.getSettingComponent();if(c){var l=c.closest(".keditor-container");l.is(r)&&(e("Deleting container is container of setting container. Close setting panel for this setting component",c),n.hideSettingPanel())}else n.getSettingContainer().is(r)&&(e("Deleting container is setting container. Close setting panel for this container",r),n.hideSettingPanel());s.length>0&&s.each(function(){n.deleteComponent(t(this))}),r.remove(),"function"==typeof i.onContainerDeleted&&i.onContainerDeleted.call(d,o,r),"function"==typeof i.onContentChanged&&i.onContentChanged.call(d,o)}}),o.on("click",".btn-component-setting",function(i){i.preventDefault();var a=t(this);e("Click on .btn-component-setting",a);var r=a.closest(".keditor-component");o.hasClass("opened-keditor-setting")&&o.hasClass("opened-keditor-sidebar")&&r.is(n.getSettingComponent())?n.hideSettingPanel():n.showSettingPanel(r)}),o.on("click",".btn-component-duplicate",function(o){o.preventDefault();var a=t(this);e("Click on .btn-component-duplicate",a);var r=a.closest(".keditor-component"),s=r.closest(".keditor-container"),d=s.parent(),c=t(n.getComponentContent(r));r.after(c),n.convertToComponent(d,s,c),e("Component is duplicated"),"function"==typeof i.onComponentDuplicated&&i.onComponentDuplicated.call(d,r,c),"function"==typeof i.onContainerChanged&&i.onContainerChanged.call(d,o,s),"function"==typeof i.onContentChanged&&i.onContentChanged.call(d,o)}),o.on("click",".btn-component-delete",function(o){o.preventDefault();var a=t(this);if(e("Click on .btn-component-delete",a),confirm("Are you sure that you want to delete this component? This action can not be undo!")){var r=a.closest(".keditor-component"),s=r.closest(".keditor-content-area");"function"==typeof i.onBeforeComponentDeleted&&i.onBeforeComponentDeleted.call(s,o,r),n.getSettingComponent().is(r)&&n.hideSettingPanel(),n.deleteComponent(r),"function"==typeof i.onComponentDeleted&&i.onComponentDeleted.call(s,o,r),"function"==typeof i.onContainerChanged&&i.onContainerChanged.call(s,o,r),"function"==typeof i.onContentChanged&&i.onContentChanged.call(s,o)}})},deleteComponent:function(t){e("deleteComponent",t);var n=this,o=n.getComponentType(t),a=i.components[o];"function"==typeof a.destroy?a.destroy.call(a,t,n):e('"destroy" function of component type "'+o+'" does not exist'),t.remove()},initDynamicContent:function(n){e("initDynamicContent",n);var i=this,o=i.options,a=n.closest(".keditor-component"),r=n.closest(".keditor-content-area");n.attr("id")||n.attr("id",i.generateId("dynamic-element")),"function"==typeof o.onBeforeDynamicContentLoad&&o.onBeforeDynamicContentLoad.call(r,n,a);var s=n.attr("data-dynamic-href"),d=i.getDataAttributes(a,["data-type","data-dynamic-href"],!1);return d=t.param(d),e("Dynamic href: "+s,"Data: "+d),t.ajax({url:s,data:d,type:"GET",dataType:"HTML",success:function(t,i,a){e("Dynamic content is loaded",n,t,i,a),n.html(t),"function"==typeof o.onDynamicContentLoaded&&o.onDynamicContentLoaded.call(r,n,t,i,a)},error:function(t,i,a){e("Error when loading dynamic content",n,t,i,a),"function"==typeof o.onDynamicContentError&&o.onDynamicContentError.call(r,n,t,i,a)}})},getComponentContent:function(n){e("getComponentContent",n);var o,a=this,r=a.getComponentType(n),s=i.components[r],d=a.getDataAttributes(n,null,!0);if("function"==typeof s.getContent)o=s.getContent.call(s,n,a);else{e('"getContent" function of component type "'+r+'" does not exist. Using default getContent method');var c=n.children(".keditor-component-content");o=c.html()}var l=t("").html(o);return l.find("[data-dynamic-href]").each(function(){t(this).html("")}),o=l.html(),""+o+""},getContainerContent:function(n){e("getContainerContent",n);var i=this,o=(i.options,n.children(".keditor-container-inner").clone());return o.find("[data-type=container-content]").each(function(){var e=t(this);e.removeClass("keditor-container-content ui-droppable ui-sortable").removeAttr("id"),e.children(".keditor-component").each(function(){var e=t(this);e.replaceWith(i.getComponentContent(e))})}),""+o.html()+""}};var o={__init:function(n){return t(this).each(function(){var o=t(this);if(o.data("keditor"))e("KEditor is already initialized!");else{e("Initialze KEditor",o,n);var a=new i(o,n);o.data("keditor",a)}})},getContent:function(e){var n=t(this),i=n.data("keditor"),o=i.options,a=[];
+return n=o.iframeMode?i.body:n,n.find(".keditor-content-area").each(function(){var e="";t(this).children(".keditor-container").each(function(){var n=t(this);e+=i.getContainerContent(n,o)}),a.push(e)}),e?a:a.join("\n")},getOptions:function(){var e=t(this).data("keditor");return e.options}};t.keditor=i,t.fn.keditor=function(t){return o[t]&&"init"!==t?o[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void n("Method "+t+" does not exist on $.fn.keditor"):o.__init.apply(this,arguments)}}(jQuery);
+//# sourceMappingURL=keditor-1.1.4.min.js.map
diff --git a/dist/js/keditor-1.1.4.min.js.map b/dist/js/keditor-1.1.4.min.js.map
new file mode 100644
index 00000000..95098d41
--- /dev/null
+++ b/dist/js/keditor-1.1.4.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["keditor-1.1.4.js"],"names":["$","flog","KEditor","debug","navigator","appName","arguments","length","console","log","error","msg","Error","fn","draggable","droppable","sortable","target","options","this","extend","DEFAULTS","init","version","niceScrollEnabled","btnMoveContainerText","btnMoveComponentText","btnSettingContainerText","btnSettingComponentText","btnDuplicateContainerText","btnDuplicateComponentText","btnDeleteContainerText","btnDeleteComponentText","tabContainersText","tabContainersTitle","tabComponentsText","tabComponentsTitle","tabTooltipEnabled","extraTabs","defaultComponentType","snippetsUrl","snippetsListId","snippetsTooltipEnabled","snippetsTooltipPosition","snippetsFilterEnabled","snippetsCategoriesSeparator","iframeMode","contentAreasSelector","contentAreasWrapper","containerSettingEnabled","containerSettingInitFunction","containerSettingShowFunction","containerSettingHideFunction","onReady","onInitFrame","frame","frameHead","frameBody","onSidebarToggled","isOpened","onInitContentArea","contentArea","onContentChanged","event","onInitContainer","container","onBeforeContainerDeleted","selectedContainer","onContainerDeleted","onContainerChanged","changedContainer","onContainerDuplicated","originalContainer","newContainer","onContainerSelected","onContainerSnippetDropped","droppedContainer","onComponentReady","component","onInitComponent","onBeforeComponentDeleted","selectedComponent","onComponentDeleted","onComponentChanged","changedComponent","onComponentDuplicated","originalComponent","newComponent","onComponentSelected","onComponentSnippetDropped","droppedComponent","onBeforeDynamicContentLoad","dynamicElement","onDynamicContentLoaded","response","status","xhr","onDynamicContentError","components","blank","settingEnabled","prototype","self","initFrame","body","document","is","htmlContent","val","keditorWrapper","keditorWrapperId","generateId","after","attr","id","class","html","css","ajaxRequest","hasClass","initSidebar","addClass","initKEditorClicks","initContentAreas","call","type","timestamp","Date","getTime","initNiceScroll","niceScroll","cursorcolor","cursorwidth","railpadding","top","right","left","bottom","cursorborder","disablemutationobserver","originalContent","iframe","iframeId","iframeDoc","contents","iframeHead","find","iframeBody","styles","each","style","href","append","initSidebarToggler","ajax","dataType","url","success","resp","renderSnippets","initSnippets","initTabs","initTabsSwitcher","initSettingPanel","initSnippetsFilter","tooltip","jqXHR","lowerCaseType","toLowerCase","categories","filterHtml","i","tab","snippets","prepend","snippet","filterCategories","split","data","txtSearch","cbbFilter","doFilter","selectedCategory","searchText","dataCategories","dataCategoriesString","join","inArray","title","indexOf","removeClass","on","timer","clearTimeout","setTimeout","toggleSidebar","showSidebar","icon","e","preventDefault","snippetsContainerHtml","snippetsComponentHtml","snippetsContentHtml","snippetsContainerCategories","snippetsComponentCategories","content","trim","previewUrl","snippetHtml","concat","dataAttributes","getDataAttributes","beautifyCategories","newArray","category","push","sort","snippetsList","helper","revert","connectToSortable","start","blur","stop","switcherWrapper","tabPaneWrapper","isPlainObject","tabName","tabData","text","switcherLis","tabPane","a","li","parent","activatedLi","filter","activatedPane","targetDiv","getNiceScroll","hide","targetNiceScroll","show","resize","hideSettingPanel","settingForms","form","setSettingContainer","idSettingContainer","removeAttr","getSettingContainer","setSettingComponent","idSettingComponent","getSettingComponent","showSettingPanel","isComponent","activeForm","children","componentType","getComponentType","componentData","settingTitle","settingForm","initSettingForm","loadingText","initFunction","when","done","remove","showSettingForm","activeType","hideSettingForm","getContentAreas","contentAreas","empty","initContentArea","accept","tolerance","greedy","handle","items","connectWith","axis","receive","ui","item","snippetContent","replaceWith","initContainer","convertToContainer","contentData","isSection","wrapInner","wrap","settingBtn","containerContents","containerContent","initContainerContent","snippetContentElement","closest","initComponent","convertToComponent","isExisting","ignoreAttributes","isArray","get","attributes","name","value","replace","componentContent","isSettingEnabled","dynamicContentRequests","initDynamicContent","apply","then","getClickedElement","selector","sidebar","btn","getContainerContent","componentSnippets","currentLinkedContainerContents","add","confirm","settingComponent","settingComponentParent","deleteComponent","getComponentContent","destroy","dynamicHref","param","getContent","tempDiv","containerInner","clone","methods","__init","keditor","result","getOptions","method","Array","slice","jQuery"],"mappings":"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","file":"keditor-1.1.4.min.js","sourcesContent":["/**!\r\n * KEditor - Kademi content editor\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.4\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n *\r\n * Configuration:\r\n * @option {Boolean} niceScrollEnabled Enable niceScroll or not\r\n * @option {String} btnMoveContainerText Text content for move button of container\r\n * @option {String} btnMoveComponentText Text content for move button of component\r\n * @option {String} btnSettingContainerText Text content for setting button of container\r\n * @option {String} btnSettingComponentText Text content for setting button of component\r\n * @option {String} btnDuplicateContainerText Text content for duplicate button of container\r\n * @option {String} btnDuplicateComponentText Text content for duplicate button of component\r\n * @option {String} btnDeleteContainerText Text content for delete button of container\r\n * @option {String} btnDeleteComponentText Text content for delete button of component\r\n * @option {String} tabContainersText Text for Containers tab\r\n * @option {String} tabContainersTitle Title for Containers tab\r\n * @option {String} tabComponentsText Text for Components tab\r\n * @option {String} tabComponentsTitle Title for Components tab\r\n * @option {Boolean} tabTooltipEnabled Bootstrap Tooltip is enabled for Component and Container tab or not\r\n * @option {Object} extraTabs Extra tabs besides Containers and Components tabs in sidebar\r\n * Example: {\r\n * tabName: {\r\n * text: 'My Extra Tab #1',\r\n * title: 'My Extra Tab #1',\r\n * content: 'Here is content of My Extra Tab #1'\r\n * }\r\n * }\r\n * @option {String|Function} defaultComponentType Default component type of component. If type of component does not exist in KEditor.components, will be used 'defaultComponentType' as type of this component. If is function, argument is component - jQuery object of component\r\n * @option {String} snippetsUrl Url to snippets file\r\n * @option {String} snippetsListId Id of element which contains snippets. As default, value is \"keditor-snippets-list\" and KEditor will render snippets sidebar automatically. If you specific other id, only snippets will rendered and put into your element\r\n * @option {Boolean} snippetsTooltipEnabled Bootstrap tooltip is enable for snippet or not\r\n * @option {String} snippetsTooltipPosition Position of Bootstrap tooltip for snippet. Can be 'left', 'right', 'top' and 'bottom'\r\n * @option {Boolean} snippetsFilterEnabled Enable filtering snippets by categories and text searching or not\r\n * @option {String} snippetsCategoriesSeparator The separator character between each categories\r\n * @option {Boolean} iframeMode KEditor is created inside an iframe or not. Keditor will add all elements which have 'data-type=keditor-style' for iframe stylesheet. These elements can be 'link', 'style' or any tags. If these elements have 'href' attribute, will create link tag with href. If these elements do not have 'href' attribute, will create style tag with css rule is html code inside element\r\n * @option {String} contentAreasSelector Selector of content areas. If is null or selector does not match any elements, will create default content area and wrap all content inside it.\r\n * @option {String} contentAreasWrapper The wrapper element for all contents inside iframe. It's just for displaying purpose. If you want all contents inside iframe are appended into body tag\r\n * @option {Boolean} containerSettingEnabled Enable setting panel for container\r\n * @option {Function} containerSettingInitFunction Method will be called when initializing setting panel for container\r\n * @option {Function} containerSettingShowFunction Method will be called when setting panel for container is showed\r\n * @option {Function} containerSettingHideFunction Method will be called when setting panel for container is hidden\r\n * @option {Function} onReady Callback will be called after keditor instance is ready\r\n * @option {Function} onInitFrame Callback will be called after iframe and content areas wrapper inside it are created. Arguments: frame, frameHead, frameBody\r\n * @option {Function} onSidebarToggled Callback will be called after toggled sidebar. Arguments: isOpened\r\n * @option {Function} onInitContentArea Callback will be called when initializing content area. It can return array of jQuery objects which will be initialized as container in content area. By default, all first level sections under content area will be initialized. Arguments: contentArea\r\n * @option {Function} onContentChanged Callback will be called when content is changed. Includes add, delete, duplicate container or component. Or content of a component is changed. Arguments: event\r\n * @option {Function} onInitContainer Callback will be called when initializing container. It can return array of jQuery objects which will be initialized as editable components in container content (NOTE: these objects MUST be under elements which have attribute data-type=\"container-content\"). By default, all first level sections under container content will be initialized. Arguments: container\r\n * @option {Function} onBeforeContainerDeleted Callback will be called before container is deleted. Arguments: event, selectedContainer\r\n * @option {Function} onContainerDeleted Callback will be called after container and its components are already deleted. Arguments: event, selectedContainer\r\n * @option {Function} onContainerChanged Callback will be called when content of container is changed. It can be when container received new component from snippet or from other container. Or content of any components are changed or any components are deleted or duplicated. Arguments: event, changedContainer\r\n * @option {Function} onContainerDuplicated Callback will be called when a container is duplicated. Arguments: event, originalContainer, newContainer\r\n * @option {Function} onContainerSelected Callback will be called when a container is selected. Arguments: event, selectedContainer\r\n * @option {Function} onContainerSnippetDropped Callback will be called when a container snippet is dropped into content area. Arguments: event, newContainer, droppedContainer\r\n * @option {Function} onComponentReady Callback will be called after component is initialized. This callback is available or not is depend on component type handler.\r\n * @option {Function} onInitComponent Callback will be called when initializing component. Arguments: component\r\n * @option {Function} onBeforeComponentDeleted Callback will be called before a component is deleted. Arguments: event, selectedComponent\r\n * @option {Function} onComponentDeleted Callback will be called after a component is deleted. Arguments: event, selectedComponent\r\n * @option {Function} onComponentChanged Callback will be called when content of a component is changed. Arguments: event, changedComponent\r\n * @option {Function} onComponentDuplicated Callback will be called when a component is duplicated. Arguments: event, originalComponent, newComponent\r\n * @option {Function} onComponentSelected Callback will be called when a component is selected. Arguments: event, selectedComponent\r\n * @option {Function} onComponentSnippetDropped Callback will be called after a component snippet is dropped into a container. Arguments: event, newComponent, droppedComponent\r\n * @option {Function} onBeforeDynamicContentLoad Callback will be called before loading dynamic content. Arguments: dynamicElement, component\r\n * @option {Function} onDynamicContentLoaded Callback will be called after dynamic content is loaded. Arguments: dynamicElement, response, status, xhr\r\n * @option {Function} onDynamicContentError Callback will be called if loading dynamic content is error, abort or timeout. Arguments: dynamicElement, response, status, xhr\r\n */\r\n(function ($) {\r\n // Log function will print log message when \"KEditor.debug\" equals \"true\"\r\n var flog = function () {\r\n if (typeof (console) !== 'undefined' && KEditor.debug === true) {\r\n if (navigator.appName == 'Microsoft Internet Explorer') {\r\n // BM: Previous used JSON, but that crashed IE sometimes. So this is pretty crap, but at least safer\r\n if (arguments.length == 1) {\r\n console.log('[KEditor]', arguments[0]);\r\n } else if (arguments.length == 2) {\r\n console.log('[KEditor]', arguments[0], arguments[1]);\r\n } else if (arguments.length > 2) {\r\n console.log('[KEditor]', arguments[0], arguments[1], arguments[2]);\r\n }\r\n } else {\r\n console.log(['KEditor'], arguments);\r\n }\r\n }\r\n };\r\n \r\n // Throw error message\r\n var error = function (msg) {\r\n throw new Error('[KEditor] ' + msg);\r\n };\r\n \r\n // Check dependencies\r\n if (!$.fn.draggable) {\r\n error('$.fn.draggable does not exist. Please import $.fn.draggable into your document for continue using KEditor.');\r\n }\r\n if (!$.fn.droppable) {\r\n error('$.fn.droppable does not exist. Please import $.fn.droppable into your document for continue using KEditor.');\r\n }\r\n if (!$.fn.sortable) {\r\n error('$.fn.sortable does not exist. Please import $.fn.sortable into your document for continue using KEditor.');\r\n }\r\n \r\n // KEditor class\r\n var KEditor = function (target, options) {\r\n this.options = $.extend({}, KEditor.DEFAULTS, options);\r\n this.init(target);\r\n };\r\n \r\n // Turn on/off debug mode\r\n KEditor.debug = true;\r\n \r\n // Version of KEditor\r\n KEditor.version = '1.1.4';\r\n \r\n // Default configuration of KEditor\r\n KEditor.DEFAULTS = {\r\n niceScrollEnabled: true,\r\n btnMoveContainerText: '',\r\n btnMoveComponentText: '',\r\n btnSettingContainerText: '',\r\n btnSettingComponentText: '',\r\n btnDuplicateContainerText: '',\r\n btnDuplicateComponentText: '',\r\n btnDeleteContainerText: '',\r\n btnDeleteComponentText: '',\r\n tabContainersText: 'Containers',\r\n tabContainersTitle: 'Containers',\r\n tabComponentsText: 'Components',\r\n tabComponentsTitle: 'Components',\r\n tabTooltipEnabled: true,\r\n extraTabs: null,\r\n defaultComponentType: 'blank',\r\n snippetsUrl: 'snippets/default/snippets.html',\r\n snippetsListId: 'keditor-snippets-list',\r\n snippetsTooltipEnabled: true,\r\n snippetsTooltipPosition: 'left',\r\n snippetsFilterEnabled: true,\r\n snippetsCategoriesSeparator: ';',\r\n iframeMode: false,\r\n contentAreasSelector: null,\r\n contentAreasWrapper: '',\r\n containerSettingEnabled: false,\r\n containerSettingInitFunction: null,\r\n containerSettingShowFunction: null,\r\n containerSettingHideFunction: null,\r\n onReady: function () {\r\n },\r\n onInitFrame: function (frame, frameHead, frameBody) {\r\n },\r\n onSidebarToggled: function (isOpened) {\r\n },\r\n onInitContentArea: function (contentArea) {\r\n },\r\n onContentChanged: function (event) {\r\n },\r\n onInitContainer: function (container) {\r\n },\r\n onBeforeContainerDeleted: function (event, selectedContainer) {\r\n },\r\n onContainerDeleted: function (event, selectedContainer) {\r\n },\r\n onContainerChanged: function (event, changedContainer) {\r\n },\r\n onContainerDuplicated: function (event, originalContainer, newContainer) {\r\n },\r\n onContainerSelected: function (event, selectedContainer) {\r\n },\r\n onContainerSnippetDropped: function (event, newContainer, droppedContainer) {\r\n },\r\n onComponentReady: function (component) {\r\n },\r\n onInitComponent: function (component) {\r\n },\r\n onBeforeComponentDeleted: function (event, selectedComponent) {\r\n },\r\n onComponentDeleted: function (event, selectedComponent) {\r\n },\r\n onComponentChanged: function (event, changedComponent) {\r\n },\r\n onComponentDuplicated: function (event, originalComponent, newComponent) {\r\n },\r\n onComponentSelected: function (event, selectedComponent) {\r\n },\r\n onComponentSnippetDropped: function (event, newComponent, droppedComponent) {\r\n },\r\n onBeforeDynamicContentLoad: function (dynamicElement, component) {\r\n },\r\n onDynamicContentLoaded: function (dynamicElement, response, status, xhr) {\r\n },\r\n onDynamicContentError: function (dynamicElement, response, status, xhr) {\r\n }\r\n };\r\n \r\n // Component types\r\n KEditor.components = {\r\n blank: {\r\n settingEnabled: false\r\n }\r\n };\r\n \r\n // Export log methods;\r\n KEditor.log = flog;\r\n KEditor.error = error;\r\n \r\n KEditor.prototype = {\r\n init: function (target) {\r\n var self = this;\r\n var options = self.options;\r\n \r\n if (options.iframeMode) {\r\n target = self.initFrame(target);\r\n } else {\r\n self.body = $(document.body);\r\n \r\n if (target.is('textarea')) {\r\n flog('Target is textarea', target);\r\n \r\n var htmlContent = target.val();\r\n var keditorWrapper = $('');\r\n var keditorWrapperId = self.generateId('wrapper');\r\n \r\n target.after(keditorWrapper);\r\n keditorWrapper.attr({\r\n id: keditorWrapperId,\r\n class: 'keditor-wrapper'\r\n });\r\n \r\n keditorWrapper.html(htmlContent);\r\n target.css('display', 'none');\r\n target.attr('data-keditor-wrapper', '#' + keditorWrapperId);\r\n \r\n target = keditorWrapper;\r\n }\r\n }\r\n \r\n var body = self.body;\r\n var ajaxRequest;\r\n if (body.hasClass('initialized-snippets-list')) {\r\n flog('Snippets list is already initialized!');\r\n } else {\r\n ajaxRequest = self.initSidebar();\r\n body.addClass('initialized-snippets-list');\r\n }\r\n if (body.hasClass('initialized-click-event-handlers')) {\r\n flog('CLick event handlers is already initialized!');\r\n } else {\r\n self.initKEditorClicks();\r\n body.addClass('initialized-click-event-handlers');\r\n }\r\n \r\n self.initContentAreas(target);\r\n \r\n if (!ajaxRequest && typeof options.onReady === 'function') {\r\n options.onReady.call(self);\r\n }\r\n },\r\n \r\n generateId: function (type) {\r\n var timestamp = (new Date()).getTime();\r\n return 'keditor-' + type + '-' + timestamp;\r\n },\r\n \r\n initNiceScroll: function (target) {\r\n flog('initNiceScroll', target);\r\n \r\n if ($.fn.niceScroll && this.options.niceScrollEnabled) {\r\n flog('Initialize $.fn.niceScroll');\r\n target.niceScroll({\r\n cursorcolor: '#999',\r\n cursorwidth: 6,\r\n railpadding: {\r\n top: 0,\r\n right: 0,\r\n left: 0,\r\n bottom: 0\r\n },\r\n cursorborder: '',\r\n disablemutationobserver: true\r\n });\r\n } else {\r\n flog('$.fn.niceScroll does not exist. Use default sidebar.');\r\n }\r\n },\r\n \r\n initFrame: function (target) {\r\n flog('initFrame', target);\r\n \r\n var self = this;\r\n var options = self.options;\r\n var originalContent = target.html();\r\n var iframe = $('');\r\n var iframeId = self.generateId('frame');\r\n \r\n target.after(iframe);\r\n iframe.attr({\r\n 'id': iframeId,\r\n 'class': 'keditor-frame'\r\n });\r\n \r\n target.css('display', 'none');\r\n target.attr('data-keditor-frame', '#' + iframeId);\r\n \r\n var iframeDoc = iframe.contents();\r\n var iframeHead = iframeDoc.find('head');\r\n var iframeBody = iframeDoc.find('body');\r\n \r\n flog('Adding styles to iframe...');\r\n var styles = '';\r\n $('[data-type=\"keditor-style\"]').each(function () {\r\n var style = $(this);\r\n var href = style.attr('href') || style.attr('data-href') || '';\r\n \r\n if (href) {\r\n styles += '\\n';\r\n } else {\r\n styles += '\\n';\r\n }\r\n });\r\n flog('Styles: \\n' + styles);\r\n \r\n iframeHead.append(styles);\r\n flog('All styles are added');\r\n \r\n flog('Adding original content to iframe...');\r\n var contentAreasWrapper;\r\n if (options.contentAreasWrapper) {\r\n contentAreasWrapper = $(options.contentAreasWrapper);\r\n iframeBody.append(contentAreasWrapper);\r\n contentAreasWrapper.html(originalContent);\r\n } else {\r\n iframeBody.html(originalContent);\r\n }\r\n \r\n // In frame, have to use default snippets container\r\n options.snippetsListId = KEditor.DEFAULTS.snippetsListId;\r\n \r\n self.body = iframeBody;\r\n \r\n if (typeof options.onInitFrame === 'function') {\r\n options.onInitFrame.call(iframe, iframe, iframeHead, iframeBody);\r\n }\r\n \r\n return contentAreasWrapper || iframeBody;\r\n },\r\n \r\n initSidebar: function () {\r\n flog('initSidebar');\r\n \r\n var self = this;\r\n var options = self.options;\r\n var body = self.body;\r\n body.addClass('opened-keditor-sidebar');\r\n \r\n if (options.snippetsListId === KEditor.DEFAULTS.snippetsListId) {\r\n flog('Render default KEditor snippet container');\r\n \r\n body.append(\r\n '
' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
'\r\n );\r\n self.initSidebarToggler();\r\n } else {\r\n flog('Render KEditor snippets content after custom snippets list with id=\"' + options.snippetsListId + '\"');\r\n body.find('#' + options.snippetsListId).after('');\r\n }\r\n \r\n if (typeof options.snippetsUrl === 'string' && options.snippetsUrl.length > 0) {\r\n flog('Getting snippets form \"' + options.snippetsUrl + '\"...');\r\n \r\n return $.ajax({\r\n type: 'get',\r\n dataType: 'html',\r\n url: options.snippetsUrl,\r\n success: function (resp) {\r\n flog('Success in getting snippets', resp);\r\n \r\n self.renderSnippets(resp);\r\n self.initSnippets();\r\n self.initTabs();\r\n self.initTabsSwitcher();\r\n self.initSettingPanel();\r\n \r\n if (options.snippetsFilterEnabled) {\r\n self.initSnippetsFilter('Container');\r\n self.initSnippetsFilter('Component');\r\n }\r\n \r\n if (options.snippetsTooltipEnabled || options.tabTooltipEnabled) {\r\n flog('Initialize Bootstrap tooltip plugin');\r\n body.find('#' + options.snippetsListId).find('[data-toggle=\"tooltip\"]').tooltip();\r\n }\r\n \r\n if (typeof options.onReady === 'function') {\r\n options.onReady.call(self);\r\n }\r\n },\r\n error: function (jqXHR) {\r\n flog('Error when getting snippets', jqXHR);\r\n }\r\n });\r\n } else {\r\n error('\"snippetsUrl\" must be not null!');\r\n }\r\n },\r\n \r\n initSnippetsFilter: function (type) {\r\n flog('initSnippetsFilter', type);\r\n \r\n var self = this;\r\n var options = self.options;\r\n var body = self.body;\r\n var lowerCaseType = type.toLowerCase();\r\n var categories = self['snippets' + type + 'Categories'];\r\n \r\n var filterHtml = '';\r\n filterHtml += '
'\r\n );\r\n \r\n var dynamicContentRequests = [];\r\n component.find('[data-dynamic-href]').each(function () {\r\n var dynamicElement = $(this);\r\n \r\n dynamicContentRequests.push(self.initDynamicContent(dynamicElement));\r\n });\r\n \r\n $.when.apply(null, dynamicContentRequests).then(function () {\r\n if (typeof componentData.init === 'function') {\r\n componentData.init.call(componentData, contentArea, container, component, self);\r\n } else {\r\n body.removeClass('highlighted-container-content');\r\n flog('\"init\" function of component type \"' + componentType + '\" does not exist');\r\n }\r\n \r\n if (typeof options.onInitComponent === 'function') {\r\n options.onInitComponent.call(contentArea, component);\r\n }\r\n \r\n component.addClass('keditor-initialized-component');\r\n component.removeClass('keditor-initializing-component');\r\n });\r\n } else {\r\n if (component.hasClass('keditor-initialized-component')) {\r\n flog('Component is already initialized!');\r\n } else {\r\n flog('Component is initializing...');\r\n }\r\n }\r\n },\r\n \r\n getClickedElement: function (event, selector) {\r\n var target = $(event.target);\r\n var closest = target.closest(selector);\r\n \r\n if (target.is(selector)) {\r\n return target;\r\n } else if (closest.length > 0) {\r\n return closest;\r\n } else {\r\n return null;\r\n }\r\n },\r\n \r\n initKEditorClicks: function () {\r\n flog('initKEditorClicks');\r\n \r\n var self = this;\r\n var options = self.options;\r\n var body = self.body;\r\n \r\n body.on('click', function (e) {\r\n var sidebar = self.getClickedElement(e, '#keditor-sidebar');\r\n \r\n var container = self.getClickedElement(e, '.keditor-container');\r\n if (container) {\r\n flog('Click on .keditor-container', container);\r\n \r\n if (!container.hasClass('showed-keditor-toolbar')) {\r\n body.find('.keditor-container.showed-keditor-toolbar').removeClass('showed-keditor-toolbar');\r\n body.find('.keditor-component.showed-keditor-toolbar').removeClass('showed-keditor-toolbar');\r\n container.addClass('showed-keditor-toolbar');\r\n \r\n var contentArea = container.parent();\r\n if (typeof options.onContainerSelected === 'function') {\r\n options.onContainerSelected.call(contentArea, e, container);\r\n }\r\n }\r\n } else {\r\n if (!sidebar) {\r\n body.find('.keditor-container.showed-keditor-toolbar').removeClass('showed-keditor-toolbar');\r\n body.find('.keditor-component.showed-keditor-toolbar').removeClass('showed-keditor-toolbar');\r\n }\r\n }\r\n \r\n var component = self.getClickedElement(e, '.keditor-component');\r\n if (component) {\r\n flog('Click on .keditor-component', component);\r\n \r\n if (!component.hasClass('showed-keditor-toolbar')) {\r\n body.find('.keditor-component.showed-keditor-toolbar').removeClass('showed-keditor-toolbar');\r\n component.addClass('showed-keditor-toolbar');\r\n \r\n var contentArea = component.parent();\r\n if (typeof options.onComponentSelected === 'function') {\r\n options.onComponentSelected.call(contentArea, e, component);\r\n }\r\n }\r\n } else {\r\n if (!sidebar) {\r\n body.find('.keditor-component.showed-keditor-toolbar').removeClass('showed-keditor-toolbar');\r\n }\r\n }\r\n });\r\n \r\n \r\n body.on('click', '.btn-container-setting', function (e) {\r\n e.preventDefault();\r\n \r\n var btn = $(this);\r\n flog('Click on .btn-container-setting', btn);\r\n \r\n var container = btn.closest('.keditor-container');\r\n if (body.hasClass('opened-keditor-setting') && body.hasClass('opened-keditor-sidebar')) {\r\n if (!container.is(self.getSettingContainer())) {\r\n self.showSettingPanel(container);\r\n } else {\r\n self.hideSettingPanel();\r\n }\r\n } else {\r\n self.showSettingPanel(container);\r\n }\r\n });\r\n \r\n body.on('click', '.btn-container-duplicate', function (e) {\r\n e.preventDefault();\r\n \r\n var btn = $(this);\r\n flog('Click on .btn-container-duplicate', btn);\r\n \r\n var container = btn.closest('.keditor-container');\r\n var contentArea = container.parent();\r\n var newContainer = $(self.getContainerContent(container));\r\n \r\n container.after(newContainer);\r\n self.convertToContainer(contentArea, newContainer);\r\n \r\n var snippetsList = body.find('#' + options.snippetsListId);\r\n var componentSnippets = snippetsList.find('.keditor-snippet[data-type^=component]');\r\n var currentLinkedContainerContents = componentSnippets.draggable('option', 'connectToSortable');\r\n componentSnippets.draggable('option', 'connectToSortable', currentLinkedContainerContents.add(newContainer.find('.keditor-container-content')));\r\n \r\n flog('Container is duplicated');\r\n \r\n if (typeof options.onContainerDuplicated === 'function') {\r\n options.onContainerDuplicated.call(contentArea, container, newContainer);\r\n }\r\n \r\n if (typeof options.onContentChanged === 'function') {\r\n options.onContentChanged.call(contentArea, e);\r\n }\r\n });\r\n \r\n body.on('click', '.btn-container-delete', function (e) {\r\n e.preventDefault();\r\n \r\n var btn = $(this);\r\n flog('Click on .btn-container-delete', btn);\r\n \r\n if (confirm('Are you sure that you want to delete this container? This action can not be undo!')) {\r\n var container = btn.closest('.keditor-container');\r\n var components = container.find('.keditor-component');\r\n var contentArea = container.parent();\r\n \r\n if (typeof options.onBeforeContainerDeleted === 'function') {\r\n options.onBeforeContainerDeleted.call(contentArea, e, container);\r\n }\r\n \r\n var settingComponent = self.getSettingComponent();\r\n if (settingComponent) {\r\n var settingComponentParent = settingComponent.closest('.keditor-container');\r\n if (settingComponentParent.is(container)) {\r\n flog('Deleting container is container of setting container. Close setting panel for this setting component', settingComponent);\r\n self.hideSettingPanel();\r\n }\r\n } else if (self.getSettingContainer().is(container)) {\r\n flog('Deleting container is setting container. Close setting panel for this container', container);\r\n self.hideSettingPanel();\r\n }\r\n \r\n if (components.length > 0) {\r\n components.each(function () {\r\n self.deleteComponent($(this));\r\n });\r\n }\r\n \r\n container.remove();\r\n \r\n if (typeof options.onContainerDeleted === 'function') {\r\n options.onContainerDeleted.call(contentArea, e, container);\r\n }\r\n \r\n if (typeof options.onContentChanged === 'function') {\r\n options.onContentChanged.call(contentArea, e);\r\n }\r\n }\r\n });\r\n \r\n body.on('click', '.btn-component-setting', function (e) {\r\n e.preventDefault();\r\n \r\n var btn = $(this);\r\n flog('Click on .btn-component-setting', btn);\r\n \r\n var component = btn.closest('.keditor-component');\r\n if (body.hasClass('opened-keditor-setting') && body.hasClass('opened-keditor-sidebar')) {\r\n if (!component.is(self.getSettingComponent())) {\r\n self.showSettingPanel(component);\r\n } else {\r\n self.hideSettingPanel();\r\n }\r\n } else {\r\n self.showSettingPanel(component);\r\n }\r\n });\r\n \r\n body.on('click', '.btn-component-duplicate', function (e) {\r\n e.preventDefault();\r\n \r\n var btn = $(this);\r\n flog('Click on .btn-component-duplicate', btn);\r\n \r\n var component = btn.closest('.keditor-component');\r\n var container = component.closest('.keditor-container');\r\n var contentArea = container.parent();\r\n var newComponent = $(self.getComponentContent(component));\r\n \r\n component.after(newComponent);\r\n self.convertToComponent(contentArea, container, newComponent);\r\n \r\n flog('Component is duplicated');\r\n \r\n if (typeof options.onComponentDuplicated === 'function') {\r\n options.onComponentDuplicated.call(contentArea, component, newComponent);\r\n }\r\n \r\n if (typeof options.onContainerChanged === 'function') {\r\n options.onContainerChanged.call(contentArea, e, container);\r\n }\r\n \r\n if (typeof options.onContentChanged === 'function') {\r\n options.onContentChanged.call(contentArea, e);\r\n }\r\n });\r\n \r\n body.on('click', '.btn-component-delete', function (e) {\r\n e.preventDefault();\r\n \r\n var btn = $(this);\r\n flog('Click on .btn-component-delete', btn);\r\n \r\n if (confirm('Are you sure that you want to delete this component? This action can not be undo!')) {\r\n var component = btn.closest('.keditor-component');\r\n var contentArea = component.closest('.keditor-content-area');\r\n \r\n if (typeof options.onBeforeComponentDeleted === 'function') {\r\n options.onBeforeComponentDeleted.call(contentArea, e, component);\r\n }\r\n \r\n if (self.getSettingComponent().is(component)) {\r\n self.hideSettingPanel();\r\n }\r\n \r\n self.deleteComponent(component);\r\n \r\n if (typeof options.onComponentDeleted === 'function') {\r\n options.onComponentDeleted.call(contentArea, e, component);\r\n }\r\n \r\n if (typeof options.onContainerChanged === 'function') {\r\n options.onContainerChanged.call(contentArea, e, component);\r\n }\r\n \r\n if (typeof options.onContentChanged === 'function') {\r\n options.onContentChanged.call(contentArea, e);\r\n }\r\n }\r\n });\r\n },\r\n \r\n deleteComponent: function (component) {\r\n flog('deleteComponent', component);\r\n \r\n var self = this;\r\n \r\n var componentType = self.getComponentType(component);\r\n var componentData = KEditor.components[componentType];\r\n if (typeof componentData.destroy === 'function') {\r\n componentData.destroy.call(componentData, component, self);\r\n } else {\r\n flog('\"destroy\" function of component type \"' + componentType + '\" does not exist');\r\n }\r\n \r\n component.remove();\r\n },\r\n \r\n initDynamicContent: function (dynamicElement) {\r\n flog('initDynamicContent', dynamicElement);\r\n \r\n var self = this;\r\n var options = self.options;\r\n var component = dynamicElement.closest('.keditor-component');\r\n var contentArea = dynamicElement.closest('.keditor-content-area');\r\n \r\n if (!dynamicElement.attr('id')) {\r\n dynamicElement.attr('id', self.generateId('dynamic-element'));\r\n }\r\n \r\n if (typeof options.onBeforeDynamicContentLoad === 'function') {\r\n options.onBeforeDynamicContentLoad.call(contentArea, dynamicElement, component);\r\n }\r\n \r\n var dynamicHref = dynamicElement.attr('data-dynamic-href');\r\n var data = self.getDataAttributes(component, ['data-type', 'data-dynamic-href'], false);\r\n data = $.param(data);\r\n flog('Dynamic href: ' + dynamicHref, 'Data: ' + data);\r\n \r\n return $.ajax({\r\n url: dynamicHref,\r\n data: data,\r\n type: 'GET',\r\n dataType: 'HTML',\r\n success: function (response, status, xhr) {\r\n flog('Dynamic content is loaded', dynamicElement, response, status, xhr);\r\n dynamicElement.html(response);\r\n \r\n if (typeof options.onDynamicContentLoaded === 'function') {\r\n options.onDynamicContentLoaded.call(contentArea, dynamicElement, response, status, xhr);\r\n }\r\n },\r\n error: function (response, status, xhr) {\r\n flog('Error when loading dynamic content', dynamicElement, response, status, xhr);\r\n \r\n if (typeof options.onDynamicContentError === 'function') {\r\n options.onDynamicContentError.call(contentArea, dynamicElement, response, status, xhr);\r\n }\r\n }\r\n });\r\n },\r\n \r\n getComponentContent: function (component) {\r\n flog('getComponentContent', component);\r\n \r\n var self = this;\r\n var componentType = self.getComponentType(component);\r\n var componentData = KEditor.components[componentType];\r\n var dataAttributes = self.getDataAttributes(component, null, true);\r\n var content;\r\n \r\n if (typeof componentData.getContent === 'function') {\r\n content = componentData.getContent.call(componentData, component, self);\r\n } else {\r\n flog('\"getContent\" function of component type \"' + componentType + '\" does not exist. Using default getContent method');\r\n var componentContent = component.children('.keditor-component-content');\r\n content = componentContent.html();\r\n }\r\n \r\n var tempDiv = $('').html(content);\r\n tempDiv.find('[data-dynamic-href]').each(function () {\r\n $(this).html('');\r\n });\r\n content = tempDiv.html();\r\n \r\n return '' + content + '';\r\n },\r\n \r\n getContainerContent: function (container) {\r\n flog('getContainerContent', container);\r\n \r\n var self = this;\r\n var options = self.options;\r\n var containerInner = container.children('.keditor-container-inner').clone();\r\n \r\n containerInner.find('[data-type=container-content]').each(function () {\r\n var containerContent = $(this);\r\n containerContent.removeClass('keditor-container-content ui-droppable ui-sortable').removeAttr('id');\r\n \r\n containerContent.children('.keditor-component').each(function () {\r\n var component = $(this);\r\n \r\n component.replaceWith(self.getComponentContent(component));\r\n });\r\n });\r\n \r\n return '' + containerInner.html() + '';\r\n }\r\n \r\n };\r\n \r\n // Plugin methods\r\n var methods = {\r\n __init: function (options) {\r\n return $(this).each(function () {\r\n var target = $(this);\r\n \r\n if (target.data('keditor')) {\r\n flog('KEditor is already initialized!');\r\n } else {\r\n flog('Initialze KEditor', target, options);\r\n var keditor = new KEditor(target, options);\r\n target.data('keditor', keditor);\r\n }\r\n });\r\n },\r\n \r\n getContent: function (inArray) {\r\n var target = $(this);\r\n var keditor = target.data('keditor');\r\n var options = keditor.options;\r\n var result = [];\r\n target = options.iframeMode ? keditor.body : target;\r\n \r\n target.find('.keditor-content-area').each(function () {\r\n var html = '';\r\n $(this).children('.keditor-container').each(function () {\r\n var container = $(this);\r\n \r\n html += keditor.getContainerContent(container, options);\r\n });\r\n \r\n result.push(html);\r\n });\r\n \r\n return inArray ? result : result.join('\\n');\r\n },\r\n \r\n getOptions: function () {\r\n var keditor = $(this).data('keditor');\r\n \r\n return keditor.options;\r\n }\r\n };\r\n \r\n // Export KEditor\r\n $.keditor = KEditor;\r\n \r\n // KEditor plugins\r\n $.fn.keditor = function (method) {\r\n if (methods[method] && method !== 'init') {\r\n return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\r\n } else if (typeof method === 'object' || !method) {\r\n return methods.__init.apply(this, arguments);\r\n } else {\r\n error('Method ' + method + ' does not exist on $.fn.keditor');\r\n }\r\n };\r\n \r\n})(jQuery);\r\n"],"sourceRoot":"/source/"}
\ No newline at end of file
diff --git a/dist/js/keditor-components-1.1.3.js b/dist/js/keditor-components-1.1.4.js
similarity index 99%
rename from dist/js/keditor-components-1.1.3.js
rename to dist/js/keditor-components-1.1.4.js
index 509915e2..74e6839a 100644
--- a/dist/js/keditor-components-1.1.3.js
+++ b/dist/js/keditor-components-1.1.4.js
@@ -2,7 +2,7 @@
* KEditor Audio Component
* @copyright: Kademi (http://kademi.co)
* @author: Kademi (http://kademi.co)
- * @version: 1.1.3
+ * @version: 1.1.4
* @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)
*/
(function ($) {
@@ -118,7 +118,7 @@
* KEditor Google Map Component
* @copyright: Kademi (http://kademi.co)
* @author: Kademi (http://kademi.co)
- * @version: 1.1.3
+ * @version: 1.1.4
* @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)
*/
(function ($) {
@@ -195,7 +195,7 @@
* KEditor Photo Component
* @copyright: Kademi (http://kademi.co)
* @author: Kademi (http://kademi.co)
- * @version: 1.1.3
+ * @version: 1.1.4
* @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)
*/
(function ($) {
@@ -403,7 +403,7 @@
* KEditor Text Component
* @copyright: Kademi (http://kademi.co)
* @author: Kademi (http://kademi.co)
- * @version: 1.1.3
+ * @version: 1.1.4
* @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)
*/
(function ($) {
@@ -506,7 +506,7 @@
* KEditor Video Component
* @copyright: Kademi (http://kademi.co)
* @author: Kademi (http://kademi.co)
- * @version: 1.1.3
+ * @version: 1.1.4
* @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)
*/
(function ($) {
@@ -665,7 +665,7 @@
* KEditor Vimeo Component
* @copyright: Kademi (http://kademi.co)
* @author: Kademi (http://kademi.co)
- * @version: 1.1.3
+ * @version: 1.1.4
* @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)
*/
(function ($) {
@@ -768,7 +768,7 @@
* KEditor Youtube Component
* @copyright: Kademi (http://kademi.co)
* @author: Kademi (http://kademi.co)
- * @version: 1.1.3
+ * @version: 1.1.4
* @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)
*/
(function ($) {
diff --git a/dist/js/keditor-components-1.1.3.min.js b/dist/js/keditor-components-1.1.4.min.js
similarity index 99%
rename from dist/js/keditor-components-1.1.3.min.js
rename to dist/js/keditor-components-1.1.4.min.js
index 67e82bfa..5e72199b 100644
--- a/dist/js/keditor-components-1.1.3.min.js
+++ b/dist/js/keditor-components-1.1.4.min.js
@@ -1,2 +1,2 @@
!function(t){var o=t.keditor,e=o.log;o.components.audio={getContent:function(t,o){e('getContent "audio" component, component');var n=t.children(".keditor-component-content"),i=n.find("audio");return i.unwrap(),n.html()},settingEnabled:!0,settingTitle:"Audio Settings",initSettingForm:function(t,o){e('init "audio" settings',t),t.append('')},showSettingForm:function(t,o,n){e('showSettingForm "audio" component',t,o);var i=n.options,s=o.find("audio"),a=t.find("#audioFileInput"),l=t.find(".btn-audioFileInput");l.off("click").on("click",function(t){t.preventDefault(),a.trigger("click")}),a.off("change").on("change",function(){var t=this.files[0];/audio/.test(t.type)?(s.attr("src",URL.createObjectURL(t)),s.load(function(){n.showSettingPanel(o,i)})):alert("Your selected file is not an audio file!")});var r=t.find("#audio-autoplay");r.off("click").on("click",function(t){this.checked?s.attr("autoplay","autoplay"):s.removeAttr("autoplay")});var c=t.find("#audio-showcontrols");c.off("click").on("click",function(t){this.checked?s.attr("controls","controls"):s.removeAttr("controls")});var d=t.find("#audio-width");d.off("change").on("change",function(){s.css("width",this.value+"%")})}}}(jQuery),function(t){var o=t.keditor,e=o.log;o.components.googlemap={getContent:function(t,o){e('getContent "googlemap" component',t);var n=t.children(".keditor-component-content");return n.find(".googlemap-cover").remove(),n.html()},settingEnabled:!0,settingTitle:"Google Map Settings",initSettingForm:function(o,n){e('initSettingForm "googlemap" component'),o.append('');var i=o.find(".btn-googlemap-edit");i.on("click",function(o){o.preventDefault();var e=prompt("Please enter Google Map embed code in here:"),i=t(e),s=i.attr("src");i.length>0&&s&&s.length>0?n.getSettingComponent().find(".embed-responsive-item").attr("src",s):alert("Your Google Map embed code is invalid!")});var s=o.find(".btn-googlemap-169");s.on("click",function(t){t.preventDefault(),n.getSettingComponent().find(".embed-responsive").removeClass("embed-responsive-4by3").addClass("embed-responsive-16by9")});var a=o.find(".btn-googlemap-43");a.on("click",function(t){t.preventDefault(),n.getSettingComponent().find(".embed-responsive").removeClass("embed-responsive-16by9").addClass("embed-responsive-4by3")})}}}(jQuery),function(t){var o=t.keditor,e=o.log;o.components.photo={init:function(t,o,n,i){e('init "photo" component',n);var s=n.children(".keditor-component-content"),a=s.find("img");a.css("display","inline-block")},settingEnabled:!0,settingTitle:"Photo Settings",initSettingForm:function(t,o){e('initSettingForm "photo" component');var n=this,i=o.options;t.append('');var s=t.find("#photo-edit"),a=s.next();s.on("click",function(t){t.preventDefault(),a.trigger("click")}),a.on("change",function(){var t=this.files[0];if(/image/.test(t.type)){var e=o.getSettingComponent().find("img");e.attr("src",URL.createObjectURL(t)),e.css({width:"",height:""}),e.load(function(){o.showSettingPanel(o.getSettingComponent(),i)})}else alert("Your selected file is not photo!")});var l=t.find("#photo-align");l.on("change",function(){var t=o.getSettingComponent().find(".photo-panel");t.css("text-align",this.value)});var r=t.find("#photo-responsive");r.on("click",function(){o.getSettingComponent().find("img")[this.checked?"addClass":"removeClass"]("img-responsive")});var c=t.find("#photo-style");c.on("change",function(){var t=o.getSettingComponent().find("img"),e=this.value;t.removeClass("img-rounded img-circle img-thumbnail"),e&&t.addClass(e)});var d=t.find("#photo-width"),p=t.find("#photo-height");d.on("change",function(){var t=o.getSettingComponent().find("img"),e=+this.value,i=Math.round(e/n.ratio);0>=e&&(e=n.width,i=n.height,this.value=e),t.css({width:e,height:i}),p.val(i)}),p.on("change",function(){var t=o.getSettingComponent().find("img"),e=+this.value,i=Math.round(e*n.ratio);0>=e&&(i=n.width,e=n.height,this.value=e),t.css({height:e,width:i}),d.val(i)})},showSettingForm:function(o,n,i){e('showSettingForm "photo" component',n);var s=this,a=o.find("#photo-align"),l=o.find("#photo-responsive"),r=o.find("#photo-width"),c=o.find("#photo-height"),d=o.find("#photo-style"),p=n.find(".photo-panel"),m=p.find("img"),u=p.css("text-align");"right"===u&&"center"===u||(u="left"),m.hasClass("img-rounded")?d.val("img-rounded"):m.hasClass("img-circle")?d.val("img-circle"):m.hasClass("img-thumbnail")?d.val("img-thumbnail"):d.val(""),a.val(u),l.prop("checked",m.hasClass("img-responsive")),r.val(m.width()),c.val(m.height()),t("").attr("src",m.attr("src")).load(function(){s.ratio=this.width/this.height,s.width=this.width,s.height=this.height})}}}(jQuery),function(t){var o=t.keditor,e=o.log;CKEDITOR.disableAutoInline=!0,o.components.text={options:{toolbarGroups:[{name:"document",groups:["mode","document","doctools"]},{name:"editing",groups:["find","selection","spellchecker","editing"]},{name:"forms",groups:["forms"]},{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list","indent","blocks","align","bidi","paragraph"]},{name:"links",groups:["links"]},{name:"insert",groups:["insert"]},"/",{name:"clipboard",groups:["clipboard","undo"]},{name:"styles",groups:["styles"]},{name:"colors",groups:["colors"]},{name:"tools",groups:["tools"]},{name:"others",groups:["others"]}],title:!1,allowedContent:!0,bodyId:"editor",templates_replaceContent:!1,enterMode:"P",forceEnterMode:!0,format_tags:"p;h1;h2;h3;h4;h5;h6",removePlugins:"table,magicline,tabletools",removeButtons:"Save,NewPage,Preview,Print,Templates,PasteText,PasteFromWord,Find,Replace,SelectAll,Scayt,Form,HiddenField,ImageButton,Button,Select,Textarea,TextField,Radio,Checkbox,Outdent,Indent,Blockquote,CreateDiv,Language,Table,HorizontalRule,Smiley,SpecialChar,PageBreak,Iframe,Styles,BGColor,Maximize,About,ShowBlocks,BidiLtr,BidiRtl,Flash,Image,Subscript,Superscript,Anchor",minimumChangeMilliseconds:100},init:function(t,o,n,i){e('init "text" component',n);var s=this,a=i.options,l=n.children(".keditor-component-content");l.prop("contenteditable",!0),l.on("input",function(e){"function"==typeof a.onComponentChanged&&a.onComponentChanged.call(t,e,n),"function"==typeof a.onContainerChanged&&a.onContainerChanged.call(t,e,o),"function"==typeof a.onContentChanged&&a.onContentChanged.call(t,e)});var r=l.ckeditor(s.options).editor;r.on("instanceReady",function(){e("CKEditor is ready",n),"function"==typeof a.onComponentReady&&a.onComponentReady.call(t,n,r)})},getContent:function(t,o){e('getContent "text" component',t);var n=t.find(".keditor-component-content"),i=n.attr("id"),s=CKEDITOR.instances[i];return s?s.getData():n.html()},destroy:function(t,o){e('destroy "text" component',t);var n=t.find(".keditor-component-content").attr("id"),i=CKEDITOR.instances[n];i&&i.destroy()}}}(jQuery),function(t){var o=t.keditor,e=o.log;o.components.video={getContent:function(t,o){e('getContent "video" component',t);var n=t.children(".keditor-component-content"),i=n.find("video");return i.unwrap(),n.html()},settingEnabled:!0,settingTitle:"Video Settings",initSettingForm:function(t,o){e('init "video" settings',t),t.append('')},showSettingForm:function(t,o,n){e('showSettingForm "video" settings',t,o);var i=n.options,s=o.find("video"),a=t.find("#videoFileInput"),l=t.find(".btn-videoFileInput");l.on("click",function(t){t.preventDefault(),a.trigger("click")}),a.off("change").on("change",function(){var t=this.files[0];/video/.test(t.type)?(s.attr("src",URL.createObjectURL(t)),s.load(function(){n.showSettingPanel(o,i)})):alert("Your selected file is not an video file!")});var r=t.find("#video-autoplay");r.off("click").on("click",function(t){this.checked?s.prop("autoplay",!0):s.removeProp("autoplay")});var c=t.find("#video-loop");c.off("click").on("click",function(t){this.checked?s.prop("loop",!0):s.removeProp("loop")});var d=t.find(".video-ratio");d.off("click").on("click",function(t){if(this.checked){var o=s.css("width")||s.prop("width");o=o.replace("px","");var e="16/9"===this.value?16/9:4/3,n=o/e;s.css("width",o+"px"),s.css("height",n+"px"),s.removeProp("width"),s.removeProp("height")}});var p=t.find("#video-showcontrols");p.off("click").on("click",function(t){this.checked?s.attr("controls","controls"):s.removeAttr("controls")});var m=t.find("#video-width");m.off("change").on("change",function(){s.css("width",this.value+"px");var o="16/9"===t.find(".video-ratio:checked").val()?16/9:4/3,e=this.value/o;s.css("height",e+"px"),s.removeProp("width"),s.removeProp("height")})}}}(jQuery),function(t){var o=t.keditor,e=o.log;o.components.vimeo={getContent:function(t,o){e('getContent "vimeo" component',t);var n=t.children(".keditor-component-content");return n.find(".vimeo-cover").remove(),n.html()},settingEnabled:!0,settingTitle:"Vimeo Settings",initSettingForm:function(t,o){e('initSettingForm "vimeo" component'),t.append('');var n=t.find(".btn-vimeo-edit");n.on("click",function(t){t.preventDefault();var e=prompt("Please enter Vimeo URL in here:"),n=/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/,i=e.match(n);i&&i[1]?o.getSettingComponent().find(".embed-responsive-item").attr("src","https://player.vimeo.com/video/"+i[1]+"?byline=0&portrait=0&badge=0"):alert("Your Vimeo URL is invalid!")});var i=t.find(".btn-vimeo-169");i.on("click",function(t){t.preventDefault(),o.getSettingComponent().find(".embed-responsive").removeClass("embed-responsive-4by3").addClass("embed-responsive-16by9")});var s=t.find(".btn-vimeo-43");s.on("click",function(t){t.preventDefault(),o.getSettingComponent().find(".embed-responsive").removeClass("embed-responsive-16by9").addClass("embed-responsive-4by3")});var a=t.find("#vimeo-autoplay");a.on("click",function(){var t=o.getSettingComponent().find(".embed-responsive-item"),n=t.attr("src"),i=n.replace(/(\?.+)+/,"")+"?byline=0&portrait=0&badge=0&autoplay="+(a.is(":checked")?1:0);e("Current url: "+n,"New url: "+i),t.attr("src",i)})},showSettingForm:function(t,o,n){e('showSettingForm "vimeo" component',o);var i=o.find(".embed-responsive-item"),s=t.find("#vimeo-autoplay"),a=i.attr("src");s.prop("checked",-1!==a.indexOf("autoplay=1"))}}}(jQuery),function(t){var o=t.keditor,e=o.log;o.components.youtube={getContent:function(t,o){e('getContent "youtube" component',t);var n=t.children(".keditor-component-content");return n.find(".youtube-cover").remove(),n.html()},settingEnabled:!0,settingTitle:"Youtube Settings",initSettingForm:function(t,o){e('initSettingForm "youtube" component'),t.append('');var n=t.find(".btn-youtube-edit");n.on("click",function(t){t.preventDefault();var e=prompt("Please enter Youtube URL in here:"),n=/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/,i=e.match(n);i&&i[1]?o.getSettingComponent().find(".embed-responsive-item").attr("src","https://www.youtube.com/embed/"+i[1]):alert("Your Youtube URL is invalid!")});var i=t.find(".btn-youtube-169");i.on("click",function(t){t.preventDefault(),o.getSettingComponent().find(".embed-responsive").removeClass("embed-responsive-4by3").addClass("embed-responsive-16by9")});var s=t.find(".btn-youtube-43");s.on("click",function(t){t.preventDefault(),o.getSettingComponent().find(".embed-responsive").removeClass("embed-responsive-16by9").addClass("embed-responsive-4by3")});var a=t.find("#youtube-autoplay");a.on("click",function(){var t=o.getSettingComponent().find(".embed-responsive-item"),n=t.attr("src"),i=n.replace(/(\?.+)+/,"")+"?autoplay="+(a.is(":checked")?1:0);e("Current url: "+n,"New url: "+i),t.attr("src",i)})},showSettingForm:function(t,o,n){e('showSettingForm "youtube" component',o);var i=o.find(".embed-responsive-item"),s=t.find("#youtube-autoplay"),a=i.attr("src");s.prop("checked",-1!==a.indexOf("autoplay=1"))}}}(jQuery);
-//# sourceMappingURL=keditor-components-1.1.3.min.js.map
+//# sourceMappingURL=keditor-components-1.1.4.min.js.map
diff --git a/dist/js/keditor-components-1.1.3.min.js.map b/dist/js/keditor-components-1.1.4.min.js.map
similarity index 98%
rename from dist/js/keditor-components-1.1.3.min.js.map
rename to dist/js/keditor-components-1.1.4.min.js.map
index 7f107e5a..2a5c2f1a 100644
--- a/dist/js/keditor-components-1.1.3.min.js.map
+++ b/dist/js/keditor-components-1.1.4.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["keditor-components-1.1.3.js"],"names":["$","KEditor","keditor","flog","log","components","getContent","component","componentContent","children","audio","find","unwrap","html","settingEnabled","settingTitle","initSettingForm","form","append","showSettingForm","options","fileInput","btnAudioFileInput","off","on","e","preventDefault","trigger","file","this","files","test","type","attr","URL","createObjectURL","load","showSettingPanel","alert","autoplayToggle","checked","removeAttr","showcontrolsToggle","audioWidth","css","value","jQuery","remove","btnEdit","inputData","prompt","iframe","src","length","getSettingComponent","btn169","removeClass","addClass","btn43","init","contentArea","container","img","self","photoEdit","next","width","height","inputAlign","panel","inputResponsive","cbbStyle","val","inputWidth","inputHeight","newWidth","newHeight","Math","round","ratio","algin","hasClass","prop","CKEDITOR","disableAutoInline","toolbarGroups","name","groups","title","allowedContent","bodyId","templates_replaceContent","enterMode","forceEnterMode","format_tags","removePlugins","removeButtons","minimumChangeMilliseconds","onComponentChanged","call","onContainerChanged","onContentChanged","editor","ckeditor","onComponentReady","id","instances","getData","destroy","video","btnVideoFileInput","removeProp","loopToggle","currentWidth","replace","currentRatio","videoWidth","vimeoRegex","match","chkAutoplay","embedItem","currentUrl","newUrl","is","indexOf","youtubeRegex"],"mappings":"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","file":"keditor-components-1.1.3.min.js","sourcesContent":["/**\r\n * KEditor Audio Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.3\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['audio'] = {\r\n getContent: function (component, keditor) {\r\n flog('getContent \"audio\" component, component');\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n var audio = componentContent.find('audio');\r\n audio.unwrap();\r\n\r\n return componentContent.html();\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Audio Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('init \"audio\" settings', form);\r\n\r\n form.append(\r\n ''\r\n );\r\n },\r\n\r\n showSettingForm: function (form, component, keditor) {\r\n flog('showSettingForm \"audio\" component', form, component);\r\n\r\n var options = keditor.options;\r\n\r\n var audio = component.find('audio');\r\n var fileInput = form.find('#audioFileInput');\r\n var btnAudioFileInput = form.find('.btn-audioFileInput');\r\n btnAudioFileInput.off('click').on('click', function (e) {\r\n e.preventDefault();\r\n\r\n fileInput.trigger('click');\r\n });\r\n fileInput.off('change').on('change', function () {\r\n var file = this.files[0];\r\n if (/audio/.test(file.type)) {\r\n // Todo: Upload to your server :)\r\n\r\n audio.attr('src', URL.createObjectURL(file));\r\n\r\n audio.load(function () {\r\n keditor.showSettingPanel(component, options);\r\n });\r\n } else {\r\n alert('Your selected file is not an audio file!');\r\n }\r\n });\r\n\r\n var autoplayToggle = form.find('#audio-autoplay');\r\n autoplayToggle.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n audio.attr('autoplay', 'autoplay');\r\n } else {\r\n audio.removeAttr('autoplay');\r\n }\r\n });\r\n\r\n var showcontrolsToggle = form.find('#audio-showcontrols');\r\n showcontrolsToggle.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n audio.attr('controls', 'controls');\r\n } else {\r\n audio.removeAttr('controls');\r\n }\r\n });\r\n\r\n var audioWidth = form.find('#audio-width');\r\n audioWidth.off('change').on('change', function () {\r\n audio.css('width', this.value + '%');\r\n });\r\n }\r\n };\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Google Map Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.3\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['googlemap'] = {\r\n getContent: function (component, keditor) {\r\n flog('getContent \"googlemap\" component', component);\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n componentContent.find('.googlemap-cover').remove();\r\n\r\n return componentContent.html();\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Google Map Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('initSettingForm \"googlemap\" component');\r\n\r\n form.append(\r\n ''\r\n );\r\n\r\n var btnEdit = form.find('.btn-googlemap-edit');\r\n btnEdit.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n var inputData = prompt('Please enter Google Map embed code in here:');\r\n var iframe = $(inputData);\r\n var src = iframe.attr('src');\r\n if (iframe.length > 0 && src && src.length > 0) {\r\n keditor.getSettingComponent().find('.embed-responsive-item').attr('src', src);\r\n } else {\r\n alert('Your Google Map embed code is invalid!');\r\n }\r\n });\r\n\r\n var btn169 = form.find('.btn-googlemap-169');\r\n btn169.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-4by3').addClass('embed-responsive-16by9');\r\n });\r\n\r\n var btn43 = form.find('.btn-googlemap-43');\r\n btn43.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-16by9').addClass('embed-responsive-4by3');\r\n });\r\n }\r\n };\r\n\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Photo Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.3\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['photo'] = {\r\n init: function (contentArea, container, component, keditor) {\r\n flog('init \"photo\" component', component);\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n var img = componentContent.find('img');\r\n\r\n img.css('display', 'inline-block');\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Photo Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('initSettingForm \"photo\" component');\r\n\r\n var self = this;\r\n var options = keditor.options;\r\n\r\n form.append(\r\n ''\r\n );\r\n\r\n var photoEdit = form.find('#photo-edit');\r\n var fileInput = photoEdit.next();\r\n photoEdit.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n fileInput.trigger('click');\r\n });\r\n fileInput.on('change', function () {\r\n var file = this.files[0];\r\n if (/image/.test(file.type)) {\r\n var img = keditor.getSettingComponent().find('img');\r\n img.attr('src', URL.createObjectURL(file));\r\n img.css({\r\n width: '',\r\n height: ''\r\n });\r\n img.load(function () {\r\n keditor.showSettingPanel(keditor.getSettingComponent(), options);\r\n });\r\n } else {\r\n alert('Your selected file is not photo!');\r\n }\r\n });\r\n\r\n var inputAlign = form.find('#photo-align');\r\n inputAlign.on('change', function () {\r\n var panel = keditor.getSettingComponent().find('.photo-panel');\r\n panel.css('text-align', this.value);\r\n });\r\n\r\n var inputResponsive = form.find('#photo-responsive');\r\n inputResponsive.on('click', function () {\r\n keditor.getSettingComponent().find('img')[this.checked ? 'addClass' : 'removeClass']('img-responsive');\r\n });\r\n\r\n var cbbStyle = form.find('#photo-style');\r\n cbbStyle.on('change', function () {\r\n var img = keditor.getSettingComponent().find('img');\r\n var val = this.value;\r\n\r\n img.removeClass('img-rounded img-circle img-thumbnail');\r\n if (val) {\r\n img.addClass(val);\r\n }\r\n });\r\n\r\n var inputWidth = form.find('#photo-width');\r\n var inputHeight = form.find('#photo-height');\r\n inputWidth.on('change', function () {\r\n var img = keditor.getSettingComponent().find('img');\r\n var newWidth = +this.value;\r\n var newHeight = Math.round(newWidth / self.ratio);\r\n\r\n if (newWidth <= 0) {\r\n newWidth = self.width;\r\n newHeight = self.height;\r\n this.value = newWidth;\r\n }\r\n\r\n img.css({\r\n 'width': newWidth,\r\n 'height': newHeight\r\n });\r\n inputHeight.val(newHeight);\r\n });\r\n inputHeight.on('change', function () {\r\n var img = keditor.getSettingComponent().find('img');\r\n var newHeight = +this.value;\r\n var newWidth = Math.round(newHeight * self.ratio);\r\n\r\n if (newHeight <= 0) {\r\n newWidth = self.width;\r\n newHeight = self.height;\r\n this.value = newHeight;\r\n }\r\n\r\n img.css({\r\n 'height': newHeight,\r\n 'width': newWidth\r\n });\r\n inputWidth.val(newWidth);\r\n });\r\n },\r\n\r\n showSettingForm: function (form, component, keditor) {\r\n flog('showSettingForm \"photo\" component', component);\r\n\r\n var self = this;\r\n var inputAlign = form.find('#photo-align');\r\n var inputResponsive = form.find('#photo-responsive');\r\n var inputWidth = form.find('#photo-width');\r\n var inputHeight = form.find('#photo-height');\r\n var cbbStyle = form.find('#photo-style');\r\n\r\n var panel = component.find('.photo-panel');\r\n var img = panel.find('img');\r\n\r\n var algin = panel.css('text-align');\r\n if (algin !== 'right' || algin !== 'center') {\r\n algin = 'left';\r\n }\r\n\r\n if (img.hasClass('img-rounded')) {\r\n cbbStyle.val('img-rounded');\r\n } else if (img.hasClass('img-circle')) {\r\n cbbStyle.val('img-circle');\r\n } else if (img.hasClass('img-thumbnail')) {\r\n cbbStyle.val('img-thumbnail');\r\n } else {\r\n cbbStyle.val('');\r\n }\r\n\r\n inputAlign.val(algin);\r\n inputResponsive.prop('checked', img.hasClass('img-responsive'));\r\n inputWidth.val(img.width());\r\n inputHeight.val(img.height());\r\n\r\n $('').attr('src', img.attr('src')).load(function() {\r\n self.ratio = this.width / this.height;\r\n self.width = this.width;\r\n self.height = this.height;\r\n });\r\n }\r\n };\r\n\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Text Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.3\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n CKEDITOR.disableAutoInline = true;\r\n\r\n // Text component\r\n // ---------------------------------------------------------------------\r\n KEditor.components['text'] = {\r\n options: {\r\n toolbarGroups: [\r\n {name: 'document', groups: ['mode', 'document', 'doctools']},\r\n {name: 'editing', groups: ['find', 'selection', 'spellchecker', 'editing']},\r\n {name: 'forms', groups: ['forms']},\r\n {name: 'basicstyles', groups: ['basicstyles', 'cleanup']},\r\n {name: 'paragraph', groups: ['list', 'indent', 'blocks', 'align', 'bidi', 'paragraph']},\r\n {name: 'links', groups: ['links']},\r\n {name: 'insert', groups: ['insert']},\r\n '/',\r\n {name: 'clipboard', groups: ['clipboard', 'undo']},\r\n {name: 'styles', groups: ['styles']},\r\n {name: 'colors', groups: ['colors']},\r\n {name: 'tools', groups: ['tools']},\r\n {name: 'others', groups: ['others']},\r\n ],\r\n title: false,\r\n allowedContent: true, // DISABLES Advanced Content Filter. This is so templates with classes: allowed through\r\n bodyId: 'editor',\r\n templates_replaceContent: false,\r\n enterMode: 'P',\r\n forceEnterMode: true,\r\n format_tags: 'p;h1;h2;h3;h4;h5;h6',\r\n removePlugins: 'table,magicline,tabletools',\r\n removeButtons: 'Save,NewPage,Preview,Print,Templates,PasteText,PasteFromWord,Find,Replace,SelectAll,Scayt,Form,HiddenField,ImageButton,Button,Select,Textarea,TextField,Radio,Checkbox,Outdent,Indent,Blockquote,CreateDiv,Language,Table,HorizontalRule,Smiley,SpecialChar,PageBreak,Iframe,Styles,BGColor,Maximize,About,ShowBlocks,BidiLtr,BidiRtl,Flash,Image,Subscript,Superscript,Anchor',\r\n minimumChangeMilliseconds: 100\r\n },\r\n\r\n init: function (contentArea, container, component, keditor) {\r\n flog('init \"text\" component', component);\r\n\r\n var self = this;\r\n var options = keditor.options;\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n componentContent.prop('contenteditable', true);\r\n\r\n componentContent.on('input', function (e) {\r\n if (typeof options.onComponentChanged === 'function') {\r\n options.onComponentChanged.call(contentArea, e, component);\r\n }\r\n\r\n if (typeof options.onContainerChanged === 'function') {\r\n options.onContainerChanged.call(contentArea, e, container);\r\n }\r\n\r\n if (typeof options.onContentChanged === 'function') {\r\n options.onContentChanged.call(contentArea, e);\r\n }\r\n });\r\n\r\n var editor = componentContent.ckeditor(self.options).editor;\r\n editor.on('instanceReady', function () {\r\n flog('CKEditor is ready', component);\r\n\r\n if (typeof options.onComponentReady === 'function') {\r\n options.onComponentReady.call(contentArea, component, editor);\r\n }\r\n });\r\n },\r\n\r\n getContent: function (component, keditor) {\r\n flog('getContent \"text\" component', component);\r\n\r\n var componentContent = component.find('.keditor-component-content');\r\n var id = componentContent.attr('id');\r\n var editor = CKEDITOR.instances[id];\r\n if (editor) {\r\n return editor.getData();\r\n } else {\r\n return componentContent.html();\r\n }\r\n },\r\n\r\n destroy: function (component, keditor) {\r\n flog('destroy \"text\" component', component);\r\n\r\n var id = component.find('.keditor-component-content').attr('id');\r\n var editor = CKEDITOR.instances[id];\r\n if (editor) {\r\n editor.destroy();\r\n }\r\n }\r\n };\r\n\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Video Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.3\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['video'] = {\r\n getContent: function (component, keditor) {\r\n flog('getContent \"video\" component', component);\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n var video = componentContent.find('video');\r\n video.unwrap();\r\n\r\n return componentContent.html();\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Video Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('init \"video\" settings', form);\r\n\r\n form.append(\r\n ''\r\n );\r\n },\r\n\r\n showSettingForm: function (form, component, keditor) {\r\n flog('showSettingForm \"video\" settings', form, component);\r\n\r\n var options = keditor.options;\r\n var video = component.find('video');\r\n var fileInput = form.find('#videoFileInput');\r\n var btnVideoFileInput = form.find('.btn-videoFileInput');\r\n btnVideoFileInput.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n fileInput.trigger('click');\r\n });\r\n fileInput.off('change').on('change', function () {\r\n var file = this.files[0];\r\n if (/video/.test(file.type)) {\r\n // Todo: Upload to your server :)\r\n\r\n video.attr('src', URL.createObjectURL(file));\r\n\r\n video.load(function () {\r\n keditor.showSettingPanel(component, options);\r\n });\r\n } else {\r\n alert('Your selected file is not an video file!');\r\n }\r\n });\r\n\r\n var autoplayToggle = form.find('#video-autoplay');\r\n autoplayToggle.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n video.prop('autoplay', true);\r\n } else {\r\n video.removeProp('autoplay');\r\n }\r\n });\r\n\r\n var loopToggle = form.find('#video-loop');\r\n loopToggle.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n video.prop('loop', true);\r\n } else {\r\n video.removeProp('loop');\r\n }\r\n });\r\n\r\n var ratio = form.find('.video-ratio');\r\n ratio.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n var currentWidth = video.css('width') || video.prop('width');\r\n currentWidth = currentWidth.replace('px', '');\r\n\r\n var currentRatio = this.value === '16/9' ? 16 / 9 : 4 / 3;\r\n var height = currentWidth / currentRatio;\r\n video.css('width', currentWidth + 'px');\r\n video.css('height', height + 'px');\r\n video.removeProp('width');\r\n video.removeProp('height');\r\n }\r\n });\r\n\r\n var showcontrolsToggle = form.find('#video-showcontrols');\r\n showcontrolsToggle.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n video.attr('controls', 'controls');\r\n } else {\r\n video.removeAttr('controls');\r\n }\r\n });\r\n\r\n var videoWidth = form.find('#video-width');\r\n videoWidth.off('change').on('change', function () {\r\n video.css('width', this.value + 'px');\r\n var currentRatio = form.find('.video-ratio:checked').val() === '16/9' ? 16 / 9 : 4 / 3;\r\n var height = this.value / currentRatio;\r\n video.css('height', height + 'px');\r\n video.removeProp('width');\r\n video.removeProp('height');\r\n });\r\n }\r\n };\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Vimeo Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.3\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['vimeo'] = {\r\n getContent: function (component, keditor) {\r\n flog('getContent \"vimeo\" component', component);\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n componentContent.find('.vimeo-cover').remove();\r\n\r\n return componentContent.html();\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Vimeo Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('initSettingForm \"vimeo\" component');\r\n\r\n form.append(\r\n ''\r\n );\r\n\r\n var btnEdit = form.find('.btn-vimeo-edit');\r\n btnEdit.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n var inputData = prompt('Please enter Vimeo URL in here:');\r\n var vimeoRegex = /https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/;\r\n var match = inputData.match(vimeoRegex);\r\n if (match && match[1]) {\r\n keditor.getSettingComponent().find('.embed-responsive-item').attr('src', 'https://player.vimeo.com/video/' + match[1] + '?byline=0&portrait=0&badge=0');\r\n } else {\r\n alert('Your Vimeo URL is invalid!');\r\n }\r\n });\r\n\r\n var btn169 = form.find('.btn-vimeo-169');\r\n btn169.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-4by3').addClass('embed-responsive-16by9');\r\n });\r\n\r\n var btn43 = form.find('.btn-vimeo-43');\r\n btn43.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-16by9').addClass('embed-responsive-4by3');\r\n });\r\n\r\n var chkAutoplay = form.find('#vimeo-autoplay');\r\n chkAutoplay.on('click', function () {\r\n var embedItem = keditor.getSettingComponent().find('.embed-responsive-item');\r\n var currentUrl = embedItem.attr('src');\r\n var newUrl = (currentUrl.replace(/(\\?.+)+/, '')) + '?byline=0&portrait=0&badge=0&autoplay=' + (chkAutoplay.is(':checked') ? 1 : 0);\r\n\r\n flog('Current url: ' + currentUrl, 'New url: ' + newUrl);\r\n embedItem.attr('src', newUrl);\r\n });\r\n },\r\n\r\n showSettingForm: function (form, component, keditor) {\r\n flog('showSettingForm \"vimeo\" component', component);\r\n\r\n var embedItem = component.find('.embed-responsive-item');\r\n var chkAutoplay = form.find('#vimeo-autoplay');\r\n var src = embedItem.attr('src');\r\n\r\n chkAutoplay.prop('checked', src.indexOf('autoplay=1') !== -1);\r\n }\r\n };\r\n\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Youtube Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.3\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['youtube'] = {\r\n getContent: function (component, keditor) {\r\n flog('getContent \"youtube\" component', component);\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n componentContent.find('.youtube-cover').remove();\r\n\r\n return componentContent.html();\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Youtube Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('initSettingForm \"youtube\" component');\r\n\r\n form.append(\r\n ''\r\n );\r\n\r\n var btnEdit = form.find('.btn-youtube-edit');\r\n btnEdit.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n var inputData = prompt('Please enter Youtube URL in here:');\r\n var youtubeRegex = /^(?:http(?:s)?:\\/\\/)?(?:www\\.)?(?:m\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:(?:watch)?\\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\\/))([^\\?&\\\"'>]+)/;\r\n var match = inputData.match(youtubeRegex);\r\n if (match && match[1]) {\r\n keditor.getSettingComponent().find('.embed-responsive-item').attr('src', 'https://www.youtube.com/embed/' + match[1]);\r\n } else {\r\n alert('Your Youtube URL is invalid!');\r\n }\r\n });\r\n\r\n var btn169 = form.find('.btn-youtube-169');\r\n btn169.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-4by3').addClass('embed-responsive-16by9');\r\n });\r\n\r\n var btn43 = form.find('.btn-youtube-43');\r\n btn43.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-16by9').addClass('embed-responsive-4by3');\r\n });\r\n\r\n var chkAutoplay = form.find('#youtube-autoplay');\r\n chkAutoplay.on('click', function () {\r\n var embedItem = keditor.getSettingComponent().find('.embed-responsive-item');\r\n var currentUrl = embedItem.attr('src');\r\n var newUrl = (currentUrl.replace(/(\\?.+)+/, '')) + '?autoplay=' + (chkAutoplay.is(':checked') ? 1 : 0);\r\n\r\n flog('Current url: ' + currentUrl, 'New url: ' + newUrl);\r\n embedItem.attr('src', newUrl);\r\n });\r\n },\r\n\r\n showSettingForm: function (form, component, keditor) {\r\n flog('showSettingForm \"youtube\" component', component);\r\n\r\n var embedItem = component.find('.embed-responsive-item');\r\n var chkAutoplay = form.find('#youtube-autoplay');\r\n var src = embedItem.attr('src');\r\n\r\n chkAutoplay.prop('checked', src.indexOf('autoplay=1') !== -1);\r\n }\r\n };\r\n\r\n})(jQuery);\r\n"],"sourceRoot":"/source/"}
\ No newline at end of file
+{"version":3,"sources":["keditor-components-1.1.4.js"],"names":["$","KEditor","keditor","flog","log","components","getContent","component","componentContent","children","audio","find","unwrap","html","settingEnabled","settingTitle","initSettingForm","form","append","showSettingForm","options","fileInput","btnAudioFileInput","off","on","e","preventDefault","trigger","file","this","files","test","type","attr","URL","createObjectURL","load","showSettingPanel","alert","autoplayToggle","checked","removeAttr","showcontrolsToggle","audioWidth","css","value","jQuery","remove","btnEdit","inputData","prompt","iframe","src","length","getSettingComponent","btn169","removeClass","addClass","btn43","init","contentArea","container","img","self","photoEdit","next","width","height","inputAlign","panel","inputResponsive","cbbStyle","val","inputWidth","inputHeight","newWidth","newHeight","Math","round","ratio","algin","hasClass","prop","CKEDITOR","disableAutoInline","toolbarGroups","name","groups","title","allowedContent","bodyId","templates_replaceContent","enterMode","forceEnterMode","format_tags","removePlugins","removeButtons","minimumChangeMilliseconds","onComponentChanged","call","onContainerChanged","onContentChanged","editor","ckeditor","onComponentReady","id","instances","getData","destroy","video","btnVideoFileInput","removeProp","loopToggle","currentWidth","replace","currentRatio","videoWidth","vimeoRegex","match","chkAutoplay","embedItem","currentUrl","newUrl","is","indexOf","youtubeRegex"],"mappings":"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","file":"keditor-components-1.1.4.min.js","sourcesContent":["/**\r\n * KEditor Audio Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.4\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['audio'] = {\r\n getContent: function (component, keditor) {\r\n flog('getContent \"audio\" component, component');\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n var audio = componentContent.find('audio');\r\n audio.unwrap();\r\n\r\n return componentContent.html();\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Audio Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('init \"audio\" settings', form);\r\n\r\n form.append(\r\n ''\r\n );\r\n },\r\n\r\n showSettingForm: function (form, component, keditor) {\r\n flog('showSettingForm \"audio\" component', form, component);\r\n\r\n var options = keditor.options;\r\n\r\n var audio = component.find('audio');\r\n var fileInput = form.find('#audioFileInput');\r\n var btnAudioFileInput = form.find('.btn-audioFileInput');\r\n btnAudioFileInput.off('click').on('click', function (e) {\r\n e.preventDefault();\r\n\r\n fileInput.trigger('click');\r\n });\r\n fileInput.off('change').on('change', function () {\r\n var file = this.files[0];\r\n if (/audio/.test(file.type)) {\r\n // Todo: Upload to your server :)\r\n\r\n audio.attr('src', URL.createObjectURL(file));\r\n\r\n audio.load(function () {\r\n keditor.showSettingPanel(component, options);\r\n });\r\n } else {\r\n alert('Your selected file is not an audio file!');\r\n }\r\n });\r\n\r\n var autoplayToggle = form.find('#audio-autoplay');\r\n autoplayToggle.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n audio.attr('autoplay', 'autoplay');\r\n } else {\r\n audio.removeAttr('autoplay');\r\n }\r\n });\r\n\r\n var showcontrolsToggle = form.find('#audio-showcontrols');\r\n showcontrolsToggle.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n audio.attr('controls', 'controls');\r\n } else {\r\n audio.removeAttr('controls');\r\n }\r\n });\r\n\r\n var audioWidth = form.find('#audio-width');\r\n audioWidth.off('change').on('change', function () {\r\n audio.css('width', this.value + '%');\r\n });\r\n }\r\n };\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Google Map Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.4\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['googlemap'] = {\r\n getContent: function (component, keditor) {\r\n flog('getContent \"googlemap\" component', component);\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n componentContent.find('.googlemap-cover').remove();\r\n\r\n return componentContent.html();\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Google Map Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('initSettingForm \"googlemap\" component');\r\n\r\n form.append(\r\n ''\r\n );\r\n\r\n var btnEdit = form.find('.btn-googlemap-edit');\r\n btnEdit.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n var inputData = prompt('Please enter Google Map embed code in here:');\r\n var iframe = $(inputData);\r\n var src = iframe.attr('src');\r\n if (iframe.length > 0 && src && src.length > 0) {\r\n keditor.getSettingComponent().find('.embed-responsive-item').attr('src', src);\r\n } else {\r\n alert('Your Google Map embed code is invalid!');\r\n }\r\n });\r\n\r\n var btn169 = form.find('.btn-googlemap-169');\r\n btn169.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-4by3').addClass('embed-responsive-16by9');\r\n });\r\n\r\n var btn43 = form.find('.btn-googlemap-43');\r\n btn43.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-16by9').addClass('embed-responsive-4by3');\r\n });\r\n }\r\n };\r\n\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Photo Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.4\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['photo'] = {\r\n init: function (contentArea, container, component, keditor) {\r\n flog('init \"photo\" component', component);\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n var img = componentContent.find('img');\r\n\r\n img.css('display', 'inline-block');\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Photo Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('initSettingForm \"photo\" component');\r\n\r\n var self = this;\r\n var options = keditor.options;\r\n\r\n form.append(\r\n ''\r\n );\r\n\r\n var photoEdit = form.find('#photo-edit');\r\n var fileInput = photoEdit.next();\r\n photoEdit.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n fileInput.trigger('click');\r\n });\r\n fileInput.on('change', function () {\r\n var file = this.files[0];\r\n if (/image/.test(file.type)) {\r\n var img = keditor.getSettingComponent().find('img');\r\n img.attr('src', URL.createObjectURL(file));\r\n img.css({\r\n width: '',\r\n height: ''\r\n });\r\n img.load(function () {\r\n keditor.showSettingPanel(keditor.getSettingComponent(), options);\r\n });\r\n } else {\r\n alert('Your selected file is not photo!');\r\n }\r\n });\r\n\r\n var inputAlign = form.find('#photo-align');\r\n inputAlign.on('change', function () {\r\n var panel = keditor.getSettingComponent().find('.photo-panel');\r\n panel.css('text-align', this.value);\r\n });\r\n\r\n var inputResponsive = form.find('#photo-responsive');\r\n inputResponsive.on('click', function () {\r\n keditor.getSettingComponent().find('img')[this.checked ? 'addClass' : 'removeClass']('img-responsive');\r\n });\r\n\r\n var cbbStyle = form.find('#photo-style');\r\n cbbStyle.on('change', function () {\r\n var img = keditor.getSettingComponent().find('img');\r\n var val = this.value;\r\n\r\n img.removeClass('img-rounded img-circle img-thumbnail');\r\n if (val) {\r\n img.addClass(val);\r\n }\r\n });\r\n\r\n var inputWidth = form.find('#photo-width');\r\n var inputHeight = form.find('#photo-height');\r\n inputWidth.on('change', function () {\r\n var img = keditor.getSettingComponent().find('img');\r\n var newWidth = +this.value;\r\n var newHeight = Math.round(newWidth / self.ratio);\r\n\r\n if (newWidth <= 0) {\r\n newWidth = self.width;\r\n newHeight = self.height;\r\n this.value = newWidth;\r\n }\r\n\r\n img.css({\r\n 'width': newWidth,\r\n 'height': newHeight\r\n });\r\n inputHeight.val(newHeight);\r\n });\r\n inputHeight.on('change', function () {\r\n var img = keditor.getSettingComponent().find('img');\r\n var newHeight = +this.value;\r\n var newWidth = Math.round(newHeight * self.ratio);\r\n\r\n if (newHeight <= 0) {\r\n newWidth = self.width;\r\n newHeight = self.height;\r\n this.value = newHeight;\r\n }\r\n\r\n img.css({\r\n 'height': newHeight,\r\n 'width': newWidth\r\n });\r\n inputWidth.val(newWidth);\r\n });\r\n },\r\n\r\n showSettingForm: function (form, component, keditor) {\r\n flog('showSettingForm \"photo\" component', component);\r\n\r\n var self = this;\r\n var inputAlign = form.find('#photo-align');\r\n var inputResponsive = form.find('#photo-responsive');\r\n var inputWidth = form.find('#photo-width');\r\n var inputHeight = form.find('#photo-height');\r\n var cbbStyle = form.find('#photo-style');\r\n\r\n var panel = component.find('.photo-panel');\r\n var img = panel.find('img');\r\n\r\n var algin = panel.css('text-align');\r\n if (algin !== 'right' || algin !== 'center') {\r\n algin = 'left';\r\n }\r\n\r\n if (img.hasClass('img-rounded')) {\r\n cbbStyle.val('img-rounded');\r\n } else if (img.hasClass('img-circle')) {\r\n cbbStyle.val('img-circle');\r\n } else if (img.hasClass('img-thumbnail')) {\r\n cbbStyle.val('img-thumbnail');\r\n } else {\r\n cbbStyle.val('');\r\n }\r\n\r\n inputAlign.val(algin);\r\n inputResponsive.prop('checked', img.hasClass('img-responsive'));\r\n inputWidth.val(img.width());\r\n inputHeight.val(img.height());\r\n\r\n $('').attr('src', img.attr('src')).load(function() {\r\n self.ratio = this.width / this.height;\r\n self.width = this.width;\r\n self.height = this.height;\r\n });\r\n }\r\n };\r\n\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Text Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.4\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n CKEDITOR.disableAutoInline = true;\r\n\r\n // Text component\r\n // ---------------------------------------------------------------------\r\n KEditor.components['text'] = {\r\n options: {\r\n toolbarGroups: [\r\n {name: 'document', groups: ['mode', 'document', 'doctools']},\r\n {name: 'editing', groups: ['find', 'selection', 'spellchecker', 'editing']},\r\n {name: 'forms', groups: ['forms']},\r\n {name: 'basicstyles', groups: ['basicstyles', 'cleanup']},\r\n {name: 'paragraph', groups: ['list', 'indent', 'blocks', 'align', 'bidi', 'paragraph']},\r\n {name: 'links', groups: ['links']},\r\n {name: 'insert', groups: ['insert']},\r\n '/',\r\n {name: 'clipboard', groups: ['clipboard', 'undo']},\r\n {name: 'styles', groups: ['styles']},\r\n {name: 'colors', groups: ['colors']},\r\n {name: 'tools', groups: ['tools']},\r\n {name: 'others', groups: ['others']},\r\n ],\r\n title: false,\r\n allowedContent: true, // DISABLES Advanced Content Filter. This is so templates with classes: allowed through\r\n bodyId: 'editor',\r\n templates_replaceContent: false,\r\n enterMode: 'P',\r\n forceEnterMode: true,\r\n format_tags: 'p;h1;h2;h3;h4;h5;h6',\r\n removePlugins: 'table,magicline,tabletools',\r\n removeButtons: 'Save,NewPage,Preview,Print,Templates,PasteText,PasteFromWord,Find,Replace,SelectAll,Scayt,Form,HiddenField,ImageButton,Button,Select,Textarea,TextField,Radio,Checkbox,Outdent,Indent,Blockquote,CreateDiv,Language,Table,HorizontalRule,Smiley,SpecialChar,PageBreak,Iframe,Styles,BGColor,Maximize,About,ShowBlocks,BidiLtr,BidiRtl,Flash,Image,Subscript,Superscript,Anchor',\r\n minimumChangeMilliseconds: 100\r\n },\r\n\r\n init: function (contentArea, container, component, keditor) {\r\n flog('init \"text\" component', component);\r\n\r\n var self = this;\r\n var options = keditor.options;\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n componentContent.prop('contenteditable', true);\r\n\r\n componentContent.on('input', function (e) {\r\n if (typeof options.onComponentChanged === 'function') {\r\n options.onComponentChanged.call(contentArea, e, component);\r\n }\r\n\r\n if (typeof options.onContainerChanged === 'function') {\r\n options.onContainerChanged.call(contentArea, e, container);\r\n }\r\n\r\n if (typeof options.onContentChanged === 'function') {\r\n options.onContentChanged.call(contentArea, e);\r\n }\r\n });\r\n\r\n var editor = componentContent.ckeditor(self.options).editor;\r\n editor.on('instanceReady', function () {\r\n flog('CKEditor is ready', component);\r\n\r\n if (typeof options.onComponentReady === 'function') {\r\n options.onComponentReady.call(contentArea, component, editor);\r\n }\r\n });\r\n },\r\n\r\n getContent: function (component, keditor) {\r\n flog('getContent \"text\" component', component);\r\n\r\n var componentContent = component.find('.keditor-component-content');\r\n var id = componentContent.attr('id');\r\n var editor = CKEDITOR.instances[id];\r\n if (editor) {\r\n return editor.getData();\r\n } else {\r\n return componentContent.html();\r\n }\r\n },\r\n\r\n destroy: function (component, keditor) {\r\n flog('destroy \"text\" component', component);\r\n\r\n var id = component.find('.keditor-component-content').attr('id');\r\n var editor = CKEDITOR.instances[id];\r\n if (editor) {\r\n editor.destroy();\r\n }\r\n }\r\n };\r\n\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Video Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.4\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['video'] = {\r\n getContent: function (component, keditor) {\r\n flog('getContent \"video\" component', component);\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n var video = componentContent.find('video');\r\n video.unwrap();\r\n\r\n return componentContent.html();\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Video Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('init \"video\" settings', form);\r\n\r\n form.append(\r\n ''\r\n );\r\n },\r\n\r\n showSettingForm: function (form, component, keditor) {\r\n flog('showSettingForm \"video\" settings', form, component);\r\n\r\n var options = keditor.options;\r\n var video = component.find('video');\r\n var fileInput = form.find('#videoFileInput');\r\n var btnVideoFileInput = form.find('.btn-videoFileInput');\r\n btnVideoFileInput.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n fileInput.trigger('click');\r\n });\r\n fileInput.off('change').on('change', function () {\r\n var file = this.files[0];\r\n if (/video/.test(file.type)) {\r\n // Todo: Upload to your server :)\r\n\r\n video.attr('src', URL.createObjectURL(file));\r\n\r\n video.load(function () {\r\n keditor.showSettingPanel(component, options);\r\n });\r\n } else {\r\n alert('Your selected file is not an video file!');\r\n }\r\n });\r\n\r\n var autoplayToggle = form.find('#video-autoplay');\r\n autoplayToggle.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n video.prop('autoplay', true);\r\n } else {\r\n video.removeProp('autoplay');\r\n }\r\n });\r\n\r\n var loopToggle = form.find('#video-loop');\r\n loopToggle.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n video.prop('loop', true);\r\n } else {\r\n video.removeProp('loop');\r\n }\r\n });\r\n\r\n var ratio = form.find('.video-ratio');\r\n ratio.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n var currentWidth = video.css('width') || video.prop('width');\r\n currentWidth = currentWidth.replace('px', '');\r\n\r\n var currentRatio = this.value === '16/9' ? 16 / 9 : 4 / 3;\r\n var height = currentWidth / currentRatio;\r\n video.css('width', currentWidth + 'px');\r\n video.css('height', height + 'px');\r\n video.removeProp('width');\r\n video.removeProp('height');\r\n }\r\n });\r\n\r\n var showcontrolsToggle = form.find('#video-showcontrols');\r\n showcontrolsToggle.off('click').on('click', function (e) {\r\n if (this.checked) {\r\n video.attr('controls', 'controls');\r\n } else {\r\n video.removeAttr('controls');\r\n }\r\n });\r\n\r\n var videoWidth = form.find('#video-width');\r\n videoWidth.off('change').on('change', function () {\r\n video.css('width', this.value + 'px');\r\n var currentRatio = form.find('.video-ratio:checked').val() === '16/9' ? 16 / 9 : 4 / 3;\r\n var height = this.value / currentRatio;\r\n video.css('height', height + 'px');\r\n video.removeProp('width');\r\n video.removeProp('height');\r\n });\r\n }\r\n };\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Vimeo Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.4\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['vimeo'] = {\r\n getContent: function (component, keditor) {\r\n flog('getContent \"vimeo\" component', component);\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n componentContent.find('.vimeo-cover').remove();\r\n\r\n return componentContent.html();\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Vimeo Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('initSettingForm \"vimeo\" component');\r\n\r\n form.append(\r\n ''\r\n );\r\n\r\n var btnEdit = form.find('.btn-vimeo-edit');\r\n btnEdit.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n var inputData = prompt('Please enter Vimeo URL in here:');\r\n var vimeoRegex = /https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/;\r\n var match = inputData.match(vimeoRegex);\r\n if (match && match[1]) {\r\n keditor.getSettingComponent().find('.embed-responsive-item').attr('src', 'https://player.vimeo.com/video/' + match[1] + '?byline=0&portrait=0&badge=0');\r\n } else {\r\n alert('Your Vimeo URL is invalid!');\r\n }\r\n });\r\n\r\n var btn169 = form.find('.btn-vimeo-169');\r\n btn169.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-4by3').addClass('embed-responsive-16by9');\r\n });\r\n\r\n var btn43 = form.find('.btn-vimeo-43');\r\n btn43.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-16by9').addClass('embed-responsive-4by3');\r\n });\r\n\r\n var chkAutoplay = form.find('#vimeo-autoplay');\r\n chkAutoplay.on('click', function () {\r\n var embedItem = keditor.getSettingComponent().find('.embed-responsive-item');\r\n var currentUrl = embedItem.attr('src');\r\n var newUrl = (currentUrl.replace(/(\\?.+)+/, '')) + '?byline=0&portrait=0&badge=0&autoplay=' + (chkAutoplay.is(':checked') ? 1 : 0);\r\n\r\n flog('Current url: ' + currentUrl, 'New url: ' + newUrl);\r\n embedItem.attr('src', newUrl);\r\n });\r\n },\r\n\r\n showSettingForm: function (form, component, keditor) {\r\n flog('showSettingForm \"vimeo\" component', component);\r\n\r\n var embedItem = component.find('.embed-responsive-item');\r\n var chkAutoplay = form.find('#vimeo-autoplay');\r\n var src = embedItem.attr('src');\r\n\r\n chkAutoplay.prop('checked', src.indexOf('autoplay=1') !== -1);\r\n }\r\n };\r\n\r\n})(jQuery);\r\n\r\n/**\r\n * KEditor Youtube Component\r\n * @copyright: Kademi (http://kademi.co)\r\n * @author: Kademi (http://kademi.co)\r\n * @version: 1.1.4\r\n * @dependencies: $, $.fn.draggable, $.fn.droppable, $.fn.sortable, Bootstrap, FontAwesome (optional)\r\n */\r\n(function ($) {\r\n var KEditor = $.keditor;\r\n var flog = KEditor.log;\r\n\r\n KEditor.components['youtube'] = {\r\n getContent: function (component, keditor) {\r\n flog('getContent \"youtube\" component', component);\r\n\r\n var componentContent = component.children('.keditor-component-content');\r\n componentContent.find('.youtube-cover').remove();\r\n\r\n return componentContent.html();\r\n },\r\n\r\n settingEnabled: true,\r\n\r\n settingTitle: 'Youtube Settings',\r\n\r\n initSettingForm: function (form, keditor) {\r\n flog('initSettingForm \"youtube\" component');\r\n\r\n form.append(\r\n ''\r\n );\r\n\r\n var btnEdit = form.find('.btn-youtube-edit');\r\n btnEdit.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n var inputData = prompt('Please enter Youtube URL in here:');\r\n var youtubeRegex = /^(?:http(?:s)?:\\/\\/)?(?:www\\.)?(?:m\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:(?:watch)?\\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\\/))([^\\?&\\\"'>]+)/;\r\n var match = inputData.match(youtubeRegex);\r\n if (match && match[1]) {\r\n keditor.getSettingComponent().find('.embed-responsive-item').attr('src', 'https://www.youtube.com/embed/' + match[1]);\r\n } else {\r\n alert('Your Youtube URL is invalid!');\r\n }\r\n });\r\n\r\n var btn169 = form.find('.btn-youtube-169');\r\n btn169.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-4by3').addClass('embed-responsive-16by9');\r\n });\r\n\r\n var btn43 = form.find('.btn-youtube-43');\r\n btn43.on('click', function (e) {\r\n e.preventDefault();\r\n\r\n keditor.getSettingComponent().find('.embed-responsive').removeClass('embed-responsive-16by9').addClass('embed-responsive-4by3');\r\n });\r\n\r\n var chkAutoplay = form.find('#youtube-autoplay');\r\n chkAutoplay.on('click', function () {\r\n var embedItem = keditor.getSettingComponent().find('.embed-responsive-item');\r\n var currentUrl = embedItem.attr('src');\r\n var newUrl = (currentUrl.replace(/(\\?.+)+/, '')) + '?autoplay=' + (chkAutoplay.is(':checked') ? 1 : 0);\r\n\r\n flog('Current url: ' + currentUrl, 'New url: ' + newUrl);\r\n embedItem.attr('src', newUrl);\r\n });\r\n },\r\n\r\n showSettingForm: function (form, component, keditor) {\r\n flog('showSettingForm \"youtube\" component', component);\r\n\r\n var embedItem = component.find('.embed-responsive-item');\r\n var chkAutoplay = form.find('#youtube-autoplay');\r\n var src = embedItem.attr('src');\r\n\r\n chkAutoplay.prop('checked', src.indexOf('autoplay=1') !== -1);\r\n }\r\n };\r\n\r\n})(jQuery);\r\n"],"sourceRoot":"/source/"}
\ No newline at end of file
diff --git a/examples/snippets/default/snippets.html b/examples/snippets/default/snippets.html
index 8c9a8f1d..039eeaaf 100644
--- a/examples/snippets/default/snippets.html
+++ b/examples/snippets/default/snippets.html
@@ -1,14 +1,14 @@
-
+
-
+
@@ -17,7 +17,7 @@
-
+
@@ -26,7 +26,7 @@
-
+
@@ -35,7 +35,7 @@
-
+
@@ -46,7 +46,7 @@
-
+
@@ -57,7 +57,7 @@
-
+
@@ -73,18 +73,18 @@
-
+
Cras justo odio Donec id elit non mi
Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
-
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro labore architecto fuga tempore omnis aliquid, rerum numquam deleniti ipsam earum velit aliquam deserunt, molestiae officiis mollitia accusantium suscipit fugiat esse magnam eaque cumque, iste corrupti magni? Illo dicta saepe, maiores fugit aliquid consequuntur aut, rem ex iusto dolorem molestias obcaecati eveniet vel voluptatibus recusandae illum, voluptatem! Odit est possimus nesciunt.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro labore architecto fuga tempore omnis aliquid, rerum numquam deleniti ipsam earum velit aliquam deserunt, molestiae officiis mollitia accusantium suscipit fugiat esse magnam eaque cumque, iste corrupti magni? Illo dicta saepe, maiores fugit aliquid consequuntur aut, rem ex iusto dolorem molestias obcaecati eveniet vel voluptatibus recusandae illum, voluptatem! Odit est possimus nesciunt.