var softaculous_pro_show_themes_loaded = 0;
jQuery(document).ready(function(){
let url = new URL(window.location.href);
let step = url.searchParams.get('step');
if(step === 'import_theme'){
jQuery('.softaculous-pro-wizard-sidebar').addClass('compact');
jQuery('.softaculous-pro-setup-logo').hide();
jQuery('.active_step').find('span').css('min-width', '0');
if(!softaculous_pro_show_themes_loaded){
softaculous_pro_show_themes();
}
}
var feature_holder = jQuery('.softaculous-pro-features');
feature_holder.each(function(){
var feature_checked = jQuery(this).find('input').is(":checked");
if(feature_checked){
jQuery(this).addClass("feature-border");
}
});
feature_holder.click(function(){
var feature_disabled = jQuery(this).find('input').is(":disabled");
if(feature_disabled && !jQuery(this).hasClass("spro-erro")){
var selected_erro = jQuery(this).find('input').attr('spro-erro');
const para = jQuery('<p>'+selected_erro+'</p>').css('color', 'red');
jQuery(this).find('.softaculous-pro-features-text').find('p').replaceWith(para);
jQuery(this).addClass("spro-erro");
}
});
if(jQuery('.softaculous-pro-wizard').length > 0){
window.addEventListener('popstate', function(event){
// Get the current URL
let url = new URL(window.location.href);
let step = url.searchParams.get('step');
if(step){
softaculous_pro_set_active_step(step);
}
});
}
});
function softaculous_pro_set_active_step(step) {
// Active Tab
jQuery('.softaculous-pro-steps-holder ol li').removeClass('active_step');
if(step ==='import_theme'){
jQuery('.softaculous-pro-steps-holder ol li [data-step="'+step+'"]').closest('li').addClass('active_step');
jQuery('.softaculous-pro-wizard-sidebar').addClass('compact');
jQuery('.softaculous-pro-setup-logo').hide();
jQuery('.active_step').find('span').css('min-width', '0');
}else{
jQuery('.softaculous-pro-steps-holder ol li [data-step="'+step+'"]').closest('li').addClass('active_step');
}
// Active Panel
jQuery('.softaculous-pro-wizard .softaculous-pro-wizard-content').attr('data-active-panel', step);
}
function softaculous_pro_next_handler(element) {
var ele = jQuery(element);
var nextStep = ele.data('step');
var currentStep = ele.closest('[data-panel]').data('panel');
// Save the current URL
let currentUrl = window.location.href;
if(currentStep === 'welcome'){
if(jQuery("#onboarding_done_confirm").length > 0 && !jQuery("#onboarding_done_confirm").is(":checked")){
alert("Please confirm that you accept data loss since you have already run the onboarding process previously");
return false;
}
}
// Get the current URL
let url = new URL(currentUrl);
// Add a query parameter
url.searchParams.set('step', nextStep);
// Replace the current URL without refreshing the page
window.history.pushState({ path: currentUrl }, '', url);
softaculous_pro_set_active_step(nextStep);
jQuery('.softaculous-pro-steps-holder ol li').removeClass('active_step');
jQuery('.softaculous-pro-steps-holder ol li [data-step="'+nextStep+'"]').closest('li').addClass('active_step');
var post_data = null;
if(currentStep === 'type'){
var active_step = jQuery('.active_category').children('input').val();
if(active_step === 'Others'){
post_data = jQuery('.softaculous-pro-category-input').children('input').val();
}
else{
post_data = active_step;
}
}
if(currentStep === 'title'){
var site_input = jQuery('.softaculous-pro-title-input');
var new_site_title = site_input.children('input').val();
post_data = new_site_title ;
}
if(currentStep === 'features'){
var selected_feats = [];
var feature_holder = jQuery('.softaculous-pro-features');
feature_holder.each(function(){
var feature_checked = jQuery(this).find('input').is(":checked");
if(feature_checked){
var selected_feat = jQuery(this).attr('data-slug');
selected_feats.push(selected_feat);
}
});
post_data = selected_feats;
}
if(nextStep === 'import_theme'){
if(!softaculous_pro_show_themes_loaded){
softaculous_pro_show_themes();
}
}
if(post_data){
jQuery.ajax({
type: 'post',
url: soft_pro_obj.ajax_url,
data: {
action: 'softaculous_pro_setup_info',
step: currentStep,
softaculous_pro_nonce: softaculous_pro_ajax_nonce,
data: post_data,
},
success: function (response) {},
});
}
}
function softaculous_pro_prev_handler(element) {
var ele = jQuery(element);
var currentStep = ele.closest('[data-panel]').data('panel');
var prevStep = ele.data('step');
let currentUrl = window.location.href;
let url = new URL(currentUrl);
url.searchParams.set('step', prevStep);
window.history.pushState({ path: currentUrl }, '', url);
softaculous_pro_set_active_step(prevStep);
jQuery('.softaculous-pro-steps-holder ol li').removeClass('active_step');
jQuery('.softaculous-pro-steps-holder ol li [data-step="'+prevStep+'"]').closest('li').addClass('active_step');
}
function softaculous_pro_selected_features(element) {
var ele_parent = jQuery(element).parent().parent();
if(jQuery(element).is(":checked")){
ele_parent.addClass("feature-border");
}else{
ele_parent.removeClass("feature-border");
}
}
function softaculous_pro_modal(sel){
var page_names = [];
jQuery('.softaculous_pro_img_screen').each(function() {
var is_selected = jQuery(this).find('input').is(':checked');
if(is_selected){
var page_name = jQuery(this).attr('page-name');
}
page_names.push(page_name);
});
page_names.forEach(function(value) {
var input = jQuery('<input>').attr('type', 'hidden').attr('name', 'to_import[]').val(value);
jQuery('#softaculous-pro-import-form').append(input);
});
if(page_names.length == 0){
alert("Please select atleast one page to import");
} else{
jQuery('#softaculous-pro-templates-holder').hide();
var modal = jQuery(sel);
modal.show();
modal.find('.softaculous-pro-done').hide();
modal.find('.softaculous-pro-import').show();
var spro_temp_form_data = jQuery('#softaculous-pro-import-form').serialize();
softaculous_pro_handle_templates(spro_temp_form_data);
}
}
function softaculous_pro_handle_templates(spro_temp_form_data){
jQuery('#softaculous-pro-templates-holder').remove();
jQuery('#SproTemplatesModal').hide();
var message = 'Checking the requirements ...';
softaculous_pro_create_html(message, 10, true); // Start progress at 1%
jQuery.ajax({
url: softaculous_pro_ajax_url+'action=softaculous_pro_start_install_template',
type: 'POST',
data: spro_temp_form_data+'&softaculous_pro_nonce='+softaculous_pro_ajax_nonce,
success: function(response){
if(!response.success && response.data && response.data.form){
softaculous_handle_ftp_form(response.data.form, spro_temp_form_data);
return;
}
// Install plugin gives too much output, hence match the data
var data = response.match(/<softaculous\-pro\-xmlwrap>(.*?)<\/softaculous\-pro\-xmlwrap>/is);
if(data){
data = data[1];
}
data = JSON.parse(data);
softaculous_pro_selected_plugin(data, spro_temp_form_data);
},
error: function(jqXHR, textStatus, errorThrown){
softaculous_pro_show_error({err: 'AJAX failure ! Status : '+textStatus+' | Error : '+errorThrown});
}
});
}
function softaculous_pro_selected_plugin(data, spro_temp_form_data){
if(typeof data === 'object' && 'error' in data){
softaculous_pro_show_error(data['error']);
return false;
}
var message = 'Downloading and installing required plugins';
softaculous_pro_create_html(message, 25, true); // Update progress to 50%
jQuery.ajax({
url: softaculous_pro_ajax_url+'action=softaculous_pro_selected_plugin_install',
type: 'POST',
data: spro_temp_form_data+'&softaculous_pro_nonce='+softaculous_pro_ajax_nonce,
dataType: 'json',
success: function(data){
softaculous_pro_download_template(data, spro_temp_form_data);
},
error: function(jqXHR, textStatus, errorThrown){
softaculous_pro_show_error({err: 'AJAX failure ! Status : '+textStatus+' | Error : '+errorThrown});
}
})
}
function softaculous_pro_download_template(data, spro_temp_form_data){
var failed = [];
if(typeof data === 'object' && 'error' in data){
softaculous_pro_show_error(data['error']);
return false;
}
if(typeof data === 'object' && 'failed_plugin' in data){
failed.push(data['failed_plugin']);
}
var message = 'Downloading the template';
softaculous_pro_create_html(message, 50, true, failed); // Update progress to 50%
// Make the call
jQuery.ajax({
url: softaculous_pro_ajax_url+'action=softaculous_pro_download_template',
type: 'POST',
data: spro_temp_form_data+'&softaculous_pro_nonce='+softaculous_pro_ajax_nonce,
dataType: 'json',
success: function(data){
data.failed_plugin = failed;
softaculous_pro_import_template(data, spro_temp_form_data);
},
error: function(jqXHR, textStatus, errorThrown){
softaculous_pro_show_error({err: 'AJAX failure ! Status : '+textStatus+' | Error : '+errorThrown});
}
});
}
function softaculous_handle_ftp_form(form, form_data){
// Handling FTP Form
jQuery('body').append(form);
var ftp_modal = jQuery('#request-filesystem-credentials-dialog');
ftp_modal.show();
// Handling the close btn of the FTP form.
ftp_modal.find('.cancel-button').on('click', function(event){
event.preventDefault();
ftp_modal.hide();
alert("WordPress requires FTP details, without them you won't be able to install a plugin/theme");
});
ftp_modal.on('submit', 'form', function(event){
event.preventDefault();
let serialized_data = jQuery(event.target).serialize();
form_data += '&'+serialized_data;
ftp_modal.hide();
softaculous_pro_handle_templates(form_data);
});
}
// Import template
function softaculous_pro_import_template(data, spro_temp_form_data){
if(typeof data === 'object' && 'error' in data){
softaculous_pro_show_error(data['error']);
return false;
}
var message = 'Importing the template';
softaculous_pro_create_html(message, 90); // Update progress to 100%
// Make the call
jQuery.ajax({
url: softaculous_pro_ajax_url+'action=softaculous_pro_import_template',
type: 'POST',
data: spro_temp_form_data+'&softaculous_pro_nonce='+softaculous_pro_ajax_nonce,
dataType: 'json',
success: function(data){
var modal = jQuery('.progress-bar');
if(typeof data === 'object' && 'done' in data){
softaculous_pro_create_html('Your website setup is completed', 100, true); // Update message here
modal.find('.progress-text').text('Congratulations 🎊')
modal.find('.skeleton-loader').hide();
modal.find('.softaculous-pro-done').show();
}
},
error: function(jqXHR, textStatus, errorThrown){
softaculous_pro_show_error({err: 'AJAX failure ! Status : '+textStatus+' | Error : '+errorThrown});
}
});
}
function softaculous_pro_show_error(err){
var html = '<div class="setup-error"><div class="setup-error-message"><span class="dashicons dashicons-info-outline"></span><h1>Error</h1></div><ul>';
for(var x in err){
html += '<li>'+err[x]+'</li>';
}
html += '</ul></div>';
jQuery('.softaculous-pro-wizard-content').append(html);
jQuery('#softaculous-pro-error-template').html(html).show();
jQuery('.progress-bar').hide();
}
function softaculous_pro_create_html(message, finalPercentage, slowAnimation, logs) {
// Check if progress bar already exists
var progressBar = jQuery('.progress-bar');
if (progressBar.length > 0) {
// Update the message and animate the progress
jQuery('.progress-indicator').text(message);
softaculous_pro_animateProgress(progressBar.find('.progress-float-r'), progressBar.find('.setup-progress-counter'), finalPercentage, slowAnimation);
} else {
// Create the progress bar
var html = `<div class="progress-bar">
<h1 class="progress-text">Building your website...</h1>
<div class="setup-progress-bar">
<span class="progress-indicator">${message}</span>
<span class="progress-float-r">0%</span>
<div class="progress-bar-par">
<div class="setup-progress-counter" style="width: 0%; background-color: blue"></div>
</div>
<div class="skeleton-loader" style="display:none;">
<div class="skeleton-loader-shadow"></div>
<div class="skeleton-row">
<div class="skeleton-row-heading" style="width:50px; height:50px;border-radius:100%;"></div>
<div class="skeleton-row-para" style="width:70%; height:20px"></div>
<div class="skeleton-row-para" style="width:100%; height:20px"></div>
<div class="skeleton-row-para" style="width:100%; height:20px"></div>
<div class="skeleton-img" style="width:100%;"></div>
</div>
<div class="skeleton-row">
<div class="skeleton-row-heading" style="width:50px; height:50px;border-radius:100%;"></div>
<div class="skeleton-row-para" style="width:70%; height:20px"></div>
<div class="skeleton-row-para" style="width:100%; height:20px"></div>
<div class="skeleton-row-para" style="width:100%; height:20px"></div>
<div class="skeleton-img" style="width:100%;"></div>
</div>
</div>
</div>
<div class="softaculous-pro-done" style="display: none">
<a class="button softaculous-pro-demo-btn" href="${soft_pro_obj.site_url}" target="_blank"
>Visit Website</a>
<a class="button softaculous-pro-demo-btn" href="${soft_pro_obj.admin_url}" target="_blank"
>WordPress Dashboard</a>
<a class="button softaculous-pro-demo-btn" href="${soft_pro_obj.admin_url}admin.php?page=assistant" target="_blank"
>Assistant</a>
</div>
</div>
<div class="spro-setup-progress-logs">
<b> Some Error Occurred: </b>
<ul class="failed-progress-logs">
</ul>
</div>`;
jQuery('.softaculous-pro-wizard-content').append(html);
softaculous_pro_animateProgress(jQuery('.progress-float-r'), jQuery('.setup-progress-counter'), finalPercentage, slowAnimation);
}
if(logs && typeof ele === 'object'){
jQuery('.spro-setup-progress-logs').show();
Object.entries(logs[0]).map(entry => {
console.log(entry[0], entry[1]);
jQuery('.failed-progress-logs').append('<li class="spro-failed-ins-li">'+ entry[1] + '</li>');
});
}
}
function softaculous_pro_animateProgress($progressText, $progressBar, finalPercentage, slowAnimation) {
var currentPercentage = parseInt($progressText.text());
var increment = 1;
var duration = 10;
if (slowAnimation) {
duration = 100;
}
var interval = setInterval(function() {
if (currentPercentage >= finalPercentage) {
clearInterval(interval);
$progressText.text(finalPercentage + '%');
} else {
currentPercentage += increment;
$progressText.text(currentPercentage + '%');
$progressBar.animate({ width: currentPercentage + '%' }, duration).css('background-color', 'blue');
}
if(currentPercentage === 100){
}
}, duration);
}