439 lines
No EOL
14 KiB
JavaScript
439 lines
No EOL
14 KiB
JavaScript
//== Class definition
|
|
var LayoutBuilder = function() {
|
|
|
|
var exporter = {
|
|
init: function() {
|
|
$('#m-btn-howto').click(function(e) {
|
|
e.preventDefault();
|
|
$('#m-howto').slideToggle();
|
|
});
|
|
this.exportHtml();
|
|
this.exportHtmlStatic();
|
|
this.exportAngular();
|
|
},
|
|
startLoad: function(options) {
|
|
$('#builder_export').
|
|
addClass('m-loader m-loader--light m-loader--right').
|
|
find('> span > span').
|
|
text('Exporting...').
|
|
closest('.m-form__actions').
|
|
find('.btn').
|
|
prop('disabled', true);
|
|
$.notify(options);
|
|
},
|
|
doneLoad: function() {
|
|
$('#builder_export').
|
|
removeClass('m-loader m-loader--light m-loader--right').
|
|
find('> span > span').
|
|
text('Export').
|
|
closest('.m-form__actions').
|
|
find('.btn').
|
|
prop('disabled', false);
|
|
},
|
|
exportHtml: function() {
|
|
$('#builder_export_html').click(function(e) {
|
|
e.preventDefault();
|
|
if (!envato.isVerified()) return;
|
|
|
|
var _self = $(this);
|
|
|
|
exporter.startLoad({
|
|
title: 'Generate HTML Partials',
|
|
message: 'Process started and it may take about 1 to 10 minutes.',
|
|
});
|
|
|
|
$.ajax('index.php', {
|
|
method: 'POST',
|
|
data: {
|
|
builder_export: 1,
|
|
export_type: 'partial',
|
|
demo: $(_self).data('demo'),
|
|
},
|
|
}).done(function(r) {
|
|
var result = JSON.parse(r);
|
|
if (result.message) {
|
|
exporter.stopWithNotify(result.message);
|
|
return;
|
|
}
|
|
|
|
var timer = setInterval(function() {
|
|
$.ajax('index.php', {
|
|
method: 'POST',
|
|
data: {
|
|
builder_export: 1,
|
|
builder_check: result.id,
|
|
},
|
|
}).done(function(r) {
|
|
var result = JSON.parse(r);
|
|
if (typeof result === 'undefined') return;
|
|
// export status 1 is completed
|
|
if (result.export_status !== '1') return;
|
|
|
|
$('<iframe/>').attr({
|
|
src: 'index.php?builder_export&builder_download&id=' +
|
|
result.id,
|
|
style: 'visibility:hidden;display:none',
|
|
}).ready(function() {
|
|
$.notify({
|
|
title: 'Export HTML Version Layout',
|
|
message: 'HTML version exported.',
|
|
}, {type: 'success'});
|
|
exporter.doneLoad();
|
|
// stop the timer
|
|
clearInterval(timer);
|
|
}).appendTo(_self);
|
|
});
|
|
}, 15000);
|
|
});
|
|
});
|
|
},
|
|
exportHtmlStatic: function() {
|
|
$('#builder_export_html_static').click(function(e) {
|
|
e.preventDefault();
|
|
if (!envato.isVerified()) return;
|
|
|
|
var _self = $(this);
|
|
|
|
exporter.startLoad({
|
|
title: 'Generate HTML Static Version',
|
|
message: 'Process started and it may take about 1 to 10 minutes.',
|
|
});
|
|
|
|
$.ajax('index.php', {
|
|
method: 'POST',
|
|
data: {
|
|
builder_export: 1,
|
|
export_type: 'html',
|
|
demo: $(_self).data('demo'),
|
|
},
|
|
}).done(function(r) {
|
|
var result = JSON.parse(r);
|
|
if (result.message) {
|
|
exporter.stopWithNotify(result.message);
|
|
return;
|
|
}
|
|
|
|
var timer = setInterval(function() {
|
|
$.ajax('index.php', {
|
|
method: 'POST',
|
|
data: {
|
|
builder_export: 1,
|
|
builder_check: result.id,
|
|
},
|
|
}).done(function(r) {
|
|
var result = JSON.parse(r);
|
|
if (typeof result === 'undefined') return;
|
|
// export status 1 is completed
|
|
if (result.export_status !== '1') return;
|
|
|
|
$('<iframe/>').attr({
|
|
src: 'index.php?builder_export&builder_download&id=' +
|
|
result.id,
|
|
style: 'visibility:hidden;display:none',
|
|
}).ready(function() {
|
|
$.notify({
|
|
title: 'Export Default Version',
|
|
message: 'Default HTML version exported with current configured layout.',
|
|
}, {type: 'success'});
|
|
exporter.doneLoad();
|
|
// stop the timer
|
|
clearInterval(timer);
|
|
}).appendTo(_self);
|
|
});
|
|
}, 15000);
|
|
});
|
|
|
|
});
|
|
},
|
|
exportAngular: function() {
|
|
$('#builder_export_angular').click(function(e) {
|
|
e.preventDefault();
|
|
if (!envato.isVerified()) return;
|
|
|
|
var _self = $(this);
|
|
|
|
exporter.startLoad({
|
|
title: 'Export Angular Version',
|
|
message: 'Process started and it may take about 1 to 10 minutes.',
|
|
});
|
|
|
|
$.ajax('index.php', {
|
|
method: 'POST',
|
|
data: {
|
|
builder_export: 1,
|
|
export_type: 'angular',
|
|
demo: $(_self).data('demo'),
|
|
},
|
|
}).done(function(r) {
|
|
var result = JSON.parse(r);
|
|
if (result.message) {
|
|
exporter.stopWithNotify(result.message);
|
|
return;
|
|
}
|
|
|
|
var timer = setInterval(function() {
|
|
$.ajax('index.php', {
|
|
method: 'POST',
|
|
data: {
|
|
builder_export: 1,
|
|
builder_check: result.id,
|
|
},
|
|
}).done(function(r) {
|
|
var result = JSON.parse(r);
|
|
if (typeof result === 'undefined') return;
|
|
// export status 1 is completed
|
|
if (result.export_status !== '1') return;
|
|
|
|
$('<iframe/>').attr({
|
|
src: 'index.php?builder_export&builder_download&id=' +
|
|
result.id,
|
|
style: 'visibility:hidden;display:none',
|
|
}).ready(function() {
|
|
$.notify({
|
|
title: 'Export Angular Version',
|
|
message: 'Angular App version exported with current configured layout.',
|
|
}, {type: 'success'});
|
|
exporter.doneLoad();
|
|
// stop the timer
|
|
clearInterval(timer);
|
|
}).appendTo(_self);
|
|
});
|
|
}, 15000);
|
|
});
|
|
});
|
|
},
|
|
stopWithNotify: function(message, type) {
|
|
type = type || 'danger';
|
|
$.notify({
|
|
title: 'Verification failed',
|
|
message: message,
|
|
}, {type: type});
|
|
exporter.doneLoad();
|
|
},
|
|
};
|
|
|
|
//== Private functions
|
|
var preview = function() {
|
|
$('[name="builder_submit"]').click(function(e) {
|
|
e.preventDefault();
|
|
var _self = $(this);
|
|
$(_self).
|
|
addClass('m-loader m-loader--light m-loader--right').
|
|
closest('.m-form__actions').
|
|
find('.btn').
|
|
prop('disabled', true);
|
|
|
|
$.ajax('index.php?demo=' + $(_self).data('demo'), {
|
|
method: 'POST',
|
|
data: $('[name]').serialize(),
|
|
}).done(function(r) {
|
|
$.notify({
|
|
title: 'Preview updated',
|
|
message: 'Preview has been updated with current configured layout.',
|
|
}, {type: 'success'});
|
|
}).always(function() {
|
|
setTimeout(function() {
|
|
location.reload();
|
|
}, 600);
|
|
});
|
|
});
|
|
};
|
|
|
|
var reset = function() {
|
|
$('[name="builder_reset"]').click(function(e) {
|
|
e.preventDefault();
|
|
var _self = $(this);
|
|
$(_self).
|
|
addClass('m-loader m-loader--primary m-loader--right').
|
|
closest('.m-form__actions').
|
|
find('.btn').
|
|
prop('disabled', true);
|
|
|
|
$.ajax('index.php?demo=' + $(_self).data('demo'), {
|
|
method: 'POST',
|
|
data: {
|
|
builder_reset: 1,
|
|
demo: $(_self).data('demo'),
|
|
},
|
|
}).done(function(r) {
|
|
}).always(function() {
|
|
location.reload();
|
|
});
|
|
});
|
|
};
|
|
|
|
var keepActiveTab = function() {
|
|
$('[href^="#m_builder_"]').click(function(e) {
|
|
var which = $(this).attr('href');
|
|
var btn = $('[name="builder_submit"]');
|
|
var tab = $('[name="builder[tab]"]');
|
|
if ($(tab).length === 0) {
|
|
$('<input/>').
|
|
attr('type', 'hidden').
|
|
attr('name', 'builder[tab]').
|
|
val(which).
|
|
insertBefore(btn);
|
|
} else {
|
|
$(tab).val(which);
|
|
}
|
|
}).each(function() {
|
|
if ($(this).hasClass('active')) {
|
|
var which = $(this).attr('href');
|
|
var btn = $('[name="builder_submit"]');
|
|
var tab = $('[name="builder[tab]"]');
|
|
if ($(tab).length === 0) {
|
|
$('<input/>').
|
|
attr('type', 'hidden').
|
|
attr('name', 'builder[tab]').
|
|
val(which).
|
|
insertBefore(btn);
|
|
} else {
|
|
$(tab).val(which);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
// localStorage.removeItem('envato');
|
|
window.envato = {
|
|
apiKey: '05kxpfkxwymzzczjm75d9s3li4spg0j1',
|
|
expires_in: '3600', // seconds
|
|
isVerified: function() {
|
|
// console.log(envato.getItem());
|
|
// check token is not expired and verified
|
|
return !envato.tokenIsExpired() && envato.getItem('verified');
|
|
},
|
|
reCaptchaVerified: function() {
|
|
return $.ajax('http://keenthemes.com/metronic/preview/inc/api/envato.php?recaptcha', {
|
|
method: 'POST',
|
|
data: {
|
|
response: $('#g-recaptcha-response').val(),
|
|
},
|
|
}).fail(function() {
|
|
grecaptcha.reset();
|
|
$('#alert-message').
|
|
removeClass('alert-success m--hide').
|
|
addClass('alert-danger').
|
|
html('Invalid reCaptcha validation');
|
|
});
|
|
},
|
|
verifyEvent: function() {
|
|
// click event
|
|
$('#builder_export').click(function(e) {
|
|
e.preventDefault();
|
|
if (envato.isVerified()) return;
|
|
grecaptcha.reset();
|
|
$('#m-modal-purchase').modal('show');
|
|
$('#alert-message').addClass('m--hide');
|
|
});
|
|
|
|
$('#submit-verify').click(function(e) {
|
|
e.preventDefault();
|
|
envato.reCaptchaVerified().done(function(response) {
|
|
if (response.success) {
|
|
var purchaseCode = $('#purchase-code').val();
|
|
envato.setItem('purchase_code', purchaseCode);
|
|
envato.verifyPurchase(purchaseCode);
|
|
} else {
|
|
grecaptcha.reset();
|
|
$('#alert-message').
|
|
removeClass('alert-success m--hide').
|
|
addClass('alert-danger').
|
|
html('Invalid reCaptcha validation');
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#purchase-code').keyup(function() {
|
|
$('#alert-message').addClass('m--hide');
|
|
});
|
|
},
|
|
verifyPurchase: function(purchaseCode) {
|
|
return $.ajax('https://marketplace.envato.com/api/edge/keenthemes/' +
|
|
envato.apiKey + '/verify-purchase:' +
|
|
purchaseCode + '.json', {
|
|
method: 'GET',
|
|
}).done(function(response) {
|
|
if (!$.isEmptyObject(response['verify-purchase'])) {
|
|
envato.setItems(response['verify-purchase']);
|
|
envato.setItem('verified', true);
|
|
|
|
// keep session is php
|
|
$.ajax('inc/api/envato.php', {
|
|
method: 'POST',
|
|
data: envato.getItem(),
|
|
});
|
|
|
|
$('#alert-message').
|
|
removeClass('alert-danger m--hide').
|
|
addClass('alert-success').
|
|
html('Purchase code is successfully verified');
|
|
} else {
|
|
grecaptcha.reset();
|
|
$('#alert-message').
|
|
removeClass('alert-success m--hide').
|
|
addClass('alert-danger').
|
|
html('Invalid purchase code');
|
|
}
|
|
}).fail(function(e) {
|
|
grecaptcha.reset();
|
|
$('#alert-message').
|
|
removeClass('alert-success m--hide').
|
|
addClass('alert-danger').
|
|
html('Invalid purchase code');
|
|
});
|
|
},
|
|
setItems: function(object) {
|
|
var params = $.extend({}, envato.getItem(), object);
|
|
localStorage.setItem('envato', JSON.stringify(params));
|
|
},
|
|
setItem: function(key, val) {
|
|
var assign = {};
|
|
assign[key] = val;
|
|
var params = $.extend({}, envato.getItem(), assign);
|
|
localStorage.setItem('envato', JSON.stringify(params));
|
|
},
|
|
getItem: function(key) {
|
|
var params = JSON.parse(localStorage.getItem('envato'));
|
|
if (typeof key !== 'undefined') {
|
|
return params !== null ? params[key] : null;
|
|
}
|
|
return params;
|
|
},
|
|
startTimer: function(now) {
|
|
envato.setItem('created_on', now);
|
|
setTimeout(function() {
|
|
localStorage.removeItem('envato');
|
|
}, envato.expires_in * 1000);
|
|
},
|
|
tokenIsExpired: function() {
|
|
var diff = new Date().getTime() - envato.getItem('created_on');
|
|
if (typeof envato.expires_in === 'undefined' ||
|
|
diff >= ( envato.expires_in * 1000)) {
|
|
localStorage.removeItem('envato');
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
};
|
|
|
|
// basic demo
|
|
var init = function() {
|
|
exporter.init();
|
|
keepActiveTab();
|
|
preview();
|
|
reset();
|
|
};
|
|
|
|
return {
|
|
// public functions
|
|
init: function() {
|
|
envato.verifyEvent();
|
|
init();
|
|
},
|
|
};
|
|
}();
|
|
|
|
jQuery(document).ready(function() {
|
|
LayoutBuilder.init();
|
|
}); |