(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: '',
904: '',
905: '',
906: '',
907: '',
908: '',
909: '',
910: '',
911: '',
912: '',
913: '',
914: '',
}
};
})(jQuery);