From 16d3082c23277b6bf0015bae7dae2120101dfa80 Mon Sep 17 00:00:00 2001 From: Christoph Prenner Date: Fri, 13 Feb 2026 11:42:03 +0100 Subject: [PATCH 1/2] Feature 200: add individual edge background color - added edgeColor to ProfileBean.java - added color picker to profile preferences.jsp - changed edge color background in player.jsp as individual bg style - added getter/setter for Edge Color in JolAdmin.java - added EdgeColor to request in the GameView.java - added function to persist chosen bg color to ds.js --- src/main/java/net/deckserver/JolAdmin.java | 10 ++++++++++ .../java/net/deckserver/dwr/DeckserverRemote.java | 8 ++++++++ .../java/net/deckserver/dwr/bean/ProfileBean.java | 2 ++ .../java/net/deckserver/dwr/model/GameView.java | 2 ++ src/main/webapp/WEB-INF/jsps/game/player.jsp | 3 ++- .../webapp/WEB-INF/jsps/profile/preferences.jsp | 4 ++++ src/main/webapp/js/ds.js | 14 +++++++++++++- 7 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/deckserver/JolAdmin.java b/src/main/java/net/deckserver/JolAdmin.java index b3010bad..fe4e4508 100644 --- a/src/main/java/net/deckserver/JolAdmin.java +++ b/src/main/java/net/deckserver/JolAdmin.java @@ -270,6 +270,9 @@ public static Set getGameNames() { public static synchronized void setImageTooltipPreference(String player, boolean value) { PlayerService.get(player).setShowImages(value); } + public static synchronized void setEdgeColor(String player, String value) { + PlayerService.get(player).setEdgeColor(value); + } public static synchronized boolean getImageTooltipPreference(String player) { if (player == null) { @@ -278,6 +281,13 @@ public static synchronized boolean getImageTooltipPreference(String player) { return PlayerService.get(player).isShowImages(); } + public static synchronized String getEdgeColor(String player) { + if (player == null) { + return "#FFFFFF"; + } + return PlayerService.get(player).getEdgeColor(); + } + public static synchronized boolean isAdmin(String player) { return PlayerService.get(player).getRoles().contains(PlayerRole.ADMIN); } diff --git a/src/main/java/net/deckserver/dwr/DeckserverRemote.java b/src/main/java/net/deckserver/dwr/DeckserverRemote.java index 0e379559..ef0eac16 100644 --- a/src/main/java/net/deckserver/dwr/DeckserverRemote.java +++ b/src/main/java/net/deckserver/dwr/DeckserverRemote.java @@ -132,8 +132,10 @@ public Map init() { JolAdmin.resetView(playerName, currentGame); } boolean imagePreferences = JolAdmin.getImageTooltipPreference(playerName); + String edgeColor = JolAdmin.getEdgeColor(playerName); Map update = UpdateFactory.getUpdate(); update.put("setPreferences", imagePreferences); + update.put("setEdgeColorPref", edgeColor); return update; } @@ -143,6 +145,12 @@ public Map setUserPreferences(boolean imageTooltips) { return UpdateFactory.getUpdate(); } + public Map setEdgeColor(String color) { + String playerName = getPlayer(request); + JolAdmin.setEdgeColor(playerName, color); + return UpdateFactory.getUpdate(); + } + public Map navigate(String target) { String playerName = getPlayer(request); PlayerModel player = JolAdmin.getPlayerModel(playerName); diff --git a/src/main/java/net/deckserver/dwr/bean/ProfileBean.java b/src/main/java/net/deckserver/dwr/bean/ProfileBean.java index faa3f988..de81c4ab 100644 --- a/src/main/java/net/deckserver/dwr/bean/ProfileBean.java +++ b/src/main/java/net/deckserver/dwr/bean/ProfileBean.java @@ -13,6 +13,7 @@ public class ProfileBean { private final String discordID; private final String veknID; private final String country; + private final String edgeColor; private final boolean imageTooltipPreference; public ProfileBean(PlayerModel model) { @@ -22,6 +23,7 @@ public ProfileBean(PlayerModel model) { this.discordID = playerInfo.getDiscordId(); this.veknID = playerInfo.getVeknId(); this.imageTooltipPreference = JolAdmin.getImageTooltipPreference(player); + this.edgeColor = JolAdmin.getEdgeColor(player); this.country = playerInfo.getCountryCode(); } diff --git a/src/main/java/net/deckserver/dwr/model/GameView.java b/src/main/java/net/deckserver/dwr/model/GameView.java index 432fe2f7..fa3d9ce1 100644 --- a/src/main/java/net/deckserver/dwr/model/GameView.java +++ b/src/main/java/net/deckserver/dwr/model/GameView.java @@ -6,6 +6,7 @@ import net.deckserver.game.enums.RegionType; import net.deckserver.services.ChatService; import net.deckserver.services.GameService; +import net.deckserver.services.PlayerService; import net.deckserver.storage.json.game.ChatData; import org.directwebremoting.WebContextFactory; import org.slf4j.Logger; @@ -136,6 +137,7 @@ public GameBean create() { try { request.setAttribute("game", game); request.setAttribute("viewer", playerName); + request.setAttribute("edgeColor", PlayerService.get(playerName).getEdgeColor()); state = WebContextFactory.get().forwardToString("/WEB-INF/jsps/game/state.jsp"); } catch (Exception e) { logger.error("Error retrieving state:", e); diff --git a/src/main/webapp/WEB-INF/jsps/game/player.jsp b/src/main/webapp/WEB-INF/jsps/game/player.jsp index 4847c665..dbaa77ca 100755 --- a/src/main/webapp/WEB-INF/jsps/game/player.jsp +++ b/src/main/webapp/WEB-INF/jsps/game/player.jsp @@ -8,6 +8,7 @@ JolGame game = (JolGame) request.getAttribute("game"); String viewer = (String) request.getAttribute("viewer"); String player = request.getParameter("player"); + String edgeColor = (String) request.getAttribute("edgeColor"); String playerIndex = request.getParameter("playerIndex"); boolean active = game.getActivePlayer().equals(player); int pool = game.getPool(player); @@ -28,7 +29,7 @@ - + Edge diff --git a/src/main/webapp/WEB-INF/jsps/profile/preferences.jsp b/src/main/webapp/WEB-INF/jsps/profile/preferences.jsp index 1fa0cad0..f89bb1c4 100644 --- a/src/main/webapp/WEB-INF/jsps/profile/preferences.jsp +++ b/src/main/webapp/WEB-INF/jsps/profile/preferences.jsp @@ -7,6 +7,10 @@ +
+ + +
<%--
--%> <%-- --%> <%-- --%> diff --git a/src/main/webapp/js/ds.js b/src/main/webapp/js/ds.js index 0669ffbe..e8cf84e6 100644 --- a/src/main/webapp/js/ds.js +++ b/src/main/webapp/js/ds.js @@ -15,7 +15,8 @@ let profile = { email: "", discordID: "", updating: false, - imageTooltipPreference: true + imageTooltipPreference: true, + edgeColor: "#FFFFFF" }; let subscribed = localStorage.getItem("notifications-subscribed") === "true"; @@ -48,6 +49,10 @@ function setPreferences(value) { profile.imageTooltipPreference = value; } +function setEdgeColorPref(value) { + profile.edgeColor = value; +} + function processData(a) { $("#connectionMessage").addClass("d-none"); for (let b in a) { @@ -538,6 +543,11 @@ function setImageTooltip() { DS.setUserPreferences(profile.imageTooltipPreference, {callback: processData, errorHandler: errorhandler}); } +function setEdgeColor() { + profile.edgeColor = $("#edgecolorpicker").val(); + DS.setEdgeColor(profile.edgeColor, {callback: processData, errorHandler: errorhandler}); +} + function callbackProfile(data) { if (profile.email !== data.email) $('#profileEmail').val(data.email); @@ -561,6 +571,8 @@ function callbackProfile(data) { $("#imageTooltips").prop("checked", true); } + $("#edgecolorpicker").val(data.edgeColor); + if (subscribed) { $("#enableNotifications").prop("checked", true); } From c72fa1c89db57cd64d59f55c4825696cdbf0bb7a Mon Sep 17 00:00:00 2001 From: Christoph Prenner Date: Fri, 13 Feb 2026 11:48:46 +0100 Subject: [PATCH 2/2] Feature 200: add default EdgeColor to PlayerInfo.java --- src/main/java/net/deckserver/storage/json/system/PlayerInfo.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/deckserver/storage/json/system/PlayerInfo.java b/src/main/java/net/deckserver/storage/json/system/PlayerInfo.java index db61f3b2..ba77b71a 100644 --- a/src/main/java/net/deckserver/storage/json/system/PlayerInfo.java +++ b/src/main/java/net/deckserver/storage/json/system/PlayerInfo.java @@ -19,6 +19,7 @@ public class PlayerInfo { private String countryCode; private Set roles = new HashSet<>(); private boolean showImages = true; + private String edgeColor = "#FFFFFF"; public PlayerInfo(String name, String id, String email, String hash) { this.name = name;