From 5607f6f6c931d21a9ac2914f3cfbf84c2167205b Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sun, 28 Mar 2021 16:20:08 +0200 Subject: [PATCH] #593 - refactor: generic ids and css classes for image select --- src/main/resources/static/css/accounts.css | 30 +++++---- src/main/resources/static/css/style.css | 4 -- src/main/resources/static/js/imageSelect.js | 42 ++++++------- .../templates/accounts/accountFunctions.ftl | 52 ---------------- .../templates/accounts/newAccount.ftl | 3 +- .../templates/helpers/availableImages.ftl | 2 +- .../templates/helpers/imageSelect.ftl | 62 +++++++++++++++++-- 7 files changed, 97 insertions(+), 98 deletions(-) delete mode 100644 src/main/resources/templates/accounts/accountFunctions.ftl diff --git a/src/main/resources/static/css/accounts.css b/src/main/resources/static/css/accounts.css index dd05d9e89..d9cd8ff25 100644 --- a/src/main/resources/static/css/accounts.css +++ b/src/main/resources/static/css/accounts.css @@ -3,47 +3,51 @@ justify-content: center; } -#account-icon-preview { +#item-icon-preview { text-align: center; border: 2px solid var(--color-text); padding: 1rem; color: var(--color-text); } -#button-remove-account-icon { +.button-remove-icon-from-item { margin-left: 1rem; } -#button-remove-account-icon i { +.button-remove-icon-from-item i { font-size: 1.8rem; } -.account-icon-option-column { +.item-icon-option-column { text-align: center; margin-bottom: 1.5rem; } -.account-icon-option { +.item-icon-option { padding: 0.5rem; border: 2px solid transparent; } -.account-icon-option:hover { +.item-icon-option:hover { cursor: pointer; } -.account-icon-option.selected { +.item-icon-option.selected { border: 2px solid var(--color-text); } -.account-icon-preview-icon { +.item-icon-preview-icon { height: 5rem; } -#account-icon-preview:hover { +#item-icon-preview:hover { cursor: pointer; } +.item-icon-preview { + height: 5rem; +} + .account-select-icon { height: 34px; width: 34px; @@ -54,18 +58,18 @@ line-height: 28px !important; } -.account-icon-option-delete span { +.item-icon-option-delete span { display: none; } -.account-icon-option-delete i.left { +.item-icon-option-delete i.left { margin-right: 0; } -.account-icon-option-delete-confirm { +.item-icon-option-delete-confirm { color: var(--color-red) !important; } -.account-icon-option-delete-confirm span { +.item-icon-option-delete-confirm span { display: inline-block; } diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index 5a0116ed6..ad5768c8c 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -437,10 +437,6 @@ input[type="radio"]:checked + span::after, [type="radio"].with-gap:checked + spa height: 2.6rem; } -.account-icon-preview { - height: 5rem; -} - .tooltipped:hover { cursor: pointer; } diff --git a/src/main/resources/static/js/imageSelect.js b/src/main/resources/static/js/imageSelect.js index 148a7a148..4e3827679 100644 --- a/src/main/resources/static/js/imageSelect.js +++ b/src/main/resources/static/js/imageSelect.js @@ -1,15 +1,15 @@ $(document).ready(function() { - $('#button-remove-account-icon').click(function() + $('.button-remove-icon-from-item').click(function() { - document.getElementById("account-icon-preview-icon").classList.toggle('hidden', true); - document.getElementById("account-icon-placeholder").classList.toggle('hidden', false); - document.getElementById("hidden-input-account-icon").value = ''; + document.getElementById("item-icon-preview-icon").classList.toggle('hidden', true); + document.getElementById("item-icon-placeholder").classList.toggle('hidden', false); + document.getElementById("hidden-input-icon").value = ''; }); - $('#button-account-icon-confirm').click(function() + $('#button-icon-confirm').click(function() { - let icon = document.querySelector('.account-icon-option.selected .account-icon-preview'); + let icon = document.querySelector('.item-icon-option.selected .item-icon-preview'); if(icon === null) { return false; @@ -18,18 +18,18 @@ $(document).ready(function() let iconPath = icon.src; let iconId = icon.dataset.imageId; - let previewIcon = document.getElementById("account-icon-preview-icon"); + let previewIcon = document.getElementById("item-icon-preview-icon"); previewIcon.src = iconPath; - document.getElementById("account-icon-preview-icon").classList.toggle('hidden', false); - document.getElementById("account-icon-placeholder").classList.toggle('hidden', true); - document.getElementById("hidden-input-account-icon").value = iconId; + document.getElementById("item-icon-preview-icon").classList.toggle('hidden', false); + document.getElementById("item-icon-placeholder").classList.toggle('hidden', true); + document.getElementById("hidden-input-icon").value = iconId; }); - if($('#modalAccountIconSelect').length) + if($('#modalIconSelect').length) { - let modalAccountIconSelect = document.getElementById('modalAccountIconSelect'); - M.Modal.init(modalAccountIconSelect, { + let modalIconSelect = document.getElementById('modalIconSelect'); + M.Modal.init(modalIconSelect, { onCloseEnd: function f() { document.getElementById('account-name').focus(); @@ -37,11 +37,11 @@ $(document).ready(function() }); } - $('#account-icon-preview').click(function() + $('#item-icon-preview').click(function() { getAvailableImages(function() { - let modalID = '#modalAccountIconSelect'; + let modalID = '#modalIconSelect'; $(modalID).modal(); $(modalID).modal('open'); }); @@ -57,20 +57,20 @@ function getAvailableImages(callback) { $.ajax({ type: 'GET', - url: $('#account-icon-preview').attr('data-url'), + url: $('#item-icon-preview').attr('data-url'), data: {}, success: function(data) { $('#available-images').html(data); // select an icon option - $('.account-icon-option').click(function() + $('.item-icon-option').click(function() { selectIcon(this); }); - let classDeleteConfirm = 'account-icon-option-delete-confirm'; - $('.account-icon-option-delete').click(function() + let classDeleteConfirm = 'item-icon-option-delete-confirm'; + $('.item-icon-option-delete').click(function() { if(this.classList.contains(classDeleteConfirm)) { @@ -89,7 +89,7 @@ function getAvailableImages(callback) function selectIcon(item) { - let allIconOptions = document.querySelectorAll('.account-icon-option'); + let allIconOptions = document.querySelectorAll('.item-icon-option'); for(let i = 0; i < allIconOptions.length; i++) { allIconOptions[i].classList.remove('selected'); @@ -100,7 +100,7 @@ function selectIcon(item) function uploadImage() { - let formID = 'form-upload-account-image'; + let formID = 'form-upload-image'; let form = document.getElementById(formID); $.ajax({ diff --git a/src/main/resources/templates/accounts/accountFunctions.ftl b/src/main/resources/templates/accounts/accountFunctions.ftl deleted file mode 100644 index 22d7aa0ea..000000000 --- a/src/main/resources/templates/accounts/accountFunctions.ftl +++ /dev/null @@ -1,52 +0,0 @@ -<#import "/spring.ftl" as s> -<#import "../helpers/header.ftl" as header> - -<#macro modalAccountIconSelect> - <div id="modalAccountIconSelect" class="modal modal-fixed-footer background-color"> - <div class="modal-content center-align"> - <div class="row"> - <div class="col s12"> - <div class="headline">Upload image</div> - </div> - </div> - - <div class="row"> - <@uploadImageForm/> - </div> - - <hr> - - <div class="row"> - <div class="col s12"> - <div class="headline">Available images</div> - </div> - </div> - - <div class="row" id="available-images"> - </div> - </div> - <div class="modal-footer background-color"> - <@header.buttonLink url='' icon='clear' localizationKey='cancel' color='red' classes='modal-action modal-close text-white' noUrl=true/> - <@header.buttonLink url='' icon='done' id='button-account-icon-confirm' localizationKey='ok' color='green' classes='modal-action modal-close text-white' noUrl=true/> - </div> - </div> -</#macro> - -<#macro uploadImageForm> - <form id="form-upload-account-image" method="post" action="<@s.url '/media/uploadImage'/>" enctype="multipart/form-data"> - <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> - <div class="file-field input-field col s12"> - <div class="container"> - <div class="btn background-blue"> - <i class="material-icons left">folder</i> - ${locale.getString("account.new.icon.upload.choose.file")} - <input id="inputUploadFile" type="file" accept="${helpers.getValidImageUploadTypes()}" name="file"> - </div> - <div class="file-path-wrapper"> - <input class="file-path validate" type="text"> - </div> - <@header.buttonLink url='' icon='upload' localizationKey='account.new.icon.upload' id='button-upload-new-image' classes='right' noUrl=true/> - </div> - </div> - </form> -</#macro> diff --git a/src/main/resources/templates/accounts/newAccount.ftl b/src/main/resources/templates/accounts/newAccount.ftl index 67e8f1acd..dfc06f125 100644 --- a/src/main/resources/templates/accounts/newAccount.ftl +++ b/src/main/resources/templates/accounts/newAccount.ftl @@ -16,7 +16,6 @@ <#import "../helpers/navbar.ftl" as navbar> <@navbar.navbar "accounts" settings/> - <#import "accountFunctions.ftl" as accountFunctions> <#import "../helpers/customSelectMacros.ftl" as customSelectMacros> <#import "../helpers/imageSelect.ftl" as imageSelectMacros> @@ -87,7 +86,7 @@ </div> </main> - <@accountFunctions.modalAccountIconSelect/> + <@imageSelectMacros.modalIconSelect/> <!-- Scripts--> <#import "../helpers/scripts.ftl" as scripts> diff --git a/src/main/resources/templates/helpers/availableImages.ftl b/src/main/resources/templates/helpers/availableImages.ftl index 1e454c641..6eba2e39a 100644 --- a/src/main/resources/templates/helpers/availableImages.ftl +++ b/src/main/resources/templates/helpers/availableImages.ftl @@ -4,7 +4,7 @@ <@header.globals/> <#list availableImages as image> - <@imageOption image 'account-icon'/> + <@imageOption image 'item-icon'/> </#list> <#macro imageOption image classPrefix> diff --git a/src/main/resources/templates/helpers/imageSelect.ftl b/src/main/resources/templates/helpers/imageSelect.ftl index e168ada54..7d7e4a5b2 100644 --- a/src/main/resources/templates/helpers/imageSelect.ftl +++ b/src/main/resources/templates/helpers/imageSelect.ftl @@ -1,4 +1,5 @@ <#import "/spring.ftl" as s> +<#import "../helpers/header.ftl" as header> <#macro imageSelect id item> <div class="row"> @@ -7,14 +8,65 @@ <label class="input-label" for="${id}">${locale.getString("account.new.label.icon")}</label> <div id="${id}" class="valign-wrapper"> - <a id="${id}-preview" data-url="<@s.url '/media/getAvailableImages'/>"> - <img id="${id}-preview-icon" src="<#if item.getIcon()??>${item.getIcon().getBase64EncodedImage()}</#if>" class="${id}-preview <#if item.getIcon()?? == false>hidden</#if>"/> - <div id="${id}-placeholder" class="<#if item.getIcon()??>hidden</#if>">${locale.getString("account.new.icon.placeholder")}</div> + <a id="item-icon-preview" data-url="<@s.url '/media/getAvailableImages'/>"> + <img id="item-icon-preview-icon" src="<#if item.getIcon()??>${item.getIcon().getBase64EncodedImage()}</#if>" class="item-icon-preview <#if item.getIcon()?? == false>hidden</#if>"/> + <div id="item-icon-placeholder" class="<#if item.getIcon()??>hidden</#if>">${locale.getString("account.new.icon.placeholder")}</div> </a> - <@header.buttonFlat url='' icon='delete' id='button-remove-${id}' localizationKey='' classes="no-padding text-default" noUrl=true/> + <@header.buttonFlat url='' icon='delete' id='' localizationKey='' classes="no-padding text-default button-remove-icon-from-item" noUrl=true/> - <input id="hidden-input-${id}" type="hidden" name="icon" value="<#if item.getIcon()??>${item.getIcon().getID()?c}</#if>"> + <input id="hidden-input-icon" type="hidden" name="icon" value="<#if item.getIcon()??>${item.getIcon().getID()?c}</#if>"> </div> </div> </div> +</#macro> + + +<#macro modalIconSelect> + <div id="modalIconSelect" class="modal modal-fixed-footer background-color"> + <div class="modal-content center-align"> + <div class="row"> + <div class="col s12"> + <div class="headline">Upload image</div> + </div> + </div> + + <div class="row"> + <@uploadImageForm/> + </div> + + <hr> + + <div class="row"> + <div class="col s12"> + <div class="headline">Available images</div> + </div> + </div> + + <div class="row" id="available-images"> + </div> + </div> + <div class="modal-footer background-color"> + <@header.buttonLink url='' icon='clear' localizationKey='cancel' color='red' classes='modal-action modal-close text-white' noUrl=true/> + <@header.buttonLink url='' icon='done' id='button-icon-confirm' localizationKey='ok' color='green' classes='modal-action modal-close text-white' noUrl=true/> + </div> + </div> +</#macro> + +<#macro uploadImageForm> + <form id="form-upload-image" method="post" action="<@s.url '/media/uploadImage'/>" enctype="multipart/form-data"> + <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> + <div class="file-field input-field col s12"> + <div class="container"> + <div class="btn background-blue"> + <i class="material-icons left">folder</i> + ${locale.getString("account.new.icon.upload.choose.file")} + <input id="inputUploadFile" type="file" accept="${helpers.getValidImageUploadTypes()}" name="file"> + </div> + <div class="file-path-wrapper"> + <input class="file-path validate" type="text"> + </div> + <@header.buttonLink url='' icon='upload' localizationKey='account.new.icon.upload' id='button-upload-new-image' classes='right' noUrl=true/> + </div> + </div> + </form> </#macro> \ No newline at end of file -- GitLab