Host-customized fork of https://github.com/tecnovert/basicswap/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
670 lines
36 KiB
670 lines
36 KiB
{% include 'header.html' %} |
|
{% from 'style.html' import select_box_arrow_svg, select_box_class, circular_arrows_svg %} |
|
|
|
<div class="container mx-auto"> |
|
<section class="p-5 mt-5"> |
|
<div class="flex flex-wrap items-center -m-2"> |
|
<div class="w-full md:w-1/2 p-2"> |
|
<ul class="flex flex-wrap items-center gap-x-3 mb-2"> |
|
<li> |
|
<a class="flex font-medium text-xs text-coolGray-500 dark:text-gray-300 hover:text-coolGray-700" href="/"> |
|
<p>Home</p> |
|
</a> |
|
</li> |
|
<li> |
|
<svg width="6" height="15" viewBox="0 0 6 15" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|
<path d="M5.34 0.671999L2.076 14.1H0.732L3.984 0.671999H5.34Z" fill="#BBC3CF"></path> |
|
</svg> |
|
</li> |
|
<li> |
|
<a class="flex font-medium text-xs text-coolGray-500 dark:text-gray-300 hover:text-coolGray-700" href="/wallets">Wallets</a> |
|
</li> |
|
<li> |
|
<svg width="6" height="15" viewBox="0 0 6 15" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|
<path d="M5.34 0.671999L2.076 14.1H0.732L3.984 0.671999H5.34Z" fill="#BBC3CF"></path> |
|
</svg> |
|
</li> |
|
<li> |
|
<a class="flex font-medium text-xs text-coolGray-500 dark:text-gray-300 hover:text-coolGray-700" href="/wallet/{{ w.ticker }}">{{ w.ticker }}</a> |
|
</li> |
|
</ul> |
|
</div> |
|
</div> |
|
</section> |
|
<section class="py-4"> |
|
<div class="container px-4 mx-auto"> |
|
<div class="relative py-11 px-16 bg-coolGray-900 dark:bg-blue-500 rounded-md overflow-hidden"> |
|
<img class="absolute z-10 left-4 top-4" src="/static/images/elements/dots-red.svg" alt=""> |
|
<img class="absolute z-10 right-4 bottom-4" src="/static/images/elements/dots-red.svg" alt=""> |
|
<img class="absolute h-64 left-1/2 top-1/2 transform -translate-x-1/2 -translate-y-1/2 object-cover" src="/static/images/elements/wave.svg" alt=""> |
|
<div class="relative z-20 flex flex-wrap items-center -m-3"> |
|
<div class="w-full md:w-1/2 p-3"> |
|
<h2 class="text-4xl font-bold text-white tracking-tighter"> |
|
<span class="inline-block align-middle"> |
|
<img class="mr-2 h-16" src="/static/images/coins/{{ w.name }}.png" alt="{{ w.name }}"> |
|
</span>{{ w.name }} Wallet - <span id="total-usd-value"></span> |
|
</h2> |
|
<p class="font-normal text-coolGray-200 dark:text-white pl-2 pt-5">Manage your {{ w.ticker }} wallet. {% if refresh %} (Page Refresh: {{ refresh }} seconds) {% endif %}</p> |
|
</div> |
|
<div class="w-full md:w-1/2 p-3 p-6 container flex flex-wrap items-center justify-end items-center mx-auto"> |
|
<a class="w-full md:w-1/2 p-3 p-6 container flex flex-wrap items-center justify-end items-center mx-auto"> |
|
<a class="mr-5 flex flex-wrap justify-center px-5 py-3 bg-blue-500 hover:bg-blue-600 font-medium text-sm text-white border dark:bg-gray-500 dark:hover:bg-gray-700 border-blue-500 rounded-md shadow-button focus:ring-0 focus:outline-none" id="refresh" href="/wallet/{{ w.ticker }}"> |
|
{{ circular_arrows_svg }} |
|
<span>Refresh</span> |
|
</a> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</section> |
|
{% include 'inc_messages.html' %} |
|
{% if w.updating %} |
|
<section class="py-4" id="updating" role="alert"> |
|
<div class="container px-4 mx-auto"> |
|
<div class="p-6 bg-blue-100 border border-blue-200 rounded-md"> |
|
<div class="flex flex-wrap justify-between items-center -m-2"> |
|
<div class="flex-1 p-2"> |
|
<div class="flex flex-wrap -m-1"> |
|
<div class="w-auto p-1"> |
|
<svg aria-hidden="true" class="flex-shrink-0 w-5 h-5 text-blue-700 dark:text-blue-800" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> |
|
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd"></path> |
|
</svg> |
|
</svg> |
|
</div> |
|
<div class="flex-1 p-1"> |
|
<h3 class="font-medium text-sm text-blue-900">Updating...</h3> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="w-auto p-2"> |
|
<button type="button" class="ml-auto bg-blue-100 text-blue-500 rounded-lg focus:ring-0 focus:ring-blue-400 p-1.5 hover:bg-blue-200 inline-flex h-8 w-8 focus:outline-none" data-dismiss-target="#updating" aria-label="Close"> |
|
<span class="sr-only">Close</span> |
|
<svg aria-hidden="true" class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> |
|
<path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"></path> |
|
</svg> |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</section> |
|
{% endif %} |
|
{% if w.havedata %} |
|
{% if w.error %} |
|
<section class="py-4"> |
|
<div class="container px-4 mx-auto"> |
|
<div class="p-6 bg-red-100 border border-red-200 rounded-md"> |
|
<div class="flex flex-wrap justify-between items-center -m-2"> |
|
<div class="flex-1 p-2"> |
|
<div class="flex flex-wrap -m-1"> |
|
<div class="w-auto p-1"> |
|
<svg class="relative top-0.5" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|
<path d="M10.4733 5.52667C10.4114 5.46419 10.3376 5.41459 10.2564 5.38075C10.1751 5.3469 10.088 5.32947 9.99999 5.32947C9.91198 5.32947 9.82485 5.3469 9.74361 5.38075C9.66237 5.41459 9.58863 5.46419 9.52666 5.52667L7.99999 7.06001L6.47333 5.52667C6.34779 5.40114 6.17753 5.33061 5.99999 5.33061C5.82246 5.33061 5.65219 5.40114 5.52666 5.52667C5.40112 5.65221 5.3306 5.82247 5.3306 6.00001C5.3306 6.17754 5.40112 6.3478 5.52666 6.47334L7.05999 8.00001L5.52666 9.52667C5.46417 9.58865 5.41458 9.66238 5.38073 9.74362C5.34689 9.82486 5.32946 9.912 5.32946 10C5.32946 10.088 5.34689 10.1752 5.38073 10.2564C5.41458 10.3376 5.46417 10.4114 5.52666 10.4733C5.58863 10.5358 5.66237 10.5854 5.74361 10.6193C5.82485 10.6531 5.91198 10.6705 5.99999 10.6705C6.088 10.6705 6.17514 10.6531 6.25638 10.6193C6.33762 10.5854 6.41135 10.5358 6.47333 10.4733L7.99999 8.94001L9.52666 10.4733C9.58863 10.5358 9.66237 10.5854 9.74361 10.6193C9.82485 10.6531 9.91198 10.6705 9.99999 10.6705C10.088 10.6705 10.1751 10.6531 10.2564 10.6193C10.3376 10.5854 10.4114 10.5358 10.4733 10.4733C10.5358 10.4114 10.5854 10.3376 10.6193 10.2564C10.6531 10.1752 10.6705 10.088 10.6705 10C10.6705 9.912 10.6531 9.82486 10.6193 9.74362C10.5854 9.66238 10.5358 9.58865 10.4733 9.52667L8.93999 8.00001L10.4733 6.47334C10.5358 6.41137 10.5854 6.33763 10.6193 6.25639C10.6531 6.17515 10.6705 6.08802 10.6705 6.00001C10.6705 5.912 10.6531 5.82486 10.6193 5.74362C10.5854 5.66238 10.5358 5.58865 10.4733 5.52667ZM12.7133 3.28667C12.0983 2.64994 11.3627 2.14206 10.5494 1.79266C9.736 1.44327 8.8612 1.25936 7.976 1.25167C7.0908 1.24398 6.21294 1.41266 5.39363 1.74786C4.57432 2.08307 3.82998 2.57809 3.20403 3.20404C2.57807 3.82999 2.08305 4.57434 1.74785 5.39365C1.41264 6.21296 1.24396 7.09082 1.25166 7.97602C1.25935 8.86121 1.44326 9.73601 1.79265 10.5494C2.14204 11.3627 2.64992 12.0984 3.28666 12.7133C3.90164 13.3501 4.63727 13.858 5.45063 14.2074C6.26399 14.5567 7.13879 14.7407 8.02398 14.7483C8.90918 14.756 9.78704 14.5874 10.6064 14.2522C11.4257 13.9169 12.17 13.4219 12.796 12.796C13.4219 12.17 13.9169 11.4257 14.2521 10.6064C14.5873 9.78706 14.756 8.90919 14.7483 8.024C14.7406 7.1388 14.5567 6.264 14.2073 5.45064C13.8579 4.63728 13.3501 3.90165 12.7133 3.28667ZM11.7733 11.7733C10.9014 12.6463 9.75368 13.1899 8.52585 13.3115C7.29802 13.4332 6.066 13.1254 5.03967 12.4405C4.01335 11.7557 3.25623 10.7361 2.89731 9.55566C2.53838 8.37518 2.59986 7.10677 3.07127 5.96653C3.54267 4.82629 4.39484 3.88477 5.48259 3.30238C6.57033 2.71999 7.82635 2.53276 9.03666 2.77259C10.247 3.01242 11.3367 3.66447 12.1202 4.61765C12.9036 5.57083 13.3324 6.76617 13.3333 8.00001C13.3357 8.70087 13.1991 9.39524 12.9313 10.0429C12.6635 10.6906 12.2699 11.2788 11.7733 11.7733Z" fill="#EF5944"></path> |
|
</svg> |
|
</div> |
|
<div class="flex-1 p-1"> |
|
<h3 class="font-medium text-sm text-red-900 error_msg"> |
|
<p class="error_msg">Error: {{ w.error }}</p> |
|
</h3> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="w-auto p-2"> |
|
<a href="#"> |
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> |
|
<path d="M8.94004 8L13.14 3.80667C13.2656 3.68113 13.3361 3.51087 13.3361 3.33333C13.3361 3.1558 13.2656 2.98554 13.14 2.86C13.0145 2.73447 12.8442 2.66394 12.6667 2.66394C12.4892 2.66394 12.3189 2.73447 12.1934 2.86L8.00004 7.06L3.80671 2.86C3.68117 2.73447 3.51091 2.66394 3.33337 2.66394C3.15584 2.66394 2.98558 2.73447 2.86004 2.86C2.7345 2.98554 2.66398 3.1558 2.66398 3.33333C2.66398 3.51087 2.7345 3.68113 2.86004 3.80667L7.06004 8L2.86004 12.1933C2.79756 12.2553 2.74796 12.329 2.71411 12.4103C2.68027 12.4915 2.66284 12.5787 2.66284 12.6667C2.66284 12.7547 2.68027 12.8418 2.71411 12.9231C2.74796 13.0043 2.79756 13.078 2.86004 13.14C2.92202 13.2025 2.99575 13.2521 3.07699 13.2859C3.15823 13.3198 3.24537 13.3372 3.33337 13.3372C3.42138 13.3372 3.50852 13.3198 3.58976 13.2859C3.671 13.2521 3.74473 13.2025 3.80671 13.14L8.00004 8.94L12.1934 13.14C12.2554 13.2025 12.3291 13.2521 12.4103 13.2859C12.4916 13.3198 12.5787 13.3372 12.6667 13.3372C12.7547 13.3372 12.8419 13.3198 12.9231 13.2859C13.0043 13.2521 13.0781 13.2025 13.14 13.14C13.2025 13.078 13.2521 13.0043 13.286 12.9231C13.3198 12.8418 13.3372 12.7547 13.3372 12.6667C13.3372 12.5787 13.3198 12.4915 13.286 12.4103C13.2521 12.329 13.2025 12.2553 13.14 12.1933L8.94004 8Z" fill="#752C21"></path> |
|
</svg> |
|
</a> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</section> |
|
{% else %} |
|
<form method="post" autocomplete="off"> |
|
<section> |
|
<div class="pl-6 pr-6 pt-0 pb-0 mt-5 h-full overflow-hidden"> |
|
<div class="pb-6 border-coolGray-100"> |
|
<div class="flex flex-wrap items-center justify-between -m-2"> |
|
<div class="w-full pt-2"> |
|
<div class="container mt-5 mx-auto"> |
|
<div class="pt-6 pb-8 bg-coolGray-100 dark:bg-gray-500 rounded-xl"> |
|
<div class="px-6"> |
|
<div class="w-full mt-6 pb-6 overflow-x-auto"> |
|
<table class="w-full min-w-max text-sm"> |
|
<thead class="uppercase"> |
|
<tr class="text-left"> |
|
<th class="p-0"> |
|
<div class="py-3 px-6 rounded-tl-xl bg-coolGray-200 dark:bg-gray-600"> |
|
<span class="text-xs text-gray-600 dark:text-gray-300 font-semibold">Wallet</span> |
|
</div> |
|
</th> |
|
<th class="p-0"> |
|
<div class="py-3 px-6 rounded-tr-xl bg-coolGray-200 dark:bg-gray-600"> |
|
<span class="text-xs text-gray-600 dark:text-gray-300 font-semibold">Details</span> |
|
</div> |
|
</th> |
|
</tr> |
|
</thead> |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold w-96">Last updated:</td> |
|
<td class="py-3 px-6">{{ w.lastupdated }}</td> |
|
</tr> |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold">{{ w.name }} Version:</td> |
|
<td class="py-3 px-6">{{ w.version }}</td> |
|
</tr> |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold"> |
|
<span class="inline-flex align-middle items-center justify-center w-9 h-10 bg-white-50 rounded"> |
|
<img class="h-7" src="/static/images/coins/{{ w.name }}.png" alt="{{ w.name }}"> |
|
</span>Balance: |
|
</td> |
|
<td class="py-3 px-6 bold coinname-value" data-coinname="{{ w.name }}">{{ w.balance }} {{ w.ticker }} (<span class="usd-value"></span>){% if w.unconfirmed %} <span class="inline-block py-1 px-2 rounded-full bg-green-100 text-green-500 dark:bg-gray-500 dark:text-green-500">Unconfirmed: +{{ w.unconfirmed }} {{ w.ticker }}</span>{% endif %}</td> |
|
</tr> |
|
{% if w.cid == '1' %} {# PART #} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold"> |
|
<span class="inline-flex align-middle items-center justify-center w-9 h-10 bg-white-50 rounded"> |
|
<img class="h-7" src="/static/images/coins/{{ w.name }}.png" alt="{{ w.name }} Blind"> |
|
</span>Blind Balance: |
|
</td> |
|
<td class="py-3 px-6 bold coinname-value" data-coinname="{{ w.name }}">{{ w.blind_balance }} {{ w.ticker }} (<span class="usd-value"></span>) {% if w.blind_unconfirmed %} <span class="inline-block py-1 px-2 rounded-full bg-green-100 text-green-500 dark:bg-gray-500 dark:text-green-500">Unconfirmed: +{{ w.blind_unconfirmed }} {{ w.ticker }}</span>{% endif %}</td> |
|
</tr> |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold"> |
|
<span class="inline-flex align-middle items-center justify-center w-9 h-10 bg-white-50 rounded"> |
|
<img class="h-7" src="/static/images/coins/{{ w.name }}.png" alt="{{ w.name }} Anon"> |
|
</span>Anon Balance: |
|
</td> |
|
<td class="py-3 px-6 bold coinname-value" data-coinname="{{ w.name }}">{{ w.anon_balance }} {{ w.ticker }} (<span class="usd-value"></span>) {% if w.anon_pending %} <span class="inline-block py-1 px-2 rounded-full bg-green-100 text-green-500 dark:bg-gray-500 dark:text-green-500">Pending: +{{ w.anon_pending }} {{ w.ticker }}</span>{% endif %}</td> |
|
<td class="usd-value"></td> |
|
</tr> |
|
{% endif %} {# / PART #} |
|
{% if w.cid == '3' %} {# LTC #} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold"> |
|
<span class="inline-flex align-middle items-center justify-center w-9 h-10 bg-white-50 rounded"> |
|
<img class="h-7" src="/static/images/coins/{{ w.name }}.png" alt="{{ w.name }} MWEB"> |
|
</span>MWEB Balance: |
|
</td> |
|
<td class="py-3 px-6 bold coinname-value" data-coinname="{{ w.name }}">{{ w.mweb_balance }} {{ w.ticker }} (<span class="usd-value"></span>) {% if w.mweb_pending %} <span class="inline-block py-1 px-2 rounded-full bg-green-100 text-green-500 dark:bg-gray-500 dark:text-green-500">Pending: +{{ w.mweb_pending }} {{ w.ticker }}</span>{% endif %}</td> |
|
</tr> |
|
{% endif %} {# / LTC #} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold">Blocks:</td> |
|
<td class="py-3 px-6">{{ w.blocks }} {% if w.known_block_count %} / {{ w.known_block_count }} {% endif %}</td> |
|
</tr> |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold">Synced:</td> |
|
<td class="py-3 px-6">{{ w.synced }}</td> |
|
</tr> {% if w.bootstrapping %} <tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold">Bootstrapping:</td> |
|
<td class="py-3 px-6">{{ w.bootstrapping }}</td> |
|
</tr> {% endif %} {# / bootstrapping #} |
|
{% if w.encrypted %} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold">Locked:</td> |
|
<td class="py-3 px-6">{{ w.locked }}</td> |
|
</tr> |
|
{% endif %} {# / encrypted #} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold">Expected Seed:</td> |
|
<td class="py-3 px-6">{{ w.expected_seed }}</td> {% if block_unknown_seeds and w.expected_seed != true %} {# Only show addresses if wallet seed is correct #} |
|
</tr> |
|
</table> |
|
</div> |
|
</div> |
|
</section> |
|
|
|
|
|
<section> |
|
<div class="pl-6 pr-6 pt-0 pb-0 h-full overflow-hidden"> |
|
<div class="pb-6 border-coolGray-100"> |
|
<div class="flex flex-wrap items-center justify-between -m-2"> |
|
<div class="w-full pt-2"> |
|
<div class="container mt-5 mx-auto"> |
|
<div class="pt-6 pb-6 bg-coolGray-100 dark:bg-gray-500 rounded-xl"> |
|
<div class="px-6"> |
|
<div class="flex flex-wrap justify-end"> |
|
<div class="w-full md:w-auto p-1.5"> |
|
<input class="flex flex-wrap justify-center w-full px-4 py-2.5 font-medium text-sm text-white hover:text-red border border-red-500 hover:border-red-500 hover:bg-red-600 bg-red-500 rounded-md shadow-button focus:ring-0 focus:outline-none" type="submit" name="reseed_{{ w.cid }}" value="Reseed wallet" onclick="return confirmReseed();"> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</section> |
|
|
|
|
|
|
|
{% else %} |
|
</tr> |
|
{% if w.cid == '1' %} {# PART #} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold">Stealth Address</td> |
|
<td colspan=2 class="py-3 px-6 monospace bold select-all">{{ w.stealth_address }}</td> |
|
</tr> |
|
{% endif %} {# / PART #} |
|
{% if w.cid == '3' %} {# LTC #} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold"> |
|
<button type="submit" class="flex flex-wrap justify-center py-2 px-4 bg-blue-500 hover:bg-blue-600 font-medium text-sm text-white border border-blue-500 rounded-md shadow-button focus:ring-0 focus:outline-none" name="newmwebaddr_{{ w.cid }}" value="New MWEB Address"> |
|
{{ circular_arrows_svg }} New MWEB Address</button> |
|
</td> |
|
<td colspan=2 class="py-3 px-6 monospace bold select-all">{{ w.mweb_address }}</td> |
|
</tr> |
|
{% endif %} {# / LTC #} |
|
{% if w.cid == '6' %} {# XMR #} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold">Main Address</td> |
|
<td colspan=2 class="py-3 px-6 monospace bold select-all">{{ w.main_address }}</td> |
|
</tr> |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold"> |
|
<button type="submit" class="flex flex-wrap justify-center py-2 px-4 bg-blue-500 hover:bg-blue-600 font-medium text-sm text-white border border-blue-500 rounded-md shadow-button focus:ring-0 focus:outline-none" name="newaddr_{{ w.cid }}" value="New Subaddress"> |
|
{{ circular_arrows_svg }} New {{ w.ticker }} Sub Address </button> |
|
</td> |
|
<td colspan=2 class="py-3 px-6 monospace select-all">{{ w.deposit_address }}</td> |
|
</tr> |
|
{% else %} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold"> |
|
<button type="submit" class="flex flex-wrap justify-center py-2 px-4 bg-blue-500 hover:bg-blue-600 font-medium text-sm text-white border border-blue-500 rounded-md shadow-button focus:ring-0 focus:outline-none" name="newaddr_{{ w.cid }}" value="New Deposit Address"> |
|
{{ circular_arrows_svg }} New {{ w.ticker }} Deposit Address</button> |
|
</td> |
|
<td colspan=2 class="py-3 px-6 monospace bold select-all" id="deposit_address">{{ w.deposit_address }}</td> |
|
</tr> |
|
{% endif %} |
|
</table> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</section> |
|
<section class="p-6"> |
|
<div class="flex flex-wrap items-center"> |
|
<div class="w-full"> |
|
<h4 class="font-semibold text-black dark:text-white text-2xl">Withdraw</h4> |
|
</div> |
|
</div> |
|
</section> |
|
<section> |
|
<div class="pl-6 pr-6 pt-0 pb-0 h-full overflow-hidden"> |
|
<div class="pb-6 border-coolGray-100"> |
|
<div class="flex flex-wrap items-center justify-between -m-2"> |
|
<div class="w-full pt-2"> |
|
<div class="container mt-5 mx-auto"> |
|
<div class="pt-6 pb-8 bg-coolGray-100 dark:bg-gray-500 rounded-xl"> |
|
<div class="px-6"> |
|
<div class="w-full mt-6 pb-6 overflow-x-auto"> |
|
<table class="w-full min-w-max text-sm"> |
|
<thead class="uppercase"> |
|
<tr class="text-left"> |
|
<th class="p-0"> |
|
<div class="py-3 px-6 rounded-tl-xl bg-coolGray-200 dark:bg-gray-600"> |
|
<span class="text-xs text-gray-600 dark:text-gray-300 font-semibold">Options</span> |
|
</div> |
|
</th> |
|
<th class="p-0"> |
|
<div class="py-3 px-6 bg-coolGray-200 dark:bg-gray-600"> |
|
<span class="text-xs text-gray-600 dark:text-gray-300 font-semibold p-10"></span> |
|
</div> |
|
</th> |
|
<th class="p-0"> |
|
<div class="py-3 px-6 rounded-tr-xl bg-coolGray-200 dark:bg-gray-600"> |
|
<span class="text-xs text-gray-600 dark:text-gray-300 font-semibold p-10"></span> |
|
</div> |
|
</th> |
|
</tr> |
|
</thead> |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100"> |
|
<td class="py-4 pl-6 bold w-1/4"> |
|
<button type="submit" class="flex flex-wrap justify-center py-2 px-4 bg-blue-500 hover:bg-blue-600 font-medium text-sm text-white border border-blue-500 rounded-md shadow-button focus:ring-0 focus:outline-none" name="withdraw_{{ w.cid }}" value="Withdraw" onclick="return confirmWithdrawal();"> |
|
<svg class="text-gray-500 w-5 h-5 mr-2" xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24"> |
|
<g fill="#ffffff" class="nc-icon-wrapper"> |
|
<polygon data-color="color-2" points="6,10 12,17 18,10 13,10 13,1 11,1 11,10 "></polygon> |
|
<path fill="#ffffff" d="M22,21H2v-6H0v7c0,0.552,0.448,1,1,1h22c0.552,0,1-0.448,1-1v-7h-2V21z"></path> |
|
</g> |
|
</svg>Withdraw {{ w.ticker }}</button> |
|
</td> |
|
<td class="py-3 px-6"> |
|
<input placeholder="{{ w.ticker }} Address" class="hover:border-blue-500 bg-gray-50 text-gray-900 appearance-none pr-10 dark:bg-gray-500 dark:text-white border border-gray-300 dark:border-gray-400 dark:text-gray-50 dark:placeholder-gray-400 text-sm rounded-lg outline-none focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 focus:ring-0" type="text" name="to_{{ w.cid }}" value="{{ w.wd_address }}"> |
|
</td> |
|
<td class="py-3 px-6"> |
|
<input placeholder="{{ w.ticker }} Amount" class="hover:border-blue-500 bg-gray-50 text-gray-900 appearance-none pr-10 dark:bg-gray-500 dark:text-white border border-gray-300 dark:border-gray-400 dark:text-gray-50 dark:placeholder-gray-400 text-sm rounded-lg outline-none focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 focus:ring-0" type="text" name="amt_{{ w.cid }}" value="{{ w.wd_value }}"> |
|
</td> |
|
</tr> |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100"> |
|
<td class="py-3 px-6 bold">Subtract Fee:</td> |
|
<td class="py-3 px-6"> |
|
<input class="hover:border-blue-500 w-5 h-5 form-check-input text-blue-600 bg-gray-50 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-1 dark:bg-gray-500 dark:border-gray-400" type="checkbox" name="subfee_{{ w.cid }}" {% if w.wd_subfee==true %} checked=checked{% endif %}> |
|
</td> |
|
<td></td> |
|
</tr> |
|
{% if w.cid == '1' %} {# PART #} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100"> |
|
<td class="py-3 px-6 bold">Type From -> To:</td> |
|
<td class="py-3 px-6"> |
|
<div class="w-full md:flex-1"> |
|
<div class="relative"> |
|
{{ select_box_arrow_svg }} |
|
<select class="{{ select_box_class }}" name="withdraw_type_from_{{ w.cid }}"> |
|
<option value="plain" {% if w.wd_type_from=='plain' %} selected{% endif %}>Plain</option> |
|
<option value="blind" {% if w.wd_type_from=='blind' %} selected{% endif %}>Blind</option> |
|
<option value="anon" {% if w.wd_type_from=='anon' %} selected{% endif %}>Anon</option> |
|
</select> |
|
</div> |
|
</div> |
|
</td> |
|
<td class="py-3 px-6"> |
|
<div class="w-full md:flex-1"> |
|
<div class="relative"> |
|
{{ select_box_arrow_svg }} |
|
<select class="{{ select_box_class }}" name="withdraw_type_to_{{ w.cid }}"> |
|
<option value="plain" {% if w.wd_type_to=='plain' %} selected{% endif %}>Plain</option> |
|
<option value="blind" {% if w.wd_type_to=='blind' %} selected{% endif %}>Blind</option> |
|
<option value="anon" {% if w.wd_type_to=='anon' %} selected{% endif %}>Anon</option> |
|
</select> |
|
</div> |
|
</div> |
|
</td> |
|
</tr> |
|
{% endif %} {# / PART #} |
|
{% if w.cid == '3' %} {# LTC #} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100"> |
|
<td class="py-3 px-6 bold">Type From:</td> |
|
<td class="py-3 px-6"> |
|
<div class="w-full md:flex-1"> |
|
<div class="relative"> |
|
{{ select_box_arrow_svg }} |
|
<select class="{{ select_box_class }}" name="withdraw_type_from_{{ w.cid }}"> |
|
<option value="plain" {% if w.wd_type_from=='plain' %} selected{% endif %}>Plain</option> |
|
<option value="mweb" {% if w.wd_type_from=='mweb' %} selected{% endif %}>MWEB</option> |
|
</select> |
|
</div> |
|
</div> |
|
</td> |
|
</tr> |
|
{% endif %} {# / LTC #} |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100 hover:bg-coolGray-200 dark:hover:bg-gray-600"> |
|
<td class="py-3 px-6 bold">Fee Rate:</td> |
|
<td class="py-3 px-6 bold">{{ w.fee_rate }}</td> |
|
<td class="py-3 px-6"> |
|
<b>Est Fee:</b> {{ w.est_fee }} |
|
</td> |
|
</tr> |
|
</table> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</section> |
|
{% if w.cid != '6' %} {# !XMR #} |
|
{% if w.show_utxo_groups %} |
|
<section class="p-6"> |
|
<div class="flex flex-wrap items-center"> |
|
<div class="w-full"> |
|
<h4 class="font-semibold text-black dark:text-white text-2xl">UTXO Groups</h4> |
|
</div> |
|
</div> |
|
</section> |
|
<section> |
|
<div class="pl-6 pr-6 pt-0 pb-0 h-full overflow-hidden"> |
|
<div class="pb-6 border-coolGray-100"> |
|
<div class="flex flex-wrap items-center justify-between -m-2"> |
|
<div class="w-full pt-2"> |
|
<div class="container mt-5 mx-auto"> |
|
<div class="pt-6 pb-8 bg-coolGray-100 dark:bg-gray-500 rounded-xl"> |
|
<div class="px-6"> |
|
<div class="w-full mt-6 pb-6 overflow-x-auto"> |
|
<table class="w-full min-w-max text-sm"> |
|
<thead class="uppercase"> |
|
<tr class="text-left"> |
|
<th class="p-0"> |
|
<div class="py-3 px-6 rounded-tl-xl bg-coolGray-200 dark:bg-gray-600"> |
|
<span class="text-xs text-gray-600 dark:text-gray-300 font-semibold">Options</span> |
|
</div> |
|
</th> |
|
<th class="p-0"> |
|
<div class="py-3 px-6 rounded-tr-xl bg-coolGray-200 dark:bg-gray-600"> |
|
<span class="text-xs text-gray-600 dark:text-gray-300 font-semibold p-10"></span> |
|
</div> |
|
</th> |
|
</tr> |
|
</thead> |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100"> |
|
<td class="py-3 px-6 w-1/4 bold">UTXO Groups:</td> |
|
<td class="py-3 px-6"> |
|
<textarea class="hover:border-blue-500 bg-gray-50 text-gray-900 appearance-none pr-10 dark:bg-gray-500 dark:text-white border border-gray-300 dark:border-gray-400 dark:text-gray-50 dark:placeholder-gray-50 text-sm rounded-lg outline-none focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 focus:ring-0" id="tx_view" rows="10" readonly>{{ w.utxo_groups }}</textarea> |
|
</td> |
|
</tr> |
|
<tr class="opacity-100 text-gray-500 dark:text-gray-100"> |
|
<td class="py-3 px-6"> |
|
<button type="submit" class="flex flex-wrap justify-center px-4 py-2 bg-blue-500 hover:bg-blue-600 font-medium text-sm text-white border border-blue-500 rounded-md shadow-button focus:ring-0 focus:outline-none" id="create_utxo" name="create_utxo" value="Create UTXO" onclick="return confirmUTXOResize();"> |
|
<svg class="text-gray-500 w-5 h-5 mr-2" xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24"> |
|
<g stroke-linecap="round" stroke-width="2" fill="none" stroke="#ffffff" stroke-linejoin="round" class="nc-icon-wrapper"> |
|
<polyline points="1 15 1 21 23 21 23 15"></polyline> |
|
<line x1="12" y1="3" x2="12" y2="13" stroke="#ffffff"></line> |
|
<line x1="17" y1="8" x2="7" y2="8" stroke="#ffffff"></line> |
|
</g> |
|
</svg>Create UTXO</button> |
|
</td> |
|
<td class="py-3 px-6"> |
|
<input placeholder="Amount" class="hover:border-blue-500 bg-gray-50 text-gray-900 appearance-none pr-10 dark:bg-gray-500 dark:text-white border border-gray-300 dark:border-gray-400 dark:text-gray-50 dark:placeholder-gray-400 text-sm rounded-lg outline-none focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 focus:ring-0" type="text" name="utxo_value" value="{{ w.utxo_value }}"> |
|
</td> |
|
</tr> |
|
</table> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</section> |
|
<section> |
|
<div class="pl-6 pr-6 pt-0 pb-0 h-full overflow-hidden"> |
|
<div class="pb-6 border-coolGray-100"> |
|
<div class="flex flex-wrap items-center justify-between -m-2"> |
|
<div class="w-full pt-2"> |
|
<div class="container mt-5 mx-auto"> |
|
<div class="pt-6 pb-6 bg-coolGray-100 dark:bg-gray-500 rounded-xl"> |
|
<div class="px-6"> |
|
<div class="flex flex-wrap justify-end"> |
|
<div class="w-full md:w-auto p-1.5"> |
|
<button type="submit" class="flex flex-wrap justify-center px-4 py-2.5 bg-blue-500 hover:bg-blue-600 font-medium text-sm text-white border border-blue-500 rounded-md shadow-button focus:ring-0 focus:outline-none" id="closeutxogroups" name="closeutxogroups" value="Close UTXO Groups"> |
|
<svg class="text-gray-500 w-5 h-5 mr-2" xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24"> |
|
<g stroke-linecap="round" stroke-width="2" fill="none" stroke="#ffffff" stroke-linejoin="round" class="nc-icon-wrapper"> |
|
<rect x="2" y="9" width="12" height="14"></rect> |
|
<polyline points=" 6,5 18,5 18,19 " stroke="#ffffff"></polyline> |
|
<polyline points=" 10,1 22,1 22,15 " stroke="#ffffff"></polyline> |
|
</g> |
|
</svg>Close UTXO Groups</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</section> |
|
{% else %} |
|
<section> |
|
<div class="pl-6 pr-6 pt-0 pb-0 h-full overflow-hidden"> |
|
<div class="pb-6 border-coolGray-100"> |
|
<div class="flex flex-wrap items-center justify-between -m-2"> |
|
<div class="w-full pt-2"> |
|
<div class="container mt-5 mx-auto"> |
|
<div class="pt-6 pb-6 bg-coolGray-100 dark:bg-gray-500 rounded-xl"> |
|
<div class="px-6"> |
|
<div class="flex flex-wrap justify-end"> |
|
<div class="w-full md:w-auto p-1.5"> |
|
<button type="submit" class="flex flex-wrap justify-center px-4 py-2.5 bg-blue-500 hover:bg-blue-600 font-medium text-sm text-white border border-blue-500 rounded-md shadow-button focus:ring-0 focus:outline-none" id="showutxogroups" name="showutxogroups" value="Show UTXO Groups"> |
|
<svg class="text-gray-500 w-5 h-5 mr-2" xmlns="http://www.w3.org/2000/svg" height="24" width="24" viewBox="0 0 24 24"> |
|
<g stroke-linecap="round" stroke-width="2" fill="none" stroke="#ffffff" stroke-linejoin="round" class="nc-icon-wrapper"> |
|
<rect x="2" y="9" width="12" height="14"></rect> |
|
<polyline points=" 6,5 18,5 18,19 " stroke="#ffffff"></polyline> |
|
<polyline points=" 10,1 22,1 22,15 " stroke="#ffffff"></polyline> |
|
</g> |
|
</svg>Show UTXO Groups</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</section> |
|
{% endif %} |
|
{% endif %} |
|
{% endif %} |
|
{% endif %} |
|
{% endif %} |
|
<!-- havedata --> |
|
<input type="hidden" name="formid" value="{{ form_id }}"> |
|
</form> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<script> |
|
const coinNameToSymbol = { |
|
'Bitcoin': 'BTC', |
|
'Particl': 'PART', |
|
'Particl Blind': 'PART', |
|
'Particl Anon': 'PART', |
|
'Monero': 'XMR', |
|
'Litecoin': 'LTC', |
|
'Firo': 'FIRO', |
|
'Dash': 'DASH', |
|
'PIVX': 'PIVX' |
|
}; |
|
|
|
const getUsdValue = (cryptoValue, coinSymbol) => fetch(`https://min-api.cryptocompare.com/data/price?fsym=${coinSymbol}&tsyms=USD`) |
|
.then(response => response.json()) |
|
.then(data => { |
|
const exchangeRate = data.USD; |
|
if (!isNaN(exchangeRate)) { |
|
return cryptoValue * exchangeRate; |
|
} else { |
|
throw new Error(`Invalid exchange rate for ${coinSymbol}`); |
|
} |
|
}); |
|
|
|
const updateUsdValue = async (cryptoCell, coinFullName, usdValueSpan) => { |
|
console.log('updateUsdValue called with:', cryptoCell, coinFullName); |
|
const coinSymbol = coinNameToSymbol[coinFullName] || ''; |
|
if (!coinSymbol) { |
|
console.error(`Coin symbol not found for full name: ${coinFullName}`); |
|
return; |
|
} |
|
|
|
const cryptoValue = parseFloat(cryptoCell.textContent); |
|
|
|
if (!isNaN(cryptoValue) && cryptoValue !== 0) { |
|
try { |
|
const usdValue = await getUsdValue(cryptoValue, coinSymbol); |
|
console.log('usdValue:', usdValue); |
|
if (usdValueSpan) { |
|
usdValueSpan.textContent = `$${usdValue.toFixed(2)}`; |
|
} |
|
} catch (error) { |
|
console.error('Error in updateUsdValue:', error); |
|
if (usdValueSpan) { |
|
usdValueSpan.textContent = 'Error retrieving exchange rate'; |
|
} |
|
} |
|
} else { |
|
if (usdValueSpan) { |
|
usdValueSpan.textContent = `$0.00`; |
|
} |
|
} |
|
}; |
|
|
|
const calculateTotalUsdValue = async () => { |
|
const coinNameValues = document.querySelectorAll('.coinname-value'); |
|
let totalUsdValue = 0; |
|
|
|
for (const coinNameValue of coinNameValues) { |
|
const coinFullName = coinNameValue.getAttribute('data-coinname'); |
|
const cryptoValue = parseFloat(coinNameValue.textContent); |
|
const coinSymbol = coinNameToSymbol[coinFullName]; |
|
|
|
if (coinSymbol) { |
|
const usdValueSpan = coinNameValue.querySelector('.usd-value'); |
|
|
|
if (!isNaN(cryptoValue) && cryptoValue !== 0) { |
|
try { |
|
const usdValue = await getUsdValue(cryptoValue, coinSymbol); |
|
totalUsdValue += usdValue; |
|
if (usdValueSpan) { |
|
usdValueSpan.textContent = `$${usdValue.toFixed(2)}`; |
|
} |
|
} catch (error) { |
|
console.error(`Error retrieving exchange rate for ${coinFullName}`); |
|
} |
|
} else { |
|
if (usdValueSpan) { |
|
usdValueSpan.textContent = `$0.00`; |
|
} |
|
} |
|
} else { |
|
console.error(`Coin symbol not found for full name: ${coinFullName}`); |
|
} |
|
} |
|
|
|
const totalUsdValueElement = document.getElementById('total-usd-value'); |
|
if (totalUsdValueElement) { |
|
totalUsdValueElement.textContent = `$${totalUsdValue.toFixed(2)}`; |
|
} |
|
}; |
|
|
|
// Call the function to calculate the USD values and total USD value when the DOM content is loaded |
|
document.addEventListener('DOMContentLoaded', () => { |
|
const coinNameValues = document.querySelectorAll('.coinname-value'); |
|
|
|
for (const coinNameValue of coinNameValues) { |
|
const coinFullName = coinNameValue.getAttribute('data-coinname'); |
|
const usdValueSpan = coinNameValue.querySelector('.usd-value'); |
|
updateUsdValue(coinNameValue, coinFullName, usdValueSpan); |
|
} |
|
|
|
calculateTotalUsdValue(); |
|
}); |
|
|
|
</script> |
|
{% include 'footer.html' %} |
|
<script> |
|
function confirmReseed() { |
|
return confirm("Are you sure?\nBackup your wallet before and after.\nWon't detect used keys.\nShould only be used for new wallets."); |
|
} |
|
|
|
function confirmWithdrawal() { |
|
return confirm("Are you sure?"); |
|
} |
|
|
|
function confirmUTXOResize() { |
|
return confirm("Are you sure?"); |
|
} |
|
</script> |
|
</body> |
|
</html>
|
|
|