diff --git a/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryController.java b/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryController.java index 7c80ba35ff3b6b3328b75bb493aa85d35fecbdc9..d775978b90b0a0839894958fc44fe9b538aecc62 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryController.java @@ -60,8 +60,8 @@ public class CategoryController extends BaseController model.addAttribute("availableCategories", availableCategories); model.addAttribute("preselectedCategory", categoryService.findByType(CategoryType.NONE)); - model.addAttribute("currentCategory", categoryService.findById(ID).orElseThrow()); - return "categories/categories"; + model.addAttribute("categoryToDelete", categoryService.findById(ID).orElseThrow()); + return "categories/deleteCategoryModal"; } @PostMapping(value = "/{ID}/delete") diff --git a/src/main/resources/static/js/categories.js b/src/main/resources/static/js/categories.js index 6ccd3e7571482dc622a6ddbeb2103f13fd6e95c8..90822bdf935190cc0aa7122d3425d0cea7bea4e9 100644 --- a/src/main/resources/static/js/categories.js +++ b/src/main/resources/static/js/categories.js @@ -35,9 +35,16 @@ $(document).ready(function() }); } - $('#buttonDeleteCategory').click(function() + $('.button-request-delete-category').click(function() { - document.getElementById("formDestinationCategory").submit(); + fetchAndShowModalContent(this.dataset.url, '#deleteModalContainerOnDemand', '#modalConfirmDelete', function(){ + initCustomSelects(); + + $('#buttonDeleteCategory').click(function() + { + document.getElementById("formDestinationCategory").submit(); + }); + }); }); }); diff --git a/src/main/resources/static/js/customSelect.js b/src/main/resources/static/js/customSelect.js index e192cca63b52fb4c9a5df2b9297d1f195846f350..dfdc4ab6e518fbf3bf3a9c6429af945494a7aa55 100644 --- a/src/main/resources/static/js/customSelect.js +++ b/src/main/resources/static/js/customSelect.js @@ -1,4 +1,9 @@ $(document).ready(function() +{ + initCustomSelects(); +}); + +function initCustomSelects() { let allCustomSelects = []; @@ -75,7 +80,7 @@ $(document).ready(function() } } }); -}); +} class CustomSelect { diff --git a/src/main/resources/static/js/fetchModalContent.js b/src/main/resources/static/js/fetchModalContent.js new file mode 100644 index 0000000000000000000000000000000000000000..936610af475437a9a5434975e3c32b1b4fc925e5 --- /dev/null +++ b/src/main/resources/static/js/fetchModalContent.js @@ -0,0 +1,21 @@ +function fetchAndShowModalContent(url, containerID, modalID, callback) +{ + let modal = $(modalID).modal(); + if(modal.isOpen) + { + return; + } + + $.ajax({ + type: 'GET', + url: url, + data: {}, + success: function(data) + { + $(containerID).html(data); + $(modalID).modal(); + $(modalID).modal('open'); + callback(); + } + }); +} \ No newline at end of file diff --git a/src/main/resources/templates/categories/categories.ftl b/src/main/resources/templates/categories/categories.ftl index 47d749d934ab7edb468b059fbad24112f1b84cfe..3101d388afb302f826d2b37ea2bcd5485ca797d4 100644 --- a/src/main/resources/templates/categories/categories.ftl +++ b/src/main/resources/templates/categories/categories.ftl @@ -49,7 +49,7 @@ <@header.buttonFlat url='/categories/' + category.ID?c + '/edit' icon='edit' localizationKey='' classes="no-padding text-default"/> <@header.buttonFlat url='/search?searchCategory=true&searchText=' + categoryName icon='search' localizationKey='' classes="no-padding text-default"/> <#if (category.getType().name() == "CUSTOM")> - <@header.buttonFlat url='/categories/' + category.ID?c + '/requestDelete' icon='delete' localizationKey='' classes="no-padding text-default"/> + <@header.buttonFlat url='/categories/' + category.ID?c + '/requestDelete' icon='delete' localizationKey='' classes="no-padding text-default button-request-delete-category" isDataUrl=true/> </#if> </td> </tr> @@ -62,27 +62,7 @@ </@header.content> </div> - <#if currentCategory??> - <!-- confirm delete modal --> - <div id="modalConfirmDelete" class="modal categoryDeleteModal background-color"> - <div class="modal-content"> - <h4>${locale.getString("info.title.category.delete")}</h4> - <p>${locale.getString("info.text.category.delete", currentCategory.name)}</p> - <p>${locale.getString("info.text.category.delete.move")}</p> - - <form name="DestinationCategory" id="formDestinationCategory" action="<@s.url '/categories/${currentCategory.ID?c}/delete'/>" method="post"> - <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> - <#import "../helpers/validation.ftl" as validation> - <@customSelectMacros.customCategorySelect availableCategories preselectedCategory "col s12 m12 l8 offset-l2" locale.getString("info.title.category.delete.move")/> - </form> - </div> - - <div class="modal-footer background-color"> - <@header.buttonLink url='/categories' icon='clear' localizationKey='cancel' color='red' classes='modal-action modal-close text-white'/> - <@header.buttonLink url='' icon='delete' localizationKey='delete' color='green' id='buttonDeleteCategory' classes='modal-action modal-close text-white' noUrl=true/> - </div> - </div> - </#if> + <div id="deleteModalContainerOnDemand"></div> </main> <!-- Scripts--> diff --git a/src/main/resources/templates/categories/deleteCategoryModal.ftl b/src/main/resources/templates/categories/deleteCategoryModal.ftl new file mode 100644 index 0000000000000000000000000000000000000000..15bc49cf3769e68ac48aa44d5ce9fd92ded24304 --- /dev/null +++ b/src/main/resources/templates/categories/deleteCategoryModal.ftl @@ -0,0 +1,23 @@ +<#global locale = static["de.thecodelabs.utils.util.Localization"]> +<#import "/spring.ftl" as s> +<#import "../helpers/header.ftl" as header> +<#import "../helpers/customSelectMacros.ftl" as customSelectMacros> + +<div id="modalConfirmDelete" class="modal categoryDeleteModal background-color"> + <div class="modal-content"> + <h4>${locale.getString("info.title.category.delete")}</h4> + <p>${locale.getString("info.text.category.delete", categoryToDelete.name)}</p> + <p>${locale.getString("info.text.category.delete.move")}</p> + + <form name="DestinationCategory" id="formDestinationCategory" action="<@s.url '/categories/${categoryToDelete.ID?c}/delete'/>" method="post"> + <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> + <#import "../helpers/validation.ftl" as validation> + <@customSelectMacros.customCategorySelect availableCategories preselectedCategory "col s12 m12 l8 offset-l2" locale.getString("info.title.category.delete.move")/> + </form> + </div> + + <div class="modal-footer background-color"> + <@header.buttonLink url='/categories' icon='clear' localizationKey='cancel' color='red' classes='modal-action modal-close text-white'/> + <@header.buttonLink url='' icon='delete' localizationKey='delete' color='green' id='buttonDeleteCategory' classes='modal-action modal-close text-white' noUrl=true/> + </div> +</div> \ No newline at end of file diff --git a/src/main/resources/templates/helpers/scripts.ftl b/src/main/resources/templates/helpers/scripts.ftl index 0bd7d3eb61b91e57f18c5a346dc9e4969830a68e..cf6778142b510b7f9257ff6dee62459bfc443f8a 100644 --- a/src/main/resources/templates/helpers/scripts.ftl +++ b/src/main/resources/templates/helpers/scripts.ftl @@ -9,6 +9,8 @@ <script src="<@s.url '/js/hotkeys.js'/>"></script> <script src="<@s.url '/js/main.js'/>"></script> <script src="<@s.url '/js/customSelect.js'/>"></script> + <script src="<@s.url '/js/fetchModalContent.js'/>"></script> + <script> accountPlaceholderName = "${locale.getString("account.all")}"; </script>