let VALUEMAP_MAPPING_TYPE_DEFAULT = <?= VALUEMAP_MAPPING_TYPE_DEFAULT ?>;
let type_placeholder = <?= json_encode([
VALUEMAP_MAPPING_TYPE_EQUAL => _('value'),
VALUEMAP_MAPPING_TYPE_GREATER_EQUAL => _('value'),
VALUEMAP_MAPPING_TYPE_LESS_EQUAL => _('value'),
VALUEMAP_MAPPING_TYPE_IN_RANGE => _('value'),
VALUEMAP_MAPPING_TYPE_REGEXP => _('regexp')
const table = document.getElementById('mappings-table');
let observer = new MutationObserver(mutationHandler);
observer.observe(table, {
attributeFilter: ['value']
function updateOnTypeChange() {
let default_select = table.querySelector(`z-select[value="${VALUEMAP_MAPPING_TYPE_DEFAULT}"]`);
table.querySelectorAll('tr').forEach((row) => {
let zselect = row.querySelector('z-select[name$="[type]"]');
let input = row.querySelector('input[name$="[value]"]');
zselect.getOptionByValue(VALUEMAP_MAPPING_TYPE_DEFAULT).disabled = (default_select
&& zselect !== default_select
input.classList.toggle('visibility-hidden', (zselect === default_select));
input.disabled = (zselect === default_select);
input.setAttribute('placeholder', type_placeholder[zselect.value]||'');
function mutationHandler(mutation_records, observer) {
let update = mutation_records.filter((mutation) => {
return (mutation.target.tagName === 'INPUT' && mutation.target.getAttribute('name').substr(-6) === '[type]')
|| (mutation.target.tagName === 'TBODY' && mutation.removedNodes.length > 0);