mirror of https://github.com/lukechilds/lnbits.git
12 changed files with 679 additions and 520 deletions
@ -1,2 +1,5 @@ |
|||||
prettier: |
prettier: $(shell find lnbits -name "*.js" -name ".html") |
||||
./node_modules/.bin/prettier --write lnbits/static/js/** lnbits/core/static/js/** lnbits/extensions/*/templates/** |
./node_modules/.bin/prettier --write lnbits/static/js/*.js lnbits/core/static/js/*.js lnbits/extensions/*/templates/*/*.html ./lnbits/core/templates/core/*.html lnbits/templates/*.html lnbits/extensions/*/static/js/*.js |
||||
|
|
||||
|
mypy: $(shell find lnbits -name "*.py") |
||||
|
mypy lnbits |
||||
|
@ -1,42 +1,55 @@ |
|||||
{% extends "base.html" %} |
{% extends "base.html" %} {% from "macros.jinja" import window_vars with context |
||||
|
%} {% block scripts %} {{ window_vars(user) }} {% assets filters='rjsmin', |
||||
{% from "macros.jinja" import window_vars with context %} |
output='__bundle__/core/extensions.js', 'core/js/extensions.js' %} |
||||
|
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
||||
|
{% endassets %} {% endblock %} {% block page %} |
||||
{% block scripts %} |
<div class="row q-col-gutter-md"> |
||||
{{ window_vars(user) }} |
<div |
||||
{% assets filters='rjsmin', output='__bundle__/core/extensions.js', |
class="col-6 col-md-4 col-lg-3" |
||||
'core/js/extensions.js' %} |
v-for="extension in g.extensions" |
||||
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
:key="extension.code" |
||||
{% endassets %} |
> |
||||
{% endblock %} |
<q-card> |
||||
|
<q-card-section> |
||||
{% block page %} |
<q-icon |
||||
<div class="row q-col-gutter-md"> |
:name="extension.icon" |
||||
<div class="col-6 col-md-4 col-lg-3" v-for="extension in g.extensions" :key="extension.code"> |
color="grey-5" |
||||
<q-card> |
style="font-size: 4rem;" |
||||
<q-card-section> |
></q-icon> |
||||
<q-icon :name="extension.icon" color="grey-5" style="font-size: 4rem;"></q-icon> |
{% raw %} |
||||
{% raw %} |
<h5 class="q-mt-lg q-mb-xs">{{ extension.name }}</h5> |
||||
<h5 class="q-mt-lg q-mb-xs">{{ extension.name }}</h5> |
{{ extension.shortDescription }} {% endraw %} |
||||
{{ extension.shortDescription }} |
</q-card-section> |
||||
{% endraw %} |
<q-separator></q-separator> |
||||
</q-card-section> |
<q-card-actions> |
||||
<q-separator></q-separator> |
<div v-if="extension.isEnabled"> |
||||
<q-card-actions> |
<q-btn |
||||
<div v-if="extension.isEnabled"> |
flat |
||||
<q-btn flat color="deep-purple" |
color="deep-purple" |
||||
type="a" :href="[extension.url, '?usr=', g.user.id].join('')">Open</q-btn> |
type="a" |
||||
<q-btn flat color="grey-5" |
:href="[extension.url, '?usr=', g.user.id].join('')" |
||||
type="a" |
>Open</q-btn |
||||
:href="['{{ url_for('core.extensions') }}', '?usr=', g.user.id, '&disable=', extension.code].join('')"> Disable</q-btn> |
> |
||||
</div> |
<q-btn |
||||
<q-btn v-else flat color="deep-purple" |
flat |
||||
|
color="grey-5" |
||||
type="a" |
type="a" |
||||
:href="['{{ url_for('core.extensions') }}', '?usr=', g.user.id, '&enable=', extension.code].join('')"> |
:href="['{{ url_for('core.extensions') }}', '?usr=', g.user.id, '&disable=', extension.code].join('')" |
||||
Enable</q-btn> |
> |
||||
</q-card-actions> |
Disable</q-btn |
||||
</q-card> |
> |
||||
</div> |
</div> |
||||
|
<q-btn |
||||
|
v-else |
||||
|
flat |
||||
|
color="deep-purple" |
||||
|
type="a" |
||||
|
:href="['{{ url_for('core.extensions') }}', '?usr=', g.user.id, '&enable=', extension.code].join('')" |
||||
|
> |
||||
|
Enable</q-btn |
||||
|
> |
||||
|
</q-card-actions> |
||||
|
</q-card> |
||||
</div> |
</div> |
||||
|
</div> |
||||
{% endblock %} |
{% endblock %} |
||||
|
@ -1,72 +1,111 @@ |
|||||
{% extends "public.html" %} |
{% extends "public.html" %} {% block scripts %} {% assets filters='rjsmin', |
||||
|
output='__bundle__/core/index.js', 'core/js/index.js' %} |
||||
|
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
||||
|
{% endassets %} {% endblock %} {% block page %} |
||||
|
<div class="row q-col-gutter-md justify-center"> |
||||
|
<div class="col-12 col-md-7 col-lg-6 q-gutter-y-md"> |
||||
|
<q-card> |
||||
|
<q-card-section> |
||||
|
{% if lnurl %} |
||||
|
<q-btn |
||||
|
unelevated |
||||
|
color="deep-purple" |
||||
|
@click="processing" |
||||
|
type="a" |
||||
|
href="{{ url_for('core.lnurlwallet', lightning=lnurl) }}" |
||||
|
> |
||||
|
Press to claim bitcoin |
||||
|
</q-btn> |
||||
|
{% else %} |
||||
|
<q-form @submit="createWallet" class="q-gutter-md"> |
||||
|
<q-input |
||||
|
filled |
||||
|
dense |
||||
|
v-model="walletName" |
||||
|
label="Name your LNbits wallet *" |
||||
|
></q-input> |
||||
|
<q-btn |
||||
|
unelevated |
||||
|
color="deep-purple" |
||||
|
:disable="walletName == ''" |
||||
|
type="submit" |
||||
|
>Add a new wallet</q-btn |
||||
|
> |
||||
|
</q-form> |
||||
|
{% endif %} |
||||
|
</q-card-section> |
||||
|
</q-card> |
||||
|
|
||||
|
<q-card> |
||||
{% block scripts %} |
<q-card-section> |
||||
{% assets filters='rjsmin', output='__bundle__/core/index.js', |
<h3 class="q-my-none"><strong>LN</strong>bits</h3> |
||||
'core/js/index.js' %} |
<h5 class="q-my-md">Free and open-source lightning wallet</h5> |
||||
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
<p> |
||||
{% endassets %} |
Easy to set up and lightweight, LNbits can run on any |
||||
{% endblock %} |
lightning-network funding source, currently supporting LND, |
||||
|
c-lightning, OpenNode, lntxbot, LNPay and even LNbits itself! |
||||
{% block page %} |
</p> |
||||
<div class="row q-col-gutter-md justify-center"> |
<p> |
||||
<div class="col-12 col-md-7 col-lg-6 q-gutter-y-md"> |
You can run LNbits for yourself, or easily offer a custodian solution |
||||
|
for others. |
||||
<q-card> |
</p> |
||||
<q-card-section> |
<p> |
||||
{% if lnurl %} |
Each wallet has its own API keys and there is no limit to the number |
||||
<q-btn unelevated |
of wallets you can make. Being able to partition funds makes LNbits a |
||||
color="deep-purple" |
useful tool for money management and as a development tool. |
||||
@click="processing" |
</p> |
||||
type="a" href="{{ url_for('core.lnurlwallet', lightning=lnurl) }}"> |
<p> |
||||
Press to claim bitcoin |
Extensions add extra functionality to LNbits so you can experiment |
||||
</q-btn> |
with a range of cutting-edge technologies on the lightning network. We |
||||
{% else %} |
have made developing extensions as easy as possible, and as a free and |
||||
<q-form @submit="createWallet" class="q-gutter-md"> |
open-source project, we encourage people to develop and submit their |
||||
<q-input filled dense |
own. |
||||
v-model="walletName" |
</p> |
||||
label="Name your LNbits wallet *" |
<div class="row q-mt-md q-gutter-sm"> |
||||
></q-input> |
<q-btn |
||||
<q-btn unelevated |
outline |
||||
color="deep-purple" |
color="grey" |
||||
:disable="walletName == ''" |
type="a" |
||||
type="submit">Add a new wallet</q-btn> |
href="https://github.com/lnbits/lnbits" |
||||
</q-form> |
target="_blank" |
||||
{% endif %} |
rel="noopener" |
||||
</q-card-section> |
>View project in GitHub</q-btn |
||||
</q-card> |
> |
||||
|
<q-btn |
||||
<q-card> |
outline |
||||
<q-card-section> |
color="grey" |
||||
<h3 class="q-my-none"><strong>LN</strong>bits</h3> |
type="a" |
||||
<h5 class="q-my-md">Free and open-source lightning wallet</h5> |
href="https://lnbits.com/paywall/GAqKguK5S8f6w5VNjS9DfK" |
||||
<p>Easy to set up and lightweight, LNbits can run on any lightning-network funding source, currently supporting LND, c-lightning, OpenNode, lntxbot, LNPay and even LNbits itself!</p> |
target="_blank" |
||||
<p>You can run LNbits for yourself, or easily offer a custodian solution for others.</p> |
rel="noopener" |
||||
<p>Each wallet has its own API keys and there is no limit to the number of wallets you can make. Being able to partition funds makes LNbits a useful tool for money management and as a development tool.</p> |
>Donate</q-btn |
||||
<p>Extensions add extra functionality to LNbits so you can experiment with a range of cutting-edge technologies on the lightning network. We have made developing extensions as easy as possible, and as a free and open-source project, we encourage people to develop and submit their own.</p> |
> |
||||
<div class="row q-mt-md q-gutter-sm"> |
|
||||
<q-btn outline |
|
||||
color="grey" |
|
||||
type="a" href="https://github.com/lnbits/lnbits" target="_blank" rel="noopener">View project in GitHub</q-btn> |
|
||||
<q-btn outline |
|
||||
color="grey" |
|
||||
type="a" href="https://lnbits.com/paywall/GAqKguK5S8f6w5VNjS9DfK" target="_blank" rel="noopener">Donate</q-btn> |
|
||||
</div> |
|
||||
</q-card-section> |
|
||||
</q-card> |
|
||||
|
|
||||
</div> |
|
||||
|
|
||||
<!-- Ads --> |
|
||||
<div class="col-12 col-md-3 col-lg-3"> |
|
||||
<div class="row q-col-gutter-lg justify-center"> |
|
||||
<div class="col-6 col-sm-4 col-md-8 q-gutter-y-sm"> |
|
||||
<q-btn flat color="purple" label="Supporters" type="a" href="mailto:lnbits@pm.me" class="full-width"></q-btn> |
|
||||
<a href="https://github.com/rootzoll/raspiblitz"> |
|
||||
<q-img contain :src="($q.dark.isActive) ? '{{ url_for('static', filename='images/raspiblitz-negative.svg') }}' : '{{ url_for('static', filename='images/raspiblitz.svg') }}'" style="height: 90px;"></q-img> |
|
||||
</a> |
|
||||
</div> |
</div> |
||||
|
</q-card-section> |
||||
|
</q-card> |
||||
|
</div> |
||||
|
|
||||
|
<!-- Ads --> |
||||
|
<div class="col-12 col-md-3 col-lg-3"> |
||||
|
<div class="row q-col-gutter-lg justify-center"> |
||||
|
<div class="col-6 col-sm-4 col-md-8 q-gutter-y-sm"> |
||||
|
<q-btn |
||||
|
flat |
||||
|
color="purple" |
||||
|
label="Supporters" |
||||
|
type="a" |
||||
|
href="mailto:lnbits@pm.me" |
||||
|
class="full-width" |
||||
|
></q-btn> |
||||
|
<a href="https://github.com/rootzoll/raspiblitz"> |
||||
|
<q-img |
||||
|
contain |
||||
|
:src="($q.dark.isActive) ? '{{ url_for('static', filename='images/raspiblitz-negative.svg') }}' : '{{ url_for('static', filename='images/raspiblitz.svg') }}'" |
||||
|
style="height: 90px;" |
||||
|
></q-img> |
||||
|
</a> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
|
</div> |
||||
{% endblock %} |
{% endblock %} |
||||
|
@ -1,259 +1,345 @@ |
|||||
{% extends "base.html" %} |
{% extends "base.html" %} {% from "macros.jinja" import window_vars with context |
||||
|
%} {% block styles %} |
||||
{% from "macros.jinja" import window_vars with context %} |
<link |
||||
|
rel="stylesheet" |
||||
|
type="text/css" |
||||
{% block styles %} |
href="{{ url_for('static', filename='vendor/vue-qrcode-reader@2.2.0/vue-qrcode-reader.min.css') }}" |
||||
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='vendor/vue-qrcode-reader@2.2.0/vue-qrcode-reader.min.css') }}"> |
/> |
||||
{% endblock %} |
{% endblock %} {% block scripts %} {{ window_vars(user, wallet) }} |
||||
|
<script src="{{ url_for('static', filename='vendor/vue-qrcode@1.0.2/vue-qrcode.min.js') }}"></script> |
||||
{% block scripts %} |
{% assets filters='rjsmin', output='__bundle__/core/chart.js', |
||||
{{ window_vars(user, wallet) }} |
'vendor/moment@2.25.1/moment.min.js', 'vendor/chart.js@2.9.3/chart.min.js' %} |
||||
<script src="{{ url_for('static', filename='vendor/vue-qrcode@1.0.2/vue-qrcode.min.js') }}"></script> |
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
||||
{% assets filters='rjsmin', output='__bundle__/core/chart.js', |
{% endassets %} {% assets filters='rjsmin', output='__bundle__/core/wallet.js', |
||||
'vendor/moment@2.25.1/moment.min.js', |
'vendor/bolt11/utils.js', 'vendor/bolt11/decoder.js', |
||||
'vendor/chart.js@2.9.3/chart.min.js' %} |
'vendor/vue-qrcode-reader@2.2.0/vue-qrcode-reader.min.js', 'core/js/wallet.js' |
||||
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
%} |
||||
{% endassets %} |
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
||||
{% assets filters='rjsmin', output='__bundle__/core/wallet.js', |
{% endassets %} {% endblock %} {% block page %} |
||||
'vendor/bolt11/utils.js', |
<div class="row q-col-gutter-md"> |
||||
'vendor/bolt11/decoder.js', |
<div class="col-12 col-md-7 q-gutter-y-md"> |
||||
'vendor/vue-qrcode-reader@2.2.0/vue-qrcode-reader.min.js', |
<q-card> |
||||
'core/js/wallet.js' %} |
<q-card-section> |
||||
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
<h3 class="q-my-none"> |
||||
{% endassets %} |
<strong>{% raw %}{{ fbalance }}{% endraw %}</strong> sat |
||||
{% endblock %} |
</h3> |
||||
|
</q-card-section> |
||||
|
<div class="row q-pb-md q-px-md q-col-gutter-md"> |
||||
|
<div class="col"> |
||||
|
<q-btn |
||||
|
unelevated |
||||
|
color="purple" |
||||
|
class="full-width" |
||||
|
@click="showSendDialog" |
||||
|
>Send</q-btn |
||||
|
> |
||||
|
</div> |
||||
|
<div class="col"> |
||||
|
<q-btn |
||||
|
unelevated |
||||
|
color="deep-purple" |
||||
|
class="full-width" |
||||
|
@click="showReceiveDialog" |
||||
|
>Receive</q-btn |
||||
|
> |
||||
|
</div> |
||||
|
</div> |
||||
|
</q-card> |
||||
|
|
||||
{% block page %} |
<q-card> |
||||
<div class="row q-col-gutter-md"> |
<q-card-section> |
||||
<div class="col-12 col-md-7 q-gutter-y-md"> |
<div class="row items-center no-wrap q-mb-sm"> |
||||
<q-card> |
|
||||
<q-card-section> |
|
||||
<h3 class="q-my-none"><strong>{% raw %}{{ fbalance }}{% endraw %}</strong> sat</h3> |
|
||||
</q-card-section> |
|
||||
<div class="row q-pb-md q-px-md q-col-gutter-md"> |
|
||||
<div class="col"> |
|
||||
<q-btn unelevated |
|
||||
color="purple" |
|
||||
class="full-width" |
|
||||
@click="showSendDialog">Send</q-btn> |
|
||||
</div> |
|
||||
<div class="col"> |
<div class="col"> |
||||
<q-btn unelevated |
<h5 class="text-subtitle1 q-my-none">Transactions</h5> |
||||
color="deep-purple" |
|
||||
class="full-width" |
|
||||
@click="showReceiveDialog">Receive</q-btn> |
|
||||
</div> |
</div> |
||||
</div> |
<div class="col-auto"> |
||||
</q-card> |
<q-btn flat color="grey" @click="exportCSV">Export to CSV</q-btn> |
||||
|
<!--<q-btn v-if="pendingPaymentsExist" dense flat round icon="update" color="grey" @click="checkPendingPayments"> |
||||
<q-card> |
|
||||
<q-card-section> |
|
||||
<div class="row items-center no-wrap q-mb-sm"> |
|
||||
<div class="col"> |
|
||||
<h5 class="text-subtitle1 q-my-none">Transactions</h5> |
|
||||
</div> |
|
||||
<div class="col-auto"> |
|
||||
<q-btn flat color="grey" @click="exportCSV">Export to CSV</q-btn> |
|
||||
<!--<q-btn v-if="pendingPaymentsExist" dense flat round icon="update" color="grey" @click="checkPendingPayments"> |
|
||||
<q-tooltip>Check pending</q-tooltip> |
<q-tooltip>Check pending</q-tooltip> |
||||
</q-btn>--> |
</q-btn>--> |
||||
<q-btn dense flat round icon="show_chart" color="grey" @click="showChart"> |
<q-btn |
||||
<q-tooltip>Show chart</q-tooltip> |
dense |
||||
</q-btn> |
flat |
||||
</div> |
round |
||||
|
icon="show_chart" |
||||
|
color="grey" |
||||
|
@click="showChart" |
||||
|
> |
||||
|
<q-tooltip>Show chart</q-tooltip> |
||||
|
</q-btn> |
||||
</div> |
</div> |
||||
<q-input v-if="payments.length > 10" filled dense clearable |
</div> |
||||
v-model="paymentsTable.filter" |
<q-input |
||||
debounce="300" placeholder="Search by memo, amount" class="q-mb-md"> |
v-if="payments.length > 10" |
||||
</q-input> |
filled |
||||
<q-table dense flat |
dense |
||||
:data="filteredPayments" |
clearable |
||||
row-key="payhash" |
v-model="paymentsTable.filter" |
||||
:columns="paymentsTable.columns" |
debounce="300" |
||||
:pagination.sync="paymentsTable.pagination"> |
placeholder="Search by memo, amount" |
||||
{% raw %} |
class="q-mb-md" |
||||
<template v-slot:header="props"> |
> |
||||
<q-tr :props="props"> |
</q-input> |
||||
<q-th auto-width></q-th> |
<q-table |
||||
<q-th |
dense |
||||
v-for="col in props.cols" |
flat |
||||
:key="col.name" |
:data="filteredPayments" |
||||
:props="props">{{ col.label }}</q-th> |
row-key="payhash" |
||||
</q-tr> |
:columns="paymentsTable.columns" |
||||
</template> |
:pagination.sync="paymentsTable.pagination" |
||||
<template v-slot:body="props"> |
> |
||||
<q-tr :props="props"> |
{% raw %} |
||||
<q-td auto-width class="lnbits__q-table__icon-td"> |
<template v-slot:header="props"> |
||||
<q-icon v-if="props.row.isPaid" size="14px" |
<q-tr :props="props"> |
||||
:name="(props.row.sat < 0) ? 'call_made' : 'call_received'" |
<q-th auto-width></q-th> |
||||
:color="(props.row.sat < 0) ? 'pink' : 'green'"></q-icon> |
<q-th v-for="col in props.cols" :key="col.name" :props="props" |
||||
<q-icon v-else name="settings_ethernet" color="grey"> |
>{{ col.label }}</q-th |
||||
<q-tooltip>Pending</q-tooltip> |
> |
||||
</q-icon> |
</q-tr> |
||||
</q-td> |
</template> |
||||
<q-td key="memo" :props="props"> |
<template v-slot:body="props"> |
||||
{{ props.row.memo }} |
<q-tr :props="props"> |
||||
</q-td> |
<q-td auto-width class="lnbits__q-table__icon-td"> |
||||
<q-td auto-width key="date" :props="props"> |
<q-icon |
||||
{{ props.row.date }} |
v-if="props.row.isPaid" |
||||
</q-td> |
size="14px" |
||||
<q-td auto-width key="sat" :props="props"> |
:name="(props.row.sat < 0) ? 'call_made' : 'call_received'" |
||||
{{ props.row.fsat }} |
:color="(props.row.sat < 0) ? 'pink' : 'green'" |
||||
</q-td> |
></q-icon> |
||||
</q-tr> |
<q-icon v-else name="settings_ethernet" color="grey"> |
||||
</template> |
<q-tooltip>Pending</q-tooltip> |
||||
{% endraw %} |
</q-icon> |
||||
</q-table> |
</q-td> |
||||
</q-card-section> |
<q-td key="memo" :props="props"> |
||||
</q-card> |
{{ props.row.memo }} |
||||
</div> |
</q-td> |
||||
|
<q-td auto-width key="date" :props="props"> |
||||
|
{{ props.row.date }} |
||||
|
</q-td> |
||||
|
<q-td auto-width key="sat" :props="props"> |
||||
|
{{ props.row.fsat }} |
||||
|
</q-td> |
||||
|
</q-tr> |
||||
|
</template> |
||||
|
{% endraw %} |
||||
|
</q-table> |
||||
|
</q-card-section> |
||||
|
</q-card> |
||||
|
</div> |
||||
|
|
||||
<div class="col-12 col-md-5 q-gutter-y-md"> |
<div class="col-12 col-md-5 q-gutter-y-md"> |
||||
<q-card> |
<q-card> |
||||
<q-card-section> |
<q-card-section> |
||||
<q-btn flat color="grey" @click="exportCSV" class="float-right">Renew keys</q-btn> |
<q-btn flat color="grey" @click="exportCSV" class="float-right" |
||||
<h6 class="text-subtitle1 q-mt-none q-mb-sm">LNbits wallet</h6> |
>Renew keys</q-btn |
||||
<strong>Wallet name: </strong><em>{{ wallet.name }}</em><br> |
> |
||||
<strong>Wallet ID: </strong><em>{{ wallet.id }}</em><br> |
<h6 class="text-subtitle1 q-mt-none q-mb-sm">LNbits wallet</h6> |
||||
<strong>Admin key: </strong><em>{{ wallet.adminkey }}</em><br> |
<strong>Wallet name: </strong><em>{{ wallet.name }}</em><br /> |
||||
<strong>Invoice/read key: </strong><em>{{ wallet.inkey }}</em> |
<strong>Wallet ID: </strong><em>{{ wallet.id }}</em><br /> |
||||
</q-card-section> |
<strong>Admin key: </strong><em>{{ wallet.adminkey }}</em><br /> |
||||
<q-card-section class="q-pa-none"> |
<strong>Invoice/read key: </strong><em>{{ wallet.inkey }}</em> |
||||
|
</q-card-section> |
||||
|
<q-card-section class="q-pa-none"> |
||||
|
<q-separator></q-separator> |
||||
|
<q-list> |
||||
|
{% include "core/_api_docs.html" %} |
||||
<q-separator></q-separator> |
<q-separator></q-separator> |
||||
<q-list> |
<q-expansion-item |
||||
{% include "core/_api_docs.html" %} |
group="extras" |
||||
<q-separator></q-separator> |
icon="remove_circle" |
||||
<q-expansion-item |
label="Delete wallet" |
||||
group="extras" |
> |
||||
icon="remove_circle" |
<q-card> |
||||
label="Delete wallet"> |
<q-card-section> |
||||
<q-card> |
<p> |
||||
<q-card-section> |
This whole wallet will be deleted, the funds will be |
||||
<p>This whole wallet will be deleted, the funds will be <strong>UNRECOVERABLE</strong>.</p> |
<strong>UNRECOVERABLE</strong>. |
||||
<q-btn unelevated |
</p> |
||||
color="red-10" |
<q-btn |
||||
@click="deleteWallet('{{ wallet.id }}', '{{ user.id }}')">Delete wallet</q-btn> |
unelevated |
||||
</q-card-section> |
color="red-10" |
||||
</q-card> |
@click="deleteWallet('{{ wallet.id }}', '{{ user.id }}')" |
||||
</q-expansion-item> |
>Delete wallet</q-btn |
||||
</q-list> |
> |
||||
</q-card-section> |
</q-card-section> |
||||
</q-card> |
</q-card> |
||||
</div> |
</q-expansion-item> |
||||
|
</q-list> |
||||
|
</q-card-section> |
||||
|
</q-card> |
||||
</div> |
</div> |
||||
|
</div> |
||||
|
|
||||
<q-dialog v-model="receive.show" position="top" @hide="closeReceiveDialog"> |
<q-dialog v-model="receive.show" position="top" @hide="closeReceiveDialog"> |
||||
<q-card v-if="!receive.paymentReq" class="q-pa-lg q-pt-xl lnbits__dialog-card"> |
<q-card |
||||
<q-form @submit="createInvoice" class="q-gutter-md"> |
v-if="!receive.paymentReq" |
||||
<q-input filled dense |
class="q-pa-lg q-pt-xl lnbits__dialog-card" |
||||
v-model.number="receive.data.amount" |
> |
||||
type="number" |
<q-form @submit="createInvoice" class="q-gutter-md"> |
||||
label="Amount (sat) *"></q-input> |
<q-input |
||||
<q-input filled dense |
filled |
||||
v-model.trim="receive.data.memo" |
dense |
||||
label="Memo" |
v-model.number="receive.data.amount" |
||||
placeholder="LNbits invoice"></q-input> |
type="number" |
||||
<div v-if="receive.status == 'pending'" class="row q-mt-lg"> |
label="Amount (sat) *" |
||||
<q-btn unelevated |
></q-input> |
||||
color="deep-purple" |
<q-input |
||||
:disable="receive.data.amount == null || receive.data.amount <= 0" |
filled |
||||
type="submit">Create invoice</q-btn> |
dense |
||||
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Cancel</q-btn> |
v-model.trim="receive.data.memo" |
||||
</div> |
label="Memo" |
||||
<q-spinner v-if="receive.status == 'loading'" color="deep-purple" size="2.55em"></q-spinner> |
placeholder="LNbits invoice" |
||||
</q-form> |
></q-input> |
||||
</q-card> |
<div v-if="receive.status == 'pending'" class="row q-mt-lg"> |
||||
<q-card v-else class="q-pa-lg q-pt-xl lnbits__dialog-card"> |
<q-btn |
||||
<div class="text-center q-mb-lg"> |
unelevated |
||||
<a :href="'lightning:' + receive.paymentReq"> |
color="deep-purple" |
||||
<q-responsive :ratio="1" class="q-mx-xl"> |
:disable="receive.data.amount == null || receive.data.amount <= 0" |
||||
<qrcode :value="receive.paymentReq" :options="{width: 340}" class="rounded-borders"></qrcode> |
type="submit" |
||||
</q-responsive> |
>Create invoice</q-btn |
||||
</a> |
> |
||||
</div> |
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Cancel</q-btn> |
||||
<div class="row q-mt-lg"> |
|
||||
<q-btn outline color="grey" @click="copyText(receive.paymentReq)">Copy invoice</q-btn> |
|
||||
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Close</q-btn> |
|
||||
</div> |
</div> |
||||
</q-card> |
<q-spinner |
||||
</q-dialog> |
v-if="receive.status == 'loading'" |
||||
|
color="deep-purple" |
||||
|
size="2.55em" |
||||
|
></q-spinner> |
||||
|
</q-form> |
||||
|
</q-card> |
||||
|
<q-card v-else class="q-pa-lg q-pt-xl lnbits__dialog-card"> |
||||
|
<div class="text-center q-mb-lg"> |
||||
|
<a :href="'lightning:' + receive.paymentReq"> |
||||
|
<q-responsive :ratio="1" class="q-mx-xl"> |
||||
|
<qrcode |
||||
|
:value="receive.paymentReq" |
||||
|
:options="{width: 340}" |
||||
|
class="rounded-borders" |
||||
|
></qrcode> |
||||
|
</q-responsive> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="row q-mt-lg"> |
||||
|
<q-btn outline color="grey" @click="copyText(receive.paymentReq)" |
||||
|
>Copy invoice</q-btn |
||||
|
> |
||||
|
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Close</q-btn> |
||||
|
</div> |
||||
|
</q-card> |
||||
|
</q-dialog> |
||||
|
|
||||
<q-dialog v-model="send.show" position="top" @hide="closeSendDialog"> |
<q-dialog v-model="send.show" position="top" @hide="closeSendDialog"> |
||||
<q-card class="q-pa-lg q-pt-xl lnbits__dialog-card"> |
<q-card class="q-pa-lg q-pt-xl lnbits__dialog-card"> |
||||
<div v-if="!send.invoice"> |
<div v-if="!send.invoice"> |
||||
<q-form v-if="!sendCamera.show" @submit="decodeInvoice" class="q-gutter-md"> |
<q-form |
||||
<q-input filled dense |
v-if="!sendCamera.show" |
||||
v-model.trim="send.data.bolt11" |
@submit="decodeInvoice" |
||||
type="textarea" |
class="q-gutter-md" |
||||
label="Paste an invoice *"> |
> |
||||
<template v-slot:after> |
<q-input |
||||
<q-btn round dense flat icon="photo_camera" @click="showCamera"> |
filled |
||||
<q-tooltip>Use camera to scan an invoice</q-tooltip> |
dense |
||||
</q-btn> |
v-model.trim="send.data.bolt11" |
||||
</template> |
type="textarea" |
||||
</q-input> |
label="Paste an invoice *" |
||||
<div class="row q-mt-lg"> |
> |
||||
<q-btn unelevated |
<template v-slot:after> |
||||
color="deep-purple" |
<q-btn round dense flat icon="photo_camera" @click="showCamera"> |
||||
:disable="send.data.bolt11 == ''" |
<q-tooltip>Use camera to scan an invoice</q-tooltip> |
||||
type="submit">Read invoice</q-btn> |
</q-btn> |
||||
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Cancel</q-btn> |
</template> |
||||
</div> |
</q-input> |
||||
</q-form> |
<div class="row q-mt-lg"> |
||||
<div v-else> |
<q-btn |
||||
<q-responsive :ratio="1"> |
unelevated |
||||
<qrcode-stream @decode="decodeQR" class="rounded-borders"></qrcode-stream> |
|
||||
</q-responsive> |
|
||||
<div class="row q-mt-lg"> |
|
||||
<q-btn @click="closeCamera" flat color="grey" class="q-ml-auto">Cancel</q-btn> |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
<div v-else> |
|
||||
{% raw %} |
|
||||
<h6 class="q-my-none">{{ send.invoice.fsat }} sat</h6> |
|
||||
<q-separator class="q-my-sm"></q-separator> |
|
||||
<p style="word-break: break-all"> |
|
||||
<strong>Memo:</strong> {{ send.invoice.description }}<br> |
|
||||
<strong>Expire date:</strong> {{ send.invoice.expireDate }}<br> |
|
||||
<strong>Hash:</strong> {{ send.invoice.hash }} |
|
||||
</p> |
|
||||
{% endraw %} |
|
||||
<div v-if="canPay" class="row q-mt-lg"> |
|
||||
<q-btn unelevated |
|
||||
color="deep-purple" |
color="deep-purple" |
||||
@click="payInvoice">Send satoshis</q-btn> |
:disable="send.data.bolt11 == ''" |
||||
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Cancel</q-btn> |
type="submit" |
||||
|
>Read invoice</q-btn |
||||
|
> |
||||
|
<q-btn v-close-popup flat color="grey" class="q-ml-auto" |
||||
|
>Cancel</q-btn |
||||
|
> |
||||
</div> |
</div> |
||||
<div v-else class="row q-mt-lg"> |
</q-form> |
||||
<q-btn unelevated disabled color="yellow" text-color="black">Not enough funds!</q-btn> |
<div v-else> |
||||
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Cancel</q-btn> |
<q-responsive :ratio="1"> |
||||
|
<qrcode-stream |
||||
|
@decode="decodeQR" |
||||
|
class="rounded-borders" |
||||
|
></qrcode-stream> |
||||
|
</q-responsive> |
||||
|
<div class="row q-mt-lg"> |
||||
|
<q-btn @click="closeCamera" flat color="grey" class="q-ml-auto" |
||||
|
>Cancel</q-btn |
||||
|
> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
</q-card> |
</div> |
||||
</q-dialog> |
<div v-else> |
||||
|
{% raw %} |
||||
|
<h6 class="q-my-none">{{ send.invoice.fsat }} sat</h6> |
||||
|
<q-separator class="q-my-sm"></q-separator> |
||||
|
<p style="word-break: break-all;"> |
||||
|
<strong>Memo:</strong> {{ send.invoice.description }}<br /> |
||||
|
<strong>Expire date:</strong> {{ send.invoice.expireDate }}<br /> |
||||
|
<strong>Hash:</strong> {{ send.invoice.hash }} |
||||
|
</p> |
||||
|
{% endraw %} |
||||
|
<div v-if="canPay" class="row q-mt-lg"> |
||||
|
<q-btn unelevated color="deep-purple" @click="payInvoice" |
||||
|
>Send satoshis</q-btn |
||||
|
> |
||||
|
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Cancel</q-btn> |
||||
|
</div> |
||||
|
<div v-else class="row q-mt-lg"> |
||||
|
<q-btn unelevated disabled color="yellow" text-color="black" |
||||
|
>Not enough funds!</q-btn |
||||
|
> |
||||
|
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Cancel</q-btn> |
||||
|
</div> |
||||
|
</div> |
||||
|
</q-card> |
||||
|
</q-dialog> |
||||
|
|
||||
<q-dialog v-model="paymentsChart.show" position="top"> |
<q-dialog v-model="paymentsChart.show" position="top"> |
||||
<q-card class="q-pa-sm" style="width: 800px; max-width: unset"> |
<q-card class="q-pa-sm" style="width: 800px; max-width: unset;"> |
||||
<q-card-section> |
<q-card-section> |
||||
<canvas ref="canvas" width="600" height="400"></canvas> |
<canvas ref="canvas" width="600" height="400"></canvas> |
||||
</q-card-section> |
</q-card-section> |
||||
</q-card> |
</q-card> |
||||
</q-dialog> |
</q-dialog> |
||||
|
|
||||
{% if service_fee > 0 %} |
{% if service_fee > 0 %} |
||||
<div ref="disclaimer"></div> |
<div ref="disclaimer"></div> |
||||
<q-dialog v-model="disclaimerDialog.show"> |
<q-dialog v-model="disclaimerDialog.show"> |
||||
<q-card class="q-pa-lg"> |
<q-card class="q-pa-lg"> |
||||
<h6 class="q-my-md text-deep-purple">Warning</h6> |
<h6 class="q-my-md text-deep-purple">Warning</h6> |
||||
<p>Login functionality to be released in v0.2, for now, <strong>make sure you bookmark this page for future access to your wallet</strong>!</p> |
<p> |
||||
<p>This service is in BETA, and we hold no responsibility for people losing access to funds. To encourage you to run your own LNbits installation, any balance on {% raw %}{{ disclaimerDialog.location.host }}{% endraw %} will incur a charge of <strong>{{ service_fee }}% service fee</strong> per week.</p> |
Login functionality to be released in v0.2, for now, |
||||
<div class="row q-mt-lg"> |
<strong |
||||
<q-btn outline color="grey" @click="copyText(disclaimerDialog.location.href)">Copy wallet URL</q-btn> |
>make sure you bookmark this page for future access to your |
||||
<q-btn v-close-popup flat color="grey" class="q-ml-auto">I understand</q-btn> |
wallet</strong |
||||
</div> |
>! |
||||
</q-card> |
</p> |
||||
</q-dialog> |
<p> |
||||
{% endif %} |
This service is in BETA, and we hold no responsibility for people losing |
||||
{% endblock %} |
access to funds. To encourage you to run your own LNbits installation, any |
||||
|
balance on {% raw %}{{ disclaimerDialog.location.host }}{% endraw %} will |
||||
|
incur a charge of <strong>{{ service_fee }}% service fee</strong> per |
||||
|
week. |
||||
|
</p> |
||||
|
<div class="row q-mt-lg"> |
||||
|
<q-btn |
||||
|
outline |
||||
|
color="grey" |
||||
|
@click="copyText(disclaimerDialog.location.href)" |
||||
|
>Copy wallet URL</q-btn |
||||
|
> |
||||
|
<q-btn v-close-popup flat color="grey" class="q-ml-auto" |
||||
|
>I understand</q-btn |
||||
|
> |
||||
|
</div> |
||||
|
</q-card> |
||||
|
</q-dialog> |
||||
|
{% endif %} {% endblock %} |
||||
|
@ -1,107 +1,128 @@ |
|||||
<!doctype html> |
<!DOCTYPE html> |
||||
|
|
||||
<html lang="en"> |
<html lang="en"> |
||||
<head> |
<head> |
||||
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='vendor/quasar@1.10.4/quasar.min.css') }}"> |
<link |
||||
|
rel="stylesheet" |
||||
|
type="text/css" |
||||
|
href="{{ url_for('static', filename='vendor/quasar@1.10.4/quasar.min.css') }}" |
||||
|
/> |
||||
{% assets 'base_css' %} |
{% assets 'base_css' %} |
||||
<link rel="stylesheet" type="text/css" href="{{ ASSET_URL }}"> |
<link rel="stylesheet" type="text/css" href="{{ ASSET_URL }}" /> |
||||
{% endassets %} |
{% endassets %} {% block styles %}{% endblock %} |
||||
{% block styles %}{% endblock %} |
|
||||
<title> |
<title> |
||||
{% block title %} |
{% block title %} {% if SITE_TITLE != 'LNbits' %}{{ SITE_TITLE }}{% else |
||||
{% if SITE_TITLE != 'LNbits' %}{{ SITE_TITLE }}{% else %}LNbits{% endif %} |
%}LNbits{% endif %} {% endblock %} |
||||
{% endblock %} |
|
||||
</title> |
</title> |
||||
<meta charset="utf-8"> |
<meta charset="utf-8" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> |
<meta |
||||
|
name="viewport" |
||||
|
content="width=device-width, initial-scale=1, shrink-to-fit=no" |
||||
|
/> |
||||
{% block head_scripts %}{% endblock %} |
{% block head_scripts %}{% endblock %} |
||||
</head> |
</head> |
||||
|
|
||||
<body> |
<body> |
||||
<q-layout id="vue" view="hHh lpR lfr" v-cloak> |
<q-layout id="vue" view="hHh lpR lfr" v-cloak> |
||||
|
|
||||
<q-header bordered class="bg-lnbits-dark"> |
<q-header bordered class="bg-lnbits-dark"> |
||||
<q-toolbar> |
<q-toolbar> |
||||
{% block drawer_toggle %} |
{% block drawer_toggle %} |
||||
<q-btn dense flat round icon="menu" @click="g.visibleDrawer = !g.visibleDrawer"></q-btn> |
<q-btn |
||||
|
dense |
||||
|
flat |
||||
|
round |
||||
|
icon="menu" |
||||
|
@click="g.visibleDrawer = !g.visibleDrawer" |
||||
|
></q-btn> |
||||
{% endblock %} |
{% endblock %} |
||||
<q-toolbar-title> |
<q-toolbar-title> |
||||
{% block toolbar_title %} |
{% block toolbar_title %} {% if SITE_TITLE != 'LNbits' %} {{ |
||||
{% if SITE_TITLE != 'LNbits' %} |
SITE_TITLE }} {% else %} |
||||
{{ SITE_TITLE }} |
<strong>LN</strong>bits {% endif %} {% endblock %} |
||||
{% else %} |
|
||||
<strong>LN</strong>bits |
|
||||
{% endif %} |
|
||||
{% endblock %} |
|
||||
</q-toolbar-title> |
</q-toolbar-title> |
||||
{% block beta %} |
{% block beta %} |
||||
<q-badge color="yellow" text-color="black"> |
<q-badge color="yellow" text-color="black"> |
||||
<span><span v-show="$q.screen.gt.sm">USE WITH CAUTION - LNbits wallet is still in </span>BETA</span> |
<span |
||||
</q-badge> |
><span v-show="$q.screen.gt.sm" |
||||
|
>USE WITH CAUTION - LNbits wallet is still in </span |
||||
|
>BETA</span |
||||
|
> |
||||
|
</q-badge> |
||||
{% endblock %} |
{% endblock %} |
||||
<q-btn dense flat round @click="toggleDarkMode" :icon="($q.dark.isActive) ? 'brightness_3' : 'wb_sunny'" class="q-ml-lg" size="sm"> |
<q-btn |
||||
|
dense |
||||
|
flat |
||||
|
round |
||||
|
@click="toggleDarkMode" |
||||
|
:icon="($q.dark.isActive) ? 'brightness_3' : 'wb_sunny'" |
||||
|
class="q-ml-lg" |
||||
|
size="sm" |
||||
|
> |
||||
<q-tooltip>Toggle Dark Mode</q-tooltip> |
<q-tooltip>Toggle Dark Mode</q-tooltip> |
||||
</q-btn> |
</q-btn> |
||||
</q-toolbar> |
</q-toolbar> |
||||
</q-header> |
</q-header> |
||||
|
|
||||
{% block drawer %} |
{% block drawer %} |
||||
<q-drawer v-model="g.visibleDrawer" side="left" :width="($q.screen.lt.md) ? 260 : 230" show-if-above :elevated="$q.screen.lt.md"> |
<q-drawer |
||||
<lnbits-wallet-list></lnbits-wallet-list> |
v-model="g.visibleDrawer" |
||||
<lnbits-extension-list class="q-pb-xl"></lnbits-extension-list> |
side="left" |
||||
</q-drawer> |
:width="($q.screen.lt.md) ? 260 : 230" |
||||
{% endblock %} |
show-if-above |
||||
|
:elevated="$q.screen.lt.md" |
||||
{% block page_container %} |
> |
||||
<q-page-container> |
<lnbits-wallet-list></lnbits-wallet-list> |
||||
<q-page class="q-px-md q-py-lg" :class="{'q-px-lg': $q.screen.gt.xs}"> |
<lnbits-extension-list class="q-pb-xl"></lnbits-extension-list> |
||||
{% block page %}{% endblock %} |
</q-drawer> |
||||
</q-page> |
{% endblock %} {% block page_container %} |
||||
</q-page-container> |
<q-page-container> |
||||
{% endblock %} |
<q-page class="q-px-md q-py-lg" :class="{'q-px-lg': $q.screen.gt.xs}"> |
||||
|
{% block page %}{% endblock %} |
||||
{% block footer %} |
</q-page> |
||||
<q-footer class="bg-transparent q-px-lg q-py-md" :class="{'text-dark': !$q.dark.isActive}"> |
</q-page-container> |
||||
<q-toolbar> |
{% endblock %} {% block footer %} |
||||
<q-toolbar-title class="text-caption"> |
<q-footer |
||||
<strong>LN</strong>bits, free and open-source lightning wallet/accounts system |
class="bg-transparent q-px-lg q-py-md" |
||||
</q-toolbar-title> |
:class="{'text-dark': !$q.dark.isActive}" |
||||
<q-space></q-space> |
> |
||||
<q-btn flat dense :color="($q.dark.isActive) ? 'white' : 'deep-purple'" icon="code" type="a" href="https://github.com/lnbits/lnbits" target="_blank" rel="noopener"> |
<q-toolbar> |
||||
<q-tooltip>View project in GitHub</q-tooltip> |
<q-toolbar-title class="text-caption"> |
||||
</q-btn> |
<strong>LN</strong>bits, free and open-source lightning |
||||
</q-toolbar> |
wallet/accounts system |
||||
</q-footer> |
</q-toolbar-title> |
||||
|
<q-space></q-space> |
||||
|
<q-btn |
||||
|
flat |
||||
|
dense |
||||
|
:color="($q.dark.isActive) ? 'white' : 'deep-purple'" |
||||
|
icon="code" |
||||
|
type="a" |
||||
|
href="https://github.com/lnbits/lnbits" |
||||
|
target="_blank" |
||||
|
rel="noopener" |
||||
|
> |
||||
|
<q-tooltip>View project in GitHub</q-tooltip> |
||||
|
</q-btn> |
||||
|
</q-toolbar> |
||||
|
</q-footer> |
||||
{% endblock %} |
{% endblock %} |
||||
|
|
||||
</q-layout> |
</q-layout> |
||||
|
|
||||
{% block vue_templates %}{% endblock %} |
{% block vue_templates %}{% endblock %} {% if DEBUG %} |
||||
|
<script src="{{ url_for('static', filename='vendor/vue@2.6.11/vue.js') }}"></script> |
||||
{% if DEBUG %} |
<script src="{{ url_for('static', filename='vendor/vue-router@3.1.6/vue-router.js') }}"></script> |
||||
<script src="{{ url_for('static', filename='vendor/vue@2.6.11/vue.js') }}"></script> |
<script src="{{ url_for('static', filename='vendor/vuex@3.1.3/vuex.js') }}"></script> |
||||
<script src="{{ url_for('static', filename='vendor/vue-router@3.1.6/vue-router.js') }}"></script> |
<script src="{{ url_for('static', filename='vendor/quasar@1.10.4/quasar.umd.js') }}"></script> |
||||
<script src="{{ url_for('static', filename='vendor/vuex@3.1.3/vuex.js') }}"></script> |
{% else %} {% assets output='__bundle__/vue.js', |
||||
<script src="{{ url_for('static', filename='vendor/quasar@1.10.4/quasar.umd.js') }}"></script> |
'vendor/quasar@1.10.4/quasar.ie.polyfills.umd.min.js', |
||||
{% else %} |
'vendor/vue@2.6.11/vue.min.js', 'vendor/vue-router@3.1.6/vue-router.min.js', |
||||
{% assets output='__bundle__/vue.js', |
'vendor/vuex@3.1.3/vuex.min.js', 'vendor/quasar@1.10.4/quasar.umd.min.js' %} |
||||
'vendor/quasar@1.10.4/quasar.ie.polyfills.umd.min.js', |
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
||||
'vendor/vue@2.6.11/vue.min.js', |
{% endassets %} {% endif %} {% assets filters='rjsmin', |
||||
'vendor/vue-router@3.1.6/vue-router.min.js', |
output='__bundle__/base.js', 'vendor/axios@0.19.2/axios.min.js', |
||||
'vendor/vuex@3.1.3/vuex.min.js', |
'vendor/underscore@1.10.2/underscore.min.js', 'js/base.js', |
||||
'vendor/quasar@1.10.4/quasar.umd.min.js' %} |
'js/components.js' %} |
||||
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
||||
{% endassets %} |
{% endassets %} {% block scripts %}{% endblock %} |
||||
{% endif %} |
|
||||
|
|
||||
{% assets filters='rjsmin', output='__bundle__/base.js', |
|
||||
'vendor/axios@0.19.2/axios.min.js', |
|
||||
'vendor/underscore@1.10.2/underscore.min.js', |
|
||||
'js/base.js', |
|
||||
'js/components.js' %} |
|
||||
<script type="text/javascript" src="{{ ASSET_URL }}"></script> |
|
||||
{% endassets %} |
|
||||
|
|
||||
{% block scripts %}{% endblock %} |
|
||||
</body> |
</body> |
||||
</html> |
</html> |
||||
|
@ -1,17 +1,7 @@ |
|||||
{% extends "base.html" %} |
{% extends "base.html" %} {% block beta %}{% endblock %} {% block drawer_toggle |
||||
|
%}{% endblock %} {% block drawer %}{% endblock %} {% block toolbar_title %} |
||||
|
<a href="/" class="inherit"> |
||||
{% block beta %}{% endblock %} |
{% if SITE_TITLE != 'LNbits' %} {{ SITE_TITLE }} {% else %} |
||||
{% block drawer_toggle %}{% endblock %} |
<strong>LN</strong>bits {% endif %} |
||||
{% block drawer %}{% endblock %} |
</a> |
||||
|
|
||||
|
|
||||
{% block toolbar_title %} |
|
||||
<a href="/" class="inherit"> |
|
||||
{% if SITE_TITLE != 'LNbits' %} |
|
||||
{{ SITE_TITLE }} |
|
||||
{% else %} |
|
||||
<strong>LN</strong>bits |
|
||||
{% endif %} |
|
||||
</a> |
|
||||
{% endblock %} |
{% endblock %} |
||||
|
Loading…
Reference in new issue