557 lines
17 KiB
JavaScript
557 lines
17 KiB
JavaScript
|
|
var Merlin = (function($){
|
|
|
|
var t;
|
|
|
|
// callbacks from form button clicks.
|
|
var callbacks = {
|
|
install_child: function(btn) {
|
|
var installer = new ChildTheme();
|
|
installer.init(btn);
|
|
},
|
|
activate_license: function(btn) {
|
|
var license = new ActivateLicense();
|
|
license.init(btn);
|
|
},
|
|
install_plugins: function(btn){
|
|
var plugins = new PluginManager();
|
|
plugins.init(btn);
|
|
},
|
|
install_content: function(btn){
|
|
var content = new ContentManager();
|
|
content.init(btn);
|
|
}
|
|
};
|
|
|
|
function window_loaded(){
|
|
|
|
var
|
|
body = $('.merlin__body'),
|
|
body_loading = $('.merlin__body--loading'),
|
|
body_exiting = $('.merlin__body--exiting'),
|
|
drawer_trigger = $('#merlin__drawer-trigger'),
|
|
drawer_opening = 'merlin__drawer--opening';
|
|
drawer_opened = 'merlin__drawer--open';
|
|
|
|
setTimeout(function(){
|
|
body.addClass('loaded');
|
|
},100);
|
|
|
|
drawer_trigger.on('click', function(){
|
|
body.toggleClass( drawer_opened );
|
|
});
|
|
|
|
$('.merlin__button--proceed:not(.merlin__button--closer)').click(function (e) {
|
|
e.preventDefault();
|
|
var goTo = this.getAttribute("href");
|
|
|
|
body.addClass('exiting');
|
|
|
|
setTimeout(function(){
|
|
window.location = goTo;
|
|
},400);
|
|
});
|
|
|
|
$(".merlin__button--closer").on('click', function(e){
|
|
|
|
body.removeClass( drawer_opened );
|
|
|
|
e.preventDefault();
|
|
var goTo = this.getAttribute("href");
|
|
|
|
setTimeout(function(){
|
|
body.addClass('exiting');
|
|
},600);
|
|
|
|
setTimeout(function(){
|
|
window.location = goTo;
|
|
},1100);
|
|
});
|
|
|
|
$(".button-next").on( "click", function(e) {
|
|
e.preventDefault();
|
|
var loading_button = merlin_loading_button(this);
|
|
if ( ! loading_button ) {
|
|
return false;
|
|
}
|
|
var data_callback = $(this).data("callback");
|
|
if( data_callback && typeof callbacks[data_callback] !== "undefined"){
|
|
// We have to process a callback before continue with form submission.
|
|
callbacks[data_callback](this);
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
});
|
|
|
|
$( document ).on( 'change', '.js-merlin-demo-import-select', function() {
|
|
var selectedIndex = $( this ).val();
|
|
|
|
$( '.js-merlin-select-spinner' ).show();
|
|
|
|
$.post( merlin_params.ajaxurl, {
|
|
action: 'merlin_update_selected_import_data_info',
|
|
wpnonce: merlin_params.wpnonce,
|
|
selected_index: selectedIndex,
|
|
}, function( response ) {
|
|
if ( response.success ) {
|
|
$( '.js-merlin-drawer-import-content' ).html( response.data );
|
|
}
|
|
else {
|
|
alert( merlin_params.texts.something_went_wrong );
|
|
}
|
|
|
|
$( '.js-merlin-select-spinner' ).hide();
|
|
} )
|
|
.fail( function() {
|
|
$( '.js-merlin-select-spinner' ).hide();
|
|
alert( merlin_params.texts.something_went_wrong )
|
|
} );
|
|
} );
|
|
}
|
|
|
|
function ChildTheme() {
|
|
var body = $('.merlin__body');
|
|
var complete, notice = $("#child-theme-text");
|
|
|
|
function ajax_callback(r) {
|
|
|
|
if (typeof r.done !== "undefined") {
|
|
setTimeout(function(){
|
|
notice.addClass("lead");
|
|
},0);
|
|
setTimeout(function(){
|
|
notice.addClass("success");
|
|
notice.html(r.message);
|
|
},600);
|
|
|
|
|
|
complete();
|
|
} else {
|
|
notice.addClass("lead error");
|
|
notice.html(r.error);
|
|
}
|
|
}
|
|
|
|
function do_ajax() {
|
|
jQuery.post(merlin_params.ajaxurl, {
|
|
action: "merlin_child_theme",
|
|
wpnonce: merlin_params.wpnonce,
|
|
}, ajax_callback).fail(ajax_callback);
|
|
}
|
|
|
|
return {
|
|
init: function(btn) {
|
|
complete = function() {
|
|
|
|
setTimeout(function(){
|
|
$(".merlin__body").addClass('js--finished');
|
|
},1500);
|
|
|
|
body.removeClass( drawer_opened );
|
|
|
|
setTimeout(function(){
|
|
$('.merlin__body').addClass('exiting');
|
|
},3500);
|
|
|
|
setTimeout(function(){
|
|
window.location.href=btn.href;
|
|
},4000);
|
|
|
|
};
|
|
do_ajax();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function ActivateLicense() {
|
|
var body = $( '.merlin__body' );
|
|
var wrapper = $( '.merlin__content--license-key' );
|
|
var complete, notice = $( '#license-text' );
|
|
|
|
function ajax_callback(r) {
|
|
|
|
if (typeof r.success !== "undefined" && r.success) {
|
|
notice.siblings( '.error-message' ).remove();
|
|
setTimeout(function(){
|
|
notice.addClass("lead");
|
|
},0);
|
|
setTimeout(function(){
|
|
notice.addClass("success");
|
|
notice.html(r.message);
|
|
},600);
|
|
complete();
|
|
} else {
|
|
$( '.js-merlin-license-activate-button' ).removeClass( 'merlin__button--loading' ).data( 'done-loading', 'no' );
|
|
notice.siblings( '.error-message' ).remove();
|
|
wrapper.addClass('has-error');
|
|
notice.html(r.message);
|
|
notice.siblings( '.error-message' ).addClass("lead error");
|
|
}
|
|
}
|
|
|
|
|
|
function do_ajax() {
|
|
|
|
wrapper.removeClass('has-error');
|
|
|
|
jQuery.post(merlin_params.ajaxurl, {
|
|
action: "merlin_activate_license",
|
|
wpnonce: merlin_params.wpnonce,
|
|
license_key: $( '.js-license-key' ).val()
|
|
}, ajax_callback).fail(ajax_callback);
|
|
|
|
|
|
}
|
|
|
|
return {
|
|
init: function(btn) {
|
|
complete = function() {
|
|
setTimeout(function(){
|
|
$(".merlin__body").addClass('js--finished');
|
|
},1500);
|
|
|
|
body.removeClass( drawer_opened );
|
|
|
|
setTimeout(function(){
|
|
$('.merlin__body').addClass('exiting');
|
|
},3500);
|
|
|
|
setTimeout(function(){
|
|
window.location.href=btn.href;
|
|
},4000);
|
|
|
|
};
|
|
do_ajax();
|
|
}
|
|
}
|
|
}
|
|
|
|
function PluginManager(){
|
|
|
|
var body = $('.merlin__body');
|
|
var complete;
|
|
var items_completed = 0;
|
|
var current_item = "";
|
|
var $current_node;
|
|
var current_item_hash = "";
|
|
|
|
function ajax_callback(response){
|
|
var currentSpan = $current_node.find("label");
|
|
if(typeof response === "object" && typeof response.message !== "undefined"){
|
|
currentSpan.removeClass( 'installing success error' ).addClass(response.message.toLowerCase());
|
|
|
|
// The plugin is done (installed, updated and activated).
|
|
if(typeof response.done != "undefined" && response.done){
|
|
find_next();
|
|
}else if(typeof response.url != "undefined"){
|
|
// we have an ajax url action to perform.
|
|
if(response.hash == current_item_hash){
|
|
currentSpan.removeClass( 'installing success' ).addClass("error");
|
|
find_next();
|
|
}else {
|
|
current_item_hash = response.hash;
|
|
jQuery.post(response.url, response, ajax_callback).fail(ajax_callback);
|
|
}
|
|
}else{
|
|
// error processing this plugin
|
|
find_next();
|
|
}
|
|
}else{
|
|
// The TGMPA returns a whole page as response, so check, if this plugin is done.
|
|
process_current();
|
|
}
|
|
}
|
|
|
|
function process_current(){
|
|
if(current_item){
|
|
var $check = $current_node.find("input:checkbox");
|
|
if($check.is(":checked")) {
|
|
jQuery.post(merlin_params.ajaxurl, {
|
|
action: "merlin_plugins",
|
|
wpnonce: merlin_params.wpnonce,
|
|
slug: current_item,
|
|
}, ajax_callback).fail(ajax_callback);
|
|
}else{
|
|
$current_node.addClass("skipping");
|
|
setTimeout(find_next,300);
|
|
}
|
|
}
|
|
}
|
|
|
|
function find_next(){
|
|
if($current_node){
|
|
if(!$current_node.data("done_item")){
|
|
items_completed++;
|
|
$current_node.data("done_item",1);
|
|
}
|
|
$current_node.find(".spinner").css("visibility","hidden");
|
|
}
|
|
var $li = $(".merlin__drawer--install-plugins li");
|
|
$li.each(function(){
|
|
var $item = $(this);
|
|
|
|
if ( $item.data("done_item") ) {
|
|
return true;
|
|
}
|
|
|
|
current_item = $item.data("slug");
|
|
$current_node = $item;
|
|
process_current();
|
|
return false;
|
|
});
|
|
if(items_completed >= $li.length){
|
|
// finished all plugins!
|
|
complete();
|
|
}
|
|
}
|
|
|
|
return {
|
|
init: function(btn){
|
|
$(".merlin__drawer--install-plugins").addClass("installing");
|
|
$(".merlin__drawer--install-plugins").find("input").prop("disabled", true);
|
|
complete = function(){
|
|
|
|
setTimeout(function(){
|
|
$(".merlin__body").addClass('js--finished');
|
|
},1000);
|
|
|
|
body.removeClass( drawer_opened );
|
|
|
|
setTimeout(function(){
|
|
$('.merlin__body').addClass('exiting');
|
|
},3000);
|
|
|
|
setTimeout(function(){
|
|
window.location.href=btn.href;
|
|
},3500);
|
|
|
|
};
|
|
find_next();
|
|
}
|
|
}
|
|
}
|
|
function ContentManager(){
|
|
|
|
var body = $('.merlin__body');
|
|
var complete;
|
|
var items_completed = 0;
|
|
var current_item = "";
|
|
var $current_node;
|
|
var current_item_hash = "";
|
|
var current_content_import_items = 1;
|
|
var total_content_import_items = 0;
|
|
var progress_bar_interval;
|
|
|
|
function ajax_callback(response) {
|
|
var currentSpan = $current_node.find("label");
|
|
if(typeof response == "object" && typeof response.message !== "undefined"){
|
|
if(response.message) {
|
|
currentSpan.addClass(response.message.toLowerCase());
|
|
}
|
|
|
|
if( typeof response.num_of_imported_posts !== "undefined" && 0 < total_content_import_items ) {
|
|
current_content_import_items = 'all' === response.num_of_imported_posts ? total_content_import_items : response.num_of_imported_posts;
|
|
update_progress_bar();
|
|
}
|
|
|
|
if(typeof response.url !== "undefined"){
|
|
// we have an ajax url action to perform.
|
|
if(response.hash === current_item_hash){
|
|
currentSpan.addClass("status--failed");
|
|
find_next();
|
|
}else {
|
|
current_item_hash = response.hash;
|
|
|
|
// Fix the undefined selected_index issue on new AJAX calls.
|
|
if ( typeof response.selected_index === "undefined" ) {
|
|
response.selected_index = $( '.js-merlin-demo-import-select' ).val() || 0;
|
|
}
|
|
|
|
jQuery.post(response.url, response, ajax_callback).fail(ajax_callback); // recuurrssionnnnn
|
|
}
|
|
}else if(typeof response.done !== "undefined"){
|
|
// finished processing this plugin, move onto next
|
|
find_next();
|
|
}else{
|
|
// error processing this plugin
|
|
find_next();
|
|
}
|
|
}else{
|
|
console.log(response);
|
|
// error - try again with next plugin
|
|
currentSpan.addClass("status--error");
|
|
find_next();
|
|
}
|
|
}
|
|
|
|
function process_current(){
|
|
if(current_item){
|
|
var $check = $current_node.find("input:checkbox");
|
|
if($check.is(":checked")) {
|
|
jQuery.post(merlin_params.ajaxurl, {
|
|
action: "merlin_content",
|
|
wpnonce: merlin_params.wpnonce,
|
|
content: current_item,
|
|
selected_index: $( '.js-merlin-demo-import-select' ).val() || 0
|
|
}, ajax_callback).fail(ajax_callback);
|
|
}else{
|
|
$current_node.addClass("skipping");
|
|
setTimeout(find_next,300);
|
|
}
|
|
}
|
|
}
|
|
|
|
function find_next(){
|
|
var do_next = false;
|
|
if($current_node){
|
|
if(!$current_node.data("done_item")){
|
|
items_completed++;
|
|
$current_node.data("done_item",1);
|
|
}
|
|
$current_node.find(".spinner").css("visibility","hidden");
|
|
}
|
|
var $items = $(".merlin__drawer--import-content__list-item");
|
|
var $enabled_items = $(".merlin__drawer--import-content__list-item input:checked");
|
|
$items.each(function(){
|
|
if (current_item == "" || do_next) {
|
|
current_item = $(this).data("content");
|
|
$current_node = $(this);
|
|
process_current();
|
|
do_next = false;
|
|
} else if ($(this).data("content") == current_item) {
|
|
do_next = true;
|
|
}
|
|
});
|
|
if(items_completed >= $items.length){
|
|
complete();
|
|
}
|
|
}
|
|
|
|
function init_content_import_progress_bar() {
|
|
if( ! $(".merlin__drawer--import-content__list-item .checkbox-content").is( ':checked' ) ) {
|
|
return false;
|
|
}
|
|
|
|
jQuery.post(merlin_params.ajaxurl, {
|
|
action: "merlin_get_total_content_import_items",
|
|
wpnonce: merlin_params.wpnonce,
|
|
selected_index: $( '.js-merlin-demo-import-select' ).val() || 0
|
|
}, function( response ) {
|
|
total_content_import_items = response.data;
|
|
|
|
if ( 0 < total_content_import_items ) {
|
|
update_progress_bar();
|
|
|
|
// Change the value of the progress bar constantly for a small amount (0,2% per sec), to improve UX.
|
|
progress_bar_interval = setInterval( function() {
|
|
current_content_import_items = current_content_import_items + total_content_import_items/500;
|
|
update_progress_bar();
|
|
}, 1000 );
|
|
}
|
|
} );
|
|
}
|
|
|
|
function valBetween(v, min, max) {
|
|
return (Math.min(max, Math.max(min, v)));
|
|
}
|
|
|
|
function update_progress_bar() {
|
|
$('.js-merlin-progress-bar').css( 'width', (current_content_import_items/total_content_import_items) * 100 + '%' );
|
|
|
|
var $percentage = valBetween( ((current_content_import_items/total_content_import_items) * 100) , 0, 99);
|
|
|
|
$('.js-merlin-progress-bar-percentage').html( Math.round( $percentage ) + '%' );
|
|
|
|
if ( 1 === current_content_import_items/total_content_import_items ) {
|
|
clearInterval( progress_bar_interval );
|
|
}
|
|
}
|
|
|
|
return {
|
|
init: function(btn){
|
|
$(".merlin__drawer--import-content").addClass("installing");
|
|
$(".merlin__drawer--import-content").find("input").prop("disabled", true);
|
|
complete = function(){
|
|
|
|
$.post(merlin_params.ajaxurl, {
|
|
action: "merlin_import_finished",
|
|
wpnonce: merlin_params.wpnonce,
|
|
selected_index: $( '.js-merlin-demo-import-select' ).val() || 0
|
|
});
|
|
|
|
setTimeout(function(){
|
|
$('.js-merlin-progress-bar-percentage').html( '100%' );
|
|
},100);
|
|
|
|
setTimeout(function(){
|
|
body.removeClass( drawer_opened );
|
|
},500);
|
|
|
|
setTimeout(function(){
|
|
$(".merlin__body").addClass('js--finished');
|
|
},1500);
|
|
|
|
setTimeout(function(){
|
|
$('.merlin__body').addClass('exiting');
|
|
},3400);
|
|
|
|
setTimeout(function(){
|
|
window.location.href=btn.href;
|
|
},4000);
|
|
};
|
|
init_content_import_progress_bar();
|
|
find_next();
|
|
}
|
|
}
|
|
}
|
|
|
|
function merlin_loading_button( btn ){
|
|
|
|
var $button = jQuery(btn);
|
|
|
|
if ( $button.data( "done-loading" ) == "yes" ) {
|
|
return false;
|
|
}
|
|
|
|
var completed = false;
|
|
|
|
var _modifier = $button.is("input") || $button.is("button") ? "val" : "text";
|
|
|
|
$button.data("done-loading","yes");
|
|
|
|
$button.addClass("merlin__button--loading");
|
|
|
|
return {
|
|
done: function(){
|
|
completed = true;
|
|
$button.attr("disabled",false);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
return {
|
|
init: function(){
|
|
t = this;
|
|
$(window_loaded);
|
|
},
|
|
callback: function(func){
|
|
console.log(func);
|
|
console.log(this);
|
|
}
|
|
}
|
|
|
|
})(jQuery);
|
|
|
|
Merlin.init();
|