resq/public/assets/app/js/layout-builder.js
2018-01-06 21:26:46 +08:00

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();
});