69 lines
3.0 KiB
JavaScript
69 lines
3.0 KiB
JavaScript
/* DeskHub Tickets: schaltet bei einer Themenauswahl die passenden Felder und Texte des Kundenformulars ein.
|
|
* Ohne JavaScript bleibt alles sichtbar; der Server prüft beim Absenden ohnehin nur die Felder des gewählten Themas. */
|
|
(function () {
|
|
'use strict';
|
|
|
|
function setText(form, selector, text) {
|
|
form.querySelectorAll(selector).forEach(function (el) { el.textContent = text; });
|
|
}
|
|
|
|
function init(form) {
|
|
var forms;
|
|
try { forms = JSON.parse(form.getAttribute('data-dht-forms') || '{}'); } catch (e) { return; }
|
|
var select = form.querySelector('select[name="dht_topic"]');
|
|
form.classList.add('dht-js');
|
|
|
|
function apply() {
|
|
var id = select ? select.value : Object.keys(forms)[0];
|
|
var f = forms[id];
|
|
|
|
// Felder: nur die des gewählten Themas sind sichtbar und werden abgeschickt
|
|
form.querySelectorAll('.dht-topic-fields').forEach(function (box) {
|
|
var on = box.getAttribute('data-topic') === String(id);
|
|
box.classList.toggle('dht-topic-active', on);
|
|
box.querySelectorAll('input, select, textarea').forEach(function (el) { el.disabled = !on; });
|
|
});
|
|
if (!f) { return; }
|
|
|
|
// Texte des gewählten Formulars
|
|
var title = form.parentNode.querySelector('.dht-form-title');
|
|
if (title && !title.hasAttribute('data-fixed')) { title.textContent = f.title; title.hidden = !f.title; }
|
|
var intro = form.parentNode.querySelector('.dht-form-intro');
|
|
if (intro) { intro.textContent = f.intro; intro.hidden = !f.intro; }
|
|
setText(form, '.dht-subject-label', f.subjectLabel);
|
|
setText(form, '.dht-message-label', f.messageLabel);
|
|
var subject = form.querySelector('.dht-subject-wrap');
|
|
if (subject) {
|
|
subject.hidden = !f.subjectShow;
|
|
var si = subject.querySelector('input'); if (si) { si.disabled = !f.subjectShow; si.required = !!f.subjectShow; }
|
|
}
|
|
var message = form.querySelector('.dht-message-wrap');
|
|
if (message) {
|
|
message.hidden = !f.messageShow;
|
|
var mi = message.querySelector('textarea');
|
|
if (mi) { mi.disabled = !f.messageShow; mi.required = !!f.messageShow; mi.placeholder = f.messageHint || ''; }
|
|
}
|
|
var attach = form.querySelector('.dht-attach');
|
|
if (attach) {
|
|
attach.hidden = !f.attachments;
|
|
var fi = attach.querySelector('input[type=file]');
|
|
if (fi) { fi.disabled = !f.attachments; if (!f.attachments) { fi.value = ''; } }
|
|
}
|
|
var submit = form.querySelector('.dht-submit');
|
|
if (submit && f.submitLabel) { submit.textContent = f.submitLabel; }
|
|
}
|
|
|
|
if (select) { select.addEventListener('change', apply); }
|
|
apply();
|
|
|
|
// Doppeltes Absenden verhindern
|
|
form.addEventListener('submit', function () {
|
|
var btn = form.querySelector('.dht-submit');
|
|
if (btn) { btn.disabled = true; }
|
|
});
|
|
}
|
|
|
|
function ready() { document.querySelectorAll('form.dht-form[data-dht-forms]').forEach(init); }
|
|
if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', ready); } else { ready(); }
|
|
})();
|