diff --git a/client/src/modules/DeckStateManager.js b/client/src/modules/DeckStateManager.js index fb31516..e6cac6d 100644 --- a/client/src/modules/DeckStateManager.js +++ b/client/src/modules/DeckStateManager.js @@ -1,5 +1,6 @@ import { globals } from '../config/globals.js'; import { HTMLFragments } from './HTMLFragments.js'; +import {toast} from "./Toast"; export class DeckStateManager { constructor () { @@ -39,6 +40,12 @@ export class DeckStateManager { ); } + getQuantityOfRole(role) { + return this.deck.find( + (card) => card.role.toLowerCase().trim() === role.toLowerCase().trim() + )?.quantity; + } + getDeckSize () { let total = 0; for (const role of this.deck) { @@ -80,6 +87,15 @@ export class DeckStateManager { const minusOneHandler = (e) => { if (e.type === 'click' || e.code === 'Enter') { e.preventDefault(); + toast( + `-1` + + sortedDeck[i].role + ' (' + (sortedDeck[i].quantity - 1).toString() + ')', + 'neutral', + true, + true, + 'short', + true + ); this.removeCopyOfCard(sortedDeck[i].role); this.updateDeckStatus(); } diff --git a/client/src/modules/RoleBox.js b/client/src/modules/RoleBox.js index c56bf6f..75878a3 100644 --- a/client/src/modules/RoleBox.js +++ b/client/src/modules/RoleBox.js @@ -199,6 +199,15 @@ export class RoleBox { } else { this.deckManager.addCopyOfCard(name); } + toast( + '+1 ' + + name + ' (' + this.deckManager.getQuantityOfRole(name) + ')', + 'neutral', + true, + true, + 'short', + true + ); this.deckManager.updateDeckStatus(); } }; diff --git a/client/src/modules/Toast.js b/client/src/modules/Toast.js index b22fb0e..62554d3 100644 --- a/client/src/modules/Toast.js +++ b/client/src/modules/Toast.js @@ -1,10 +1,16 @@ -export const toast = (message, type, positionAtTop = true, dispelAutomatically = true, duration = null) => { +export const toast = ( + message, + type, positionAtTop = true, + dispelAutomatically = true, + duration = null, + innerHTML = false +) => { if (message && type) { - buildAndInsertMessageElement(message, type, positionAtTop, dispelAutomatically, duration); + buildAndInsertMessageElement(message, type, positionAtTop, dispelAutomatically, duration, innerHTML); } }; -function buildAndInsertMessageElement (message, type, positionAtTop, dispelAutomatically, duration) { +function buildAndInsertMessageElement (message, type, positionAtTop, dispelAutomatically, duration, innerHTML) { cancelCurrentToast(); const messageEl = document.createElement('div'); messageEl.classList.add('info-message'); @@ -20,6 +26,9 @@ function buildAndInsertMessageElement (message, type, positionAtTop, dispelAutom case 'success': messageEl.classList.add('toast-success'); break; + case 'neutral': + messageEl.classList.add('toast-neutral'); + break; } switch (duration) { @@ -47,7 +56,11 @@ function buildAndInsertMessageElement (message, type, positionAtTop, dispelAutom } messageEl.setAttribute('id', 'current-info-message'); - messageEl.innerText = message; + if (innerHTML) { + messageEl.innerHTML = message; + } else { + messageEl.innerText = message; + } document.body.prepend(messageEl); } diff --git a/client/src/styles/GLOBAL.css b/client/src/styles/GLOBAL.css index 3e93edb..61fedd8 100644 --- a/client/src/styles/GLOBAL.css +++ b/client/src/styles/GLOBAL.css @@ -92,6 +92,11 @@ textarea { border: 3px solid #c78a8a; } +.toast-neutral { + background-color: #dbdbdb; + border: 3px solid #c4c4c4; +} + .toast-dispel-automatically { animation: fade-in-slide-down-then-exit ease normal forwards; } @@ -112,6 +117,30 @@ textarea { animation-duration: 8s; } +.toast-plus-one { + color: #1c8a36; + font-weight: bold; + font-size: 20px; + margin-right: 5px; +} + +.toast-minus-one { + font-size: 20px; + margin-right: 5px; + color: #e73333; + font-weight: bold; +} + +.toast-plus-role-quantity { + color: #1c8a36; + font-weight: bold; +} + +.toast-minus-role-quantity { + color: #e73333; + font-weight: bold; +} + #footer { bottom: 0; width: 100%; diff --git a/client/src/styles/create.css b/client/src/styles/create.css index 0771085..82ddb52 100644 --- a/client/src/styles/create.css +++ b/client/src/styles/create.css @@ -416,6 +416,11 @@ input[type="number"] { cursor: pointer; padding: 5px; border-radius: 3px; + border: 1px solid transparent; +} + +#role-select img:active, #deck-status-container img:active { + border: 1px solid whitesmoke; } #role-select img:nth-child(4) {