diff options
author | Florian Dold <dold@inria.fr> | 2015-12-24 01:58:17 +0100 |
---|---|---|
committer | Florian Dold <dold@inria.fr> | 2015-12-24 01:58:17 +0100 |
commit | 020efb6d50daa8a4a4104cfe7aaf2bf05560f1e7 (patch) | |
tree | c00b4abe87a7661678e11de383ab7377aa9870cc | |
parent | 842fd298a2ca7771f4bc56c67f6a91dd7366414c (diff) | |
download | merchant-020efb6d50daa8a4a4104cfe7aaf2bf05560f1e7.tar.gz merchant-020efb6d50daa8a4a4104cfe7aaf2bf05560f1e7.tar.bz2 merchant-020efb6d50daa8a4a4104cfe7aaf2bf05560f1e7.zip |
Fulfillment link.
-rw-r--r-- | src/frontend/execute.js | 32 | ||||
-rw-r--r-- | src/frontend/execute.php | 12 | ||||
-rw-r--r-- | src/frontend/execute.tsx | 40 |
3 files changed, 73 insertions, 11 deletions
diff --git a/src/frontend/execute.js b/src/frontend/execute.js new file mode 100644 index 00000000..cd7b0b1e --- /dev/null +++ b/src/frontend/execute.js @@ -0,0 +1,32 @@ +"use strict"; +// JSX literals are compiled to calls to React.createElement calls. +let React = { + createElement: function (tag, props, ...children) { + let e = document.createElement(tag); + for (let k in props) { + e.setAttribute(k, props[k]); + } + for (let child of children) { + if ("string" === typeof child || "number" == typeof child) { + child = document.createTextNode(child); + } + e.appendChild(child); + } + return e; + } +}; +document.addEventListener("DOMContentLoaded", function (e) { + var eve = new CustomEvent('taler-execute-payment', { detail: { H_contract: h_contract } }); + document.dispatchEvent(eve); +}); +function replace(el, r) { + el.parentNode.replaceChild(r, el); +} +document.addEventListener("taler-payment-result", function (e) { + if (!e.detail.success) { + alert("Payment failed\n" + JSON.stringify(e.detail)); + } + console.log("finished payment"); + let msg = React.createElement("div", null, "Payment successful. View your ", React.createElement("a", {"href": e.detail.fulfillmentUrl}, "product"), "."); + replace(document.getElementById("loading"), msg); +}); diff --git a/src/frontend/execute.php b/src/frontend/execute.php index 61c8e197..2f27db1b 100644 --- a/src/frontend/execute.php +++ b/src/frontend/execute.php @@ -31,18 +31,8 @@ session_start(); echo "var h_contract=\"$_SESSION[H_contract]\";\n"; ?> -document.addEventListener("DOMContentLoaded", function (e) { - var eve = new CustomEvent('taler-execute-payment', {detail: {H_contract: h_contract}}); - document.dispatchEvent(eve); -}); -document.addEventListener("taler-payment-result", function (e) { - if (!e.detail.success) { - alert("Payment failed\n" + JSON.strinfigy(e.detail)); - } - console.log("finished payment"); - document.getElementById("loading").innerHTML = "success!"; -}); </script> + <script type="text/javascript" src="execute.js" /> </head> <body> diff --git a/src/frontend/execute.tsx b/src/frontend/execute.tsx new file mode 100644 index 00000000..f7e660c9 --- /dev/null +++ b/src/frontend/execute.tsx @@ -0,0 +1,40 @@ +"use strict"; + + +// JSX literals are compiled to calls to React.createElement calls. +let React = { + createElement: function(tag, props, ...children) { + let e = document.createElement(tag); + for (let k in props) { + e.setAttribute(k, props[k]); + } + for (let child of children) { + if ("string" === typeof child || "number" == typeof child) { + child = document.createTextNode(child); + } + e.appendChild(child); + } + return e; + } +}; + +declare var h_contract: string; + +document.addEventListener("DOMContentLoaded", function (e) { + var eve = new CustomEvent('taler-execute-payment', {detail: {H_contract: h_contract}}); + document.dispatchEvent(eve); +}); + +function replace(el, r) { + el.parentNode.replaceChild(r, el); +} + +document.addEventListener("taler-payment-result", function (e: CustomEvent) { + if (!e.detail.success) { + alert("Payment failed\n" + JSON.stringify(e.detail)); + } + console.log("finished payment"); + let msg = + <div>Payment successful. View your <a href={e.detail.fulfillmentUrl}>product</a>.</div>; + replace(document.getElementById("loading"), msg); +}); |