Skip to content
Snippets Groups Projects
Select Git revision
  • e2ce62ccb14e718079bed90bec4bfb9d32798402
  • master default
  • renovate/datatables.version
  • renovate/opencsv.version
  • renovate/org.springframework.boot-spring-boot-starter-parent-3.x
  • renovate/junit-jupiter-engine.version
  • renovate/selenium.version
  • renovate/testcontainer.version
  • demo
  • v1_8_1
  • v2.18.1
  • v2.18.0
  • v2.17.2
  • v2.17.1
  • v2.17.0
  • v2.16.1
  • v2.16.0
  • v2.15.1
  • v2.15.0
  • v2.14.0
  • v2.13.0
  • v2.12.0
  • v2.11.0
  • v2.10.0
  • v2.9.2
  • v2.9.1
  • v2.9.0
  • v2.8.0
  • testPipeline2
  • v2.7.0
30 results

templates.js

Blame
  • templates.js 5.65 KiB
    $(document).ready(function()
    {
        if($('#modalConfirmDelete').length)
        {
            $('#modalConfirmDelete').modal('open');
        }
    
        if($('#buttonSaveAsTemplate').length)
        {
            M.FloatingActionButton.init(document.querySelectorAll('#transaction-actions-button'), {});
    
            $('.transaction-action').click(function()
            {
                let actionType = $(this).attr('data-action-type');
                if(actionType === 'saveAsTemplate')
                {
                    openSaveAsTemplateModal(this);
                }
                else if(actionType === 'changeType')
                {
                    changeTransactionType(this);
                }
            });
        }
    
        M.Collapsible.init(document.querySelector('.collapsible.expandable'), {
            accordion: false
        });
    
        let inputSearchTemplate = document.getElementById('searchTemplate');
        if(inputSearchTemplate !== undefined)
        {
            $(inputSearchTemplate).on('change keydown paste input', function()
            {
                let searchText = $(this).val();
                searchTemplates(searchText);
            });
        }
    
        if($("#template-name").length)
        {
            document.getElementById('template-name').focus();
        }
    
        if($("#include-account").length)
        {
            handleIncludeAccountCheckbox('include-account', 'transaction-account')
        }
    
        if($("#include-transfer-account").length)
        {
            handleIncludeAccountCheckbox('include-transfer-account', 'transaction-transfer-account')
        }
    
        if($("#searchTemplate").length)
        {
            document.getElementById('searchTemplate').focus();
        }
    });
    
    function handleIncludeAccountCheckbox(checkboxID, selectID)
    {
        document.getElementById(checkboxID).addEventListener('change', (event) =>
        {
            let accountSelect = document.getElementById(selectID)
            let accountSelectInstance = M.FormSelect.getInstance(accountSelect);
            accountSelectInstance.destroy();
            accountSelect.disabled = !event.target.checked;
            M.FormSelect.init(document.querySelectorAll('#' + selectID), {});
        });
    }
    
    function createAndOpenModal(data)
    {
        let modalID = '#modalCreateFromTransaction';
    
        $('#saveAsTemplateModalContainer').html(data);
        $(modalID).modal();
        $(modalID).modal('open');
        let templateNameInput = document.getElementById('template-name');
        templateNameInput.focus();
        $(templateNameInput).on('keypress', function(e)
        {
            let code = e.keyCode || e.which;
            if(code === 13)
            {
                saveAsTemplate();
            }
        });
    
        $('#buttonCreateTemplate').click(function()
        {
            saveAsTemplate();
        });
    }
    
    function saveAsTemplate()
    {
        // validate template name
        let templateName = document.getElementById('template-name').value;
        let isValid = validateTemplateName(templateName);
        if(!isValid)
        {
            return
        }
    
        let form = document.getElementsByName('NewTransaction')[0];
        form.appendChild(createAdditionalHiddenInput('templateName', templateName));
        form.appendChild(createAdditionalHiddenInput('includeCategory', document.getElementById('include-category').checked));
        form.appendChild(createAdditionalHiddenInput('includeAccount', document.getElementById('include-account').checked));
    
        // replace form target url
        form.action = $('#buttonCreateTemplate').attr('data-url');
        form.submit();
    }
    
    function validateTemplateName(templateName)
    {
        if(templateName.length === 0)
        {
            addTooltip('template-name', templateNameEmptyValidationMessage);
            return false;
        }
        else
        {
            removeTooltip('template-name');
        }
    
        if(existingTemplateNames.includes(templateName))
        {
            addTooltip('template-name', templateNameDuplicateValidationMessage);
            return false;
        }
        else
        {
            removeTooltip('template-name');
        }
    
        return true;
    }
    
    function createAdditionalHiddenInput(name, value)
    {
        let newInput = document.createElement('input');
        newInput.setAttribute('type', 'hidden');
        newInput.setAttribute('name', name);
        newInput.setAttribute('value', value);
        return newInput;
    }
    
    function searchTemplates(searchText)
    {
        searchText = searchText.trim();
        searchText = searchText.toLowerCase()
    
        let templateItems = document.querySelectorAll('.template-item');
        let collapsible = document.getElementById('templateCollapsible');
    
        if(!searchText)
        {
            templateItems.forEach((item) =>
            {
                collapsible.classList.remove('hidden');
                item.classList.remove('hidden');
            });
            return;
        }
    
        let numberOfVisibleItems = 0;
        for(let i = 0; i < templateItems.length; i++)
        {
            let item = templateItems[i];
            let templateName = item.querySelector('.template-header-name').innerText;
            if(templateName.toLowerCase().includes(searchText))
            {
                item.classList.remove('hidden');
                numberOfVisibleItems++;
            }
            else
            {
                item.classList.add('hidden');
            }
        }
    
        // hide whole collapsible to prevent shadows from remaining visible
        if(numberOfVisibleItems === 0)
        {
            collapsible.classList.add('hidden');
        }
        else
        {
            collapsible.classList.remove('hidden');
        }
    }
    
    function openSaveAsTemplateModal(item)
    {
        // check if transaction form is valid
        let isValidForm = validateForm(true);
        if(!isValidForm)
        {
            $('#modalCreateFromTransaction').modal('close');
            M.toast({html: createTemplateWithErrorInForm});
            return;
        }
    
        $.ajax({
            type: 'GET',
            url: $(item).attr('data-url'),
            data: {},
            success: function(data)
            {
                createAndOpenModal(data)
            }
        });
    }
    
    function changeTransactionType(item)
    {
    }