Files
WKVS/www/intern/scripts/kampfrichter/js/js-kampfrichter-admin.js
2026-04-12 21:25:44 +02:00

192 lines
5.7 KiB
JavaScript

jQuery(document).ready(function($) {
$('.ranglisteExport').on('click', function() {
const $button = $(this);
const progId = $button.data('id');
const fieldType = $button.data('field_type');
// Visual feedback (optional but recommended)
$button.prop('disabled', true).text('Generating...');
const url = '/intern/scripts/kampfrichter/ajax/ajax-neu_rangliste.php';
fetch(url, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: new URLSearchParams({
prog: progId,
type: fieldType
})
})
.then(response => {
// CRITICAL: Check if the server actually returned a success code
if (!response.ok) {
throw new Error('Server returned an error (Status ' + response.status + ')');
}
return response.blob();
})
.then(blob => {
if (fieldType !== 'upload_programm') {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `Ergebnisse_${progId}.pdf`;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
} else {
alert('PDF auf Webseite geladen!');
}
})
.catch(error => {
console.error('Export Error:', error);
alert('Fehler beim Exportieren der Rangliste.');
})
.finally(() => {
// Restore button state
$button.prop('disabled', false).text('Export PDF');
});
});
$('.protokollExport').on('click', function() {
console.log('ok');
const $input = $(this);
// Build the data to send
const data = new URLSearchParams();
data.append('abteilung', $input.data('abteilung'));
// Record start time
const start = performance.now();
const url = '/intern/scripts/kampfrichter/ajax/ajax-neu_protokoll.php';
fetch(url, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: new URLSearchParams({
abteilung: $input.data('abteilung')
})
})
.then(res => res.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = "KTBB_Protokoll.pdf"; // optional
document.body.appendChild(a);
a.click();
a.remove();
window.URL.revokeObjectURL(url);
});
});
let activeEdit = null;
console.log('pre');
$(document).on('click', '.editableValue', function () {
console.log('ok');
const input = $(this);
// Already editing
if (!input.prop('readonly')) {
return;
}
// Close another active edit
if (activeEdit && activeEdit.get(0) !== input.get(0)) {
cancelEdit(activeEdit);
}
input.data('original', input.val());
input.prop('readonly', false).focus().select();
activeEdit = input;
input.on('keydown.edit', function (e) {
if (e.key === 'Enter') {
e.preventDefault();
saveEdit(input);
}
if (e.key === 'Escape') {
e.preventDefault();
cancelEdit(input);
}
});
input.on('blur.edit', function () {
saveEdit(input);
});
});
function saveEdit(input) {
const originalValue = input.data('original');
const newValue = input.val();
const type = input.data('type');
const discipline = input.data('discipline');
const dataId = input.data('id');
if (newValue === originalValue) {
input.prop('readonly', true);
cleanup(input);
return;
}
input.addClass('is-saving');
$.ajax({
url: '/intern/scripts/kampfrichter/ajax/ajax-update_value_kampfrichter_admin.php',
method: 'POST',
data: {
id: dataId,
field_type: type,
discipline: discipline,
value: newValue
},
success: function () {
input.prop('readonly', true);
const row = input.closest('td');
if (row.length) {
row.css(
'background',
'radial-gradient(circle at bottom right, #22c55e, transparent 55%)'
);
setTimeout(() => row.css('background', ''), 2000);
}
ws.send(JSON.stringify({
type: "KAMPFRICHTER_UPDATE",
payload: {
discipline: discipline,
id: dataId,
val: newValue
}
}));
},
error: function () {
input.val(originalValue).prop('readonly', true);
alert('Speichern fehlgeschlagen');
},
complete: function () {
input.removeClass('is-saving');
cleanup(input);
}
});
}
function cancelEdit(input) {
input.val(input.data('original')).prop('readonly', true);
cleanup(input);
}
function cleanup(input) {
input.off('.edit');
activeEdit = null;
}
});