81654c0d33
Add normalized service and template catalogs, scoped administration, migration, validation, and regression coverage. Ref: IT-1601
37 lines
1.7 KiB
JavaScript
37 lines
1.7 KiB
JavaScript
(() => {
|
|
const form = document.getElementById('serviceForm');
|
|
const rows = document.getElementById('serviceLanguages');
|
|
const alert = document.getElementById('serviceLanguageAlert');
|
|
let sequence = rows.children.length;
|
|
let dirty = false;
|
|
function reindex() {
|
|
Array.from(rows.children).forEach((row, index) => row.querySelectorAll('[name]').forEach(input => {
|
|
input.name = input.name.replace(/Languages\[\d+\]/, `Languages[${index}]`);
|
|
}));
|
|
}
|
|
document.getElementById('addServiceLanguage').addEventListener('click', () => {
|
|
const fragment = document.createElement('template');
|
|
fragment.innerHTML = document.getElementById('serviceLanguageRow').innerHTML.replaceAll('__index__', String(sequence++));
|
|
rows.append(fragment.content);
|
|
reindex();
|
|
rows.lastElementChild.querySelector('input:not([type="hidden"])').focus();
|
|
dirty = true;
|
|
});
|
|
rows.addEventListener('click', event => {
|
|
const button = event.target.closest('.remove-service-language');
|
|
if (!button) return;
|
|
if (Number(button.dataset.count) > 0) {
|
|
alert.textContent = `Cannot remove this language: ${button.dataset.count} version(s) use it. Save other changes, then use the separate delete language and versions confirmation.`;
|
|
return;
|
|
}
|
|
button.closest('tr').remove();
|
|
reindex();
|
|
dirty = true;
|
|
});
|
|
form.addEventListener('input', () => { dirty = true; });
|
|
form.addEventListener('submit', () => { dirty = false; });
|
|
window.addEventListener('beforeunload', event => {
|
|
if (dirty) { event.preventDefault(); event.returnValue = ''; }
|
|
});
|
|
})();
|