From 96c37cae3c60a53050fe4672cd51e625f6335af1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hern=C3=A2ni=20Marques?= Date: Fri, 10 Jul 2026 22:12:00 +0200 Subject: [PATCH] landings: QR center logo as PNG for Android (full Taler wordmark) Android WebView often failed the official Penpot SVG: root fill=none and wordmark paths only inherited black from a parent , so the blue T showed without the "taler" letters. Serve taler-assets qr-logo.png, keep fixed SVG as fallback, explicit logo size/alt. --- configs/bank-landing/index.html | 21 ++++++++++++++++++--- configs/bank-landing/qr-logo.png | Bin 0 -> 8563 bytes configs/bank-landing/qr-logo.svg | 2 +- configs/bank-landing/shop-pay.css | 7 +++++-- configs/bank-landing/shop-pay.js | 11 ++++++++--- configs/merchant-landing/qr-logo.png | Bin 0 -> 8563 bytes configs/merchant-landing/qr-logo.svg | 2 +- configs/merchant-landing/shop-pay.css | 7 +++++-- configs/merchant-landing/shop-pay.js | 11 ++++++++--- 9 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 configs/bank-landing/qr-logo.png create mode 100644 configs/merchant-landing/qr-logo.png diff --git a/configs/bank-landing/index.html b/configs/bank-landing/index.html index 680191b..78b2696 100644 --- a/configs/bank-landing/index.html +++ b/configs/bank-landing/index.html @@ -1437,18 +1437,33 @@ tw balance var WITHDRAW_EXCHANGE = "taler://withdraw-exchange/exchange.hacktivism.ch/"; /* QR_Taler: off-DOM encode → PNG img + center logo (same as shop-pay / merchant) */ + /* Prefer PNG: Android WebView often fails the official Penpot SVG + (root fill="none" + wordmark paths inherit black from a parent + → blue T only, missing "taler"). PNG matches taler-assets qr-logo.png. */ function logoSrc() { try { var b = document.querySelector("base"); - if (b && b.href) return new URL("qr-logo.svg", b.href).href; + if (b && b.href) return new URL("qr-logo.png", b.href).href; } catch (e) {} - return "/intro/qr-logo.svg"; + return "/intro/qr-logo.png"; } function setQrLogo(imgEl) { if (!imgEl) return; + imgEl.alt = "Taler"; + imgEl.width = 100; + imgEl.height = 50; + imgEl.decoding = "async"; imgEl.src = logoSrc(); imgEl.onerror = function () { - imgEl.style.display = "none"; + /* fallback to fixed SVG if PNG missing */ + try { + var b = document.querySelector("base"); + imgEl.src = b && b.href + ? new URL("qr-logo.svg", b.href).href + : "/intro/qr-logo.svg"; + } catch (e2) { + imgEl.style.display = "none"; + } }; imgEl.style.display = ""; } diff --git a/configs/bank-landing/qr-logo.png b/configs/bank-landing/qr-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..aeffa23d3ec9d66f1041cc50d28cd2037e0e4e56 GIT binary patch literal 8563 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 tCI$W<00960e6}m<00006Nkl \ No newline at end of file + \ No newline at end of file diff --git a/configs/bank-landing/shop-pay.css b/configs/bank-landing/shop-pay.css index a3cf84a..b14d7bd 100644 --- a/configs/bank-landing/shop-pay.css +++ b/configs/bank-landing/shop-pay.css @@ -123,7 +123,7 @@ button.shop-item { background: #fff; image-rendering: pixelated; } -/* Center logo plate — official qr-logo (webui uses ~100×50 on large QR) */ +/* Center logo plate — official qr-logo.png (webui ~100×50; PNG for Android) */ .goa-pay-taler-qr__logo { position: absolute; top: 50%; @@ -132,8 +132,11 @@ button.shop-item { width: 28%; height: auto; max-width: 100px; + aspect-ratio: 200 / 95; + object-fit: contain; pointer-events: none; - background: transparent; + background: #fff; + border-radius: 4px; } /* Settlement: collapsed by default, expand on click */ diff --git a/configs/bank-landing/shop-pay.js b/configs/bank-landing/shop-pay.js index 2888112..5797dc0 100644 --- a/configs/bank-landing/shop-pay.js +++ b/configs/bank-landing/shop-pay.js @@ -3,7 +3,7 @@ * Flow: POST templates/{id} → taler://pay/… + payto links. * * QR display matches taler-merchant-webui QR_Taler - * (@gnu-taler/web-util QR.tsx): animated #0042B3 conic ring + qr-logo.svg. + * (@gnu-taler/web-util QR.tsx): animated #0042B3 conic ring + qr-logo.png. * Uses qrcode-generator (same lib as webui) via global QRCode if present, * else falls back to canvas from qrcode.min.js (davidshimjs). */ @@ -21,7 +21,8 @@ } function logoSrc() { - return introBase() + "qr-logo.svg"; + /* PNG: Android often drops SVG wordmark fill inheritance (missing "taler") */ + return introBase() + "qr-logo.png"; } function templateHttps(productId) { @@ -214,9 +215,13 @@ function setLogo(imgEl) { if (!imgEl) return; + imgEl.alt = "Taler"; + imgEl.width = 100; + imgEl.height = 50; + imgEl.decoding = "async"; imgEl.src = logoSrc(); imgEl.onerror = function () { - imgEl.style.display = "none"; + imgEl.src = introBase() + "qr-logo.svg"; }; imgEl.style.display = ""; } diff --git a/configs/merchant-landing/qr-logo.png b/configs/merchant-landing/qr-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..aeffa23d3ec9d66f1041cc50d28cd2037e0e4e56 GIT binary patch literal 8563 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 tCI$W<00960e6}m<00006Nkl \ No newline at end of file + \ No newline at end of file diff --git a/configs/merchant-landing/shop-pay.css b/configs/merchant-landing/shop-pay.css index a3cf84a..b14d7bd 100644 --- a/configs/merchant-landing/shop-pay.css +++ b/configs/merchant-landing/shop-pay.css @@ -123,7 +123,7 @@ button.shop-item { background: #fff; image-rendering: pixelated; } -/* Center logo plate — official qr-logo (webui uses ~100×50 on large QR) */ +/* Center logo plate — official qr-logo.png (webui ~100×50; PNG for Android) */ .goa-pay-taler-qr__logo { position: absolute; top: 50%; @@ -132,8 +132,11 @@ button.shop-item { width: 28%; height: auto; max-width: 100px; + aspect-ratio: 200 / 95; + object-fit: contain; pointer-events: none; - background: transparent; + background: #fff; + border-radius: 4px; } /* Settlement: collapsed by default, expand on click */ diff --git a/configs/merchant-landing/shop-pay.js b/configs/merchant-landing/shop-pay.js index 2888112..5797dc0 100644 --- a/configs/merchant-landing/shop-pay.js +++ b/configs/merchant-landing/shop-pay.js @@ -3,7 +3,7 @@ * Flow: POST templates/{id} → taler://pay/… + payto links. * * QR display matches taler-merchant-webui QR_Taler - * (@gnu-taler/web-util QR.tsx): animated #0042B3 conic ring + qr-logo.svg. + * (@gnu-taler/web-util QR.tsx): animated #0042B3 conic ring + qr-logo.png. * Uses qrcode-generator (same lib as webui) via global QRCode if present, * else falls back to canvas from qrcode.min.js (davidshimjs). */ @@ -21,7 +21,8 @@ } function logoSrc() { - return introBase() + "qr-logo.svg"; + /* PNG: Android often drops SVG wordmark fill inheritance (missing "taler") */ + return introBase() + "qr-logo.png"; } function templateHttps(productId) { @@ -214,9 +215,13 @@ function setLogo(imgEl) { if (!imgEl) return; + imgEl.alt = "Taler"; + imgEl.width = 100; + imgEl.height = 50; + imgEl.decoding = "async"; imgEl.src = logoSrc(); imgEl.onerror = function () { - imgEl.style.display = "none"; + imgEl.src = introBase() + "qr-logo.svg"; }; imgEl.style.display = ""; }