<?php
defined("DUPXABSPATH") or die("");
use Duplicator\Installer\Core\Params\PrmMng;
use Duplicator\Installer\Utils\InstallerUpsell;
use Duplicator\Libs\Snap\SnapJson;
$paramsManager = PrmMng::getInstance();
?>
<script>
//Unique namespace
DUPX = new Object();
DUPX.Util = new Object();
DUPX.UI = new Object();
DUPX.Const = new Object();
DUPX.GLB_DEBUG = <?php echo $paramsManager->getValue(PrmMng::PARAM_DEBUG) ? 'true' : 'false'; ?>;
DUPX.dupInstallerUrl = <?php echo SnapJson::jsonEncode(DUPX_INIT_URL . '/main.installer.php'); ?>;
DUPX.beforeUnloadListener = (event) => {
event.preventDefault();
return event.returnValue = "Are you sure you want to exit?";
};
DUPX.beforeUnloadCheck = function (enable) {
if (enable) {
window.addEventListener("beforeunload", DUPX.beforeUnloadListener);
} else {
window.removeEventListener("beforeunload", DUPX.beforeUnloadListener);
}
};
DUPX.redirect = function (url, method, params) {
var form = $('<form>', {
method: method,
action: url
});
$.each(params, function (key, value) {
form.append($('<input>', {
'type': 'hidden',
'name': key,
'value': value
}));
});
$("body").append(form);
DUPX.beforeUnloadCheck(false);
form.submit();
};
DUPX.parseJSON = function (mixData) {
// if mixData is already a object, Then don't parse it
if (typeof mixData === 'object' && mixData !== null) {
return mixData;
}
try {
var parsed = JSON.parse(mixData);
return parsed;
} catch (e) {
console.log("JSON parse failed - 1");
console.log(mixData);
}
if (mixData.indexOf('[') > -1 && mixData.indexOf('{') > -1) {
if (mixData.indexOf('{') < mixData.indexOf('[')) {
var startBracket = '{';
var endBracket = '}';
} else {
var startBracket = '[';
var endBracket = ']';
}
} else if (mixData.indexOf('[') > -1 && mixData.indexOf('{') === -1) {
var startBracket = '[';
var endBracket = ']';
} else {
var startBracket = '{';
var endBracket = '}';
}
var jsonStartPos = mixData.indexOf(startBracket);
var jsonLastPos = mixData.lastIndexOf(endBracket);
if (jsonStartPos > -1 && jsonLastPos > -1) {
var expectedJsonStr = mixData.slice(jsonStartPos, jsonLastPos + 1);
try {
var parsed = JSON.parse(expectedJsonStr);
return parsed;
} catch (e) {
console.log("JSON parse failed - 2");
console.log(mixData);
throw e;
return false;
}
}
throw "could not parse the JSON";
return false;
}
DUPX.StandardJsonAjaxWrapper = function (action, token, ajaxData, callbackSuccess, callbackFail, options) {
var ajax_url = document.location.href;
var currentOptions = jQuery.extend({}, DUPX.standarJsonAjaxOptions, options);
var ajaxData = $.extend({
"ctrl_action": 'ajax',
"ajax_action": action,
"ajax_csrf_token": token
}, ajaxData);
function retryOnFailure(result, textStatus, jqXHR) {
var retryOptions = Object.assign({}, options);
retryOptions.numberOfAttempts--;
if (typeof currentOptions.callbackOnRetry === "function") {
currentOptions.callbackOnRetry(result, textStatus, jqXHR, retryOptions);
}
if (currentOptions.delayRetryOnFailure > 0) {
setTimeout(function () {
DUPX.StandardJsonAjaxWrapper(action, token, ajaxData, callbackSuccess, callbackFail, retryOptions);
}, currentOptions.delayRetryOnFailure);
} else {
DUPX.StandardJsonAjaxWrapper(action, token, ajaxData, callbackSuccess, callbackFail, retryOptions);
}
}
jQuery.ajax({
type: "POST",
url: ajax_url,
dataType: "json",
timeout: currentOptions.timeOut,
data: ajaxData,
beforeSend: currentOptions.beforeSend,
success: function (result, textStatus, jqXHR) {
var message = '';
if (result.success) {
if (typeof callbackSuccess === "function") {
callbackSuccess(result, textStatus, jqXHR);
} else {
alert('SUCCESS: ' + result.message);
}
} else {
if (currentOptions.retryOnFailure && currentOptions.numberOfAttempts > 0) {
retryOnFailure(result, textStatus, jqXHR);
} else {
if (typeof callbackFail === "function") {
callbackFail(result, textStatus, jqXHR);
} else {
alert('RESPONSE ERROR! ' + result.message);
}
}
}
},
error: function (jqXHR, textStatus, errorThrown) {
const result = {
'success': false,
'message': 'AJAX ERROR! STATUS:' + jqXHR.status + ' ' + jqXHR.statusText,
'errorContent': {
'pre': '',
'html': ''
},
'actionData': null
};
if (currentOptions.retryOnFailure && currentOptions.numberOfAttempts > 0) {
retryOnFailure(result, textStatus, jqXHR);
return;
}
if (jqXHR.status === 200) {
result.message = 'AJAX ERROR! STATUS: ' + textStatus;
result.errorContent.html = jqXHR.responseText;
}
if (typeof callbackFail === "function") {
callbackFail(result, textStatus, jqXHR);
} else {
alert(result.message);
}
}
});
};
DUPX.standarJsonAjaxOptions = {
timeOut: 1800000,
beforeSend: null,
retryOnFailure: false,
numberOfAttempts: 3,
delayRetryOnFailure: 5000,
callbackOnRetry: null
};
DUPX.showProgressBar = function ()
{
DUPX.animateProgressBar('progress-bar');
$('#ajaxerr-area').hide();
$('#progress-area').show();
};
DUPX.hideProgressBar = function ()
{
$('#progress-area').hide(100);
$('#ajaxerr-area').fadeIn(400);
};
DUPX.getFormDataObject = function (formObj) {
var formArray = $(formObj).serializeArray();
var returnObj = {};
for (var i = 0; i < formArray.length; i++) {
returnObj[formArray[i]['name']] = formArray[i]['value'];
}
return returnObj;
};
DUPX.animateProgressBar = function (id) {
//Create Progress Bar
var $mainbar = $("#" + id);
$mainbar.progressbar({value: 100});
$mainbar.height(25);
runAnimation($mainbar);
function runAnimation($pb) {
$pb.css({"padding-left": "0%", "padding-right": "90%"});
$pb.progressbar("option", "value", 100);
$pb.animate({paddingLeft: "90%", paddingRight: "0%"}, 3500, "linear", function () {
runAnimation($pb);
});
}
};
DUPX.stringifyNumber = function (n) {
const special = [
'zeroth', 'first', 'second', 'third', 'fourth', 'fifth', 'sixth',
'seventh', 'eighth', 'ninth', 'tenth', 'eleventh', 'twelvth', 'thirteenth', 'fourteenth',
'fifteenth', 'sixteenth', 'seventeenth', 'eighteenth', 'nineteenth'
];
const deca = ['twent', 'thirt', 'fourt', 'fift', 'sixt', 'sevent', 'eight', 'ninet'];
if (n < 20) {
return special[n];
}
if (n % 10 === 0) {
return deca[Math.floor(n / 10) - 2] + 'ieth';
}
return deca[Math.floor(n / 10) - 2] + 'y-' + special[n % 10];
};
/**
* Returns the windows active url */
DUPX.getNewURL = function (id)
{
var filename = window.location.pathname.split('/').pop() || 'main.installer.php';
var newVal = window.location.href.split("?")[0];
newVal = newVal.replace("/" + filename, '');
var last_slash = newVal.lastIndexOf("/");
newVal = newVal.substring(0, last_slash);
$("#" + id).val(newVal).keyup();
};
DUPX.getNewUrlByDomObj = function (button) {
var inputId = $(button).parent().find('input').attr('id');
DUPX.getNewURL(inputId);
};
DUPX.submitEmail = function (button) {
var button = $(button);
var wrapper = $('.subscribe-form');
var input = $('.subscribe-form input');
var inputDAta = input.serializeForm();
button.html('Subscribing...');
input.attr('disabled', 'disabled');
DUPX.StandardJsonAjaxWrapper(
<?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::ACTION_EMAIL_SUBSCRIPTION); ?>,
<?php echo SnapJson::jsonEncode(DUPX_Ctrl_ajax::generateToken(DUPX_Ctrl_ajax::ACTION_EMAIL_SUBSCRIPTION)); ?>,
inputDAta,
function (data) {
wrapper.fadeOut(300);
button.html('Subscribed ✓');
wrapper.fadeIn(300);
setTimeout(function () {
wrapper.fadeOut(300);
}, 3000);
},
function (data) {
console.log("Email subscription failed with message: " + data.message);
button.html('Failed ✗');
setTimeout(function () {
button.html('Subscribe');
input.removeAttr('disabled');
}, 3000);
},
);
};
DUPX.editActivate = function (button, msg)
{
var buttonObj = $(button);
var inputObj = buttonObj.parent().find('input');
if (confirm(msg)) {
inputObj.removeAttr('readonly').removeClass('readonly');
buttonObj.hide();
}
};
DUPX.autoUpdateToggle = function (button, msg)
{
var buttonObj = $(button);
var wrapperObj = $(button).closest('.param-wrapper');
var inputObj = buttonObj.parent().find('input');
var fromInputObj = $('#' + wrapperObj.data('auto-update-from-input'));
if (wrapperObj.hasClass('autoupdate-enabled')) {
if (confirm(msg)) {
wrapperObj.removeClass('autoupdate-enabled').addClass('autoupdate-disabled');
buttonObj.text('Manual');
inputObj.prop('readonly', false);
}
} else {
wrapperObj.removeClass('autoupdate-disabled').addClass('autoupdate-enabled');
buttonObj.text('Auto');
inputObj.prop('readonly', true);
fromInputObj.trigger("change");
}
/*
if (confirm(msg)) {
inputObj.removeAttr('readonly').removeClass('readonly');
buttonObj.hide();
}*/
};
DUPX.toggleAll = function (id) {
$(id + " *[data-type='toggle']").each(function () {
$(this).trigger('click');
});
}
DUPX.toggleClick = function ()
{
var button = $(this);
var src = 0;
var id = button.attr('data-target');
var text = button.text().replace(/\+|\-/, "");
var icon = button.find('i.fa');
var target = $(id);
var list = new Array();
var style = [
{open: "fa-minus-square",
close: "fa-plus-square"
},
{open: "fa-caret-down",
close: "fa-caret-right"
}];
//Create src
for (i = 0; i < style.length; i++) {
if ($(icon).hasClass(style[i].open) || $(icon).hasClass(style[i].close)) {
src = i;
break;
}
}
//Build remove list
for (i = 0; i < style.length; i++) {
list.push(style[i].open);
list.push(style[i].close);
}
$(icon).removeClass(list.join(" "));
if (target.is(':hidden')) {
(icon.length)
? $(icon).addClass(style[src].open)
: button.html("- " + text);
button.removeClass('open').addClass('close');
target.show().removeClass('no-display');
} else {
(icon.length)
? $(icon).addClass(style[src].close)
: button.html("+ " + text);
button.removeClass('close').addClass('open');
target.hide().addClass('no-display');
}
}
DUPX.WpItemSwitchInit = function () {
$('.wpinconf-check-wrapper input').change(function () {
var paramWrapper = $(this).closest('.param-wrapper');
if (this.checked) {
paramWrapper.find('.input-container').show().find('.input-item').prop('disabled', false);
} else {
paramWrapper.find('.input-container').hide().find('.input-item').prop('disabled', true);
}
});
}
DUPX.Util.formatBytes = function (bytes, decimals)
{
if (bytes == 0)
return '0 Bytes';
var k = 1000;
var dm = decimals + 1 || 3;
var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
var i = Math.floor(Math.log(bytes) / Math.log(k));
return (bytes / Math.pow(k, i)).toPrecision(dm) + ' ' + sizes[i];
}
DUPX.initJsSelect = function (selector) {
$(selector).select2({
'width': '100%',
'dropdownAutoWidth': true,
'minimumResultsForSearch': 10
});
};
$(document).ready(function ()
{
DuplicatorTooltip.load();
DUPX.initJsSelect('select.js-select');
$('body').on( "click", ".copy-to-clipboard-block button", function(e) {
e.preventDefault();
var button = $(this);
var buttonText = button.html();
var textarea = button.parent().find("textarea")[0];
textarea.select();
try {
message = document.execCommand('copy') ? "Copied to Clipboard" : 'Unable to copy';
} catch (err) {
console.log(err);
}
button.html(message);
setTimeout(function () {
button.text(buttonText);
}, 2000);
});
<?php if ($GLOBALS['DUPX_DEBUG']) : ?>
$("div.dupx-debug input[type=hidden], div.dupx-debug textarea").each(function () {
var label = '<label>' + $(this).attr('name') + ':</label>';
$(this).before(label);
$(this).after('<br/>');
});
$("div.dupx-debug input[type=hidden]").each(function () {
$(this).attr('type', 'text');
});
$("div.dupx-debug").prepend('<div class="dupx-debug-hdr">Debug View</div>');
<?php endif; ?>
DUPX.WpItemSwitchInit();
});
</script>
<script>
/**
* Fatal error messages shown at top of installer.
* Used to control the [show more] and [show all] links
*/
$(document).ready(function ()
{
function moreCheck(moreCont, moreWrap) {
if (moreWrap.height() > moreCont.height()) {
moreCont.addClass('more');
} else {
moreCont.removeClass('more');
}
}
$('.more-content').each(function () {
var moreCont = $(this);
var step = moreCont.data('more-step');
var moreWrap = $(this).find('.more-wrapper');
moreCont.find('.more-button').click(function () {
moreCont.css('max-height', "+=" + step + "px");
moreCheck(moreCont, moreWrap);
});
moreCont.find('.all-button').click(function () {
moreCont.css('max-height', "none");
moreCheck(moreCont, moreWrap);
});
moreCheck(moreCont, moreWrap);
});
$('sup.hlp-pro-lbl, sup.small-pro-lbl').click(function() {
window.open('<?php echo InstallerUpsell::getCampaignUrl('installer', 'Help Section Pro Flag');?>');
});
});
</script>
<?php
DUPX_U_Html::js(); |