[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [taler-merchant-frontends] branch stable updated (463c0bd -
From: |
gnunet |
Subject: |
[GNUnet-SVN] [taler-merchant-frontends] branch stable updated (463c0bd -> 7e9076d) |
Date: |
Wed, 31 May 2017 17:15:04 +0200 |
This is an automated email from the git hooks/post-receive script.
marcello pushed a change to branch stable
in repository merchant-frontends.
from 463c0bd kill navbar until we have a better one that works
add f0b61b7 Adapt /history popup to new format (where the merchant
backend sums up the total amount transferred).
add c9dc185 Remove existing list entries upon receiving /track/transfer
response.
add ea2e6db Half-baking popup closure by JS.
add 103c36a Making popup disappear once content below the overlay is
available.
add eb34526 Show loader before /track/transfer results.
add 901b28c Avoid checking two conditions within one 'if' concerning XHR
object.
add 2168f53 new nav sidebar for blog
add b2feb78 fix URLs and fallback page
add 4fcd2df new style for donations merchant frontent
add 59ce555 text fix
add 5cf2aac fix (wall of) text
add a47c5c3 template syntax
add eb28faa text
add 4d518a1 template syntax
add 48a1555 style/text
add a11927f prettier form
add 5602ad6 order
add 72e90b9 links
add 24430f6 get rid of (non-backoffice) JS
add cd9ddf2 remove JS stuff, wording
add 30d5bb3 Better scrolling mgmt.
add 91d8688 indent
add 1ee5e1f add PNG version of the image
add 74286da fix link
add 2627320 Tracks' popup closes upon pressing ESC.
add 636537b Manage no records found in /history by showing proper message
add c981246 remove dead code
add 7759c1b adding form for cherry-picking proposals in history.
add 2911f73 fix histry table getting the first row alway eaten upon new
results.
add 4be5fee various fixes around the cherry-pick tracking form: the one
where the backoffice user enters order ids and wtids in order to directly track
them.
add 6f82dc9 cherry-pick form shows/hides input fields according to order
id or wtid being tracked. To be improved by UX people.
add 94e2e76 actual submission of cherry-picked tracking
add 442a13c submodules
add ba1f72c catch error from attempting to parse non json
add 7e9076d sticking to new /pay's returned json
No new revisions were added by this update.
Summary of changes:
talerfrontends/blog/articles/scrap1_13.html | 2 +-
talerfrontends/blog/blog.py | 11 +-
talerfrontends/blog/data/category.png | Bin 0 -> 15641 bytes
talerfrontends/blog/static/backoffice.css | 4 +
talerfrontends/blog/static/backoffice.js | 189 +++++++++++++----
talerfrontends/blog/static/web-common | 2 +-
talerfrontends/blog/templates/backoffice.html | 57 +++--
talerfrontends/blog/templates/base.html | 34 +--
talerfrontends/donations/donations.py | 4 +-
talerfrontends/donations/static/execute-payment.js | 53 -----
talerfrontends/donations/static/index.js | 46 ----
talerfrontends/donations/static/web-common | 2 +-
talerfrontends/donations/templates/base.html | 37 ++--
talerfrontends/donations/templates/fallback.html | 48 ++---
talerfrontends/donations/templates/index.html | 65 +++---
talerfrontends/static/tracking-error.js | 54 -----
talerfrontends/static/tracking.css | 12 --
talerfrontends/static/tracking.js | 235 ---------------------
talerfrontends/templates/error.html | 12 --
talerfrontends/templates/tracking.html | 101 ---------
talerfrontends/templates/transaction_conflict.html | 15 --
talerfrontends/templates/transfer_conflict.html | 15 --
22 files changed, 305 insertions(+), 693 deletions(-)
create mode 100644 talerfrontends/blog/data/category.png
delete mode 100644 talerfrontends/donations/static/execute-payment.js
delete mode 100644 talerfrontends/donations/static/index.js
delete mode 100644 talerfrontends/static/tracking-error.js
delete mode 100644 talerfrontends/static/tracking.css
delete mode 100644 talerfrontends/static/tracking.js
delete mode 100644 talerfrontends/templates/error.html
delete mode 100644 talerfrontends/templates/tracking.html
delete mode 100644 talerfrontends/templates/transaction_conflict.html
delete mode 100644 talerfrontends/templates/transfer_conflict.html
diff --git a/talerfrontends/blog/articles/scrap1_13.html
b/talerfrontends/blog/articles/scrap1_13.html
index 4bddf2e..8c06eb2 100644
--- a/talerfrontends/blog/articles/scrap1_13.html
+++ b/talerfrontends/blog/articles/scrap1_13.html
@@ -37,7 +37,7 @@ Cover photograph by Peter Hinely.
</div>
<a
name="index-call-to-action_002c-use-correct-terminology-_0028see-also-terminology_0029-3">
</a>
- <img alt="category" src="category.jpg">
+ <img alt="category"
src="/essay/13._Categories_of_Free_and_Nonfree_Software/data/category.jpg">
<blockquote class="smallquotation">
<p>
<em>
diff --git a/talerfrontends/blog/blog.py b/talerfrontends/blog/blog.py
index 8010f2f..35fd073 100644
--- a/talerfrontends/blog/blog.py
+++ b/talerfrontends/blog/blog.py
@@ -59,7 +59,9 @@ app.config.from_object(__name__)
def utility_processor():
def url(my_url):
return join_urlparts(flask.request.script_root, my_url)
- return dict(url=url)
+ def env(name, default=None):
+ return os.environ.get(name, default)
+ return dict(url=url, env=env)
@app.route("/")
@@ -101,7 +103,10 @@ def generate_contract():
)
r = requests.post(urljoin(BACKEND_URL, 'proposal'), json=dict(order=order))
if r.status_code != 200:
- return flask.jsonify(r.json()), r.status_code
+ try:
+ return flask.jsonify(r.json()), r.status_code
+ except json.decoder.JSONDecodeError:
+ return flask.jsonify(dict(error="Backend died, no JSON got from
it")), 502
proposal_resp = r.json()
return flask.jsonify(**proposal_resp)
@@ -146,7 +151,7 @@ def pay():
r = requests.post(urljoin(BACKEND_URL, "pay"), json=deposit_permission)
if 200 != r.status_code:
return flask.jsonify(r.json()), r.status_code
- proposal_data = r.json()["proposal_data"]
+ proposal_data = r.json()["contract_terms"]
article_name = proposal_data["extra"]["article_name"]
payed_articles = flask.session["payed_articles"] =
flask.session.get("payed_articles", [])
if article_name not in payed_articles:
diff --git a/talerfrontends/blog/data/category.png
b/talerfrontends/blog/data/category.png
new file mode 100644
index 0000000..836425c
Binary files /dev/null and b/talerfrontends/blog/data/category.png differ
diff --git a/talerfrontends/blog/static/backoffice.css
b/talerfrontends/blog/static/backoffice.css
index 5cb7609..63a684c 100644
--- a/talerfrontends/blog/static/backoffice.css
+++ b/talerfrontends/blog/static/backoffice.css
@@ -11,6 +11,10 @@
z-index: 2;
}
+#history-container {
+ margin-bottom: 10cm;
+}
+
.date, .amount {
text-align: right;
}
diff --git a/talerfrontends/blog/static/backoffice.js
b/talerfrontends/blog/static/backoffice.js
index 00ed53d..4554bb0 100644
--- a/talerfrontends/blog/static/backoffice.js
+++ b/talerfrontends/blog/static/backoffice.js
@@ -21,8 +21,6 @@
@licend The above is the entire license notice
for the JavaScript code in this page.
- @brief Contains functions that regulate the focus to input fields
- and others that request /history to the frontend
@author Marcello Stanisci
*/
"use strict";
@@ -30,13 +28,28 @@
var FRACTION = 100000000;
var TIMESTAMP = 0;
var START = 0;
+var DELTA = 5
var INSTANCE = "FSF";
+var LAST = 0;
function amount_to_string(amount){
var number = Number(amount.value) + (Number(amount.fraction)/FRACTION);
return `${number.toFixed(2)} ${amount.currency}`;
}
+function close_popup(){
+
+ var ctx = document.getElementsByClassName("track-content")[0];
+ var tbody = xpath_get("table/tbody", ctx).snapshotItem(0);
+ var tbody_children = xpath_get("table/tbody/tr", ctx);
+
+ for(var i=1; i<tbody_children.snapshotLength; i++){
+ tbody.removeChild(tbody_children.snapshotItem(i));
+ }
+
+ toggle_overlay(true);
+}
+
function amount_sum(a1, a2){
if(a1.currency != a2.currency)
throw "Currency mismatch, terminating.";
@@ -76,25 +89,48 @@ function parse_date(date){
return `${d.getUTCDate()} ${months[d.getUTCMonth()]} ${d.getUTCFullYear()},
${hours}:${minutes}`;
}
-function toggle_visible(overlay){
- overlay.style.visibility = "visible";
- overlay.style.opacity = 1;
+function toggle_overlay(force_close){
+ var overlay = document.getElementsByClassName("overlay")[0];
+ if(overlay.style.visibility == "visible" || force_close){
+ overlay.style.visibility = "hidden";
+ overlay.style.opacity = 0;
+ }
+ else
+ {
+ overlay.style.visibility = "visible";
+ overlay.style.opacity = 1;
+ }
+
}
function track_transfer(exchange, wtid){
+ var loader = document.getElementsByClassName("loader")[0];
+ loader.style.visibility = "visible";
var qs = `/track/transfer?exchange=${exchange}&wtid=${wtid}&instance=FSF`;
- console.log("Tracking", qs);
var req = new XMLHttpRequest();
req.open("GET", qs, true);
req.onload = function(){
if(4 == req.readyState){
if(200 == req.status){
var tracks = JSON.parse(req.responseText);
- console.log("Transfer tracks", req.responseText);
+ var table = document.getElementById("history");
+ var tbody = xpath_get("tbody", table).snapshotItem(0);
+ var tbody_children = xpath_get("tbody/*[position() > 1]", table);
+ for(var i=0; i<tbody_children.snapshotLength; i++){
+ tbody.removeChild(tbody_children.snapshotItem(i));
+ }
+ fill_table(tracks.deposits_sums, tracks.execution_time);
+ close_popup();
+ }
+ if(400 == req.status){
+ alert("Bad request, check submitted data!");
+ return;
+ }
+ else{
+ console.log(`Status: ${req.status}, not handled.`);
+ return;
}
-
}
- // TBD.
}
req.send();
}
@@ -122,22 +158,18 @@ function track_order(order_id, instance){
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null).snapshotItem(0);
var row = document.createElement("tr");
- var subject = JSON.stringify({wtid: entry.wtid,
- exchange_url: entry.exchange});
+ var subject = `${entry.wtid} ${entry.exchange_url}`;
console.log("Subject", subject);
- var amount = entry.coins[0].amount_with_fee;
- for(var j=1; j<entry.coins.length - 1; j++)
- amount = amount_sum(amount, entry.coins[j].amount_with_fee);
row.innerHTML = `<td class="wtid">
<a onclick='track_transfer("${entry.exchange}",
"${entry.wtid}")'
href="#${i}">${subject.substring(0, 20)}...</a>
</td>
- <td class="amount">${amount_to_string(amount)}</td>
+ <td
class="amount">${amount_to_string(entry.amount)}</td>
<td
class="date">${parse_date(entry.execution_time)}</td>`;
table.appendChild(row);
- toggle_visible(overlay);
+ toggle_overlay();
}
}
if (202 == req.status){
@@ -145,11 +177,11 @@ function track_order(order_id, instance){
var overlay = document.getElementsByClassName("overlay")[0];
var track_content =
document.getElementsByClassName("track-content")[0];
track_content.innerHTML = "This order is still waiting to be paid
back.";
- toggle_visible(overlay);
+ toggle_overlay();
}
+ if (404 == req.status)
+ alert("Order ID unknown");
}
-
- // Manage here 202 case (tracks not ready).
}
req.send();
}
@@ -160,15 +192,28 @@ function xpath_get(xpath, ctx){
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
- return ret.snapshotItem(0);
+ return ret;
}
/**
* Append results to the table showing results.
*/
-function fill_table(history){
+function fill_table(history, execution_time){
var table = document.getElementById("history");
- var tbody = xpath_get("tbody", table);
+ var tbody = xpath_get("tbody", table).snapshotItem(0);
+
+ if(0 == history.length){
+ window.setTimeout(remove_loader, 900);
+ return;
+ }
+
+ /* remove "no records" message */
+ var nr = xpath_get("address@hidden'no-records']", tbody).snapshotItem(0)
+ if (nr)
+ tbody.removeChild(nr);
+ /* Make table's header visible */
+ xpath_get("address@hidden'headers']",
tbody).snapshotItem(0).style.visibility = "";
+
for (var i=0; i<history.length; i++){
var entry = history[i];
var row = document.createElement("tr");
@@ -186,8 +231,8 @@ function fill_table(history){
td_date.className = "date";
td_order_id.innerHTML = `<a href="#${i}"
onclick='track_order("${entry.order_id}", "FSF");'>${entry.order_id}</a>`;
td_summary.innerHTML = "TBD";
- td_amount.innerHTML = amount_to_string(entry.amount);
- td_date.innerHTML = parse_date(entry.timestamp);
+ td_amount.innerHTML = amount_to_string(entry.amount ||
entry.deposit_value);
+ td_date.innerHTML = parse_date(entry.timestamp || execution_time);
row.appendChild(td_order_id);
row.appendChild(td_summary);
row.appendChild(td_amount);
@@ -205,28 +250,98 @@ function fill_table(history){
window.setTimeout(remove_loader, 900);
}
+/**
+ * Issue a direrct /track/order, via Web form.
+ */
+function track_cherry_pick(form){
+ var types = xpath_get("address@hidden'radio']", form);
+ var type = "order";
+ for(var i in [0, 1])
+ if (types.snapshotItem(i).checked)
+ type = types.snapshotItem(i).value;
+ if ("order" == type){
+ var order_id = xpath_get("address@hidden'order']", form).snapshotItem(0);
+ track_order(order_id.value, INSTANCE);
+ }
+ else{
+ var data = xpath_get("address@hidden'transfer']", form);
+ var wtid = data.snapshotItem(0);
+ var exchange = data.snapshotItem(1);
+ track_transfer(exchange.value, wtid.value);
+ }
+}
+
+/**
+ * Restore the cherry-pick form to the initial state.
+ * In other words, it formats the form so that /track/order
+ * can be called.
+ */
+function cherry_pick_form_order(form){
+ var input_order = xpath_get("address@hidden'order']", form).snapshotItem(0);
+ input_order.style.visibility = "";
+ var input_transfer = xpath_get("address@hidden'transfer']", form);
+ for(var i in [0, 1])
+ input_transfer.snapshotItem(i).style.visibility = "hidden";
+}
+
+/**
+ * Change the cherry-pick form to the format useful for
+ * tracking wire transfers.
+ */
+function cherry_pick_form_transfer(form){
+ var input_order = xpath_get("address@hidden'order']", form).snapshotItem(0);
+ input_order.style.visibility = "hidden";
+ var input_transfer = xpath_get("address@hidden'transfer']", form);
+ for(var i in [0, 1])
+ input_transfer.snapshotItem(i).style.visibility = "";
+}
+
+
+/**
+ * - scroll if true, the logic tries to retrieve the
+ * "next page" of all the proposals known to the merchant.
+ */
function get_history(scroll){
var loader = document.getElementsByClassName("loader")[0];
loader.style.visibility = "visible";
- if(scroll)
- START += 20;
+ var qs = `/history?instance=${INSTANCE}&delta=${DELTA}`;
+ if(scroll){
+ START = LAST;
+ qs += `&start=${START}`;
+ }
var req = new XMLHttpRequest();
- req.open("GET",
`/history?timestamp=${TIMESTAMP}&instance=${INSTANCE}&start=${START}`, true);
+ req.open("GET", qs, true);
req.onload = function(){
- if(req.readyState == 4 && req.status == 200){
- var history = JSON.parse(req.responseText);
- if(!history){
- console.log("Got invalid JSON");
- return;
+ if(4 == req.readyState){
+ if(200 == req.status){
+ var history = JSON.parse(req.responseText);
+ if(!history){
+ console.log("Got invalid JSON");
+ return;
+ }
+ if(0 < history.length){
+ console.log(req.respnseText);
+ LAST = history[history.length - 1].row_id;
+ }
+ fill_table(history);
+ }
+ else{
+ console.log("error: status != 200");
}
- fill_table(history);
- }
- else{
- console.log("error: status != 200");
}
}
req.send();
}
document.addEventListener("DOMContentLoaded", () => get_history(false));
-document.addEventListener("scroll", () => get_history(true));
+document.addEventListener("scroll", function(){
+ if(window.innerHeight + window.scrollY >= document.body.offsetHeight)
+ window.setTimeout(()=>get_history(true), 400);
+});
+document.onkeydown = function(e) {
+ if(!e)
+ e = event;
+ if(e.keyCode == 27){
+ close_popup();
+ }
+}
diff --git a/talerfrontends/blog/static/web-common
b/talerfrontends/blog/static/web-common
index 9701ed4..0be9ac9 160000
--- a/talerfrontends/blog/static/web-common
+++ b/talerfrontends/blog/static/web-common
@@ -1 +1 @@
-Subproject commit 9701ed4caa1cb541c1f645b05bfe190975b3e42b
+Subproject commit 0be9ac9264a3bd9f495c37abf1ac864562e8c598
diff --git a/talerfrontends/blog/templates/backoffice.html
b/talerfrontends/blog/templates/backoffice.html
index 649c2ba..447ae54 100644
--- a/talerfrontends/blog/templates/backoffice.html
+++ b/talerfrontends/blog/templates/backoffice.html
@@ -4,20 +4,54 @@
<p>This page simulates a backoffice facility. Through it,
the user can see the money flow from Taler transactions to
wire transfers and viceversa.</p>
- <table id="history" width="60%" style="visibility: hidden;">
- <tbody>
- <tr>
- <th class="order-id">Order ID</th>
- <th class="amount">Amount</th>
- <th class="date">Date</th>
- </tr>
- </tbody>
- </table>
- <div class="loader"></div>
+ <div>
+ <form action="">
+ <input type="text"
+ placeholder="Order ID"
+ class="order"></input><br>
+ <input type="text"
+ placeholder="WTID"
+ class="transfer"
+ style="visibility: hidden;"></input><br>
+ <input type="text"
+ placeholder="Exchange URI"
+ class="transfer"
+ style="visibility: hidden;"></input><br>
+ <input type="radio"
+ name="track-type"
+ value="order"
+ onclick="cherry_pick_form_order(this.parentNode)"
+ checked>Track order id</input><br>
+ <input type="radio"
+ name="track-type"
+ value="wtid"
+ onclick="cherry_pick_form_transfer(this.parentNode)">Track wire
transfer</input><br>
+ <input type="button"
+ value="submit"
+ onclick='track_cherry_pick(this.parentNode)'></input>
+ </form>
+ </div>
+ <div id="history-container">
+ <table id="history" width="60%" style="visibility: hidden;">
+ <tbody>
+ <tr class="no-records">
+ <th colspan="3">No records found</th>
+ </tr>
+ <tr class="headers" style="visibility: hidden">
+ <th class="order-id">Order ID</th>
+ <th class="amount">Amount</th>
+ <th class="date">Date</th>
+ </tr>
+ </tbody>
+ </table>
+ <br/>
+ <div class="loader"></div>
+ </div>
+
<div id="popup1" class="overlay">
<div class="popup">
<h2>
- <a class="close" href="/backoffice">×</a>
+ <a class="close" href="#" onclick="close_popup();">×</a>
</h2>
<div class="track-content">
<table>
@@ -32,7 +66,6 @@
</div>
</div>
</div>
- <a href="#" onclick="get_history(true);" style="margin-left: 90%;">Fake
scroll</a>
{% endblock main %}
{% block styles %}
diff --git a/talerfrontends/blog/templates/base.html
b/talerfrontends/blog/templates/base.html
index bf4d73e..7519ab1 100644
--- a/talerfrontends/blog/templates/base.html
+++ b/talerfrontends/blog/templates/base.html
@@ -17,8 +17,8 @@
<html data-taler-nojs="true" {{ data_attribute }}>
<head>
<title>Richard M. Stallman: Free Software, Free Society</title>
- <link rel="stylesheet" type="text/css" href="{{
url("/static/web-common/style.css") }}">
- <link rel="stylesheet" type="text/css" href="{{
url("/static/web-common/lang.css") }}">
+ <link rel="stylesheet" type="text/css" href="{{
url('/static/web-common/pure.css') }}" />
+ <link rel="stylesheet" type="text/css" href="{{
url('/static/web-common/demo.css') }}" />
<link rel="stylesheet" type="text/css" href="{{
url("/static/web-common/taler-fallback.css") }}" id="taler-presence-stylesheet">
<script src="{{ url("/static/web-common/taler-wallet-lib.js") }}"
type="application/javascript"></script>
<script src="{{ url("/static/web-common/lang.js") }}"
type="application/javascript"></script>
@@ -29,26 +29,34 @@
<body>
{% block body_prelude %}{% endblock %}
- <header>
+ <div class="demobar">
+ <h1><span class="tt adorn-brackets">Taler Demo</span></h1>
+ <h1><span class="it"><a href="{{ env('TALER_ENV_URL_MERCHANT_BLOG')
}}">Essay Shop</a></span></h1>
+ <p>This essay shop demonstrates how Taler can be used to pay for web
resources.</p>
+ <ul>
+ <li><a href="{{ env('TALER_ENV_URL_INTRO', '#') }}">Introduction</a></li>
+ <li><a href="{{ env('TALER_ENV_URL_BANK', '#') }}">Bank</a></li>
+ <li><a href="{{ env('TALER_ENV_URL_MERCHANT_BLOG', '#') }}">Essay
Shop</a></li>
+ <li><a href="{{ env('TALER_ENV_URL_MERCHANT_DONATIONS', '#')
}}">Donations</a></li>
+ </ul>
+ <p>You can learn more about Taler on our main <a
href="https://taler.net">website</a>.</p>
+ </div>
+
+ <section id="main" class="content">
<div id="logo">
<a href="{{ url("/") }}">
<img src="{{ url("/static/gnu.svg") }}" height=100 width=100 alt="GNU
logo">
</a>
</div>
<h1 class="nav">Richard M. Stallman: Free Software, Free Society</h1>
- </header>
-
- <aside class="sidebar" id="left">
- </aside>
-
- <section id="main">
{% block main %}
<em>(main content goes here)</em>
{% endblock main %}
+ <hr />
+ <div class="copyright">
+ <p>Copyright © 2014—2016 INRIA</p>
+ <a href="/javascript" data-jslicense="1"
class="jslicenseinfo">JavaScript license information</a>
+ </div>
</section>
- <div class="copyright">
- <p>Copyright © 2014—2016 INRIA</p>
- <a href="/javascript" data-jslicense="1" class="jslicenseinfo">JavaScript
license information</a>
- </div>
</body>
</html>
diff --git a/talerfrontends/donations/donations.py
b/talerfrontends/donations/donations.py
index 2287e94..b20bc2b 100644
--- a/talerfrontends/donations/donations.py
+++ b/talerfrontends/donations/donations.py
@@ -52,7 +52,9 @@ print(app.config)
def utility_processor():
def url(my_url):
return join_urlparts(flask.request.script_root, my_url)
- return dict(url=url)
+ def env(name, default=None):
+ return os.environ.get(name, default)
+ return dict(url=url, env=env)
@app.route("/")
diff --git a/talerfrontends/donations/static/execute-payment.js
b/talerfrontends/donations/static/execute-payment.js
deleted file mode 100644
index d01ee20..0000000
--- a/talerfrontends/donations/static/execute-payment.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- @licstart The following is the entire license notice for the
- JavaScript code in this page.
-
- Copyright (C) 2015, 2016 INRIA
-
- The JavaScript code in this page is free software: you can
- redistribute it and/or modify it under the terms of the GNU
- Lesser General Public License (GNU LGPL) as published by the Free Software
- Foundation, either version 2.1 of the License, or (at your option)
- any later version. The code is distributed WITHOUT ANY WARRANTY;
- without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU LGPL for more details.
-
- As additional permission under GNU LGPL version 2.1 section 7, you
- may distribute non-source (e.g., minimized or compacted) forms of
- that code without the copy of the GNU LGPL normally required by
- section 4, provided you include this license notice and a URL
- through which recipients can access the Corresponding Source.
-
- @licend The above is the entire license notice
- for the JavaScript code in this page.
-
- @author Marcello Stanisci
-*/
-
-"use strict";
-
-// the urls are urlencoded, so that quotation marks can't lead to escaping and
XSS
-var hash = document.querySelectorAll("[name=contract-hash]")[0];
-var pay_url = document.querySelectorAll("[name=pay-url]")[0];
-var offering_url = document.querySelectorAll("[name=offering-url]")[0];
-
-taler.executePayment(
- hash.getAttribute("value"),
- decodeURIComponent(pay_url.getAttribute("value")),
- decodeURIComponent(offering_url.getAttribute("value")));
-
-var index = 0;
-var dots = ["/",
- "-",
- "\\",
- "|"];
-function print_dots() {
- var spot = document.getElementById("action-indicator");
- if (spot)
- spot.innerHTML = dots[index];
- index++;
- index = index % dots.length;
- window.setTimeout(print_dots, 400);
-}
-
-print_dots();
diff --git a/talerfrontends/donations/static/index.js
b/talerfrontends/donations/static/index.js
deleted file mode 100644
index 94d9c78..0000000
--- a/talerfrontends/donations/static/index.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- @licstart The following is the entire license notice for the
- JavaScript code in this page.
-
- Copyright (C) 2015, 2016 INRIA
-
- The JavaScript code in this page is free software: you can
- redistribute it and/or modify it under the terms of the GNU
- Lesser General Public License (GNU LGPL) as published by the Free Software
- Foundation, either version 2.1 of the License, or (at your option)
- any later version. The code is distributed WITHOUT ANY WARRANTY;
- without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU LGPL for more details.
-
- As additional permission under GNU LGPL version 2.1 section 7, you
- may distribute non-source (e.g., minimized or compacted) forms of
- that code without the copy of the GNU LGPL normally required by
- section 4, provided you include this license notice and a URL
- through which recipients can access the Corresponding Source.
-
- @licend The above is the entire license notice
- for the JavaScript code in this page.
-
- @author Marcello Stanisci
- @author Florian Dold
-*/
-"use strict";
-
-var shop_currency =
document.querySelectorAll("meta[name=merchant_currency]")[0].getAttribute("value");
-
-function addOption(value, label) {
- var s = document.getElementById("taler-donation");
- var e = document.createElement("option");
- e.textContent = label ? label : ("".concat(value, " ", shop_currency));
- e.value = value;
- s.appendChild(e);
-}
-
-function init() {
- addOption("0.1");
- addOption("1.0");
- addOption("6.0", "".concat(5, " ", shop_currency));
- addOption("10");
-}
-
-document.addEventListener("DOMContentLoaded", init);
diff --git a/talerfrontends/donations/static/web-common
b/talerfrontends/donations/static/web-common
index 9701ed4..0be9ac9 160000
--- a/talerfrontends/donations/static/web-common
+++ b/talerfrontends/donations/static/web-common
@@ -1 +1 @@
-Subproject commit 9701ed4caa1cb541c1f645b05bfe190975b3e42b
+Subproject commit 0be9ac9264a3bd9f495c37abf1ac864562e8c598
diff --git a/talerfrontends/donations/templates/base.html
b/talerfrontends/donations/templates/base.html
index 8599705..dc78eb0 100644
--- a/talerfrontends/donations/templates/base.html
+++ b/talerfrontends/donations/templates/base.html
@@ -18,16 +18,29 @@
<html>
<head>
<title>Taler Donation Demo</title>
- <link rel="stylesheet" type="text/css" href="{{
url("/static/web-common/style.css") }}">
- <link rel="stylesheet" type="text/css" href="{{
url("/static/web-common/lang.css") }}">
+ <link rel="stylesheet" type="text/css" href="{{
url('/static/web-common/pure.css') }}" />
+ <link rel="stylesheet" type="text/css" href="{{
url('/static/web-common/demo.css') }}" />
<script src="{{ url("/static/web-common/taler-wallet-lib.js") }}"
type="application/javascript"></script>
<script src="{{ url("/static/web-common/lang.js") }}"
type="application/javascript"></script>
{% block styles %}{% endblock %}
{% block scripts %}{% endblock %}
</head>
-<body class="en" onLoad="loadLang()">
- <header>
+<body>
+ <div class="demobar">
+ <h1><span class="tt adorn-brackets">Taler Demo</span></h1>
+ <h1><span class="it"><a href="{{ env('TALER_ENV_URL_MERCHANT_DONATIONS')
}}">Donations</a></span></h1>
+ <p>This is the donation page, you can make donations (with an imaginary
currency for now) to free software projects.</p>
+ <ul>
+ <li><a href="{{ env('TALER_ENV_URL_INTRO', '#') }}">Introduction</a></li>
+ <li><a href="{{ env('TALER_ENV_URL_BANK', '#') }}">Bank</a></li>
+ <li><a href="{{ env('TALER_ENV_URL_MERCHANT_BLOG', '#') }}">Essay
Shop</a></li>
+ <li><a href="{{ env('TALER_ENV_URL_MERCHANT_DONATIONS', '#')
}}">Donations</a></li>
+ </ul>
+ <p>You can learn more about Taler on our main <a
href="https://taler.net">website</a>.</p>
+ </div>
+
+ <section id="main" class="content">
<a href="{{ url("/") }}">
<div id="logo">
<svg height="100" width="100">
@@ -36,20 +49,14 @@
</svg>
</div>
</a>
- <h1 class="nav">Toy "Store" - Taler Demo</h1>
- </header>
-
- <aside class="sidebar" id="left">
- </aside>
-
- <section id="main">
{% block main %}
This is the main content of the page.
{% endblock %}
+ <hr />
+ <div class="copyright">
+ <p>Copyright © 2014—2017 INRIA</p>
+ <a href="/javascript" data-jslicense="1"
class="jslicenseinfo">JavaScript license information</a>
+ </div>
</section>
- <div class="copyright">
- <p>Copyright © 2014—2016 INRIA</p>
- <a href="/javascript" data-jslicense="1" class="jslicenseinfo">JavaScript
license information</a>
- </div>
</body>
</html>
diff --git a/talerfrontends/donations/templates/fallback.html
b/talerfrontends/donations/templates/fallback.html
index ecf22ae..448af2b 100644
--- a/talerfrontends/donations/templates/fallback.html
+++ b/talerfrontends/donations/templates/fallback.html
@@ -1,25 +1,23 @@
-<!doctype html>
-<html>
- <body>
- <div id="ccfakeform" class="fade">
- <p>
- Oops, it looks like you don't have a Taler wallet installed. Why don't
you enter
- all your credit card details before reading the article? <em>You can also
- use GNU Taler to complete the purchase at any time.</em>
- </p>
-
- <form>
- First name<br> <input type="text"></input><br>
- Family name<br> <input type="text"></input><br>
- Age<br> <input type="text"></input><br>
- Nationality<br> <input type="text"></input><br>
- Gender<br> <input type="radio" name"gender">Male</input>
- CC number<br> <input type="text"></input><br>
- <input type="radio" name="gender">Female</input><br>
- </form>
- <form method="get" action="/cc-payment/{{ article_name }}">
- <input type="submit"></input>
- </form>
- </div>
- </body>
-</html>
+{% extends "templates/base.html" %}
+{% block main %}
+<div id="ccfakeform" class="fade">
+ <p>
+ Oops, it looks like you don't have a Taler wallet installed. Why don't you
enter
+ all your credit card details before reading the article? <em>You can also
+ use GNU Taler to complete the purchase at any time.</em>
+ </p>
+
+ <form>
+ First name<br> <input type="text"></input><br>
+ Family name<br> <input type="text"></input><br>
+ Age<br> <input type="text"></input><br>
+ Nationality<br> <input type="text"></input><br>
+ Gender<br> <input type="radio" name"gender">Male</input>
+ CC number<br> <input type="text"></input><br>
+ <input type="radio" name="gender">Female</input><br>
+ </form>
+ <form method="get" action="/cc-payment/{{ article_name }}">
+ <input type="submit"></input>
+ </form>
+</div>
+{% endblock main %}
diff --git a/talerfrontends/donations/templates/index.html
b/talerfrontends/donations/templates/index.html
index 0164392..240e88b 100644
--- a/talerfrontends/donations/templates/index.html
+++ b/talerfrontends/donations/templates/index.html
@@ -1,35 +1,12 @@
{% extends "templates/base.html" %}
-{% block scripts %}
-<meta name="merchant_currency" value="{{ merchant_currency }}">
-<script src="{{ url('/static/index.js') }}"
type="application/javascript"></script>
-{% endblock %}
-
{% block main %}
- <h1 lang="en">Welcome to the Taler Donation "Shop" Demo</h1>
+<h1 lang="en">Welcome to the Taler Donation "Shop" Demo</h1>
+
+<p>This toy donations website shows the user experience for donations with
Taler.
+You are paying with an imaginary currency ({{ merchant_currency }}).
+</p>
- <p>This "toy" website provides you with the ability to
- experience using the
- <a href="https://www.taler.net/">GNU Taler</a>
- payment system without using
- valuable currency. Instead, for the demonstrator we
- Taler is designed to work with ordinary currencies, such
- as Dollars or Euros, not just toy currencies.
- <br>
- This page, <tt>shop.demo.taler.net</tt> models the behavior of a
- typical Web shop supporting Taler. The other pages of the demo,
- <tt>exchange.demo.taler.net</tt> and
- <tt>bank.demo.taler.net</tt>, correspond to a Taler exchange
- and bank with tight Taler integration respectively. You
- may also enjoy visiting the <tt>blog.demo.taler.net</tt>.
- </p>
- <h2>Back-office interface</h2>
- <p>Try the <a href="/backoffice">back-office</a>, in order to track
- your deposits!
- </p>
-</article>
-<!-- debugging button, to be minimized in a corner.. -->
-<!-- button id="show-hide" value="show">toggle</button-->
<div class="taler-installed-hide">
<h2>Installing the Taler wallet</h2>
First, you need to install the Taler wallet browser extension.
@@ -39,30 +16,31 @@
<li>from the app store for <a
href="https://chrome.google.com/webstore/detail/gnu-taler-wallet/millncjiddlpgdmkklmhfadpacifaonc">Google
Chrome and Chromium</a>
</li>
- <li>By visiting our <a href="/landing">landing page</a>.
+ <li>By visiting our <a href="https://taler.net/wallet">installation
page</a> for other platforms.
</li>
</ul>
Wallets for other browsers will be provided in the near future.
</div>
<div class="taler-installed-show">
- <p>Please choose a project and the amount of KUDOS you
+ <p>Please choose a project and the amount (*) of {{ merchant_currency }} you
wish to donate:</p>
- <form name="tform" action="checkout" method="GET">
+ <form name="tform" action="checkout" method="GET" class="pure-form">
<div class="participation" id="fake-shop">
- <br>
- <input type="radio" name="donation_receiver" value="Taler"
checked="true">GNU Taler</input>
- <br>
- <input type="radio" name="donation_receiver" value="Tor">Tor</input>
- <br>
- <input type="radio" name="donation_receiver"
value="GNUnet">GNUnet</input>
- <br>
- <select id="taler-donation" name="donation_amount">
+ <select name="donation_receiver">
+ <option value="GNUnet">GNUnet</option>
+ <option value="Taler">GNU Taler</option>
+ <option value="Tor">Tor</option>
<!-- options are added dynamically -->
</select>
- <input type="submit" value="Donate!"/>
- <br>
+ <select id="taler-donation" name="donation_amount">
+ <option value="0.1">0.1 {{ merchant_currency }}</option>
+ <option value="1">1 {{ merchant_currency }}</option>
+ <option value="6">5 {{ merchant_currency }}</option>
+ <option value="10">10 {{ merchant_currency }}</option>
+ </select>
+ <input type="submit" class="pure-button pure-button-primary"
value="Donate!"/>
</div>
</form>
<p>
@@ -76,4 +54,9 @@
</p>
</div>
+<h2>Back-office interface</h2>
+<p>Try the <a href="backoffice">back-office</a>, in order to track
+orders and corresponding deposits.
+</p>
+
{% endblock %}
diff --git a/talerfrontends/static/tracking-error.js
b/talerfrontends/static/tracking-error.js
deleted file mode 100644
index 87cf11f..0000000
--- a/talerfrontends/static/tracking-error.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- @licstart The following is the entire license notice for the
- JavaScript code in this page.
-
- Copyright (C) 2015, 2016 INRIA
-
- The JavaScript code in this page is free software: you can
- redistribute it and/or modify it under the terms of the GNU
- Lesser General Public License (GNU LGPL) as published by the Free Software
- Foundation, either version 2.1 of the License, or (at your option)
- any later version. The code is distributed WITHOUT ANY WARRANTY;
- without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU LGPL for more details.
-
- As additional permission under GNU LGPL version 2.1 section 7, you
- may distribute non-source (e.g., minimized or compacted) forms of
- that code without the copy of the GNU LGPL normally required by
- section 4, provided you include this license notice and a URL
- through which recipients can access the Corresponding Source.
-
- @licend The above is the entire license notice
- for the JavaScript code in this page.
-
- @brief Contains functions that regulate the focus to input fields
- and others that request /history to the frontend
- @author Marcello Stanisci
-*/
-
-/**
- * Append anchor needed to save content to disk. Used on
- * errors to save crypto proofs.
- */
-function save_proof(){
- var content = document.querySelectorAll("[name=proof]")[0];
- console.log("Saving blob:", content);
- var blob = new Blob([content.getAttribute("value")], {type:"text/plain"});
- var href = window.URL.createObjectURL(blob);
- var a = document.createElement("a");
- var d = new Date();
- a.download = d.getFullYear()
- + "-" + d.getMonth()
- + "-" + d.getDay()
- + "_" + d.getHours()
- + "-" + d.getMinutes()
- + "-" + d.getSeconds()
- + ".conflict-proof";
- a.href = href;
- var d = new Date();
- a.innerHTML = "Export proof to file";
- var container = document.getElementById("save-file");
- container.appendChild(a);
-}
-
-document.addEventListener("DOMContentLoaded", save_proof);
diff --git a/talerfrontends/static/tracking.css
b/talerfrontends/static/tracking.css
deleted file mode 100644
index dc49a35..0000000
--- a/talerfrontends/static/tracking.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.track-button {
- float: left;
-}
-
-.track-trans {
- font-size: medium;
- white-space: nowrap;
-}
-
-#history, #history th, #history td {
- border: 1px solid black;
-}
diff --git a/talerfrontends/static/tracking.js
b/talerfrontends/static/tracking.js
deleted file mode 100644
index b5945bc..0000000
--- a/talerfrontends/static/tracking.js
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- @licstart The following is the entire license notice for the
- JavaScript code in this page.
-
- Copyright (C) 2015, 2016 INRIA
-
- The JavaScript code in this page is free software: you can
- redistribute it and/or modify it under the terms of the GNU
- Lesser General Public License (GNU LGPL) as published by the Free Software
- Foundation, either version 2.1 of the License, or (at your option)
- any later version. The code is distributed WITHOUT ANY WARRANTY;
- without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU LGPL for more details.
-
- As additional permission under GNU LGPL version 2.1 section 7, you
- may distribute non-source (e.g., minimized or compacted) forms of
- that code without the copy of the GNU LGPL normally required by
- section 4, provided you include this license notice and a URL
- through which recipients can access the Corresponding Source.
-
- @licend The above is the entire license notice
- for the JavaScript code in this page.
-
- @brief Contains functions that regulate the focus to input fields
- and others that request /history to the frontend
- @author Marcello Stanisci
-*/
-"use strict";
-
-// Used when parsing amount objects into strings.
-var FRACTION = 100000000;
-
-/**
- * Attach event handlers where needed
- */
-function init(){
- var inputs = document.querySelectorAll(".track-input");
- for (var i=0; i<inputs.length; i++) {
- inputs[i].onfocus = function(){
-
this.parentNode.parentNode.querySelectorAll(".track-button")[0].removeAttribute("disabled")};
- inputs[i].onblur = function(){
- var button =
this.parentNode.parentNode.querySelectorAll(".track-button")[0];
- var father = this.parentNode;
- setTimeout(function(){
- if (document.activeElement != button
- && document.activeElement.parentNode != father)
- button.setAttribute("disabled", "disabled");
- },
- 100);
- };
- }
-}
-
-/**
- * Paste transaction details into the form
- */
-function paste_transaction(tid, instance){
-
- var form_fields =
document.evaluate('//tbody/tr/th[2]/form//address@hidden"text"]',
- document,
- null,
- XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
- null);
- for (var i = 0; i < form_fields.snapshotLength; i++){
- var node = form_fields.snapshotItem(i);
- switch (node.name){
- case "tid":
- node.value = tid;
- break;
- case "instance":
- node.value = instance;
- node.focus();
- }
- }
-}
-
-/**
- * Paste transfer details into the form
- */
-function paste_transfer(exchange_uri, instance, wtid){
-
- var form_fields =
document.evaluate('//tbody/tr/th[1]/form//address@hidden"text"]',
- document,
- null,
- XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
- null);
- for (var i = 0; i < form_fields.snapshotLength; i++){
- var node = form_fields.snapshotItem(i);
- switch (node.name){
- case "wtid":
- node.value = wtid;
- break;
- case "exchange-uri":
- node.value = exchange_uri;
- break;
- case "instance":
- node.value = instance;
- node.focus();
- }
- }
-}
-
-/**
- * Parse Taler date string
- */
-function get_date(date){
- var split = date.match(/Date\((.*)\)/);
- var seconds;
- if(isNaN(seconds = Number(split[1]))){
- console.error("Malformed date gotten from backend");
- return;
- }
- console.log("Extracting timestamp", split[1]);
- var d = new Date(seconds * 1000);
- return d;
-}
-
-/**
- * Stringify amounts
- */
-function parse_amount(amount){
- var v = amount.value + (amount.fraction/FRACTION);
- return v + " " + amount.currency;
-}
-
-
-/**
- * Issue a /map/out to the frontend, in order to
- * get a plain contract corresponding to the given
- * hashcode. Update the column with the received
- * content.
- */
-function fill_contract_details(summary_column,
- instance_column,
- tid_column,
- entry){
- /* Wait for frontend implementing /map. */
- var req = new XMLHttpRequest();
-
- var on_error = function(){
- var msg = "Not able to talk to frontend.";
- summary_column.textContent = msg;
- instance_column.textContent = msg;
- };
-
- req.open("GET", `/map?h_contract=${entry.h_contract}`);
- req.onerror = on_error;
- req.onload = function(){
- if(req.readyState == 4 && req.status == 200){
- var contract = JSON.parse(req.responseText);
- if(!contract){
- console.log("Got invalid JSON.");
- column.textContent = "Frontend gave invalid contract.";
- return;
- }
- summary_column.textContent = contract.summary;
- instance_column.textContent
- = contract.merchant.instance ? contract.merchant.instance : "default";
- tid_column.innerHTML
- = `<a href="#" onclick='paste_transaction("${entry.transaction_id}",
"${contract.merchant.instance}");'>
- ${entry.transaction_id}
- </a>`;
- }
- else
- on_error();
- };
- req.send();
-}
-
-/**
- * This function gets triggered when the user submits the form
- * used to get a list of transactions
- */
-function submit_history(){
- var table = document.getElementById("history");
-
- /**
- * Remove leftovers.
- */
- var entries = document.getElementsByClassName("history-entry");
- while (0 < entries.length)
- table.removeChild(entries[0]);
-
- var days = document.getElementById("history_form").days.value;
- var req = new XMLHttpRequest();
- var get_column = function(value, ra){
- var column = document.createElement("td");
- column.textContent = value;
- if (ra)
- column.setAttribute("align", "right");
- return column;
- };
- var on_error = function(){
- table.innerHTML = "<p>Could not get transactions list from server</p>"
- };
- req.open("GET", `/history?days=${days}`, true);
- req.onload = function(){
- if(req.readyState == 4 && req.status == 200){
- var history = JSON.parse(req.responseText);
- if(!history)
- console.log("Got invalid JSON");
- if(0 == history.length){
- table.innerHTML = "<p>No transaction was that young!</p>";
- }
- for (var i=0; i<history.length; i++){
- var entry = history[i];
- var tr = document.createElement("tr");
- tr.className = "history-entry";
- // * tr.appendChild(get_column(entry.transaction_id));
- var async_tid_column = get_column("");
- tr.appendChild(async_tid_column);
- var date = get_date(entry.timestamp);
- tr.appendChild(get_column(date.toDateString()
- + " " + date.toLocaleTimeString()));
- var async_summary_column = get_column("");
- var async_instance_column = get_column("");
- tr.appendChild(async_summary_column);
- tr.appendChild(async_instance_column);
- fill_contract_details(async_summary_column,
- async_instance_column,
- async_tid_column,
- entry);
- tr.appendChild(get_column(parse_amount(entry.total_amount), true))
- table.appendChild(tr);
- }
- table.style.visibility = "";
- }
- else{
- on_error();
- }
- };
- req.send();
-}
-
-document.addEventListener("DOMContentLoaded", init);
diff --git a/talerfrontends/templates/error.html
b/talerfrontends/templates/error.html
deleted file mode 100644
index e2a551d..0000000
--- a/talerfrontends/templates/error.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{% extends "templates/base.html" %}
-
-{% block scripts %}
-<script src="/static-common/tracking.js"
type="application/javascript"></script>
-<link rel="stylesheet" type="text/css" href="/static-common/tracking.css">
-{% endblock %}
-
-{% block main %}
-Error type: {{ error }}
-<br>
-details: {{ details }}
-{% endblock %}
diff --git a/talerfrontends/templates/tracking.html
b/talerfrontends/templates/tracking.html
deleted file mode 100644
index 5fb331f..0000000
--- a/talerfrontends/templates/tracking.html
+++ /dev/null
@@ -1,101 +0,0 @@
-{% extends "templates/base.html" %}
-
-{% block scripts %}
-<script src="/static-common/tracking.js"
type="application/javascript"></script>
-<link rel="stylesheet" type="text/css" href="/static-common/tracking.css">
-{% endblock %}
-
-{% block main %}
-<div>
- <table>
- <tbody>
- <tr>
- <th>Wire transfers</th>
- <th>Transactions</th>
- </tr>
- <tr>
- <th>
- <form action="/track/transfer" method="GET" class="track-form">
- <div>
- <input class="track-input" type="text" name="wtid"
placeholder="Wire transfer id"/><br>
- <input class="track-input" type="text" name="exchange-uri"
placeholder="exchange URI"/><br>
- <input class="track-input" type="text" name="instance"
placeholder="Instance"/><br>
- </div>
- <div>
- <input type="submit" value="Track!" class="track-button"
disabled="disabled"/>
- </div>
- </form>
- </th>
- <th>
- <form action="/track/transaction" method="GET" class="track-form">
- <div>
- <input class="track-input" type="text" name="tid"
placeholder="Transaction id"/><br>
- <input class="track-input" type="text" name="instance"
placeholder="Instance"/><br>
- </div>
- <div>
- <input type="submit" value="Track!" class="track-button"
disabled="disabled"/>
- </div>
- </form>
- </th>
- </tr>
- </tbody>
- </table>
- <div id="result">
- </div>
-</div>
-{% if transaction %}
- <p>Records for transaction: {{ original.transaction }}{% if
original.instance %},
- for merchant instance {{ original.instance }}{% endif %}
- </p>
- {% for e in tracks %}
- <ol class="track-trans">
- <li>
- <ul>
- <li>
- WTID: <a href="#" onclick='paste_transfer("{{ e["exchange"] }}", "{{
original.instance }}", "{{ e["wtid"] }}");'>{{ e["wtid"] }}</a>
- </li>
- <li>date: {{ e["date"] }}</li>
- <li>amount: {{ e["amount"] }}</li>
- <li>operated by {{ e["exchange"] }}</li>
- </ul>
- </li>
- </ol>
- {% endfor %}
-{% elif transfer %}
- <p>Records for WTID: {{ original.wtid }}:</p>
- <ol>
- <li>
- {% for e in tracks["deposits"] %}
- <ul>
- <li>
- Transaction: <a href="#" onclick='paste_transaction("{{
e["transaction_id"] }}", "{{ original.instance }}");'>{{ e["transaction_id"]
}}</a>
- </li>
- <li>amount: {{ e["deposit_value"]}}</li>
- </ul>
- {% endfor %}
- </li>
- </ol>
- <p>Total: {{ tracks["total"] }}</p>
-{% else %}
- <p>{{ msg }}</p>
-{% endif %}
-<form id="history_form" action="/history" method="GET">
- Get transactions up to
- <select name="days">
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="7">7</option>
- <option value="0">∞</option>
- </select>
- days back: <input type="button" onclick="submit_history();" value="Get!">
- <br>
- <small>Works only if JavaScript enabled</small>
-</form>
-<br/>
-<table id="history" style="visibility: hidden;">
- <tr>
- <th>Order ID</th>
- </tr>
-</table>
-
-{% endblock %}
diff --git a/talerfrontends/templates/transaction_conflict.html
b/talerfrontends/templates/transaction_conflict.html
deleted file mode 100644
index 339afc3..0000000
--- a/talerfrontends/templates/transaction_conflict.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% extends "templates/base.html" %}
-
-{% block scripts %}
-<script src="/static-common/tracking-error.js"
type="application/javascript"></script>
-{% endblock %}
-
-{% block main %}
-<meta name="proof" value="{{ details }}">
-
-<p>Conflict: in the attempt to track transaction {{ transaction_id }},
-the exchange claims that coin {{ details.coin_pub }} was transferred by WTID:
-{{ details.transaction_tracking_claim.wtid }}, whereas in previous tracks of
-transaction {{ transaction_id }} that same coin was unknown to the exchange.
-<div id="save-file"></div>
-{% endblock %}
diff --git a/talerfrontends/templates/transfer_conflict.html
b/talerfrontends/templates/transfer_conflict.html
deleted file mode 100644
index 47795d6..0000000
--- a/talerfrontends/templates/transfer_conflict.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% extends "templates/base.html" %}
-
-{% block scripts %}
-<script src="/static-common/tracking-error.js"
type="application/javascript"></script>
-{% endblock %}
-
-{% block main %}
-<meta name="proof" value="{{ details }}">
-
-<p>Conflict in deposited coin {{ details.coin_pub }}: the exchange
-wire transferred an amount that differs from the amount we deposited.</p>
-<p>Deposited amount:
-{{ expected_amount }} for transaction {{ transaction_id }}</p>
-<p>Wire transferred amount by the exchange: {{ transferred_amount }}</p>
-{% endblock %}
--
To stop receiving notification emails like this one, please contact
address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] [taler-merchant-frontends] branch stable updated (463c0bd -> 7e9076d),
gnunet <=