webcron/assets/js/job/index.js

135 lines
5.3 KiB
JavaScript
Raw Normal View History

2022-05-02 13:25:50 +02:00
import {Modal} from 'bootstrap';
import image from '/assets/images/ajax-loader.gif'
import '/assets/scss/job/index.scss';
2022-06-08 13:24:46 +02:00
import Utils from "./Utils";
2023-01-10 17:21:49 +01:00
import customDateFormat from '@eonasdan/tempus-dominus/dist/plugins/customDateFormat';
import {DateTime,TempusDominus,extend} from "@eonasdan/tempus-dominus";
2021-07-30 14:04:42 +02:00
document.addEventListener("readystatechange", event => {
if(event.target.readyState === 'complete') {
initDeleteButtons();
2023-01-10 17:21:49 +01:00
initRunButtons();
initTimepicker();
2022-06-08 13:24:46 +02:00
Utils.initTags();
2021-07-30 14:04:42 +02:00
}
});
2021-05-24 14:08:30 +02:00
function initDeleteButtons() {
2021-07-30 14:04:42 +02:00
document.querySelectorAll('.delete-btn').forEach(elem => elem.addEventListener("click", event => {
let me = event.currentTarget;
let href = me.dataset.href;
let confirmation = me.dataset.confirmation;
2021-05-24 14:08:30 +02:00
if(confirm(confirmation)) {
2021-07-30 14:04:42 +02:00
fetch(href, { method: 'DELETE' })
.then(response => response.json())
.then(data => {
window.location.href = data.return_path
2021-05-24 14:08:30 +02:00
})
}
2021-07-30 14:04:42 +02:00
}));
2021-06-01 20:21:47 +02:00
}
2023-01-10 17:21:49 +01:00
var selecttimedatepicker;
function initTimepicker() {
extend(customDateFormat);
let modal = document.querySelector('#run_selecttime');
let datepickeroptions = Utils.timepickerOptions;
datepickeroptions.display.inline = true;
datepickeroptions.display.sideBySide = true;
datepickeroptions.restrictions = {
minDate: new Date()
};
selecttimedatepicker = new TempusDominus(document.querySelector('#selecttime_datepicker'), datepickeroptions);
}
function initRunButtons() {
document.querySelectorAll('.run').forEach(elem => elem.addEventListener("click", event => {
2021-07-30 14:04:42 +02:00
let me = event.currentTarget;
2023-01-10 17:21:49 +01:00
let norun = me.closest('tr').classList.contains('norun')
let maxdate = new DateTime(me.dataset.nextrun)
if (maxdate < new DateTime() ) {
if (norun) {
maxdate = undefined;
} else {
console.error('You cannot have to be run jobs in the past');
return;
}
2021-08-02 13:57:36 +02:00
}
2023-01-10 17:21:49 +01:00
selecttimedatepicker.updateOptions({
restrictions: {
maxDate: maxdate
}
})
selecttimedatepicker.viewDate = new DateTime();
var bsModal = new Modal('#run_selecttime');
bsModal.show();
2023-03-15 12:36:21 +01:00
let schedulefn = event => {
2023-01-10 17:21:49 +01:00
bsModal.hide();
let time = Math.floor(selecttimedatepicker.viewDate / 1000);
run(me, time);
2023-03-15 12:36:21 +01:00
}
let runnowfn = event => {
2023-01-10 17:21:49 +01:00
bsModal.hide();
run(me);
2023-03-15 12:36:21 +01:00
}
let closebtnfn = event => {
bsModal.hide();
document.querySelectorAll('.schedule').forEach(elem => elem.removeEventListener("click", schedulefn));
document.querySelectorAll('.run-now').forEach(elem => elem.removeEventListener("click",runnowfn));
}
document.querySelectorAll('.schedule').forEach(elem => elem.addEventListener("click", schedulefn, { once: true } ));
document.querySelectorAll('.run-now').forEach(elem => elem.addEventListener("click", runnowfn, { once: true } ));
document.querySelectorAll('.btn-close').forEach(elem => elem.addEventListener("click", closebtnfn ));
} ));
2023-01-10 17:21:49 +01:00
}
function run(elem, time = 0) {
let href = elem.dataset.href;
if (time > 0) href = href + '/' + time.toString();
2021-07-30 14:35:47 +02:00
2023-01-10 17:21:49 +01:00
let runCnt = document.querySelector('.run-content');
if(runCnt.querySelector('img') === null) {
let loaderImg = document.createElement('img');
loaderImg.src = image;
runCnt.appendChild(loaderImg);
}
document.querySelector('.container-fluid').classList.add('blur');
document.querySelector('.run-overlay').classList.add('d-block');
document.querySelector('.run-overlay').classList.remove('d-none');
2023-01-10 17:21:49 +01:00
fetch(href, { method: 'GET' })
.then(response => response.json())
.then(data => {
let modal = document.querySelector('#run_result');
modal.querySelector('.modal-title').innerHTML = data.title;
if (data.status == 'deferred') {
modal.querySelector('.modal-body').innerHTML = data.message;
elem.classList.add('disabled');
let td = elem.closest('td');
td.querySelectorAll('.btn').forEach(btn => {
btn.classList.add('btn-outline-success');
btn.classList.remove('btn-outline-primary');
btn.classList.remove('btn-outline-danger');
})
2021-06-01 20:21:47 +02:00
2023-01-10 17:21:49 +01:00
let tr = elem.closest('tr');
tr.classList.add('running');
tr.classList.add('text-success');
tr.classList.remove('norun');
tr.classList.remove('text-danger');
} else if (data.status == 'ran') {
let content = '<p>' + data.message + '</p>'
content += '<pre>' + data.output + '</pre>'
2021-06-01 20:21:47 +02:00
2023-01-10 17:21:49 +01:00
modal.querySelector('.modal-body').innerHTML = content;
}
2021-07-30 14:35:47 +02:00
2023-01-10 17:21:49 +01:00
var runModal = new Modal('#run_result');
runModal.show();
document.querySelector('.container-fluid').classList.remove('blur');
document.querySelector('.run-overlay').classList.remove('d-block');
document.querySelector('.run-overlay').classList.add('d-none');
2021-06-01 20:21:47 +02:00
})
2021-05-24 14:08:30 +02:00
}