summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <dold@inria.fr>2015-12-24 01:58:17 +0100
committerFlorian Dold <dold@inria.fr>2015-12-24 01:58:17 +0100
commit020efb6d50daa8a4a4104cfe7aaf2bf05560f1e7 (patch)
treec00b4abe87a7661678e11de383ab7377aa9870cc
parent842fd298a2ca7771f4bc56c67f6a91dd7366414c (diff)
downloadmerchant-020efb6d50daa8a4a4104cfe7aaf2bf05560f1e7.tar.gz
merchant-020efb6d50daa8a4a4104cfe7aaf2bf05560f1e7.tar.bz2
merchant-020efb6d50daa8a4a4104cfe7aaf2bf05560f1e7.zip
Fulfillment link.
-rw-r--r--src/frontend/execute.js32
-rw-r--r--src/frontend/execute.php12
-rw-r--r--src/frontend/execute.tsx40
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);
+});