/* global axios, i18next */ function autoGrow(element) { element.style.height = '5px' element.style.height = element.scrollHeight + 'px' } // FIREFOX ISSUE FIX const firefoxIssueyBoi = document.querySelector('.institution-input') if (firefoxIssueyBoi) autoGrow(firefoxIssueyBoi) // END FIREFOX ISSUE FIX function autoGrowListener(e) { autoGrow(e.target) } // (Lineheight) (measurement) * #lines + (padding) (measurementforpadding) function minHeightCalcRem( lineheightSize, numberOfLines, paddingTopAndBottomSize, lineheightSizeMeasurement = 'rem', paddingTopAndBottomSizeMeasurement = 'px' ) { return `calc(${lineheightSize}${lineheightSizeMeasurement}*${numberOfLines} + ${paddingTopAndBottomSize}${paddingTopAndBottomSizeMeasurement})` } // COMMENTED CODE IS THE INITIAL STRUCTURE BEFORE PATCHING /* function abortEditing( btnGrp, oldButtons, areaEl, translationEl, removeSpecifics = [] ) { btnGrp.className = 'd-none' oldButtons.style.display = 'block' const getRow = btnGrp.parentElement.parentElement getRow.classList.remove('selected-row') const getInputs = getRow.querySelectorAll('.w-50') removeSpecifics.forEach(el => el.remove()) getInputs.forEach(el => el.parentElement.remove()) areaEl.style.display = 'table-cell' translationEl.style.display = 'table-cell' } */ function abortConsultancyUserEditing(fieldInfo) { fieldInfo.newButtonGroup.className = 'd-none' fieldInfo.tableButtons.style.display = 'block' const getRow = fieldInfo.newButtonGroup.parentElement.parentElement getRow.classList.remove('selected-row') const getInputs = getRow.querySelectorAll('.w-50') fieldInfo.tdName.remove() getInputs.forEach(el => el.parentElement.remove()) fieldInfo.tDataDomain.style.display = 'table-cell' fieldInfo.tDataName.style.display = 'table-cell' } /* function saveChanges( btnGrp, inputDomain, inputTranslation, oldButtons, tDataDomain, tDataTranslation ) { const inputDomainNewValue = inputDomain.value const inputTranslationNewValue = inputTranslation.value btnGrp.className = 'd-none' oldButtons.style.display = 'block' const getRow = btnGrp.parentElement.parentElement getRow.classList.remove('selected-row') inputDomain.parentElement.remove() inputTranslation.parentElement.remove() tDataDomain.style.display = 'table-cell' tDataDomain.textContent = inputDomainNewValue tDataTranslation.style.display = 'table-cell' tDataTranslation.textContent = inputTranslationNewValue } */ // Presumably used in other files, like consultancy.js. // eslint-disable-next-line no-unused-vars function inputFieldsChecker() { const { inputDomainEl, inputTranslationEl } = window.adminElements const addAreaButton = document.getElementById('add-area') if (inputDomainEl.value.length && inputTranslationEl.value.length) { addAreaButton.disabled = false } else { addAreaButton.disabled = true } } function saveConsultantFrontend(fieldInfo) { // Please optimize this patched code in further dev fieldInfo.tDataDomain.innerHTML = fieldInfo.inputDomain.value ? fieldInfo.inputDomain.value : '' abortConsultancyUserEditing(fieldInfo) } function saveConsultantDomain(fieldInfo) { const data = { id: fieldInfo.tDataName.parentElement.id, value: fieldInfo.inputDomain.value } // procedure to store DB changes axios .put('/api/v1/consultancy/update-consultant-domain', data) .then(() => { // On success, update frontend saveConsultantFrontend(fieldInfo) }) .catch(err => { console.log(err) }) } function editRowBodyForConsultancy(fieldInfo) { fieldInfo.getRow.className = 'selected-row' fieldInfo.tableButtons.style.display = 'none' fieldInfo.inputDomain.className = 'form-control w-50' fieldInfo.inputDomain.value = fieldInfo.tDataDomainText fieldInfo.tdName.innerHTML = fieldInfo.tDataNameText // tDataDomain.remove() fieldInfo.tDataDomain.style.display = 'none' // Please optimize this patched code in further dev if (fieldInfo.tdDomain.parentElement !== fieldInfo.getRow) { fieldInfo.tdDomain.appendChild(fieldInfo.inputDomain) fieldInfo.getRow.insertBefore(fieldInfo.tdDomain, fieldInfo.tDataButtons) } else { fieldInfo.tDataButtons.style.display = 'table-cell' } if (fieldInfo.tdName.parentElement !== fieldInfo.getRow) { fieldInfo.getRow.insertBefore(fieldInfo.tdName, fieldInfo.tDataName) } else { fieldInfo.tDataName.style.display = 'table-cell' } // tDataTranslation.remove() fieldInfo.tDataName.style.display = 'none' const buttonsGroup = fieldInfo.getRow.querySelector('.buttons-group') const newButtonGroup = document.createElement('div') const cancelButton = document.createElement('button') const saveButton = document.createElement('button') fieldInfo.buttonsGroup = buttonsGroup fieldInfo.newButtonGroup = newButtonGroup fieldInfo.cancelButton = cancelButton fieldInfo.saveButton = saveButton cancelButton.textContent = i18next.t('Prekliči') cancelButton.className = 'btn btn-secondary me-2' cancelButton.style.height = '33px' cancelButton.style.width = '105px' cancelButton.addEventListener('click', () => abortConsultancyUserEditing(fieldInfo) ) saveButton.textContent = i18next.t('POTRDI') saveButton.className = 'btn btn-primary' saveButton.style.height = '33px' saveButton.style.width = '105px' saveButton.addEventListener('click', () => saveConsultantDomain(fieldInfo)) newButtonGroup.className = 'd-flex justify-content-end me-3' newButtonGroup.appendChild(cancelButton) newButtonGroup.appendChild(saveButton) buttonsGroup.insertBefore(newButtonGroup, fieldInfo.tableButtons) } // Presumably used in other files, like consultancy.js. // eslint-disable-next-line no-unused-vars function handleDomainsClickForConsultancy({ target }) { const editRow = target.closest('.edit-row-btn') const deleteRow = target.closest('.delete-row-btn') const tableButtons = target.closest('.table-buttons') if (deleteRow) { const getRow = deleteRow.parentElement.parentElement.parentElement const body = { data: { id: getRow.id } } const modalUseBtn = document.getElementById('modal-use-btn') modalUseBtn.addEventListener('click', () => { axios .delete('/api/v1/consultancy/delete-consultant', body) .then(() => { getRow.remove() }) .catch(err => { console.log('Cannot delete entry, reason: ' + err) }) }) } if (editRow) { const getRow = editRow.parentElement.parentElement.parentElement const tDataDomain = getRow.querySelector('.tdata-area') const tDataName = getRow.querySelector('.tdata-name') const tDataButtons = getRow.querySelector('.buttons-group') const tDataDomainText = tDataDomain.textContent const tDataNameText = tDataName.textContent const tdDomain = document.createElement('td') const inputDomain = document.createElement('input') const tdName = document.createElement('td') const fieldInfo = { editRow, deleteRow, tableButtons, getRow, tDataDomain, tDataName, tDataButtons, tDataDomainText, tDataNameText, tdDomain, inputDomain, tdName } editRowBodyForConsultancy(fieldInfo) /* console.log(`${editRow} ${deleteRow} ${tableButtons} - ${tDataDomain} - ${getRow} ${tDataName} ${tDataButtons} - ${tDataDomainText} ${tDataNameText} ${tdDomain} - ${inputDomain} ${inputDomain} ${tdName} `) */ } } /* ========= specific pages logic ========= */ // pages/consultancy/ask.pug try { document.querySelectorAll('.r-3').forEach(element => { element.style.minHeight = minHeightCalcRem(1.5, 3, 12) // calculation of 16px(1rem) for 3 lines -> 3 * 24 (line height 24px -> 1.5rem) + 12 (padding bot + top) element.addEventListener('input', autoGrowListener) }) const elt = document.querySelector('.institution-input') elt.style.minHeight = minHeightCalcRem(1.5, 1, 12) // calculation of 16px(1rem) for 1 line -> 1 * 24 (line height 24px -> 1.5rem) + 12 (padding bot + top) elt.addEventListener('input', autoGrowListener) } catch (e) { // other than ask.pug file is probably going to error out here } // end pages/consultancy/ask.pug try { const elt = document.querySelector('#opinion') elt.style.minHeight = minHeightCalcRem(1.5, 4, 12) // calculation of 16px(1rem) for 1 line -> 1 * 24 (line height 24px -> 1.5rem) + 12 (padding bot + top) } catch (e) {}