first commit
This commit is contained in:
556
wp-content/themes/thinkai/demo-import/assets/js/merlin.js
Normal file
556
wp-content/themes/thinkai/demo-import/assets/js/merlin.js
Normal file
@@ -0,0 +1,556 @@
|
||||
|
||||
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();
|
||||
1
wp-content/themes/thinkai/demo-import/assets/js/merlin.min.js
vendored
Normal file
1
wp-content/themes/thinkai/demo-import/assets/js/merlin.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user