Register in the bank UI for your own balance (separate from the shared pool).
-
-
+
+
+
+
![]()
+
Bank UI · register / login
@@ -908,23 +910,48 @@
/* Secondary: own-account path (register first) */
var WITHDRAW_EXCHANGE = "taler://withdraw-exchange/exchange.hacktivism.ch/";
- function makeQr(el, text) {
+ /* QR_Taler: off-DOM encode → PNG img + center logo (same as shop-pay / merchant) */
+ function logoSrc() {
+ try {
+ var b = document.querySelector("base");
+ if (b && b.href) return new URL("qr-logo.svg", b.href).href;
+ } catch (e) {}
+ return "/intro/qr-logo.svg";
+ }
+ function setQrLogo(imgEl) {
+ if (!imgEl) return;
+ imgEl.src = logoSrc();
+ imgEl.onerror = function () {
+ imgEl.style.display = "none";
+ };
+ imgEl.style.display = "";
+ }
+ function makeQr(el, text, logoEl) {
if (!el) return;
el.innerHTML = "";
+ var size = 220;
if (!text) {
- el.textContent = "…";
+ el.innerHTML = '
…
';
return;
}
if (typeof QRCode === "undefined") {
- el.textContent = "QR lib missing";
+ el.innerHTML = '
QR lib missing
';
return;
}
- // Encode off-DOM so QR is visible (canvas/img not collapsed)
- var size = 220;
+ var level =
+ QRCode.CorrectLevel && QRCode.CorrectLevel.M != null
+ ? QRCode.CorrectLevel.M
+ : 1;
var scratch = document.createElement("div");
+ scratch.setAttribute("aria-hidden", "true");
scratch.style.cssText =
- "position:fixed;left:-9999px;top:0;width:" + size + "px;height:" + size + "px;opacity:0";
+ "position:fixed;left:-9999px;top:0;width:" +
+ size +
+ "px;height:" +
+ size +
+ "px;overflow:hidden;opacity:0;pointer-events:none";
document.body.appendChild(scratch);
+ var dataUrl = "";
try {
new QRCode(scratch, {
text: String(text),
@@ -932,26 +959,39 @@
height: size,
colorDark: "#000000",
colorLight: "#ffffff",
- correctLevel: QRCode.CorrectLevel.M
+ correctLevel: level
});
var canvas = scratch.querySelector("canvas");
- var dataUrl = canvas ? canvas.toDataURL("image/png") : "";
- if (dataUrl) {
- var img = document.createElement("img");
- img.alt = "QR code";
- img.width = size;
- img.height = size;
- img.src = dataUrl;
- img.style.display = "block";
- img.style.margin = "0 auto";
- el.appendChild(img);
- } else {
- el.appendChild(scratch.firstChild || document.createTextNode("QR failed"));
+ var libImg = scratch.querySelector("img");
+ if (canvas && canvas.width > 0) {
+ try {
+ dataUrl = canvas.toDataURL("image/png");
+ } catch (e1) {}
}
- } catch (e) {
- el.textContent = "QR encode failed";
+ if (!dataUrl && libImg && libImg.src && libImg.src.indexOf("data:") === 0) {
+ dataUrl = libImg.src;
+ }
+ } catch (err) {
+ dataUrl = "";
}
if (scratch.parentNode) scratch.parentNode.removeChild(scratch);
+ if (!dataUrl) {
+ el.innerHTML = '
QR encode failed
';
+ return;
+ }
+ var img = document.createElement("img");
+ img.alt = "QR code";
+ img.width = size;
+ img.height = size;
+ img.src = dataUrl;
+ img.style.display = "block";
+ img.style.width = size + "px";
+ img.style.height = size + "px";
+ img.style.maxWidth = "100%";
+ img.style.margin = "0 auto";
+ img.style.background = "#fff";
+ el.appendChild(img);
+ setQrLogo(logoEl);
}
function setDemoWithdraw(uri, amount) {
@@ -972,7 +1012,11 @@
amtEl.hidden = true;
}
}
- makeQr(document.getElementById("qr-withdraw-demo"), uri);
+ makeQr(
+ document.getElementById("qr-withdraw-demo"),
+ uri,
+ document.getElementById("qr-withdraw-demo-logo")
+ );
}
function loadDemoWithdraw() {
@@ -1047,7 +1091,11 @@
var webuiPainted = false;
wireFold("more-fold", "more-fold-toggle", "more-fold-body", function () {
if (webuiPainted) return;
- makeQr(document.getElementById("qr-webui"), WEBUI);
+ makeQr(
+ document.getElementById("qr-webui"),
+ WEBUI,
+ document.getElementById("qr-webui-logo")
+ );
webuiPainted = true;
});
})();