gnunet-gns-registrar

GNU Name System registrar
Log | Files | Refs | README

commit 2379c0e964016bab4aea515fdabcb2e483ae3360
parent 3f040a357bc7300192d4f6d2c7bd88325115cc64
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Tue, 26 Aug 2025 10:38:05 +0200

Add timeline UI and cards

Diffstat:
Astatic/css/style.css | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mweb/templates/buy.html | 38+++++++++++++++++++++++++++-----------
Mweb/templates/edit.html | 77++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------
Mweb/templates/landing.html | 1+
Mweb/templates/name.html | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
5 files changed, 188 insertions(+), 67 deletions(-)

diff --git a/static/css/style.css b/static/css/style.css @@ -0,0 +1,58 @@ +.qr { + text-align: center; +} + +.taldir-qr { + margin: 1em; + border: 1px solid #555; + border-radius: 1em; +} + +ul.timeline { + list-style-type: none; + position: relative; +} +ul.timeline:before { + content: ' '; + background: #d4d9df; + display: inline-block; + position: absolute; + left: 29px; + width: 2px; + height: 100%; + z-index: 400; +} +ul.timeline > li { + margin: 20px 0; + padding-left: 20px; +} + +ul.timeline > li:before { + content: ' '; + background: white; + display: inline-block; + position: absolute; + border-radius: 50%; + border: 3px solid #ddd; + left: 20px; + width: 20px; + height: 20px; + z-index: 400; +} + +ul.timeline > li.inprogress:before { + border: 3px solid #22c0e8; +} + +ul.timeline > li.done:before { + border: 3px solid #333; +} +/*.card { +// box-shadow: 0px 0px 10px 0px rgba(82, 63, 105, 0.1); +// border: 1px solid #e6e4e9; +// border-radius: 8px; +//} +// +//body { +// background-color: #fefefe; +//}*/ diff --git a/web/templates/buy.html b/web/templates/buy.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link href="/css/bootstrap.min.css" rel="stylesheet"> + <link href="/css/style.css" rel="stylesheet"> <link href="/fontawesome/css/fontawesome.css" rel="stylesheet" /> <link href="/fontawesome/css/solid.css" rel="stylesheet" /> <title>Buy</title> @@ -12,17 +13,32 @@ <body> {{ template "nav.html" . }} <div class ="container"> - <div class ="text-center mt-5"> - <h1 class="mb-3">To complete the registration of <i class="text-primary">{{.label}}</i>:</h1> - - {{if .orderUnpaid}} - <a class="link-dark" href="{{.payto}}" class="btn btn-success mb-3">Pay {{.cost}} with your Taler wallet</a><br/> - Alternatively, you can pay using your mobile wallet by scanning the QR code below:<br/> - <img class="qr" src="{{.qrCode}}"/> - {{else}} - <b>Pay {{.cost}} with your Taler wallet. The order has already been claimed by your wallet. Please complete the payment now.</b> - {{end}} - <br/> + <div class="row"> + <div class="col-2"> + <ul class="timeline"> + <li class="done">Lookup</li> + <li class="inprogress">Checkout</li> + <li>Manage</li> + </ul> + </div> + <div class="col-10"> + <div class="card"> + <div class="card-body"> + <h4 class="card-title">Checkout</h4> + <hr> + <p class="card-text"> + To complete the registration of <i class="text-primary">{{.label}}</i>: + {{if .orderUnpaid}} + <a class="link-dark" href="{{.payto}}" class="btn btn-success mb-3">Pay {{.cost}} with your Taler wallet</a><br/> + Alternatively, you can pay using your mobile wallet by scanning the QR code below:<br/> + <img class="qr" src="{{.qrCode}}"/> + {{else}} + <b>Pay {{.cost}} with your Taler wallet. The order has already been claimed by your wallet. Please complete the payment now.</b> + {{end}} + </p> + </div> + </div> + </div> </div> <div class="alert alert-warning"> <h4>Important</h4> diff --git a/web/templates/edit.html b/web/templates/edit.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link href="/css/bootstrap.min.css" rel="stylesheet"> + <link href="/css/style.css" rel="stylesheet"> <link href="/fontawesome/css/fontawesome.css" rel="stylesheet" /> <link href="/fontawesome/css/solid.css" rel="stylesheet" /> <title>Edit registration</title> @@ -31,40 +32,58 @@ </div> {{end}} <div class="container pt-5"> - <h1 class="mb-5">Manage registration for <i class="text-primary">{{.label}}</i></h1> - <form action="/name/{{.label}}/edit" method="post" class="align-items-center mb-5"> - <div class="row"> - <div class="col-md-12 alert alert-light"> - <h4>Zone information</h4> - <input type="hidden" value="{{.token}}" name="token"> - {{if ne .remainingDays 0}} - <div class="form-floating mb-3"> - <input name="zkey" id="zkeyInput" class="form-control" value="{{.zkey}}" maxlength="63" type="text" placeholder="Enter your zone key here!" required autofocus> - <label for="zkeyInput">Enter your PKEY or EDKEY here</label> - </div> - <input class="btn btn-primary" type="submit" value="Update zone key"> - {{else}} - <div class="form-floating mb-3"> - <input name="zkey" id="zkeyInput" class="form-control" value="{{.zkey}}" readonly maxlength="63" type="text" placeholder="Enter your zone key here!" required autofocus> - <label for="zkeyInput">Enter your PKEY or EDKEY here</label> - </div> - {{end}} - </div> + <div class="row"> + <div class="col-2"> + <ul class="timeline"> + <li class="done">Lookup</li> + <li class="done">Checkout</li> + <li class="inprogress">Manage</li> + </ul> </div> - </form> - {{if ne .remainingDays 0}} - <div class="row mt-1"> - <div class="col-md-12 alert alert-light"> - <h4>Extension</h4> - <div class="form-floating mb-3"> - <input readonly id="expInput" class="form-control" value="{{.registeredUntil}}" type="text" required autofocus> - <label for="expInput">Registration expires in {{.remainingDays}} days:</label> + <div class="col-10"> + <div class="card"> + <div class="card-body"> + <h4 class="card-title">Manage registration</h4> + <hr> + <p class="card-text"> + Manage registration for <i class="text-primary">{{.label}}</i> + </p> + <form action="/name/{{.label}}/edit" method="post" class="align-items-center mb-5"> + <div class="row"> + <div class="col-md-12 alert alert-light"> + <input type="hidden" value="{{.token}}" name="token"> + {{if ne .remainingDays 0}} + <div class="form-floating mb-3"> + <input name="zkey" id="zkeyInput" class="form-control" value="{{.zkey}}" maxlength="63" type="text" placeholder="Enter your zone key here!" required autofocus> + <label for="zkeyInput">Enter your PKEY or EDKEY here</label> + </div> + <input class="btn btn-primary" type="submit" value="Update zone key"> + {{else}} + <div class="form-floating mb-3"> + <input name="zkey" id="zkeyInput" class="form-control" value="{{.zkey}}" readonly maxlength="63" type="text" placeholder="Enter your zone key here!" required autofocus> + <label for="zkeyInput">Enter your PKEY or EDKEY here</label> + </div> + {{end}} + </div> + </div> + </form> + {{if ne .remainingDays 0}} + <div class="row mt-1"> + <div class="col-md-12 alert alert-light"> + <h4>Extension</h4> + <div class="form-floating mb-3"> + <input readonly id="expInput" class="form-control" value="{{.registeredUntil}}" type="text" required autofocus> + <label for="expInput">Registration expires in {{.remainingDays}} days:</label> + </div> + <a class="btn btn-primary" href="/name/{{.label}}/buy">Extend registration for {{.extensionDaysCount}} days until <b>{{.extendedExpiration}}</b> for <b>{{.cost}}</b></a> + </div> + </div> + {{end}} + </div> </div> - <a class="btn btn-primary" href="/name/{{.label}}/buy">Extend registration for {{.extensionDaysCount}} days until <b>{{.extendedExpiration}}</b> for <b>{{.cost}}</b></a> </div> </div> </div> - {{end}} <hr/> <a class="btn btn-secondary" href="/">Back</a> {{ template "footer.html" . }} diff --git a/web/templates/landing.html b/web/templates/landing.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link href="/css/bootstrap.min.css" rel="stylesheet"> + <link href="/css/style.css" rel="stylesheet"> <link href="/fontawesome/css/fontawesome.css" rel="stylesheet" /> <link href="/fontawesome/css/solid.css" rel="stylesheet" /> <title>GNS Registrar</title> diff --git a/web/templates/name.html b/web/templates/name.html @@ -5,6 +5,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link href="/css/bootstrap.min.css" rel="stylesheet"> + <link href="/css/style.css" rel="stylesheet"> <link href="/fontawesome/css/fontawesome.css" rel="stylesheet" /> <link href="/fontawesome/css/solid.css" rel="stylesheet" /> <title>Name Overview</title> @@ -32,18 +33,35 @@ <div class="container pt-5"> {{if .available}} <h1 class="mb-5"><i class="text-primary">{{.label}}</i> is <span class="text-success">available</span> for registration.</h1> - <form action="/name/{{.label}}/buy" method="get" class="align-items-center"> - <div class="row"> - <div class="col-md-12 alert alert-light"> - <h4>Zone information</h4> - <div class="form-floating mb-3"> - <input name="zkey" value="{{.zkey}}" id="zkeyInput" class="form-control" maxlength="63" type="text" placeholder="Enter your zone key here!" required autofocus> - <label for="zkeyInput">Enter your zone key here</label> + <div class="row"> + <div class="col-2"> + <ul class="timeline"> + <li class="inprogress">Lookup</li> + <li>Checkout</li> + <li>Manage</li> + </ul> + </div> + <div class="col-10"> + <div class="card"> + <div class="card-body"> + <h4 class="card-title">Register</h4> + <hr> + <p class="card-text">Register your zone key</p> + <form action="/name/{{.label}}/buy" method="get" class="align-items-center"> + <div class="row"> + <div class="col-md-12"> + <div class="form-floating mb-3"> + <input name="zkey" value="{{.zkey}}" id="zkeyInput" class="form-control" maxlength="63" type="text" placeholder="Enter your zone key here!" required autofocus> + <label for="zkeyInput">Enter your zone key here</label> + </div> + <input class="btn btn-primary" type="submit" value="Register for a duration of {{.registrationDaysCount}} days for {{.cost}}"> + </div> + </div> + </form> </div> - <input class="btn btn-primary" type="submit" value="Register for a duration of {{.registrationDaysCount}} days for {{.cost}}"> </div> </div> - </form> + </div> <div class="container pt-5"> <div class="alert alert-primary" role="alert"> <h4 class="alert-heading">How do I get a zone key?</h4> @@ -58,36 +76,45 @@ <p class="mb-0"> You must have a Taler wallet installed and at least {{.cost}} in the wallet. You can get the wallet and some coins suitable for payment at this registrar <a class="link-dark" href="https://demo.taler.net" target="_blank">at the Taler Demo</a>. </p> - </div> </div> - {{else}} - {{if eq .remainingDays 0}} - <h1 class="mb-5"><i class="text-primary">{{.label}}</i> is <span class="text-body-secondary">reserved</span>!</h1> - {{else}} - <h1 class="mb-5"><i class="text-primary">{{.label}}</i> is <span class="text-danger">taken</span>!</h1> - {{end}} - <div class="row"> - <div class="col-md-12 alert alert-light"> - <h4>Zone information</h4> + </div> + </div> + {{else}} + {{if eq .remainingDays 0}} + <h1 class="mb-5"><i class="text-primary">{{.label}}</i> is <span class="text-body-secondary">reserved</span>!</h1> + {{else}} + <h1 class="mb-5"><i class="text-primary">{{.label}}</i> is <span class="text-danger">taken</span>!</h1> + {{end}} + <div class="row"> + <div class="card"> + <div class="card-body"> + <h4 class="card-title">Zone registered</h4> + <hr> + <p class="card-text">Registered zone information</p> <div class="form-floating mb-3"> <input name="zkey" id="zkeyInput" class="form-control" maxlength="63" type="text" value="{{.currentValue}}" readonly required autofocus> <label for="zkeyInput">Zone key</label> </div> </div> </div> - {{if ne .remainingDays 0}} - <div class="row"> - <div class="col-md-12 alert alert-light"> - <h4>Registration info</h4> + </div> + {{if ne .remainingDays 0}} + <div class="row"> + <div class="card"> + <div class="card-body"> + <h4 class="card-title">Zone registered</h4> + <hr> + <p class="card-text">Registered zone information</p> <div class="form-floating mb-3"> <input name="reg" id="regInput" class="form-control" type="text" value="{{.registeredUntil}}" readonly required autofocus> <label for="regInput">Registration expires in {{.remainingDays}} days:</label> </div> </div> </div> - {{end}} - {{end}} - <hr/> - <a class="btn btn-secondary" href="/">Back</a> + </div> + {{end}} + {{end}} + <hr/> + <a class="btn btn-secondary" href="/">Back</a> </div> {{ template "footer.html" . }} </body>