(function($) { /* globals jQuery, mfnSetup, ajaxurl, lozad */ "use strict"; var dictionary = { '.one' : 'One Page', '.por' : 'Portfolio', '.box' : 'Boxed', '.blo' : 'Blog', '.dar' : 'Dark', '.sho' : 'Shop', '.mob' : 'Mobile First', '.lig' : 'Light', '.ele' : 'Elementor', '.ani' : 'Animals & Nature', '.art' : 'Art & Culture', '.car' : 'Cars & Bikes', '.cor' : 'Corporations & Organizations', '.des' : 'Design & Photography', '.edu' : 'Education & Science', '.ent' : 'Entertainment', '.fas' : 'Fashion', '.fin' : 'Finance', '.foo' : 'Food & Restaurants', '.hea' : 'Health & Beauty', '.hou' : 'Housing & Architecture', '.mag' : 'Magazines & Writing', '.occ' : 'Occasions & Gifts', '.oth' : 'Others', '.peo' : 'People and services', '.pro' : 'Product & Production', '.spo' : 'Sports & Travel', '.tec' : 'Technology & Computing ', }; var MfnSetup = (function($) { var $setup = $('#mfn-setup'), $menu = $('.mfn-menu', $setup), $kit = $('.mfn-sidebar', $setup), $iframe = $('#setup-preview', $setup); var step = $setup.attr('data-step') || 'type', type = 'pre-built', builder = 'be', editor = 'visual', website, error = 'An error occurred while processing, please check XHR in the JS console for more informations.', demoData = [], fromScratch = { header: 'classic', logo: '', footer: '', fonts: '', colors: '', plugins: [], }; var navigation = { 'pre-built' : { 'type' : { 'progress' : 0, 'parent': 'type', }, 'title' : { 'progress' : 13, 'parent' : 'title', }, 'editor' : { 'progress' : 26, 'parent' : 'title', }, 'category' : { 'progress' : 39, 'parent' : 'title', }, 'builder' : { 'progress' : 52, 'parent' : 'title', }, 'pre-built' : { 'progress' : 64, 'parent' : 'pre-built', 'callback' : function(){ preBuilt.init(); }, }, 'data' : { 'progress' : 76, 'parent' : 'pre-built', 'callback' : function(){ data.init(); }, }, 'complete' : { 'progress' : 88, 'parent' : 'complete', 'callback' : function(){ complete.init(); }, }, 'finish' : { 'progress' : 100, 'parent' : 'finish', }, }, 'new' : { 'type' : { 'progress' : 0, 'parent': 'type', }, 'title' : { 'progress' : 11, 'parent': 'title', }, 'editor' : { 'progress' : 22, 'parent': 'title', }, 'layout' : { 'progress' : 33, 'parent': 'layout', 'callback' : function(){ kit.init(); kit.prepareFrame(); }, }, 'typography' : { 'progress' : 44, 'parent': 'typography', 'callback' : function(){ typo.init(); }, }, 'colors' : { 'progress' : 55, 'parent': 'typography', }, // 'content' : { // 'progress' : 66, // 'parent': 'content', // }, 'plugins' : { 'progress' : 77, 'parent': 'plugins', }, 'complete' : { 'progress' : 88, 'parent' : 'complete', 'callback' : function(){ complete.initScratch(); }, }, 'finish' : { 'progress' : 100, 'parent' : 'finish', }, } }; var keys = { 'pre-built' : Object.keys(navigation['pre-built']), 'new' : Object.keys(navigation['new']) }; // websites var body = $('body'); var websites = $('.websites', $setup); var websitesIso = $('.websites-iso', $setup); var search = $('input.search', $setup); var searchLock = false; var sidebar = false; var getWebsitesOnce = false; var getWebsitesDone = $.Deferred(); /** * Dashboard UI */ var dashboardUI = { // dashboardUI.change() change: function( $el ) { var newScheme = 'dark'; if( body.hasClass('mfn-ui-dark') ){ newScheme = 'light'; body.addClass('mfn-ui-light') .removeClass('mfn-ui-dark'); } else { body.addClass('mfn-ui-dark') .removeClass('mfn-ui-light'); } // $el.addClass('loading'); // save options $.ajax( ajaxurl, { type : "POST", data : { 'mfn-builder-nonce': $('input[name="mfn-builder-nonce"]').val(), action: 'mfn_builder_settings', option: 'dashboard-ui', value: newScheme, } }).always(function(response){ $el.removeClass('loading'); }); } }; /** * Steps */ var steps = { // steps.next() next: function() { var currentKey = keys[type].indexOf(step), key = keys[type][currentKey+1]; steps.change(key); }, // steps.prev() prev: function() { var currentKey = keys[type].indexOf(step), key = keys[type][currentKey-1]; steps.change(key); }, // steps.change() change: function( key ) { var item = navigation[type][key], cardStep = key; // set step step = key; $setup.attr('data-step', step); if( 'type' == step ){ $setup.attr('data-type', 'start'); } // tab $('.setup-menu[data-type="'+ type +'"] li[data-step="'+ item.parent +'"]').addClass('active') .siblings().removeClass('active'); $('.setup-menu li').removeClass('done'); $('.setup-menu[data-type="'+ type +'"] li[data-step="'+ item.parent +'"]').prevAll().addClass('done'); // progress $('.setup-progress-bar', $setup).css({ 'width' : item.progress + '%' }); $('.setup-progress-label', $setup).text(item.progress + '%').css({ 'left' : item.progress + '%' }); // card if( 'layout' == step || 'typography' == step || 'colors' == step ){ cardStep = 'iframe'; } $('.mfn-setup-card[data-step="'+ cardStep +'"]', $setup).addClass('active') .siblings().removeClass('active'); // scroll $('html').animate({ scrollTop: 0 }, '300'); // callback if( undefined !== item.callback ){ item.callback(); } } }; /** * Registration */ var registration = { // registration.register() register: function( $form ){ $form.addClass('loading'); $.ajax({ url: ajaxurl, data: $form.serialize(), dataType: 'JSON', type: 'POST', }).done(function(response){ if( response.status ){ $form.removeClass('has-error'); $('.form-message', $form).html(''); window.location.reload(true); } else { $form.addClass('has-error'); $('.form-message', $form).html(response.info); $form.removeClass('loading'); } }) .always(function() { }); } }; /** * Plugins */ var plugins = { // plugins.select() select: function($el){ // active $el.toggleClass('active'); // save active plugins fromScratch.plugins = $('.choose-plugin li.active', $setup).map(function(){ return $(this).attr('data-plugin'); }).get(); } }; /** * Text editor */ var editorSelect = function( $el ){ editor = $el.attr('data-type'); // active $el.addClass('active') .siblings().removeClass('active'); }; /** * Setup type */ var setupType = { // setupType.select() select: function( $el ){ type = $el.attr('data-type'); // active $el.addClass('active') .siblings().removeClass('active'); $setup.attr('data-type', 'start'); }, // setupType.next() next: function(){ $setup.attr('data-type', type); steps.next(); } }; /** * Pre-built */ var preBuilt = { // preBuilt.category() category: function( $el ){ $el.toggleClass('active'); }, // preBuilt.builderSelect() builderSelect: function($el){ builder = $el.attr('data-type'); $el.addClass('active') .siblings().removeClass('active'); }, // preBuilt.contentSelect() contentSelect: function($el, e){ var $item = $(e.target); if( $item.is('span') ){ if( $item.hasClass('radio') ){ $item.addClass('active'); $item.siblings().removeClass('active'); } else { $item.toggleClass('active'); } } $el.addClass('active') .siblings().removeClass('active'); // demoData demoData = [ $el.attr('data-type') ]; $el.find('span.active:not(.hidden)').each(function(){ demoData.push( $(this).attr('data-type') ); }); // console.log(demoData); }, // preBuilt.preview() preview: function($el){ var href = $el.attr('data-href'); window.open(href, '_blank').focus(); }, // preBuilt.select() select: function($el, e){ if( $(e.target).is('.preview') || $(e.target).is('.far') ){ // just preview do nothing; return; } website = $el.attr('data-website'); steps.next(); }, // preBuilt.init() init: function(){ websitesIso.css('opacity','0'); isotope.overlay('show'); // reset current filters if we moved back isotope.currentFilters.layout = []; isotope.currentFilters.subject = []; $('#websites .filters-group li.current').removeClass('current'); website = false; // set current filters if any has been selected if( 'elementor' == builder ){ isotope.currentFilters.builder = ['.ele']; $setup.attr('data-builder','elementor'); } else { isotope.currentFilters.builder = []; $setup.removeAttr('data-builder'); } $('.list-business-type li.active').each(function(){ var filter = $(this).attr('data-filter'); isotope.currentFilters.subject.push(filter); $('#websites ul[data-filter-group="subject"] li[data-filter="'+filter+'"]').addClass('current'); }); // init isotope getWebsitesOnce = true; getWebsitesDone.resolve(); isotope.init(); isotope.result(); setTimeout(function(){ websitesIso.css('opacity','1'); },200); // init sticky sidebar stickyFilters(); }, }; /** * Modal */ var modal = { dfd: $.Deferred(), // modal.open() open: function(){ $('.modal-confirm-reset', $setup).addClass('show'); }, // modal.close() close: function(){ $('.modal-confirm-reset', $setup).removeClass('show'); }, // modal.media() media: function($el){ $el.toggleClass('active'); }, // modal.confirm() confirm: function($el){ var $button = $el.closest('.select-inner').siblings('.btn-modal-confirm'); if( $el.hasClass('active') ){ $el.removeClass('active'); $button.addClass('disabled'); } else { $el.addClass('active'); $button.removeClass('disabled'); } }, // modal.reset() reset: function(dfd){ var media = $('.modal-confirm-reset .remove-media span', $setup).hasClass('active') ? 1 : 0; modal.close(); // show reset step complete.$steps.children('.reset').removeClass('hidden').addClass('loading'); // ajax $.ajax({ url: ajaxurl, data: { 'action': 'mfn_setup_database_reset', 'media': media, 'mfn-setup-nonce': $('input[name="mfn-setup-nonce"]', $setup).val() }, type: 'POST', }).done(function(response){ complete.$steps.children('.reset').removeClass('loading').addClass('done'); complete.dfdReset.resolve(); }); }, // modal.skip() skip: function(dfd){ modal.close(); complete.dfdReset.resolve(); }, }; /** * Data */ var data = { // data.init() init: function(){ var demo = mfnSetup.demos[website]; // check for slider if( 'undefined' !== typeof(demo.plugins) ){ if( demo.plugins.indexOf('rev') >= 0 ){ $('.card-data .select-inner span[data-type="sliders"]', $setup).removeClass('hidden'); } else { $('.card-data .select-inner span[data-type="sliders"]', $setup).addClass('hidden'); } } $('.card-data .import-options li[data-type="complete"]', $setup).trigger('click'); } }; /** * Complete setup */ var complete = { dfdReset: $.Deferred(), dfdContent: $.Deferred(), $steps: $('.card-complete .complete-steps', $setup), // complete.init() init: function(){ var demo = mfnSetup.demos[website]; // set preview $('.website-image', $setup).attr('src','https://muffingroup.com/betheme/assets/images/demos/'+ website +'.jpg'); // do not install all plugins complete.$steps.children('.plugin').addClass('disabled'); complete.$steps.children('.slider').addClass('disabled'); complete.$steps.children('.content').addClass('disabled'); complete.$steps.children('.options').addClass('disabled'); // content if( demoData.indexOf('complete') >= 0 || demoData.indexOf('content') >= 0 ){ complete.$steps.children('.content').removeClass('disabled'); } // theme options if( demoData.indexOf('complete') >= 0 || demoData.indexOf('options') >= 0 ){ complete.$steps.children('.options').removeClass('disabled'); } // check which plugins are required if( 'undefined' !== typeof(demo.plugins) ){ demo.plugins.forEach(function(plugin){ // skip elementor in bebuilder is selected if( 'ele' == plugin && 'be' == builder ){ return; } // revolution slider if( 'rev' == plugin ){ if( demoData.indexOf('sliders') >= 0 ){ complete.$steps.children('.slider').removeClass('disabled'); } else { return; } } complete.$steps.children('li.'+ plugin).removeClass('disabled'); }); } }, // complete.initScratch() initScratch: function(){ // do not install all plugins complete.$steps.children('.plugin').addClass('disabled'); complete.$steps.children('.pre').addClass('disabled'); // check which plugins are required if( 'undefined' !== typeof(fromScratch.plugins) ){ fromScratch.plugins.forEach(function(plugin){ complete.$steps.children('li.'+ plugin).removeClass('disabled'); }); } }, // complete.start() start: function(){ var importSteps = complete.$steps.children(':not(.disabled)'); importSteps = $.map(importSteps, function(value, index){ return [value]; }); // console.log(importSteps); var promises = [], i, dfd = $.Deferred(), dfdNext = dfd; dfd.resolve(); // disable button $('.card-complete .setup-complete', $setup).addClass('disabled'); $('.mfn-footer', $setup).hide(); // run import steps if( 0 < importSteps.length ){ for( i = 0; i < importSteps.length; i++ ){ (function(k){ var $current = $(importSteps[k]), action = $current.data('action'); dfdNext = dfdNext.then( function() { if ( 'reset' === action ) { return complete.databaseReset(); } else if ( 'plugin-activate' === action ) { return complete.pluginActivate($current); } else if ( 'plugin-install' === action ) { return complete.pluginInstall($current); } else if ( 'download' === action ) { return complete.downloadPackage(); } else if ( 'content' === action ) { return complete.content(); } else if ( 'options' === action ) { return complete.options(); } else if ( 'slider' === action ) { return complete.slider(); } else if ( 'settings' === action ) { return complete.settings(); } } ); promises.push( dfdNext ); }(i)); } jQuery.when.apply( null, promises ).then( function() { // next step steps.next(); // finish step attributes $setup.attr('data-type', 'finish'); }, function() { alert(error); } ); } }, // complete.databaseReset() databaseReset: function(){ modal.open(); return complete.dfdReset.promise(); }, // complete.pluginActivate() pluginActivate: function($el){ var plugin = $el.data('plugin'), path = $el.data('path'); complete.$steps.children('[data-plugin="'+ plugin +'"]').addClass('loading'); return $.ajax({ url: ajaxurl, data: { 'action': 'mfn_setup_plugin_activate', 'mfn-setup-nonce': $('input[name="mfn-setup-nonce"]', $setup).val(), 'plugin': plugin, 'path': path, }, dataType: 'JSON', type: 'POST', }).done(function(response){ if( ! response.error ){ complete.$steps.children('[data-plugin="'+ plugin +'"]').removeClass('loading').addClass('done'); } else { complete.$steps.children('[data-plugin="'+ plugin +'"]').removeClass('loading').addClass('error'); } }); }, // complete.pluginInstall() pluginInstall: function($el){ var nonce = $('input[name="mfn-tgmpa-nonce"]', $setup).val(), page = $el.data('page'), plugin = $el.data('plugin'); complete.$steps.children('[data-plugin="'+ plugin +'"]').addClass('loading'); return $.ajax({ url: ajaxurl, data: { 'action': 'mfn_setup_plugin_install', 'page': page, 'plugin': plugin, 'tgmpa-install': 'install-plugin', 'tgmpa-nonce': nonce, }, type: 'GET', }).done(function(response){ if( response.indexOf('plugins.php?action=activate') > 0 ){ complete.$steps.children('[data-plugin="'+ plugin +'"]').removeClass('loading').addClass('done'); } else { complete.$steps.children('[data-plugin="'+ plugin +'"]').removeClass('loading').addClass('error'); } }); }, // complete.downloadPackage() downloadPackage: function($el){ complete.$steps.children('.download').addClass('loading'); return $.ajax({ url: ajaxurl, data: { 'action': 'mfn_setup_download', 'mfn-setup-nonce': $('input[name="mfn-setup-nonce"]', $setup).val(), 'website': website, 'builder': builder, }, type: 'POST', }).done(function(response){ complete.$steps.children('.download').removeClass('loading').addClass('done'); }); }, // complete.content() content: function(){ complete.$steps.children('.content').addClass('loading'); var attachments = 0; var complete_import = 0; if( demoData.indexOf('attachments') >= 0 ){ attachments = 1; } if( demoData.indexOf('complete') >= 0 ){ complete_import = 1; } $.ajax({ url: ajaxurl, data: { 'action': 'mfn_setup_content', 'mfn-setup-nonce': $('input[name="mfn-setup-nonce"]', $setup).val(), 'website': website, 'builder': builder, 'attachments': attachments, 'complete_import': complete_import, }, type: 'POST', statusCode: { 524: function() { // console.log('A timeout occurred. Trying again.'); // complete.content(); error = 'A timeout occurred. Maximum execution time exceeded.'; // error = 'A timeout occurred. Please try again WITHOUT database reset.'; } } }).done(function(response){ complete.$steps.children('.content').removeClass('loading').addClass('done'); complete.dfdContent.resolve(); }); return complete.dfdContent.promise(); }, // complete.options() options: function($el){ complete.$steps.children('.options').addClass('loading'); var action = 'mfn_setup_options', complete_import = 0; if( 'new' == type ){ action += '_scratch'; } if( demoData.indexOf('complete') >= 0 ){ complete_import = 1; } return $.ajax({ url: ajaxurl, data: { 'action': action, 'mfn-setup-nonce': $('input[name="mfn-setup-nonce"]', $setup).val(), 'website': website, 'builder': builder, 'complete_import': complete_import, 'scratch': fromScratch, }, type: 'POST', }).done(function(response){ complete.$steps.children('.options').removeClass('loading').addClass('done'); }); }, // complete.slider() slider: function($el){ complete.$steps.children('.slider').addClass('loading'); return $.ajax({ url: ajaxurl, data: { 'action': 'mfn_setup_slider', 'mfn-setup-nonce': $('input[name="mfn-setup-nonce"]', $setup).val(), 'website': website, 'builder': builder, }, type: 'POST', }).done(function(response){ complete.$steps.children('.slider').removeClass('loading').addClass('done'); }); }, // complete.settings() settings: function($el){ complete.$steps.children('.settings').addClass('loading'); var action = 'mfn_setup_settings', complete_import = 0; if( 'new' == type ){ action += '_scratch'; } if( demoData.indexOf('complete') >= 0 ){ complete_import = 1; } return $.ajax({ url: ajaxurl, data: { 'action': action, 'mfn-setup-nonce': $('input[name="mfn-setup-nonce"]', $setup).val(), 'website': website, 'builder': builder, 'editor': editor, 'blogname': $('#input-blogname').val(), 'blogdescription': $('#input-blogdescription').val(), 'complete_import': complete_import, }, type: 'POST', }).done(function(response){ complete.$steps.children('.settings').removeClass('loading').addClass('done'); }); }, }; /** * Sidebar kit */ var kit = { // kit.prepareFrame() prepareFrame: function(){ var src = $iframe.attr('data-src') || false; if( ! src ){ return; } $iframe.parent().addClass('loading'); $iframe.attr('src', src).removeAttr('data-src'); $iframe.on('load', function() { $iframe.parent().removeClass('loading'); }); }, // kit.init() init: function(){ var height = $kit.height() || 0; var itemHeight = $kit.find('.toggle-item:not(.active)').first().height() || 0; var maxHeight = height - ( 3 * itemHeight ); $('.toggle-list .toggle-item', $kit).each(function(){ $(this).attr('data-max', maxHeight); }); // open first item if none is active if( ! $('.toggle-list .toggle-item.active', $kit).length ){ $('.toggle-list .toggle-item:first .header', $kit).trigger('click'); } }, // kit.recalculate recalculate: function(){ if( 'layout' != step ){ return; } kit.init(); // set active item content height var maxHeight = $('.toggle-list .toggle-item.active', $kit).attr('data-max') || 0; $('.toggle-list .toggle-item.active > .content', $kit).css('height', maxHeight +'px'); }, // kit.toggle() toggle: function(){ $setup.toggleClass('kit-active'); }, // kit.toggleItem() toggleItem: function($el){ var $preview = $iframe.contents(); $el = $el.closest('.toggle-item'); if( ! $el.hasClass('active') ){ $el.addClass('active animating') .children('.content').animate({ height: $el.attr('data-max') +'px' },200,function(){ setTimeout(function(){ $el.removeClass('animating'); },200); }); $el.addClass('active') .siblings().removeClass('active') .children('.content').css('height',0); // scroll iframe if( 'footer' == $el.data('item') ){ $('html, body', $preview).animate({ scrollTop: $('#Footer, .mfn-footer', $preview).offset().top || 0 }, 500); } else { $('html, body', $preview).animate({ scrollTop: 0 }, 500); } } if( ! $setup.hasClass('kit-active') ){ $setup.addClass('kit-active'); } }, }; /** * Typography */ var typo = { // typo.init() init: function(){ if( typeof WebFont == 'undefined' ){ return; } $('.select-font li', $setup).waypoint({ context: $('.sidebar-card[data-step="typography"]', $setup), offset: '100%', triggerOnce: true, handler: function(){ var $el = $(this.element).length ? $(this.element) : $(this); var font = $el.attr('data-font'); font = font.split(','); WebFont.load({ google: { families: font, }, // context: window.frames[0].frameElement.contentWindow, // iframe }); if (typeof this.destroy !== 'undefined' && $.isFunction(this.destroy)) { this.destroy(); } } }); }, // typo.select() select: function( $el ){ var $preview = $iframe.contents(); var font = $el.attr('data-font'); font = font.split(','); fromScratch.fonts = font; if( $el.hasClass('active') ){ return; } $el.addClass('active') .siblings().removeClass('active'); WebFont.load({ google: { families: font, }, context: window.frames[0].frameElement.contentWindow, // iframe }); $preview.find('#mfn-fonts').remove(); $preview.find('head').append(''); }, }; /** * Color */ var color = { // color.select() select: function( $el ){ var $preview = $iframe.contents(); var colors = $el.attr('data-color'), style = ''; colors = colors.split(','); fromScratch.colors = colors; if( $el.hasClass('active') ){ return; } $el.addClass('active') .siblings().removeClass('active'); $.each(colors, function(index, val){ style += '--mfn-color-'+ index +':'+ val +';'; }); $preview.find('#mfn-colors').remove(); $preview.find('head').append(''); }, }; /** * Layouts */ var layouts = { logo : { default: false, // layouts.logo.saveDefault(); saveDefault: function(){ var $preview = $iframe.contents(), $logo = $('#logo img, .column_header_logo .logo-wrapper img', $preview); if( layouts.logo.default ){ return; } if( $logo.length ){ layouts.logo.default = $logo.attr('src'); } }, // layouts.logo.change(); change: function($el){ var $preview = $iframe.contents(), $logo = $('#logo img, .column_header_logo .logo-wrapper img', $preview), $item = $el.closest('.toggle-item'); var val = $el.val(); // save default logo layouts.logo.saveDefault(); if( val ){ $item.addClass('done'); fromScratch.logo = val; } else { val = layouts.logo.default; $item.removeClass('done'); fromScratch.logo = false; } $logo.attr('src', val); }, // layouts.logo.restore() restore: function(){ var $preview = $iframe.contents(), $logo = $('#logo img, .column_header_logo .logo-wrapper img', $preview); if( fromScratch.logo ){ $logo.attr('src', fromScratch.logo); $logo.attr('data-retina', fromScratch.logo); } } }, header: { // layouts.header.change() change: function($el){ var $item = $el.closest('.toggle-item'); var val = $el.val(), iframeSrc = $iframe.attr('src'); // remove active from pre-built $('.select-header-pre', $kit).find('li').removeClass('active'); // step done $item.addClass('done'); // do not relaod inframe if the same header is selected if( val == fromScratch.header ){ return; } // save new header fromScratch.header = val; // prepare iframe url, remove header parematers if exists iframeSrc = iframeSrc.replace(/&mfn-h=[a-z]*/g, ''); // set iframe src $iframe.attr( 'src', iframeSrc + '&mfn-h=' + val ); // loading $iframe.parent().addClass('loading'); $iframe.on('load', function() { // restore footer and logo layouts.footer.restore(); layouts.logo.restore(); $iframe.parent().removeClass('loading'); }); }, // layouts.header.changePre() changePre: function($el){ var $preview = $iframe.contents(), $item = $el.closest('.toggle-item'); var val = $el.attr('data-id'); $el.addClass('active') .siblings().removeClass('active'); // remove active from default headers $('.select-header-default', $kit).find('li').removeClass('active'); // step done $item.addClass('done'); // do not reload inframe if the same header is selected if( val == fromScratch.header ){ return; } // save new header fromScratch.header = val; layouts.header.restore() // restore logo layouts.logo.restore(); }, // layouts.header.restore() restore: function($el){ // restore only pre-built headers if( isNaN( fromScratch.header ) ){ return; } // prepare iframe var $preview = $iframe.contents() $preview.find('#Header_wrapper, #Header_creative').remove(); $preview.find('#mfn-header-template, #mfn-header-style').remove(); $preview.find('body').removeClass(function (index, className) { return (className.match (/\bheader-\S+/g) || []).join(' '); }); // set content var content = sections.header[ fromScratch.header ]; content = content.replace(/%url%/g, mfnSetup.placeholdersURI); content = content.replace(/%theme%/g, mfnSetup.themeURI); $preview.find('#Wrapper').prepend(content); } }, footer: { // layouts.footer.change() change: function($el){ var $item = $el.closest('.toggle-item'); var val = $el.val(), iframeSrc = $iframe.attr('src'); // step done $item.addClass('done'); // do not relaod inframe if the same header is selected if( val == fromScratch.footer ){ return; } val = val.replace(/;/g,'_'); // save new footer fromScratch.footer = val; // prepare iframe url, remove header parematers if exists iframeSrc = iframeSrc.replace(/&mfn-f=[a-z,0-9,_,-]*/g, ''); if( val ){ iframeSrc += '&mfn-f=' + val; } // set iframe src $iframe.attr( 'src', iframeSrc ); // loading $iframe.parent().addClass('loading'); $iframe.one('load', function() { // restore header and logo layouts.header.restore(); layouts.logo.restore(); $('html, body', $iframe.contents()).animate({ scrollTop: $('#Footer, .mfn-footer', $iframe.contents()).offset().top || 0 }, 500); $iframe.parent().removeClass('loading'); }); }, // layouts.footer.changePre() changePre: function($el){ var $preview = $iframe.contents(), $item = $el.closest('.toggle-item'); var val = $el.attr('data-id'); $el.addClass('active') .siblings().removeClass('active'); // remove active from default headers $('.select-footer-default', $kit).find('li').removeClass('active'); // step done $item.addClass('done'); // do not relaod inframe if the same footer is selected if( val == fromScratch.footer ){ return; } // save new footer fromScratch.footer = val; layouts.footer.restore(); }, // layouts.footer.restore() restore: function($el){ // restore only pre-built headers if( ! fromScratch.footer || isNaN( fromScratch.footer ) ){ return; } // prepare iframe var $preview = $iframe.contents() $preview.find('#Footer').remove(); $preview.find('#mfn-footer-template, #mfn-footer-style').remove(); // set content var content = sections.footer[ fromScratch.footer ]; content = content.replace(/%url%/g, mfnSetup.placeholdersURI); content = content.replace(/%theme%/g, mfnSetup.themeURI); $preview.find('#Wrapper').append(content); } }, }; /** * Tabs */ var tabs = { // tabs.open(); open: function( $el ){ var $tabs = $el.closest('.tabs'), $li = $el.closest('li'); var index = $li.index(); $li.addClass('active') .siblings().removeClass('active'); $tabs.children('div').eq(index).show() .siblings('div').hide(); } }; /** * Sticky filters */ var stickyFilters = function() { if( ! $('#websites .filters').length ){ return; } sidebar = $('#websites .filters').stickySidebar({ topSpacing: 150 }); }; /** * Rate */ var rate = function($el) { var rating = $el.attr('data-rating'); $el.addClass('active') .siblings().removeClass('active'); $.ajax({ url: ajaxurl, data: { 'action': 'mfn_setup_rate', 'mfn-setup-nonce': $('input[name="mfn-setup-nonce"]', $setup).val(), 'rating': rating, }, dataType: 'JSON', type: 'POST', }).done(function(response){ }) .always(function() { $('.card-finish', $setup).addClass('rated'); setTimeout(function(){ $('.card-finish', $setup).removeClass('rated'); },3000); }); }; /** * Lazy load images * lazyLoad() */ var lazyLoad = function() { var observer = lozad('.lozad, img[data-src]'); observer.observe(); }; /** * Search */ var searchForm = { timer: false, // searchForm.search() search: function(value) { var filter = value.replace('&', '').replace(/ /g, '').toLowerCase(); // end: TMP: temporary holiday filters isotope.scrollTop(); search.val(value); isotope.overlay('show'); setTimeout(function(){ getWebsites(); $.when(getWebsitesDone).done(function(){ websitesIso.isotope({ filter: function() { // return filter ? $(this).data('title').match(filter) : true; if( 'elementor' == builder ){ if( $(this).is('.ele') ){ return filter ? $(this).data('title').match(filter) : true; } else { return false; } } else { return filter ? $(this).data('title').match(filter) : true; } } }); isotope.clear(); isotope.result( filter ); }); }, 200); }, searchTimer: function(input) { clearTimeout(this.timer); this.timer = setTimeout(function() { searchForm.search(input.val()); }, 300, input); }, clear: function() { search.val(''); } }; /** * Isotope */ var isotope = { currentFilters: { layout: [], subject: [], builder: [] // only '.ele' allowed here }, // isotope.concatValues() concatValues: function(filters) { var i = 0; var comboFilters = []; for ( var prop in filters ) { var filterGroup = filters[ prop ]; // skip to next filter group if it doesn't have any values if ( !filterGroup.length ) { continue; } if ( i === 0 ) { // copy to new array comboFilters = filterGroup.slice(0); } else { var filterSelectors = []; // copy to fresh array var groupCombo = comboFilters.slice(0); // [ A, B ] // merge filter Groups for (var k=0, len3 = filterGroup.length; k < len3; k++) { for (var j=0, len2 = groupCombo.length; j < len2; j++) { filterSelectors.push( groupCombo[j] + filterGroup[k] ); // [ 1, 2 ] } } // apply filter selectors to combo filters for next group comboFilters = filterSelectors; } i++; } var comboFilter = comboFilters.join(', '); return comboFilter; }, // isotope.init() init: function() { websitesIso.isotope({ itemSelector: '.website', transitionDuration: 200, hiddenStyle: { opacity: 0 }, visibleStyle: { opacity: 1 }, filter: this.concatValues(this.currentFilters) }).isotope('reloadItems').isotope({ sortBy: 'original-order' }); websitesIso.on('layoutComplete', function() { recalculate(); }); }, // isotope.reset() reset: function(li, group) { var index = this.currentFilters[group].indexOf( li.data('filter') ); li.removeClass('current'); this.currentFilters[group].splice( index, 1 ); websitesIso.isotope({ filter: this.concatValues(this.currentFilters) }); this.result(); }, // isotope.scrollTop() scrollTop: function() { searchLock = true; $('html, body').animate({ // scrollTop: websites.offset().top - 90 scrollTop: 0 }, 200); setTimeout(function() { searchLock = false; }, 250); }, // isotope.filter() filter: function(el) { var li = el.closest('li'); var group = el.closest('ul').data('filter-group'); isotope.scrollTop(); searchForm.clear(); isotope.overlay('show'); setTimeout(function(){ getWebsites(); $.when(getWebsitesDone).done(function(){ if (li.hasClass('current')) { isotope.reset(li, group); return true; } // li.siblings().removeClass('current'); li.addClass('current'); isotope.currentFilters[group].push( li.data('filter') ); websitesIso.isotope({ filter: isotope.concatValues(isotope.currentFilters) }); // results isotope.result(); }); }, 200); }, // isotope.removeButton() removeButton: function(){ $('.show-all .button').remove(); }, // isotope.showAll() showAll: function(){ this.overlay('show'); getWebsites(); this.result(); }, // isotope.overlay() overlay: function(state){ if ( 'show' == state ) { websitesIso.addClass('loading'); } else { setTimeout(function(){ websitesIso.removeClass('loading'); }, 250); } }, // isotope.result() result: function(search){ search = (typeof search !== 'undefined') ? search : ''; // isset var count, all, text, layout, subject, bldr, el = $('.results', websites); count = websitesIso.data('isotope').filteredItems.length; all = el.data('count'); layout = this.currentFilters.layout; subject = this.currentFilters.subject; bldr = this.currentFilters.builder; isotope.overlay('hide'); if( ! layout.length && ! subject.length && ! bldr.length && ! search ){ el.html('All '+ all + ' pre-built websites'); return false; } text = pluralize(count, 'result') +' for: '; if( bldr.length ){ $.each( bldr, function( index, value ){ text += ''+ dictionary[value] +''; }); } if( layout.length ){ $.each( layout, function( index, value ){ text += ''+ dictionary[value] +''; }); } if( subject.length ){ $.each( subject, function( index, value ){ text += ''+ dictionary[value] +''; }); } if( search ){ text += ''+ search +''; } el.html(text); }, // isotope.unclick() unclick: function(el){ var filter = el.data('filter'); if( filter ){ $('.filters li[data-filter="'+ filter +'"] a').click(); } else { $('.search-wrapper .close').click(); } }, // isotope.clear() clear: function() { isotope.currentFilters.subject = []; isotope.currentFilters.layout = []; $('.filters li').removeClass('current'); } }; /** * Get all pre-built websites * getWebsites() */ var getWebsites = function() { if ( getWebsitesOnce ) { return true; } getWebsitesOnce = true; var data = { action: 'mfn_setup_websites', 'mfn-setup-nonce': $('input[name="mfn-setup-nonce"]', $setup).val() }; $.ajax({ url: ajaxurl, data: data, // dataType: 'JSON', type: 'POST', }).done(function(response) { if (response) { websitesIso.append(response).isotope('reloadItems').isotope({ sortBy: 'original-order' }); websitesIso.on('arrangeComplete', function() { lazyLoad(); isotope.removeButton(); getWebsitesDone.resolve(); }); } else { console.log('Error: Could not get all pre-built websites.'); } }); }; /** * Pluralize nouns */ var pluralize = function(count, noun){ if( 1 !== count ){ noun = noun + 's'; } return count + ' ' + noun; }; /** * Recalculate */ var recalculate = function() { $(window).trigger('resize'); if( sidebar ){ sidebar.stickySidebar('updateSticky'); } }; /** * Bind */ var bind = function() { // change dashboard ui $setup.on( 'click', '.mfn-color-scheme', function(e) { dashboardUI.change($(this)); }); // register $('.mfn-form-reg').on( 'submit', function(e) { e.preventDefault(); registration.register($(this)); }); $('#register').on( 'click', function(e) { $('.mfn-form-reg').trigger('submit'); }); // menu step $menu.on( 'click', '.setup-menu li', function(e) { steps.change($(this).attr('data-step')); }); // steps $setup.on( 'click', '.setup-next, .inner-navigation.next', function(e) { steps.next(); }); $setup.on( 'click', '.setup-previous, .inner-navigation.prev', function(e) { steps.prev(); }); // text editor $setup.on( 'click', '.choose-editor li', function(e) { editorSelect($(this)); }); // setup type $setup.on( 'click', '.setup-type li', function(e) { setupType.select($(this)); }); $setup.on( 'click', '.setup-type-next', function(e) { setupType.next(); }); // pre-built $setup.on( 'click', '.list-business-type li', function(e) { preBuilt.category($(this)); }); $setup.on( 'click', '.builder-type li', function(e) { preBuilt.builderSelect($(this)); }); $setup.on( 'click', '.import-options li', function(e) { preBuilt.contentSelect($(this),e); }); websites.on( 'click', '.website .preview', function(e) { preBuilt.preview($(this)); }); websites.on( 'click', '.website', function(e) { preBuilt.select($(this),e); }); // websites $('#websites').on('click', '.filters a', function(e) { e.preventDefault(); isotope.filter($(this)); }); $('#websites').on('click', '.results .filter', function(e) { e.preventDefault(); isotope.unclick($(this)); }); $('#websites').on('click', '.show-all .button', function(e) { e.preventDefault(); isotope.showAll(); }); // search $('#websites').on('click', '.search-wrapper .close', function() { searchForm.search(''); }); // complete $setup.on( 'click', '.setup-complete', function(e) { complete.start(); }); // sidebar kit $setup.on( 'click', '.mfn-sidebar .sidebar-toggle', function() { kit.toggle(); }); $setup.on( 'click', '.mfn-sidebar .toggle-item > .header', function() { kit.toggleItem($(this)); }); // typo $setup.on( 'click', '.select-font li', function() { typo.select($(this)); }); // colors $setup.on( 'click', '.select-color li', function() { color.select($(this)); }); // layouts $setup.on( 'change', '.mfn-sidebar #layout-logo', function() { layouts.logo.change($(this)); }); $setup.on( 'change', '.select-header-default :checkbox:checked', function() { layouts.header.change($(this)); }); $setup.on( 'click', '.select-header-pre li', function() { layouts.header.changePre($(this)); }); $setup.on( 'change', '.select-footer-default :checkbox:checked', function() { layouts.footer.change($(this)); }); $setup.on( 'click', '.select-footer-pre li', function() { layouts.footer.changePre($(this)); }); // plugin select $setup.on( 'click', '.choose-plugin li', function(e) { plugins.select($(this)); }); // rate $setup.on( 'click', '.mfn-rating li', function(e) { e.preventDefault(); rate($(this)); }); // tabs $('.tabs > ul', $setup).on('click', 'li', function(e) { tabs.open($(this)); }); // modal $setup.on( 'click', '.modal-confirm-reset .remove-media span', function(e) { e.preventDefault(); modal.media($(this)); }); $setup.on( 'click', '.modal-confirm-reset .reset-confirm span', function(e) { e.preventDefault(); modal.confirm($(this)); }); $setup.on( 'click', '.modal-confirm-reset .btn-modal-confirm', function(e) { e.preventDefault(); modal.reset($(this)); }); $setup.on( 'click', '.modal-confirm-reset .btn-modal-skip', function(e) { e.preventDefault(); modal.skip($(this)); }); // keyup search.on('keyup', function() { searchForm.searchTimer($(this)); }); // window.scroll $(window).on('scroll', function() { }); // window resize $(window).on('debouncedresize', function() { kit.recalculate(); }); }; /** * Ready * document.ready */ var ready = function() { lazyLoad(); bind(); }; /** * Load * window.load */ var load = function() { $setup.removeClass('loading'); recalculate(); }; /** * Return */ return { ready: ready, load: load }; })(jQuery); /** * $(document).ready */ $(function() { MfnSetup.ready(); }); /** * $(window).load */ $(window).on('load', function(){ MfnSetup.load(); }); var sections = { footer : { 801: '', 802: '', 803: '', 804: '', }, header :{ 901 : '
', 902: '
', 903: '
Up to 60% off summer footwear See more
', 904: '

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

', 905: '
Autumn Sales starts on September: Sneak a peek now
', 906: '
', 907: '

Excepteur sint occaecat cupidatat non proident

', 908: '
Do you want to receive a job quote? Use contact form
', 909: '
', 910: '
We are trying to satisfy 100% of our customers
', 911: '
', 912: '
', 913: '
Welcome to Be Store!
', 914: '
We are trying to satisfy 100% of our customers
', } }; })(jQuery);