VvebOIDC/public/js/admin/controller/update.js

137 lines
4.0 KiB
JavaScript

class UpdateController {
action(url, btn) {
let next = url;
document.getElementById("progress").classList.remove("d-none");
function disableBtn() {
btn.querySelector('.loading').classList.remove('d-none');
btn.querySelector('.button-text').classList.add('d-none');
}
function enableBtn() {
btn.querySelector('.loading').classList.add('d-none');
btn.querySelector('.button-text').classList.remove('d-none');
}
disableBtn();
let request = function () {
return fetch(next, {method: "POST", headers: {
"X-Requested-With": "XMLHttpRequest",
"Content-Type": "application/x-www-form-urlencoded",
}, body: new URLSearchParams({csrf: document.querySelector('[name=csrf]')?.value})})
.then((response) => {
next = false;
if (!response.ok) {
return Promise.resolve(response.text()).then((responseInText) => {
return Promise.reject([response, responseInText]);
});
}
if (!response.ok) {
let message = response.statusText + " " + response.body();
throw new Error(message);
}
return response.json()
})
.then((json) => {
document.getElementById('progress-message').innerHTML = '';
if (json['error']) {
document.getElementById('progress-bar').classList.add('bg-danger');
document.getElementById('progress-error').innerHTML = '<div class="text-danger">' + json['error'] + '</div>';
enableBtn();
}
let percent = (json['position']) * 100 / json['count'];
if (json['success']) {
//document.getElementById('progress-bar').style.width = '100%';.classList.add('bg-success');
document.getElementById('progress-success').innerHTML = '<div class="text-success">' + json['success'] + '</div>';
enableBtn();
}
if (json['info']) {
document.getElementById('progress-message').innerHTML = json['info'];
}
if (json['step']) {
document.getElementById('progress-status').innerHTML = json['step'];
}
if (json['url'] && json['step'] && !json['error']) {
next = json['url'];
ajaxStack.add(request);
} else {
percent = 100;
document.getElementById('progress-bar').classList.add('bg-success');
enableBtn();
document.getElementById('progress-bar').style.width = '100%';
return;
if (json['success']) {
window.location.href += '&success=' + json['success'];
} else if (json['error']) {
window.location.href += '&error=' + json['error'];
} else {
window.navigation.reload();
}
}
document.getElementById('progress-bar').style.width = percent + '%';
})/*.then((json) => {
if (next) {
ajaxStack.add(request);
}
})*/
.catch(error => {
let [response, responseInText] = error;
let message = response.statusText ?? "Error!";
displayToast("danger", "Error", message);
if (error.hasOwnProperty('text')) error.text().then( errorMessage => {
let message = errorMessage.substr(0, 200);
displayToast("danger", "Error", message);
});
if (typeof error.json === "function") {
error.json().then(jsonError => {
message = jsonError;
}).catch(genericError => {
message = error?.statusText + " " + message;
});
}
console.log(error);
document.getElementById('progress-success').innerHTML = '';
document.getElementById('progress-message').innerHTML = '<div class="text-danger">' + message + '</div>';
//console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
document.getElementById('progress-bar').classList.add('bg-danger');
enableBtn();
});
};
ajaxStack.add(request);
}
core(url, btn = false) {
url = url ?? (window.location.pathname + '?module=tools/update&action=update&type=core');
return this.action(url, btn);
}
plugin(url, btn = false) {
return this.action(url, btn);
}
}
let Update = new UpdateController();
export {Update};
window.Update = Update;