This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch v4 in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 14abadf99003006c69b8c964ba2982d12bf1bf15 Author: Andi Huber <[email protected]> AuthorDate: Fri Sep 19 13:01:57 2025 +0200 CAUSEWAY-3904: fixes client side UTF8 decoder --- .../viewer/wicket/ui/components/widgets/select2/Select2.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java index e049d9e7698..cab62684fd7 100644 --- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java +++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/select2/Select2.java @@ -57,13 +57,18 @@ static Select2 create( settings.setDropdownAutoWidth(true); settings.setWidth("100%"); settings.setPlaceholder(attributeModel.getFriendlyName()); - // the id string is url-safe base64 encoded JSON coming from ObjectDisplayDto + // the id string is url-safe base64 encoded JSON coming from ChoiceProvider using ObjectDisplayDto as JSON + // for UTF8 formatted JSON decoding see https://stackoverflow.com/questions/30106476/using-javascripts-atob-to-decode-base64-doesnt-properly-decode-utf-8-strings + // TODO perhaps declare this JS else where, then just reference to it var template = """ function(opt) { if(!opt) return "undefined"; if(!opt.id) return "undefined"; var base64 = opt.id.replace(/-/g, '+').replace(/_/g, '/') - var dto = JSON.parse(atob(base64)); + var json = decodeURIComponent(atob(base64).split('').map(function(c) { + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); + }).join('')); + var dto = JSON.parse(json); if(!dto) return "undefined"; if(!dto.title) return "undefined"; if(dto.iconHtml) {
