var $content; var $builder; var iframe; var inlineEditors = []; let preventEdit = false; var edited_item = false; var ui_mode = jQuery('body').hasClass('mfn-dev-ui') ? 'dev' : 'default'; var MfnVbApp = (function($){ let $editpanel = $(document); let screen = 'desktop'; let prebuiltType = 'end'; let context_el; let sample_img = mfnvbvars.themepath+'/muffin-options/svg/placeholders/image.svg'; let sample_icon = 'icon-lamp'; let mfnbuilder = localStorage.getItem('mfn-builder') ? JSON.parse(localStorage.getItem('mfn-builder')) : {}; let scroll_top = 0; let formaction = $('.btn-save-form-primary').attr('data-action'); let savebutton = $('.btn-save-form-primary span').text(); let previewTab; let pageid = mfnvbvars.pageid; let samplecontentid = mfnvbvars.sample_content_id; let wpnonce = mfnvbvars.wpnonce; var builder_type = mfnvbvars.builder_type; let $edited_div = false; let inlineIndex = 0; let $navigator = $('.mfn-navigator'); let winH = $(window).height(); let winW = $(window).width(); let item_name = false; var elements_ver = 'default'; let $undo = $('.btn-undo.mfn-history-btn'); let $redo = $('.btn-redo.mfn-history-btn'); //localStorage.setItem('mfnhistory', []); //console.log(mfnvbvars.pagedata); // new elements objects var elements = { wrap: function(size) { var uid = getUid(); var size_class = size; if( size != 'divider' ) size_class = sizes.filter( s => s.key === size )[0]; var new_wrap = {}; new_wrap = JSON.parse( JSON.stringify(mfnvbvars.elements.wrap) ); new_wrap['title'] = 'Wrap'; if( builder_type == 'header' ) { // header presets new_wrap.attr['css_advanced_flex_grow'] = {val: '1', css_path: '.mcb-section .mcb-wrap-mfnuidelement', css_style: 'flex-grow'}; new_wrap.attr['css_advanced_flex_grow_laptop'] = {val: '1', css_path: '.mcb-section .mcb-wrap-mfnuidelement', css_style: 'flex-grow_laptop'}; new_wrap.attr['css_advanced_flex_grow_tablet'] = {val: '1', css_path: '.mcb-section .mcb-wrap-mfnuidelement', css_style: 'flex-grow_tablet'}; new_wrap.attr['css_advanced_flex_grow_mobile'] = {val: '1', css_path: '.mcb-section .mcb-wrap-mfnuidelement', css_style: 'flex-grow_mobile'}; new_wrap.attr['css_advanced_align_items'] = {val: 'center', css_path: '.mcb-section .mcb-wrap-mfnuidelement .mcb-wrap-inner', css_style: 'align-items'}; new_wrap.attr['css_advanced_align_items_laptop'] = {val: 'center', css_path: '.mcb-section .mcb-wrap-mfnuidelement .mcb-wrap-inner', css_style: 'align-items_laptop'}; new_wrap.attr['css_advanced_align_items_tablet'] = {val: 'center', css_path: '.mcb-section .mcb-wrap-mfnuidelement .mcb-wrap-inner', css_style: 'align-items_tablet'}; new_wrap.attr['css_advanced_align_items_mobile'] = {val: 'center', css_path: '.mcb-section .mcb-wrap-mfnuidelement .mcb-wrap-inner', css_style: 'align-items_mobile'}; } new_wrap.uid = uid; new_wrap.size = size; new_wrap.tablet_size = size; new_wrap.laptop_size = size; new_wrap.tablet_resized = "0"; new_wrap.mobile_size = '1/1'; new_wrap.attr.sticky = "0"; new_wrap.attr.tablet_sticky = "0"; new_wrap.attr.laptop_sticky = "0"; new_wrap.attr.mobile_sticky = "0"; mfnvbvars.pagedata.push(new_wrap); var answer = {}; if( size == 'divider' ){ answer.html = ''; }else{ answer.html = ''; } answer.uid = uid; return answer; }, section: function() { var uid = getUid(); //var new_section = {...mfnvbvars.elements.section}; var section_class = 'mfn-default-section'; var new_section = {}; new_section = JSON.parse( JSON.stringify(mfnvbvars.elements.section) ); new_section.uid = uid; new_section.ver = elements_ver; section_class = 'mfn-'+elements_ver+'-section'; if( builder_type == 'header' ){ // header presets new_section.attr['css_advanced_align_items'] = {val: 'center', css_path: '.mcb-section-mfnuidelement .section_wrapper', css_style: 'align-items'}; new_section.attr['css_advanced_align_items_laptop'] = {val: 'center', css_path: '.mcb-section-mfnuidelement .section_wrapper', css_style: 'align-items_laptop'}; new_section.attr['css_advanced_align_items_tablet'] = {val: 'center', css_path: '.mcb-section-mfnuidelement .section_wrapper', css_style: 'align-items_tablet'}; new_section.attr['css_advanced_align_items_mobile'] = {val: 'center', css_path: '.mcb-section-mfnuidelement .section_wrapper', css_style: 'align-items_mobile'}; } if( builder_type == 'megamenu' ){ // megamenu presets new_section.attr['css_advanced_background_color'] = {val: '#ffffff', css_path: '.mcb-section-mfnuidelement', css_style: 'background-color'}; new_section.attr['css_advanced_align_items'] = {val: 'flex-start', css_path: '.mcb-section-mfnuidelement .section_wrapper', css_style: 'align-items'}; } mfnvbvars.pagedata.push(new_section); let global_sections_html = ''; if( !$content.find('body').hasClass('mfn-template-section') ) { global_sections_html = 'Global sections'; } var answer = {}; answer.html = '
Select a wrap layout

or choose from

'+( builder_type == 'header' ? 'Pre-built headers' : 'Pre-built sections' )+' '+ global_sections_html +'
'; answer.uid = uid; return answer; }, item: function(name, alias) { var script = false; var uid = getUid(); //var new_item = {...mfnvbvars.elements[name]}; var new_item = {}; new_item = JSON.parse( JSON.stringify(renderMfnFields.items[name]) ); var html = new_item.html.replaceAll('uidhere', uid); if( new_item.script ){ script = new_item.script; } delete new_item.html; delete new_item.script; if( name != alias && typeof aliases[alias] !== 'undefined' ){ aliases[alias].map(function(el) { html = html.replace(new_item['attr'][el.key], el.val); // update html new_item['attr'][el.key] = el.val; // update object }); } new_item.uid = uid; new_item.size = '1/1'; new_item.tablet_size = '1/1'; new_item.laptop_size = '1/1'; new_item.mobile_size = '1/1'; new_item.tablet_resized = "0"; if( name == 'icon_2' ) { new_item.attr['width_switcher'] = 'inline'; html = html.replace('vb-item', 'vb-item mfn-item-inline'); } if( builder_type == 'header' ) { if( name != 'header_logo' && name != 'header_search' && name != 'image' ) { new_item.attr['width_switcher'] = 'inline'; html = html.replace('vb-item', 'vb-item mfn-item-inline'); } if( name == 'header_logo' || name == 'image' ){ new_item.attr['width_switcher'] = 'custom'; new_item.attr['css_advanced_flex'] = {val: '250px', css_path: '.mcb-section .mcb-wrap .mcb-item-mfnuidelement', css_style: 'width'}; be_layout.drag_new.force_rerender = true; } if( name == 'header_search' ){ new_item.attr['width_switcher'] = 'custom'; new_item.attr['css_advanced_flex'] = {val: '300px', css_path: '.mcb-section .mcb-wrap .mcb-item-mfnuidelement', css_style: 'width'}; } if( name == 'header_icon' ){ new_item.attr['css_icon_count_top'] = {val: '-9px', css_path: '.mcb-section .mcb-wrap .mcb-item-mfnuidelement .mfn-icon-box .icon-wrapper .header-cart-count,.mcb-section .mcb-wrap .mcb-item-mfnuidelement .mfn-icon-box .icon-wrapper .header-wishlist-count', css_style: 'top'}; new_item.attr['css_icon_count_right'] = {val: '-11px', css_path: '.mcb-section .mcb-wrap .mcb-item-mfnuidelement .mfn-icon-box .icon-wrapper .header-cart-count,.mcb-section .mcb-wrap .mcb-item-mfnuidelement .mfn-icon-box .icon-wrapper .header-wishlist-count', css_style: 'right'}; } } mfnvbvars.pagedata.push(new_item); if( script ){ var arr = []; arr.push(html); arr.push(script); return arr; }else{ return html; } } }; function getUid(){ return Math.random().toString(36).substring(4); } // show shortcode add icon $('.modal-add-shortcode .browse-icon .mfn-button-upload').on('click', function(e) { e.preventDefault(); $('.mfn-modal.modal-select-icon .mfn-items-list li').removeClass('active'); $('.mfn-modal.modal-select-icon').addClass('show'); }); function backToWidgets(){ $('.mfn-visualbuilder .sidebar-panel .sidebar-panel-header .header-items .title-group .sidebar-panel-desc .sidebar-panel-title').text('Add element'); $('.mfn-visualbuilder .sidebar-panel .sidebar-panel-header .header-items .title-group .sidebar-panel-icon').attr('class', 'sidebar-panel-icon mfn-icon-add-big'); if($('.mfn-ui').hasClass('mfn-sidebar-hidden-footer')) $('.mfn-ui').removeClass('mfn-sidebar-hidden-footer'); $(".panel").hide(); $(".header").hide(); $(".panel-items").show(); $(".header-items").show(); $('.panel-edit-item .mfn-form'); $('.mfn-ui').removeClass('mfn-editing-section mfn-editing-wrap mfn-editing-element'); if( edited_item && typeof edited_item.jsclass !== 'undefined' ) $('.mfn-ui').removeClass('mfn-editing-'+edited_item.jsclass); if( $builder.find('.mfn-current-editing').length ) $builder.find('.mfn-current-editing').removeClass('mfn-current-editing'); $('.panel-items .mfn-search').focus(); if( ui_mode == 'dev' ){ $('.topbar-nav #main-menu li').removeClass('active'); $('.topbar-nav #main-menu li.menu-items').addClass('active'); } // resetSaveButton(); } function showPrebuilts() { $(".panel").hide(); $(".header").hide(); $(".panel-prebuilt-sections").show(); $(".header-prebuilt-sections").show(); if( ui_mode == 'dev' ){ $('li.menu-sections').siblings('li').removeClass('active'); $('li.menu-sections').addClass('active'); } if( $('.panel-prebuilt-sections ul.prebuilt-sections-list li').length ) return; var html = ''; _.map( mfnDbLists.prebuilts, (item, i) => html += `
  • ${item.title}
    Insert
  • ` ).join(''); $('.panel-prebuilt-sections ul.prebuilt-sections-list').html(html); } function showYoast() { $(".panel").hide(); $(".header").hide(); $(".panel-yoast-seo").show(); $(".header-yoast-seo").show(); if( ui_mode == 'dev' ){ $('.mfn-visualbuilder .mfn-topbar .topbar-nav nav ul li').removeClass('active'); } } function showGlobals( $section_uid ) { $(".panel").hide(); $(".header").hide(); $(".panel-global-sections").show(); $(".header-global-sections").show(); $('.prebuilt-sections-list.global-sections').empty(); _.map(mfnDbLists['global_sections'], function(el, i){ if( i > 0 ){ $('.prebuilt-sections-list.global-sections').append(`
  • ${el}
    ${ i == $section_uid ? 'Selected' : 'Select'}
  • `); } }); if( !$('.prebuilt-sections-list.global-sections li').length ){ $('.prebuilt-sections-list.global-sections').append('

    No global sections have been created yet. If you would like to set global section, please create it first.

    '); } } var enableBeforeUnload = function() { if( !$('.mfn-form-options').is(':visible') && !$('.panel-view-themeoptions').is(':visible') ) { window.onbeforeunload = function(e) { return 'The changes you made will be lost if you navigate away from this page'; }; } }; $('.mfn-visualbuilder .sidebar-panel-content ul.items-list li a').on('click', function(e) { e.preventDefault(); }); $('.mfn-topbar .topbar-addons .mfn-option-dropdown.page-options > a').on('click', function(e) { e.preventDefault(); }); document.addEventListener('keydown', function(event) { catchShortcuts(event); }); function catchShortcuts(e){ if((e.ctrlKey || e.metaKey) && e.key == "s") { // ctr || cmd + s e.preventDefault(); if(!$('.btn-save-form-primary.btn-save-changes').hasClass('disabled')){ $('.btn-save-form-primary.btn-save-changes').trigger('click'); } return false; }else if((e.ctrlKey || e.metaKey) && e.key == "y") { // ctr || cmd + y if( !$('.mfn-field-value').is(':focus') ){ e.preventDefault(); if(!$redo.hasClass('loading') && !$redo.hasClass('inactive')){ $redo.trigger('click'); } return false; }else if( $('.panel-edit-item .mfn-field-value:focus').length ){ setTimeout(function() { fieldUpdate($('.panel-edit-item .mfn-field-value:focus')); }, 5); } }else if((e.ctrlKey || e.metaKey) && e.key == "i") { // ctr || cmd + i e.preventDefault(); $('.mfn-visualbuilder a.btn-navigator-switcher').trigger('click'); return false; }else if(e.ctrlKey && e.shiftKey && e.key == "Z") { // ctr || cmd + shift + z if( !$('.mfn-field-value').is(':focus') ){ e.preventDefault(); if(!$redo.hasClass('loading') && !$redo.hasClass('inactive')){ $redo.trigger('click'); } return false; }else if( $('.panel-edit-item .mfn-field-value:focus').length ){ setTimeout(function() { fieldUpdate($('.panel-edit-item .mfn-field-value:focus')); }, 5); } }else if(e.metaKey && e.shiftKey && e.key == "z") { // ctr || cmd + shift + z if( !$('.mfn-field-value').is(':focus') ){ e.preventDefault(); if(!$redo.hasClass('loading') && !$redo.hasClass('inactive')){ $redo.trigger('click'); } return false; }else if( $('.panel-edit-item .mfn-field-value:focus').length ){ setTimeout(function() { fieldUpdate($('.panel-edit-item .mfn-field-value:focus')); }, 5); } }else if(e.ctrlKey && e.shiftKey && e.key === "P") { // ctr || cmd + shift + p e.preventDefault(); $('.mfn-visualbuilder a.mfn-preview-generate').trigger('click'); return false; }else if(e.metaKey && e.shiftKey && e.key == "p") { // ctr || cmd + shift + p e.preventDefault(); $('.mfn-visualbuilder a.mfn-preview-generate').trigger('click'); return false; }else if(e.ctrlKey && e.shiftKey && e.key === "M") { // ctr || cmd + shift + m e.preventDefault(); $('.mfn-visualbuilder .sidebar-panel .sidebar-panel-footer .btn-change-resolution .dropdown-wrapper a[data-preview="desktop"]').trigger('click'); return false; }else if(e.metaKey && e.shiftKey && e.key == "m") { // ctr || cmd + shift + m e.preventDefault(); $('.mfn-visualbuilder .sidebar-panel .sidebar-panel-footer .btn-change-resolution .dropdown-wrapper a[data-preview="desktop"]').trigger('click'); return false; }else if(e.metaKey && e.shiftKey && e.key == "h") { // ctr || cmd + shift + h e.preventDefault(); $('.mfn-visualbuilder ul li.menu-revisions a').trigger('click'); return false; }else if(e.ctrlKey && e.shiftKey && e.key === "H") { // ctr || cmd + shift + h e.preventDefault(); $('.mfn-visualbuilder ul li.menu-revisions a').trigger('click'); return false; }else if(e.ctrlKey && e.shiftKey && e.key === "V") { // ctr || cmd + shift + v e.preventDefault(); window.open( $('a.menu-viewpage').attr('href') ); return false; }else if(e.metaKey && e.shiftKey && e.key == "v") { // ctr || cmd + shift + v e.preventDefault(); window.open( $('a.menu-viewpage').attr('href') ); return false; }else if((e.ctrlKey || e.metaKey) && e.key == "z") { // ctr || cmd + z if( !$('.CodeMirror-code').is(':focus') && !$content.find('.mfn-current-editing .mfn-inline-editor').is(":focus") && !$('.panel-edit-item .mfn-field-value').is(':focus') ){ e.preventDefault(); if(!$undo.hasClass('loading') && !$undo.hasClass('inactive')){ $undo.trigger('click'); } return false; }else if( $('.panel-edit-item .mfn-field-value:focus').length ){ setTimeout(function() { fieldUpdate($('.panel-edit-item .mfn-field-value:focus')); }, 5); } }else if((e.ctrlKey || e.metaKey) && e.key == "c"){ // ctr || cmd + c if( iframe.window.getSelection().toString() == '' && !$content.find('.mfn-current-editing .mfn-inline-editor').is(":focus") && !$content.find('input').is(':focus') && !$content.find('textarea').is(':focus') && !$('input').is(':focus') && !$('textarea').is(':focus') && !$('textarea').is(':focus') && !$('.CodeMirror-code').is(':focus') ){ e.preventDefault(); if( $content.find('.mfn-current-editing').length ){ context_el = $content.find('.mfn-current-editing').attr('data-uid'); copypaste.copy(context_el); } } return false; }else if((e.ctrlKey || e.metaKey) && e.key == "v"){ // ctr || cmd + v if( !$('.components-modal__frame.yoast').length && !$content.find('.mfn-current-editing .mfn-inline-editor').is(":focus") && !$content.find('input').is(':focus') && !$content.find('textarea').is(':focus') && !$('input').is(':focus') && !$('textarea').is(':focus') && !$('.CodeMirror-code').is(':focus') ){ e.preventDefault(); if( $content.find('.mfn-current-editing').length ){ context_el = $content.find('.mfn-current-editing').attr('data-uid'); //let $el = $content.find('.vb-item[data-uid="'+context_el+'"]'); copypaste.parent = $content.find('.vb-item[data-uid="'+context_el+'"]'); copypaste.paste(); } } return false; }else if( e.key == "Delete" ){ if( !$content.find('.mfn-current-editing .mfn-inline-editor').is(":focus") && !$('input').is(':focus') && !$('textarea').is(':focus') && !$('.CodeMirror-code').is(':focus') ){ e.preventDefault(); // Global Wraps -> Prevent removing wrap on template editor if( $('body').hasClass('mfn-template-wrap') && $content.find('.mfn-current-editing').hasClass('mcb-section')) { return; } $content.find('.mfn-current-editing').find('.mfn-header').first().find('.mfn-element-delete').trigger('click'); } return false; }else if( (e.ctrlKey || e.metaKey) && e.key == "d" ){ // Global Sections/Wraps -> Prevent duplicating wrap/section on page if( ($('body').hasClass('mfn-template-builder-wrap') && $content.find('.mfn-current-editing').hasClass('mcb-wrap')) || ($('body').hasClass('mfn-template-builder-section') && $content.find('.mfn-current-editing').hasClass('mcb-section')) ){ return false; } if( $content.find('.mfn-current-editing').hasClass('mfn-global-wrap') || $content.find('.mfn-current-editing').hasClass('mfn-global-section') ) { return false; } // duplicate if( $content.find('.mfn-current-editing').length && !$('.mfn-field-value').is(':focus') ){ e.preventDefault(); $content.find('.mfn-current-editing').find('.mfn-header').first().find('.mfn-module-clone').trigger('click'); } return false; }else if( (e.ctrlKey || e.metaKey) && e.key == "p" ){ // show/hide left panel e.preventDefault(); $('#mfn-sidebar-switcher').trigger('click'); return false; }else if( e.key == "Enter" ){ // enter if( $('.mfn-modal.show .btn-modal-confirm').length ){ e.preventDefault(); $('.mfn-modal.show .btn-modal-confirm').trigger('click'); } if( $('.mfn-modal.modal-display-conditions.show .btn-modal-save').length ){ e.preventDefault(); $('.mfn-modal.modal-display-conditions.show .btn-modal-save').trigger('click'); } return false; }else if( e.key == "Escape" ){ // Escape if( $('.mfn-modal.show .modalbox-header .btn-modal-close').length ){ e.preventDefault(); $('.mfn-modal.show .modalbox-header .btn-modal-close').trigger('click'); } return false; }else if( (e.ctrlKey || e.metaKey) && (e.key == "/" || e.key == "?" ) ) { // ctr || cmd + / e.preventDefault(); if(!$('.modal-shortcuts').hasClass('show')){ $('.modal-shortcuts').addClass('show'); } return false; } } $('.mfn-visualbuilder .sidebar-panel-content ul.items-list li a').contextmenu(function(e) { if( builder_type == 'header' ) return; e.preventDefault(); var type = $(this).closest('li').attr('data-type'); if( $('.mfn-visualbuilder .sidebar-panel-content ul.fav-items-list li[data-type="'+type+'"]').length ){ $('.mfn-items-list-contextmenu ul li a[data-action="love-it"] span.label').text('Remove'); }else{ $('.mfn-items-list-contextmenu ul li a[data-action="love-it"] span.label').text('Add to favourites'); } item_name = $(e.target).closest('li').attr('data-type'); var $li = $('.mfn-visualbuilder .sidebar-panel-content ul.items-list li.mfn-item-'+item_name); $('.mfn-items-list-contextmenu').show().css({'left':e.clientX, 'top': e.clientY}); $(document).bind('click', hideLeftItemsContext); $content.find('body').bind('click', hideLeftItemsContext); }); function hideLeftItemsContext(e) { var context = $('.mfn-items-list-contextmenu'); if (!context.is(e.target) && context.has(e.target).length === 0){ $('.mfn-items-list-contextmenu').hide(); } $(document).unbind('click', hideLeftItemsContext); $content.find('body').unbind('click', hideLeftItemsContext); } $('.mfn-fav-items-wrapper h5').on('click', function(e) { e.preventDefault(); $('.mfn-fav-items-wrapper').toggleClass('mfn-favs-closed'); if( $('.mfn-fav-items-wrapper').hasClass('mfn-favs-closed') ){ $('.mfn-fav-items-content').slideUp(300); }else{ $('.mfn-fav-items-content').slideDown(300); } }); $('.mfn-items-list-contextmenu ul li a').on('click', function(e) { e.preventDefault(); if (mfnvbvars.view == 'demo') { $('.mfn-items-list-contextmenu').hide(); return; } var action = $(this).attr('data-action'); $('.mfn-items-list-contextmenu').hide(); if( action == 'love-it' ) { $.ajax( mfnajaxurl, { type : "POST", data : { 'mfn-builder-nonce': wpnonce, action: 'mfn_builder_favorites', item: item_name } }).done(function(response) { if( response == 'set') { $('.mfn-fav-items-wrapper ul.fav-items-list').append( $('.mfn-visualbuilder .sidebar-panel-content ul.items-list li[data-type="'+item_name+'"]').clone(true) ); }else{ $('.mfn-fav-items-wrapper ul.fav-items-list li[data-type="'+item_name+'"]').remove(); } if( !$('.mfn-fav-items-wrapper ul.fav-items-list li').length ){ $('.mfn-fav-items-wrapper').removeClass('isset-favs').addClass('empty-favs'); }else{ $('.mfn-fav-items-wrapper').addClass('isset-favs').removeClass('empty-favs'); } }); } }); function init() { iframeReady(); // sections toolbar buttons document.addEventListener("visibilitychange", handleVisibilityChange); if( $content.find('.column_banner_box').length ){ mfnBannerBox(); } uploader.browse(); uploader.delete(); uploader.deleteAllGallery(); uploader.sortable(); var mac = /(Mac)/i.test(navigator.platform); if (mac) { $content.find('body').addClass('mfn-mac'); $('body').addClass('mfn-mac'); } if(window.location.hash && window.location.hash == '#page-options-tab') { $(window.location.hash).trigger('click'); } $('.mfn-visualbuilder .sidebar-panel-content ul.items-list li').on('mousedown', function(e) { if (e.which != 3) calculateIframeHeight(); }).on('mouseup', resetIframeHeight); $('.mfn-visualbuilder .sidebar-panel-content ul.items-list').on('mouseenter', function() { be_layout.drag_new.init(); }); if($content.find('.masonry').length){ $content.find('.masonry').each(function() { $(this).addClass('mfn-initialized'); }); } if($content.find('.isotope').length){ $content.find('.isotope').each(function() { $(this).addClass('mfn-initialized'); }); } /* theme options if template header || footer is active */ if( $content.find('#mfn-header-template').length ) $('body').addClass('mfn-to-disabled-with-header-tmpl'); if( $content.find('#mfn-footer-template').length ) $('body').addClass('mfn-to-disabled-with-footer-tmpl'); if(!mfnbuilder.clipboard){ $content.find('.section-header .mfn-section-import').addClass('mfn-disabled'); } if( builder_type == 'standard' && $content.find('.mfn-shop-archive-tmpl-builder').length ){ $content.find('.mfn-shop-archive-tmpl-builder').addClass('block-pointer-inside').append('Edit shop template'); } if( builder_type == 'standard' && $content.find('.mfn-portfolio-tmpl-builder').length ){ $content.find('.mfn-portfolio-tmpl-builder').addClass('block-pointer-inside').append('Edit Portfolio Template'); } if( $content.find('.mfn-main-slider.mfn-rev-slider').length ){ $content.find('.mfn-main-slider.mfn-rev-slider').append('Edit Slider'); } if( $content.find('.mfn-global-section').length ){ const globalSections = $content.find('.mfn-global-section'); globalSections.each( (index, item) => { $(item).append('Edit Global Section'); }) } if( $content.find('.mfn-global-wrap').length ){ const globalWraps = $content.find('.mfn-global-wrap'); globalWraps.each( (index, item) => { $(item).append('Edit Global Wrap'); }) } if( $content.find('#Footer').length ){ $content.find('#Footer').append('Edit Footer'); } if( $content.find('#Header_creative').length ){ $content.find('#Header_creative').append('Edit Header'); } else if( $content.find('#Top_bar').length ){ $content.find('#Top_bar').append('Edit Header'); } if( $content.find('.mfn-header-tmpl-builder:not(.mfn-builder-active)').length ){ if (mfnvbvars.view == 'demo'){ $content.find('.mfn-header-tmpl-builder:not(.mfn-builder-active)').append('Edit Header'); } else { $content.find('.mfn-header-tmpl-builder:not(.mfn-builder-active)').append('Edit Header'); } } if( $content.find('.mfn-footer-tmpl-builder:not(.mfn-builder-active)').length ){ if (mfnvbvars.view == 'demo'){ $content.find('.mfn-footer-tmpl-builder:not(.mfn-builder-active)').append('Edit Footer'); } else { $content.find('.mfn-footer-tmpl-builder:not(.mfn-builder-active)').append('Edit Footer'); } } $('.mfn-preloader .loading-text').fadeOut(function() { $('.mfn-preloader .loading-text').html('Generating page local CSS
    '); }).fadeIn(); be_layout.init(); Transforms.attachInitialMargins(); modernmenu.start(); settings.start(); dynamicData.init(); if( ui_mode == 'dev' ) anotherPagesModal.init(); historyStorage.init(); be_navigator.init(); mfn_conditional_logic.init(); // be_layout.drag_new.init(); be_layout.sortable.init(); $('.mfn-preloader').fadeOut(500, function() { $('body').removeClass('mfn-preloader-active'); }); $(document).trigger('be:init'); } function loopAllStyleFields(uid = false) { var copied = []; if( uid ) { copied = mfnvbvars.pagedata.filter( (item) => item.uid == uid ); } else { copied = mfnvbvars.pagedata; //copied.push(mfnvbvars.page_options); } //console.log('loop all style fields'); $.each(mfnvbvars.page_options, function(i, v) { if( i.includes('style:') || i.includes('css_') ) { if( typeof v == 'object' && _.has(v, 'css_path') && _.has(v, 'val') ) { grabArrStyle(v['css_path'], v['css_style'], v['val'], pageid); } else if(i.includes('style:')) { var sel_ex = i.split(':'); grabArrStyle(sel_ex[1], sel_ex[2], v, pageid); } //grabArrStyle(i.replaceAll('postid', pageid), v); } }); $.each(copied, function(i, v) { if( v === null ) { delete(mfnvbvars.pagedata[i]); delete(copied[i]); }else{ $.each(v.attr, function(a, attr) { if( a.includes('style:') || ( typeof attr === 'object' && _.has(attr, 'css_path')) ) { if( typeof attr == 'object' && _.has(attr, 'css_path') ){ grabArrStyle(attr['css_path'], attr['css_style'], attr['val'], v.uid); if( _.has( additional_css, a) ){ if( _.has( additional_css[a]['rewrites'], attr['val']) ){ addLocalStyle(additional_css[a]['path'].replace('mfnuidelement', v.uid), additional_css[a]['rewrites'][attr['val']], additional_css[a]['style'], screen, v.uid); }else{ addLocalStyle(additional_css[a]['path'].replace('mfnuidelement', v.uid), '', additional_css[a]['style'], screen, v.uid); } } }else{ var sel_ex = a.split(':'); grabArrStyle(sel_ex[1], sel_ex[2], attr, v.uid); if( _.has( additional_css, a) ){ if( _.has( additional_css[a]['rewrites'], attr) ){ addLocalStyle(additional_css[a]['path'].replace('mfnuidelement', v.uid), additional_css[a]['rewrites'][attr], additional_css[a]['style'], screen, v.uid); }else{ addLocalStyle(additional_css[a]['path'].replace('mfnuidelement', v.uid), '', additional_css[a]['style'], screen, v.uid); } } } } if( v.jsclass == 'hotspot' && a == 'hotspots' ) { $.each(attr, function(h, ht) { $.each(ht['val'], function(s, st) { if( s.includes('_mobile') ){ st['css_style'] += '_mobile'; }else if( s.includes('_tablet') ){ st['css_style'] += '_tablet'; }else if( s.includes('_laptop') ){ st['css_style'] += '_laptop'; } grabArrStyle(st['css_path'], st['css_style'], st['val'], v.uid); }); }); } }); } }); copied = []; } $('#mfn-sidebar-switcher').on('click', function() { var $sidebar = $('.mfn-visualbuilder .sidebar-wrapper'); var sidebarW = $sidebar.outerWidth(); if( $('.mfn-visualbuilder').hasClass('sidebar_hidden') ){ $('.mfn-visualbuilder').removeClass('sidebar_hidden'); $content.find('body').removeClass('sidebar_hidden'); $sidebar.css({ 'left': '0'}); $('.mfn-visualbuilder .preview-wrapper').css({'margin-left': sidebarW+'px'}); }else{ $('.mfn-visualbuilder').addClass('sidebar_hidden'); $sidebar.css({ 'left': '-'+sidebarW+'px'}); $('.mfn-visualbuilder .preview-wrapper').css({'margin-left': '0'}); $content.find('body').addClass('sidebar_hidden'); } }); /* Sidebar Resizer */ var resizer = document.getElementById('mfn-sidebar-resizer'); var sidebar = document.getElementById('mfn-vb-sidebar'); var preview = document.getElementById('mfn-preview-wrapper-holder'); var startY, startX, startWidth, endWidth = 420; resizer.addEventListener('mousedown', initDrag, false); function initDrag(e) { startX = e.clientX; sidebar.classList.add("resizing-active"); startWidth = parseInt(sidebar.offsetWidth, 10); document.documentElement.addEventListener('mousemove', doDrag, false); document.documentElement.addEventListener('mouseup', stopDrag, false); } function doDrag(e) { endWidth = (startWidth + e.clientX - startX); if(endWidth < 1200 && endWidth > 400){ sidebar.style.width = endWidth+"px"; sidebar.style.maxWidth = endWidth+"px"; preview.style.marginLeft = endWidth+"px"; if( endWidth > 800 ){ $('.mfn-visualbuilder .sidebar-wrapper').addClass('mfn-items-4-columns').removeClass('mfn-items-3-columns'); }else if( endWidth > 550 ){ $('.mfn-visualbuilder .sidebar-wrapper').addClass('mfn-items-3-columns').removeClass('mfn-items-4-columns'); }else{ $('.mfn-visualbuilder .sidebar-wrapper').removeClass('mfn-items-3-columns mfn-items-4-columns'); } } } function stopDrag(e) { sidebar.classList.remove("resizing-active"); document.documentElement.removeEventListener('mousemove', doDrag, false); document.documentElement.removeEventListener('mouseup', stopDrag, false); } let historyStorage = { allow: true, obj: [], i: 0, /*object: function() { return localStorage.getItem('mfnhistory') ? JSON.parse(localStorage.getItem(`mfnhistory`)) : []; },*/ init: function() { setTimeout(historyStorage.add(), 500); historyStorage.click(); }, add: function() { // addHistory historyStorage.add() if( !historyStorage.allow ) return; //let history = historyStorage.object(); if( historyStorage.i > 0) { //history = history.filter( (y,x) => x >= historyStorage.i ); historyStorage.obj = historyStorage.obj.filter( (y,x) => x >= historyStorage.i ); } historyStorage.i = 0; $('.mfn-history-btn.btn-undo').addClass('loading'); let new_hist = { 'obj': JSON.parse( JSON.stringify(mfnvbvars.pagedata) ), 'pageid': pageid, 'uid': edited_item ? edited_item.uid : false }; if( !$('body').hasClass('mfn-history-ajax-mode') ) { new_hist['html'] = $builder.html(); }else{ new_hist['form'] = prepareForm.get(); } //console.log(new_hist); historyStorage.obj.unshift( new_hist ); //console.log( 'add history '); $('.mfn-history-btn.btn-undo').removeClass('loading'); historyStorage.index(); //console.log( historyStorage.obj ); }, click: function() { $('.mfn-history-btn').on('click', function(e) { e.preventDefault(); $el = $(this); //let history = historyStorage.object(); if( !$el.hasClass('inactive') && !$el.hasClass('loading') ){ let historyAction = 'undo'; if( $el.hasClass('btn-redo') && historyStorage.i > 0 ){ historyAction = 'redo'; historyStorage.i--; }else if( $el.hasClass('btn-undo') && historyStorage.i <= historyStorage.obj.length ){ historyStorage.i++; }else{ $el.addClass('inactive'); return; } $el.addClass('loading'); $content.find('body').addClass('mfn-loading'); historyStorage.restore(); } }); }, index: function() { if(historyStorage.i < historyStorage.obj.length-1){ $undo.removeClass('inactive'); }else{ $undo.addClass('inactive'); } if(historyStorage.i < 1){ $redo.addClass('inactive'); }else{ $redo.removeClass('inactive'); } history = false; }, restore: function() { //let history = historyStorage.object(); var h_event = historyStorage.obj[historyStorage.i]; //console.log(h_event); if( typeof h_event === 'undefined' ) { historyStorage.index(); $('.mfn-history-btn').removeClass('loading'); $content.find('body').removeClass('mfn-loading'); return; } if( h_event.pageid != pageid ) return; edited_item = false; mfnvbvars.pagedata = h_event.obj; if( typeof h_event.html !== 'undefined' ){ $builder.html( h_event.html ); historyStorage.after_restore(h_event); }else{ $.ajax({ url: mfnajaxurl, data: { action: 'mfnsimplerenderhtml', 'mfn-builder-nonce': wpnonce, sections: h_event.form, id: pageid }, type: 'POST', success: function(response){ //console.log(response); $builder.html( response ); historyStorage.after_restore(h_event); } }); } }, after_restore: function(h_event) { if( $builder.find('.mfn-initialized').length ){ $builder.find('.mfn-initialized').removeClass('mfn-initialized mfn-watchChanges mfn-blur-action mfn-focused').removeAttr('data-medium-editor-element medium-editor-index'); inlineEditors = []; } backToWidgets(); $('.mfn-history-btn').removeClass('loading'); $content.find('body').removeClass('mfn-loading'); $content.find("style.mfn-local-style").remove(); blink( true ); runAjaxElements(); inlineEditor(); loopAllStyleFields(); historyStorage.index(); be_layout.emptys.page(); be_layout.emptys.sections(); be_layout.emptys.wraps(); if( $('body').hasClass('mfn-navigator-active') ){ if( $('.mfn-navigator li a.active-element').length ){ be_navigator.show($('.mfn-navigator li a.active-element').attr('data-uid')); }else{ be_navigator.show(h_event.uid); } } if( h_event.uid ){ setTimeout(function() { $builder.find('.vb-item[data-uid="'+h_event.uid+'"]').find('.mfn-header').first().find('.mfn-element-edit').trigger('click'); }, 50); } } } function calculateIframeHeight(){ var offset_top = $('iframe#mfn-vb-ifr').offset().top; if( !$('.mfn-topbar').length && $('body').hasClass('mfn-preview-mode')) offset_top -= $('.mfn-preview-toolbar').outerHeight(); if( $('.mfn-topbar').length ) offset_top -= $('.mfn-topbar').outerHeight(); $content.find('body').addClass('hover'); scroll_top = $content.find("html, body").scrollTop(); if( builder_type != 'header' ) $('.frameOverlay').height( $content.find("body").height() ); $content.find("html").css({ 'overflow': 'hidden' }); $(window).scrollTop( scroll_top ); var mt = scroll_top + offset_top; $('iframe#mfn-vb-ifr').css({ 'margin-top': mt }); $(window).on('scroll', function() { $content.find('html, body').scrollTop( $(this).scrollTop() ); }); } function resetIframeHeight() { $(window).off('scroll'); if( builder_type == 'header' ){ $content.find("html").css({ 'overflow': 'hidden' }); }else{ $content.find("html").css({ 'overflow': 'auto' }); } $content.find('html, body').scrollTop( scroll_top ); $('.frameOverlay').removeAttr('style'); $('iframe#mfn-vb-ifr').removeAttr('style'); $content.find('body').removeClass('hover'); } function hideContext(e) { var context = $content.find('.mfn-builder-area-contextmenu'); if (!context.is(e.target) && context.has(e.target).length === 0){ $content.find('.mfn-builder-area-contextmenu').hide(); } $content.find('body').unbind('click', hideContext); } function hideContextEditor(e) { var context = $('.mfn-builder-area-contextmenu'); if (!context.is(e.target) && context.has(e.target).length === 0){ $('.mfn-builder-area-contextmenu').hide(); } $('body').unbind('click', hideContextEditor); } function handleVisibilityChange() { if ( !document.hidden ) { copypaste.ls_obj = localStorage.getItem("mfn_copy") ? JSON.parse(localStorage.getItem("mfn_copy")) : false; } } function iframeReady(){ sliderInput.unitChange(); sliderInput.customValue(); presets.init(); $content.on('click', '.mfn-rev-slider a:not(.btn-edit-slider), .mcb-column-inner *:not(.mfn-header) a:not(.btn-edit-slider), .mcb-column-inner > a, .mfn-footer-stickymenu a', function(e) { e.preventDefault(); }); document.getElementById('mfn-vb-ifr').contentWindow.addEventListener('keydown', function(event) { catchShortcuts(event); }); if( builder_type == 'header' ){ $builder = $content.find('.mfn-header-tmpl-builder'); headerTmpl.init(); $content.find("html").css({ 'overflow': 'hidden' }); }else if( builder_type == 'megamenu' ){ $builder = $content.find('.mfn-megamenu-tmpl-builder'); }else if( builder_type == 'sidemenu' ){ $builder = $content.find('.mfn-sidemenu-tmpl-builder'); }else if( builder_type == 'popup' ){ $builder = $content.find('.mfn-popup-tmpl-builder .mfn-popup-tmpl-content-wrapper'); }else if( builder_type == 'footer' ){ $builder = $content.find('.mfn-footer-tmpl-builder'); }else if( builder_type == 'shop-archive' ){ $builder = $content.find('.mfn-shop-archive-tmpl-builder'); }else if( builder_type == 'single-post' ){ $builder = $content.find('.mfn-single-post-tmpl-builder'); }else if( builder_type == 'blog' ){ $builder = $content.find('.mfn-blog-tmpl-builder'); }else if( builder_type == 'portfolio' ){ $builder = $content.find('.mfn-portfolio-tmpl-builder'); }else if( builder_type == 'single-portfolio' ){ $builder = $content.find('.mfn-single-portfolio-tmpl-builder'); }else if( builder_type == 'single-product' ){ $builder = $content.find('.mfn-single-product-tmpl-builder'); }else if( builder_type == 'cart' ){ $builder = $content.find('.mfn-cart-tmpl-builder'); cart_tmpl.init(); }else if( builder_type == 'checkout' ){ $builder = $content.find('.mfn-checkout-tmpl-builder'); }else if( builder_type == 'thanks' ){ $builder = $content.find('.mfn-thanks-tmpl-builder'); }else if( builder_type == 'default' ){ $builder = $content.find('.mfn-default-tmpl-builder'); }else if( builder_type == 'section' ){ $builder = $content.find('.mfn-section-tmpl-builder'); }else if( builder_type == 'wrap' ){ $builder = $content.find('.mfn-wrap-tmpl-builder'); }else{ $builder = $content.find('.mfn-default-content-buider'); } mfn_hotspots_field.init(); $builder.addClass('mfn-builder-active'); if( builder_type == 'megamenu' ){ var page_options = mfnvbvars.page_options; if( typeof page_options['megamenu_width'] !== "undefined" && page_options['megamenu_width'] == 'custom-width' ) { $content.find('.mfn-megamenu-wrapper').css('width', page_options['megamenu_custom_width']); }else if( typeof page_options['megamenu_width'] !== "undefined" && page_options['megamenu_width'] == 'full-width' ) { $content.find('.mfn-megamenu-wrapper').addClass('mfn-megamenu-full-width').removeAttr('style'); } page_options = false; } // add element button in wrap $builder.on('click', '.mfn-item-add', function(e) { e.preventDefault(); backToWidgets(); }); if( $content && $content.find('.mcb-item-product_images-inner .woocommerce-product-gallery').length ){ $content.find('.mcb-item-product_images-inner .woocommerce-product-gallery').addClass('mfn-initialized'); } editContentButton(); // sections context menu $builder.on('click', '.section .mfn-option-dropdown .dropdown-wrapper a.mfn-dropdown-item', function(e) { e.preventDefault(); let $it = $(this).closest('.mcb-section'); let sec_uid = $it.data('uid'); let sections_count = $content.find('.mcb-section').length-1; if($(this).hasClass('mfn-section-hide')){ // hide if($it.hasClass('hide')){ $(this).find('.label').text($(this).attr('data-hide')); //$('.mfn-vb-'+sec_uid+' .mfn-type-section.hide input').val(''); if( typeof mfnvbvars.pagedata.filter( (item) => item.uid == sec_uid )[0]['attr']['hide'] !== 'undefined' ){ delete( mfnvbvars.pagedata.filter( (item) => item.uid == sec_uid )[0]['attr']['hide'] ); } $('.mfn-navigator .navigator-tree li.nav-'+sec_uid+' .nav-item-tools .mfn-icon-hide').remove(); }else{ $(this).find('.label').text($(this).attr('data-show')); //$('.mfn-vb-'+sec_uid+' .mfn-type-section.hide input').val('1'); mfnvbvars.pagedata.filter( (item) => item.uid == sec_uid )[0]['attr']['hide'] = '1'; if( $('body').hasClass('mfn-navigator-active') ){ $('.mfn-navigator .navigator-tree li.nav-'+sec_uid+' .nav-item-tools .navigator-arrow').before(''); } } $it.toggleClass('hide'); }else if($(this).hasClass('mfn-section-move-down')){ // move down if($it.next('.mcb-section').length){ $it.insertAfter($it.next()); historyStorage.add(); } }else if($(this).hasClass('mfn-section-move-up')){ // move up if($it.prev('.mcb-section').length){ $it.insertBefore($it.prev()); historyStorage.add(); } }else if( $(this).hasClass('mfn-section-export') ){ // export elementToClipboard(sec_uid); }else if( !$(this).hasClass('mfn-disabled') && $(this).hasClass('mfn-section-import-before') ){ // import before importFromClipboard(sec_uid, 'before'); }else if( !$(this).hasClass('mfn-disabled') && $(this).hasClass('mfn-section-import-after') ){ // import after importFromClipboard(sec_uid, 'after'); }else if( !$(this).hasClass('mfn-disabled') && $(this).hasClass('mfn-section-import-replace') ){ // import & replace - for global sections importFromClipboard(sec_uid, 'replace'); }else if( !$(this).hasClass('mfn-disabled') && $(this).hasClass('mfn-section-convert-to-global') ){ GlobalSections.convertToGlobal( sec_uid ); } }); // add new section "+" addnewsection addsection $builder.on('click', '.mfn-section-add', function(e) { e.preventDefault(); if(!$content.find('.mfn-section-add').hasClass('loading')){ $content.find('.mfn-section-add').addClass('loading'); var new_element = elements.section(); //var navigator_html = be_navigator.item('Section', new_element.uid); let uid = $(this).parent().data('uid'); let count = $content.find('.mcb-section').length; let placement = 'next'; if($(this).hasClass('prev')){placement = 'prev';} removeStartBuilding(); if (typeof(uid) !== 'undefined') { if(placement == 'prev'){ $builder.find('.mcb-section[data-uid='+uid+']').before( new_element.html ); //$navigator.find('.navigator-tree .nav-'+uid).before(navigator_html); }else{ $builder.find('.mcb-section[data-uid='+uid+']').after( new_element.html ); //$navigator.find('.navigator-tree .nav-'+uid).after(navigator_html); } }else{ $builder.prepend( new_element.html ); //$navigator.find('.navigator-tree').prepend(navigator_html); } $content.find('.mfn-section-add').removeClass('loading'); loopAllStyleFields(new_element.uid); if($('body').hasClass('mfn-navigator-active')) be_navigator.show(new_element.uid); $builder.find('.mcb-section-'+new_element.uid+ '.mfn-element-edit').trigger('click'); blink(); } }); $builder.on('click', '.wrap-layout', function(e) { e.preventDefault(); if(!$content.find('.wrap-layouts').hasClass('loading')){ //var navigator_tree = ''; $content.find('.wrap-layouts').addClass('loading'); let id = $(this).closest('.vb-item').attr('data-uid'); let type = $(this).data('type'); if($builder.find('.mcb-section-'+id+' .mfn-section-new').length){ $builder.find('.mcb-section-'+id+' .mfn-section-new').remove(); } if( type == 'wrap-141214' ){ be_layout.new.wrap(id, false, '1/4'); be_layout.new.wrap(id, false, '1/2'); be_layout.new.wrap(id, false, '1/4'); }else if( type == 'wrap-2313' ){ be_layout.new.wrap(id, false, '2/3'); be_layout.new.wrap(id, false, '1/3'); }else if( type == 'wrap-1323' ){ be_layout.new.wrap(id, false, '1/3'); be_layout.new.wrap(id, false, '2/3'); }else if( type == 'wrap-14' ){ be_layout.new.wrap(id, false, '1/4'); be_layout.new.wrap(id, false, '1/4'); be_layout.new.wrap(id, false, '1/4'); be_layout.new.wrap(id, false, '1/4'); }else if( type == 'wrap-13' ){ be_layout.new.wrap(id, false, '1/3'); be_layout.new.wrap(id, false, '1/3'); be_layout.new.wrap(id, false, '1/3'); }else if( type == 'wrap-12' ){ be_layout.new.wrap(id, false, '1/2'); be_layout.new.wrap(id, false, '1/2'); }else{ be_layout.new.wrap(id, false, '1/1'); } } }) $builder.on('click', '.prebuilt-button', function(e) { e.preventDefault(); showPrebuilts(); prebuiltType = $(this).closest('.mcb-section').data('uid'); }); $(document).on('click', '.mfn-yoast-tab', function(e) { e.preventDefault(); if( $content.find('.vb-item.mfn-current-editing').length ) $content.find('.vb-item.mfn-current-editing').removeClass('mfn-current-editing'); showYoast(); }); $builder.on('click', '.add-global-sections-button', function(e) { e.preventDefault(); showGlobals(); }); $content.find('body').append('
    Section
    '); $builder.on('click', '.mfn-element-drag', function(e) { e.preventDefault(); }); $builder.on('click', '.mfn-header .mfn-option-dropdown a', function(e) { e.preventDefault(); }); // inline editor preven default $builder.on('click', '.mfn-inline-editor a', function(e) { e.preventDefault(); }); // Context menu for builder $builder.contextmenu(function(e) { if( $('#mfn-visualbuilder.mfn-ui').hasClass('sidebar_hidden') || $(e.target).closest('.mfn-global-section').length || $(e.target).closest('.mfn-global-wrap').length ) return; e.preventDefault(); if(e.target.closest('.vb-item')){ var diff = iframe.window.jQuery('body').width() - e.pageX; if( diff < 200 ){ $content.find('.mfn-builder-area-contextmenu').css({'right': 0, 'left': 'initial'}); }else{ $content.find('.mfn-builder-area-contextmenu').css({'left': e.pageX, 'right': 'initial'}); } $content.find('.mfn-builder-area-contextmenu').show().css({top: e.pageY}); context_el = $(e.target).closest('.vb-item').attr('data-uid'); var this_el = mfnvbvars.pagedata.filter( (item) => item.uid == context_el )[0]; if( $(e.target).closest('.vb-item').hasClass('mcb-section')){ $content.find('.mfn-builder-area-contextmenu').attr('data-edited', 'Section'); $content.find('.mfn-builder-area-contextmenu .mfn-context-header').html('Section'); }else if( $(e.target).closest('.mcb-column-inner').length ){ $content.find('.mfn-builder-area-contextmenu').attr('data-edited', this_el.title); $content.find('.mfn-builder-area-contextmenu .mfn-context-header').html( this_el.title ); }else{ $content.find('.mfn-builder-area-contextmenu').attr('data-edited', 'Wrap'); context_el = $(e.target).closest('.mcb-wrap').attr('data-uid'); $content.find('.mfn-builder-area-contextmenu .mfn-context-header').html('Wrap'); } if( !copypaste.ls_obj ){ $content.find('.mfn-builder-area-contextmenu .mfn-context-paste').addClass('mfn-context-inactive'); $content.find('.mfn-builder-area-contextmenu .mfn-context-paste-style').addClass('mfn-context-inactive'); }else{ $content.find('.mfn-builder-area-contextmenu .mfn-context-paste').removeClass('mfn-context-inactive'); $content.find('.mfn-builder-area-contextmenu .mfn-context-paste-style').removeClass('mfn-context-inactive'); } var copied_el = mfnvbvars.pagedata.filter( (item) => item.uid == copypaste.uid )[0]; if( !copypaste.ls_obj || !this_el || this_el.jsclass != copypaste.ls_obj['obj'][0]['jsclass'] ){ $content.find('.mfn-builder-area-contextmenu .mfn-context-paste-style').addClass('mfn-context-inactive'); } if( this_el.jsclass == 'section' ){ $content.find('.mfn-builder-area-contextmenu .mfn-contextmenu-convert-global-section').show(); }else{ $content.find('.mfn-builder-area-contextmenu .mfn-contextmenu-convert-global-section').hide(); } if( this_el.jsclass == 'wrap' ){ $content.find('.mfn-builder-area-contextmenu .mfn-contextmenu-convert-global-wrap').show(); }else{ $content.find('.mfn-builder-area-contextmenu .mfn-contextmenu-convert-global-wrap').hide(); } /** PBL BE SECTIONS WRAPS */ const isGlobalSection = $content.find('body').hasClass('mfn-template-section'); const isGlobalWrap = $content.find('body').hasClass('mfn-template-wrap'); const isSectionEdited = $content.find('.mfn-builder-area-contextmenu').find('.mfn-context-header').attr('data-element') === 'Section'; const isWrapEdited = $content.find('.mfn-builder-area-contextmenu').find('.mfn-context-header').attr('data-element') === 'Wrap'; if( isGlobalSection && isSectionEdited ) { $content.find('.mfn-builder-area-contextmenu').attr('hide-ui', 'section'); } else if( isGlobalWrap && isWrapEdited ) { $content.find('.mfn-builder-area-contextmenu').attr('hide-ui', 'wrap'); } else { $content.find('.mfn-builder-area-contextmenu').removeAttr('hide-ui'); } } $content.find('body').bind('click', hideContext); }); // Context menu for navigator $('.mfn-navigator').contextmenu(function(e) { if( $('#mfn-visualbuilder.mfn-ui').hasClass('sidebar_hidden') || $(e.target).closest('.toggle-disabled').length ) return; if( !$(e.target).closest('ul.navigator-tree').length ) { $('.mfn-builder-area-contextmenu').hide(); return; }else{ e.preventDefault(); } if( $(e.target).closest('li') ){ context_el = $(e.target).closest('li').children('a').attr('data-uid'); $('.mfn-builder-area-contextmenu').removeClass('mfn-context-menu-section mfn-context-menu-wrap mfn-context-menu-item mfn-context-menu-global'); if( $(e.target).closest('li').hasClass('navigator-section') ){ $('.mfn-builder-area-contextmenu').addClass('mfn-context-menu-section'); }else if( $(e.target).closest('li').hasClass('navigator-wrap') ){ $('.mfn-builder-area-contextmenu').addClass('mfn-context-menu-wrap'); }else{ $('.mfn-builder-area-contextmenu').addClass('mfn-context-menu-item'); } if( $(e.target).closest('li').hasClass('navigator-wrap-global') || $(e.target).closest('li').hasClass('navigator-section-global') ){ $('.mfn-builder-area-contextmenu').addClass('mfn-context-menu-global'); } $('.mfn-builder-area-contextmenu').show().css({left:e.pageX, top: e.pageY}); if( $(e.target).closest('li').hasClass('navigator-section')){ $('.mfn-builder-area-contextmenu .mfn-context-header').html('Section').attr('data-element', 'Section'); }else if( $(e.target).closest('li').hasClass('navigator-wrap')){ $('.mfn-builder-area-contextmenu .mfn-context-header').html('Wrap').attr('data-element', 'Wrap'); }else if( $(e.target).closest('li').hasClass('navigator-item')){ $('.mfn-builder-area-contextmenu .mfn-context-header').html('Item').attr('data-element', 'Item'); } if(!copypaste.ls_obj){ $navigator.find('.mfn-builder-area-contextmenu .mfn-context-paste').addClass('mfn-context-inactive'); $navigator.find('.mfn-builder-area-contextmenu .mfn-context-paste-style').addClass('mfn-context-inactive'); }else{ $navigator.find('.mfn-builder-area-contextmenu .mfn-context-paste').removeClass('mfn-context-inactive'); $navigator.find('.mfn-builder-area-contextmenu .mfn-context-paste-style').removeClass('mfn-context-inactive'); } if( copypaste.ls_obj && $('.mfn-vb-'+context_el).attr('data-item') != copypaste.ls_obj['obj'][0]['jsclass'] ){ $navigator.find('.mfn-builder-area-contextmenu .mfn-context-paste-style').addClass('mfn-context-inactive'); } $('body').bind('click', hideContextEditor); /** PBL BE SECTIONS WRAPS */ const isGlobalSection = $('body').hasClass('mfn-template-section'); const isGlobalWrap = $('body').hasClass('mfn-template-wrap'); const isSectionEdited = $('.mfn-builder-area-contextmenu').find('.mfn-context-header').attr('data-element') === 'Section'; const isWrapEdited = $('.mfn-builder-area-contextmenu').find('.mfn-context-header').attr('data-element') === 'Wrap'; if( isGlobalSection && isSectionEdited ) { $('.mfn-builder-area-contextmenu').attr('hide-ui', 'section'); } else if( isGlobalWrap && isWrapEdited ) { $('.mfn-builder-area-contextmenu').attr('hide-ui', 'wrap'); } else { $('.mfn-builder-area-contextmenu').removeAttr('hide-ui'); } } }); // context menu actions $content.find('.mfn-builder-area-contextmenu li a').on('click', function(e) { e.preventDefault(); let action = $(this).data('action'); if(action == 'delete'){ $content.find('.vb-item[data-uid="'+context_el+'"]').find('.mfn-header').first().find('.mfn-element-delete').trigger('click'); }else if(action == 'edit'){ $content.find('.vb-item[data-uid="'+context_el+'"]').find('.mfn-header').first().find('.mfn-element-edit').trigger('click'); }else if(action == 'copy'){ copypaste.copy(context_el); }else if(action == 'clone'){ $content.find('.vb-item[data-uid="'+context_el+'"]').find('.mfn-header').first().find('.mfn-module-clone').trigger('click'); }else if(action == 'paste'){ //let $el = $content.find('.vb-item[data-uid="'+context_el+'"]'); copypaste.parent = $content.find('.vb-item[data-uid="'+context_el+'"]'); copypaste.paste(); }else if(action == 'paste-style'){ if( !copypaste.ls_obj ) return; var copied_el = copypaste.ls_obj['obj'][0]; var this_el = mfnvbvars.pagedata.filter( (item) => item.uid == context_el )[0]; if( copied_el.jsclass != this_el.jsclass ){ return; // different items } for (key in this_el.attr) { if( key.startsWith('style:') || key.startsWith('css_') ){ this_el.attr[key] = ''; } } for (key in copied_el.attr) { if( key.startsWith('css_') || key.startsWith('style:') || key.includes('_switcher') ) { this_el.attr[key] = JSON.parse( JSON.stringify(copied_el.attr[key])); } } openEditForm.do( $builder.find('.vb-item[data-uid="'+context_el+'"]'), false ); loopAllStyleFields(context_el); historyStorage.add(); }else if(action == 'save-preset'){ presets.modal( context_el ); }else if(action == 'convert-global-section'){ GlobalSections.convertToGlobal( context_el ); }else if(action == 'convert-global-wrap'){ GlobalWraps.selectedUid = context_el; context_el = $builder.find('.vb-item[data-uid="'+context_el+'"]').closest('.mcb-section').attr('data-uid') GlobalWraps.convertToGlobal( context_el ); }else if(action == 'reset-style'){ var this_el = mfnvbvars.pagedata.filter( (item) => item.uid == context_el )[0]; var listStyles = {}; listStyles = this_el.attr; for(key in listStyles) { if(key.startsWith('css_') || key.startsWith('style:') || key.includes('_height') ) { delete listStyles[key]; } } $content.find('style.mfn-local-style').remove(); openEditForm.do( $edited_div, false ); loopAllStyleFields(); $content.find('.vb-item[data-uid="'+context_el+'"]').find('.mfn-header').first().find('.mfn-element-edit').trigger('click'); historyStorage.add(); }else if(action == 'navigator'){ be_navigator.show(context_el); } $content.find('.mfn-builder-area-contextmenu').hide(); }); $('.mfn-builder-area-contextmenu li a').on('click', function(e) { e.preventDefault(); let action = $(this).data('action'); //console.log(context_el); if(action == 'delete'){ $content.find('.vb-item[data-uid="'+context_el+'"]').find('.mfn-header').first().find('.mfn-element-delete').trigger('click'); }else if(action == 'edit'){ $content.find('.vb-item[data-uid="'+context_el+'"]').find('.mfn-header').first().find('.mfn-element-edit').trigger('click'); }else if(action == 'copy'){ copypaste.copy(context_el); $content.find('.mfn-builder-area-contextmenu').hide(); }else if(action == 'clone'){ $content.find('.vb-item[data-uid="'+context_el+'"]').find('.mfn-header').first().find('.mfn-module-clone').trigger('click'); }else if(action == 'paste'){ $content.find('.mfn-builder-area-contextmenu').hide(); //let $el = $content.find('.vb-item[data-uid="'+context_el+'"]'); copypaste.parent = $content.find('.vb-item[data-uid="'+context_el+'"]'); copypaste.paste(); } $('.mfn-builder-area-contextmenu').hide(); }); // size label +- show $builder.on('click', '.mfn-header .mfn-option-btn.mfn-size-label', function(e) { if( $content.find('body').hasClass('mfn-modern-nav') ){ $(this).closest('.mfn-header').toggleClass('mfn-size-change-show'); } }); // edit on box click $builder.on('mouseup', function(e) { //e.preventDefault(); if( preventEdit ) return; if( $(e.target).closest('.mfn-global-section').length || $(e.target).closest('.mfn-global-wrap').length || $(e.target).closest('.column_placeholder').length || !$(e.target).closest('.vb-item').length || $(e.target).closest('.mfn-wrap-add-item').length || /*$(e.target).closest('.mfn-section-start').length ||*/ $(e.target).closest('.mcb-section.empty').length || $(e.target).closest('.divider').length || /*$(e.target).closest('.mcb-wrap-inner.empty').length ||*/ iframe.getSelection().toString() || ( $(e.target).closest('.mfn-header').length && !$(e.target).hasClass('section-header') ) ) { return; } if( $content.find('body').hasClass('mfn-modern-nav') && !$(e.target).closest('.mfn-header.mfn-element-menu-opened').length ){ $content.find('.mfn-header.mfn-element-menu-opened').removeClass('mfn-element-menu-opened mfn-size-change-show'); } if( $(e.target).hasClass('mcb-column') ){ $edited_div = $(e.target).closest('.mcb-wrap'); }else{ $edited_div = $(e.target).closest('.vb-item'); } if( !$edited_div.hasClass('mfn-current-editing') ){ openEditForm.do($edited_div, false); } // Sidebar adjustments for Globals GlobalSections.sectionTriggered = $edited_div; GlobalSections.setSidebarClass(); }); // edit on icon click $builder.on('click', '.mfn-header .mfn-element-edit', function(e) { e.preventDefault(); if( preventEdit ) return; if( $(this).closest('.vb-item').hasClass('mfn-current-editing') ) return; $edited_div = $(this).closest('.vb-item'); if( $edited_div.hasClass('mfn-global-section') ) { GlobalSections.sectionTriggered = $edited_div; $('#header-global-sections').attr('section-id', $edited_div.attr('data-uid')); return showGlobals( $edited_div.attr('data-mfn-global') ); } openEditForm.do($edited_div, false); }); // dropdown for global sections on new section $builder.on('click', '.add-global-sections-button', function(e) { const sectionUid = $(this).closest('.mcb-section').attr('data-uid'); // mcb-wrap-uid $('#header-global-sections').attr('section-id', sectionUid); }) // dropdown for global sections on new section $('.panel-global-sections').on('click', '.mfn-insert-global-section', function(e) { e.preventDefault(); const selected = $(e.target).closest('li').attr('data-id'); const sectionUid = $('#header-global-sections').attr('section-id'); $('#header-global-sections').attr(sectionUid); $edited_div = $content.find(`.section[data-uid=${sectionUid}]`); GlobalSections.fillSectionInfoWithoutCut(sectionUid, selected); GlobalSections.getGlobalSection(); }) // resize $builder.on('click', '.mfn-header .mfn-size-change', function(e) { e.preventDefault(); let item_type = 'mcb-item-'; if( $content.find('.vb-item.mfn-current-editing').length ) $content.find('.vb-item.mfn-current-editing').removeClass('mfn-current-editing'); if( edited_item && typeof edited_item.jsclass !== 'undefined' ) $('.mfn-ui').removeClass('mfn-editing-'+edited_item.jsclass); $('.mfn-ui').removeClass('mfn-editing-element mfn-editing-section mfn-editing-wrap mfn-editing-nested-wrap'); let uid = $(this).closest('.vb-item').attr('data-uid'); edited_item = mfnvbvars.pagedata.filter( (item) => item.uid == uid )[0]; let type = edited_item.type; if( edited_item.jsclass == 'wrap' ) item_type = 'mcb-wrap-'; let currClass = sizes.filter(size => size.key === edited_item.size)[0]; if( !edited_item.mobile_size ) edited_item.mobile_size = '1/1'; if( !edited_item.tablet_size ) edited_item.tablet_size = edited_item.size; if(screen == 'tablet'){ currClass = sizes.filter(size => size.key === edited_item.tablet_size)[0]; }else if(screen == 'laptop'){ currClass = sizes.filter(size => size.key === edited_item.laptop_size)[0]; }else if(screen == 'mobile'){ currClass = sizes.filter(size => size.key === edited_item.mobile_size)[0]; } // reset custom width after change +- /*if( $custom_sizeInput.length && $custom_sizeInput.val() != '' ){ $custom_sizeInput.val('').trigger('change'); $content.find('.vb-item[data-uid='+uid+'] > div > .mfn-header .mfn-element-size-label').text(currClass.key); $('.mfn-vb-'+uid+' .modalbox-card-advanced-'+uid+' .preview-width_switcherinput').val('default').trigger('change'); return; }*/ let newIndex = currClass.index; if( $(this).hasClass('mfn-size-decrease') ){ newIndex = newIndex - 1 < 1 ? 1 : newIndex - 1; }else{ newIndex = newIndex + 1 > 12 ? 12 : newIndex + 1; } let newClass = sizes.filter(size => size.index === newIndex)[0]; if( !items_size[type] || ( items_size[type].length && items_size[type].includes(newClass.key) ) ){ if($content.find('.vb-item[data-uid='+uid+'] > div > .mfn-header .mfn-element-size-label').length){ $content.find('.vb-item[data-uid='+uid+'] > div > .mfn-header .mfn-element-size-label').text(newClass.key); } $content.find('.'+item_type+uid).attr('data-'+screen+'-size', newClass.key); if(screen == 'desktop'){ $content.find('.'+item_type+uid).removeClass(currClass.desktop).addClass(newClass.desktop).attr('data-'+screen+'-col', newClass.desktop); edited_item.size = newClass.key; if(typeof edited_item.tablet_resized === 'undefined' || edited_item.tablet_resized == '0' ) { edited_item.tablet_size = newClass.key; $content.find('.'+item_type+uid).removeClass(currClass.tablet).addClass(newClass.tablet).attr('data-tablet-size', newClass.key); } if(typeof edited_item.laptop_resized === 'undefined' || edited_item.laptop_resized == '0' ) { edited_item.laptop_size = newClass.key; $content.find('.'+item_type+uid).removeClass(currClass.laptop).addClass(newClass.laptop).attr('data-laptop-size', newClass.key); } }else if(screen == 'laptop'){ if(typeof edited_item.tablet_resized === 'undefined' || edited_item.tablet_resized == '0' ) { edited_item.tablet_size = newClass.key; $content.find('.'+item_type+uid).removeClass(currClass.tablet).addClass(newClass.tablet).attr('data-tablet-size', newClass.key); } $content.find('.'+item_type+uid).removeClass(currClass.laptop).addClass(newClass.laptop).attr('data-'+screen+'-col', newClass.laptop); edited_item.laptop_resized = '1'; edited_item.laptop_size = newClass.key; }else if(screen == 'tablet'){ $content.find('.'+item_type+uid).removeClass(currClass.tablet).addClass(newClass.tablet).attr('data-'+screen+'-col', newClass.tablet); edited_item.tablet_resized = '1'; edited_item.tablet_size = newClass.key; }else{ $content.find('.'+item_type+uid).removeClass(currClass.mobile).addClass(newClass.mobile).attr('data-'+screen+'-col', newClass.mobile); edited_item.mobile_size = newClass.key; } if($navigator.find('.navigator-tree li.nav-'+uid+' .navigator-size-label').length) { $navigator.find('.navigator-tree li.nav-'+uid+' > a .navigator-size-label').text(newClass.key); } } resetBeforeAfter(uid); if($content.find('.'+item_type+uid+' .slick-initialized').length) { $content.find('.vb-item[data-uid='+uid+'] .slick-initialized').each(function() { $(this).slick('setPosition'); }); } if($content.find('.'+item_type+uid+' .isotope.mfn-initialized').length){ $content.find('.'+item_type+uid+' .isotope.mfn-initialized').each(function() { var $iso_wrapper = $(this); $iso_wrapper.closest('.mcb-column-inner').css('min-height', $iso_wrapper.closest('.mcb-column-inner').outerHeight()); $iso_wrapper.removeClass('mfn-initialized'); runAjaxElements(); }); } if( $content.find('.'+item_type+uid+' .woocommerce-product-gallery').length){ iframe.window.jQuery('body').trigger('resize'); } reLayoutIsotope( item_type+uid ); historyStorage.add(); }); // delete $builder.on('click', '.mfn-header .mfn-element-delete', function(e) { e.preventDefault(); let $dom_el = $(this).closest('.vb-item'); let uid = $dom_el.attr('data-uid'); let force_re_render = false; $('.mfn-ui').addClass('mfn-modal-open').append(''); $('.btn-modal-close').on('click', function(e) { e.preventDefault(); $('.mfn-ui').removeClass('mfn-modal-open'); $('.modal-confirm.show').remove(); }); $('.btn-modal-confirm').on('click', function(e){ e.preventDefault(); //mfnvbvars.pagedata = mfnvbvars.pagedata.filter( (item) => item.uid != uid ); if( $navigator.find('.navigator-tree li.nav-'+uid).length ){ $navigator.find('.navigator-tree li.nav-'+uid).remove(); } if( $dom_el.closest('.mfn-looped-items').length ) { force_re_render = $dom_el.closest('.mcb-section').attr('data-uid'); } if( $dom_el.next('.mfn-read-more-line').length ) $dom_el.next('.mfn-read-more-line').remove(); $dom_el.remove(); $('.mfn-ui').removeClass('mfn-modal-open'); $('.modal-confirm.show').remove(); iframe.window.jQuery('body').trigger('resize'); if( force_re_render ) re_render( force_re_render ); be_layout.emptys.page(); be_layout.emptys.wraps() be_layout.emptys.sections(); backToWidgets(); historyStorage.add(); }); }); // clone section $builder.on('click', '.mfn-module-clone', function(e) { e.preventDefault(); let $el = $(this).closest('.vb-item'); if( builder_type == 'header' && $el.hasClass('mcb-wrap') && $(this).closest('.mfn-new-wraps-disabled').length ) return; copypaste.copy( $el.attr('data-uid'), $el ); }); // add wrap $builder.on('click', '.mfn-wrap-add', function(e) { e.preventDefault(); let thisid = $(this).closest('.vb-item').attr('data-uid'); let is_divider = 0; if($(this).hasClass('mfn-divider-add')){ is_divider = 1; } be_layout.new.wrap(thisid, is_divider, '1/1'); }); inlineEditor(); if( $content.find('.section_video .mfn-vb-video-lazy').length ) { $content.find('.section_video .mfn-vb-video-lazy').each(function() { $(this).replaceWith( $(this).html().replace('', '') ); }) } loopAllStyleFields(); } $editpanel.on('click', '.btn-save-option', function(e) { e.preventDefault(); if (mfnvbvars.view == 'demo') return; $(this).parent().toggleClass('s-opt-show'); $editpanel.bind('click', closeSaveOpt); $content.bind('click', closeSaveOpt); }); function editContentButton() { if( $builder.find( '.mfn-builder-content:not(.mfn-builder-active)' ).length && mfnvbvars.view != 'demo' ) { $builder.find( '.mfn-builder-content:not(.mfn-builder-active)' ).each(function(i, el) { let this_item = $(el).closest('.mcb-column.vb-item'); if( this_item.length && !this_item.find('.btn-edit-content').length ) this_item.append('Edit content') }); } } $editpanel.on('click', '.btn-save-changes', function(e){ e.preventDefault(); if( mfnvbvars.view == 'demo' ) return; if($(this).hasClass('loading disabled')) return; var $list = $(".panel.panel-revisions-update ul.revisions-list"); var formaction = $(this).attr('data-action'); var isSectionWrapEditor = $('body').hasClass('mfn-template-section') || $('body').hasClass('mfn-template-wrap'); if( $('.modal-display-conditions').length && !$('.modal-display-conditions').hasClass('show') && ( builder_type == 'popup' || builder_type == 'header' || builder_type == 'shop-archive' || builder_type == 'blog' || builder_type == 'portfolio' || builder_type == 'single-product' || builder_type == 'footer' || builder_type == 'single-post' || builder_type == 'single-portfolio' ) ){ // if template conditions $('.modal-display-conditions .btn-save-changes').attr('data-action', formaction); $('.modal-display-conditions').addClass('show'); return; }else if( builder_type == 'cart' || builder_type == 'checkout' || builder_type == 'thanks' ){ if(!$('.modal-cart-confirmation').hasClass('show')){ $('.modal-cart-confirmation').addClass('show'); $.ajax({ url: mfnajaxurl, data: { action: 'verifycartcheckout_tmpl', 'mfn-builder-nonce': wpnonce, id: pageid, type: builder_type }, type: 'POST', success: function(response){ $('.modal-cart-confirmation-desc').html(response); } }); return; } } $(this).addClass('loading disabled'); prepareForm.save = true; var formData = prepareForm.get(); var datas = { 'mfn-builder-nonce': wpnonce, 'action': 'updatevbview', 'pageid': pageid, 'savetype': formaction, 'sections': formData, 'obj': JSON.stringify(prepareForm.object), }; if( prepareForm.template_confirm ){ datas['tmpl_confirmation'] = 1; prepareForm.template_confirm = false; } // attach template conditions if( $('.modal-display-conditions').length && $('.modal-display-conditions').hasClass('show') ){ let conditions = $(document.forms['tmpl-conditions-form']).serializeArray(); for (var i=0; i