67 lines
2.5 KiB
JavaScript
67 lines
2.5 KiB
JavaScript
document.addEventListener('DOMContentLoaded', function() {
|
|
function toggleCorrectAnswer(row) {
|
|
const typeSelect = row.querySelector('select[name$="-question_type"]');
|
|
const correctAnswerInput = row.querySelector('[name$="-correct_answer"]');
|
|
|
|
if (typeSelect && correctAnswerInput) {
|
|
let wrapper = row.querySelector('.field-correct_answer');
|
|
if (!wrapper) {
|
|
// Find a suitable parent div to hide. Unfold puts fields in divs, often with mb-4 or similar.
|
|
// We go up to the closest field group container.
|
|
wrapper = correctAnswerInput.closest('.form-row') || correctAnswerInput.parentElement.parentElement;
|
|
}
|
|
if (wrapper) {
|
|
if (typeSelect.value === 'FILE_MANUAL') {
|
|
wrapper.style.display = 'none';
|
|
} else {
|
|
wrapper.style.display = '';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function updateOrder() {
|
|
const rows = document.querySelectorAll('.inline-related:not(.empty-form)');
|
|
let counter = 1;
|
|
rows.forEach(row => {
|
|
const deleteInput = row.querySelector('input[name$="-DELETE"]');
|
|
if (deleteInput && deleteInput.checked) return;
|
|
|
|
if (row.style.display !== 'none') {
|
|
const orderInput = row.querySelector('input[name$="-order"]');
|
|
if (orderInput) {
|
|
orderInput.value = counter++;
|
|
let wrapper = row.querySelector('.field-order');
|
|
if (!wrapper) {
|
|
wrapper = orderInput.closest('.form-row') || orderInput.parentElement.parentElement;
|
|
}
|
|
if (wrapper) wrapper.style.display = 'none';
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
document.body.addEventListener('change', function(e) {
|
|
if (e.target && e.target.matches('select[name$="-question_type"]')) {
|
|
const row = e.target.closest('.inline-related');
|
|
if (row) toggleCorrectAnswer(row);
|
|
}
|
|
if (e.target && e.target.matches('input[name$="-DELETE"]')) {
|
|
setTimeout(updateOrder, 50);
|
|
}
|
|
});
|
|
|
|
function initAll() {
|
|
const rows = document.querySelectorAll('.inline-related:not(.empty-form)');
|
|
rows.forEach(row => {
|
|
toggleCorrectAnswer(row);
|
|
});
|
|
updateOrder();
|
|
}
|
|
|
|
initAll();
|
|
|
|
// Aggressive fallback for dynamically added inline rows in Unfold
|
|
setInterval(initAll, 1000);
|
|
});
|