Format: prettier (#707)

* format: prettier

* gh-actions: add prettier checkg

* actions
This commit is contained in:
calle 2022-07-05 21:14:56 +02:00 committed by GitHub
parent d55f8dc36e
commit 92887ed169
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
33 changed files with 516 additions and 336 deletions

View file

@ -15,3 +15,12 @@ jobs:
- run: python3 -m venv venv - run: python3 -m venv venv
- run: ./venv/bin/pip install black - run: ./venv/bin/pip install black
- run: make checkblack - run: make checkblack
prettier:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- run: sudo apt-get install python3-venv
- run: python3 -m venv venv
- run: npm install prettier
- run: ./node_modules/.bin/prettier --check 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

View file

@ -48,7 +48,8 @@
<code>{"X-Api-Key": "<i>{{ wallet.inkey }}</i>"}</code><br /> <code>{"X-Api-Key": "<i>{{ wallet.inkey }}</i>"}</code><br />
<h5 class="text-caption q-mt-sm q-mb-none">Body (application/json)</h5> <h5 class="text-caption q-mt-sm q-mb-none">Body (application/json)</h5>
<code <code
>{"out": false, "amount": &lt;int&gt;, "memo": &lt;string&gt;, "unit": &lt;string&gt;, "webhook": &lt;url:string&gt;}</code >{"out": false, "amount": &lt;int&gt;, "memo": &lt;string&gt;, "unit":
&lt;string&gt;, "webhook": &lt;url:string&gt;}</code
> >
<h5 class="text-caption q-mt-sm q-mb-none"> <h5 class="text-caption q-mt-sm q-mb-none">
Returns 201 CREATED (application/json) Returns 201 CREATED (application/json)
@ -61,8 +62,8 @@
<code <code
>curl -X POST {{ request.base_url }}api/v1/payments -d '{"out": false, >curl -X POST {{ request.base_url }}api/v1/payments -d '{"out": false,
"amount": &lt;int&gt;, "memo": &lt;string&gt;, "webhook": "amount": &lt;int&gt;, "memo": &lt;string&gt;, "webhook":
&lt;url:string&gt;, "unit": &lt;string&gt;}' -H "X-Api-Key: <i>{{ wallet.inkey }}</i>" -H &lt;url:string&gt;, "unit": &lt;string&gt;}' -H "X-Api-Key:
"Content-type: application/json"</code <i>{{ wallet.inkey }}</i>" -H "Content-type: application/json"</code
> >
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -31,8 +31,8 @@
<code>[&lt;copilot_object&gt;, ...]</code> <code>[&lt;copilot_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X POST {{ request.base_url }}copilot/api/v1/copilot -d '{"title": >curl -X POST {{ request.base_url }}copilot/api/v1/copilot -d
&lt;string&gt;, "animation": &lt;string&gt;, '{"title": &lt;string&gt;, "animation": &lt;string&gt;,
"show_message":&lt;string&gt;, "amount": &lt;integer&gt;, "show_message":&lt;string&gt;, "amount": &lt;integer&gt;,
"lnurl_title": &lt;string&gt;}' -H "Content-type: application/json" "lnurl_title": &lt;string&gt;}' -H "Content-type: application/json"
-H "X-Api-Key: {{user.wallets[0].adminkey }}" -H "X-Api-Key: {{user.wallets[0].adminkey }}"
@ -59,11 +59,11 @@
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X POST {{ request.base_url >curl -X POST {{ request.base_url
}}copilot/api/v1/copilot/&lt;copilot_id&gt; -d '{"title": &lt;string&gt;, }}copilot/api/v1/copilot/&lt;copilot_id&gt; -d '{"title":
"animation": &lt;string&gt;, "show_message":&lt;string&gt;, &lt;string&gt;, "animation": &lt;string&gt;,
"amount": &lt;integer&gt;, "lnurl_title": &lt;string&gt;}' -H "show_message":&lt;string&gt;, "amount": &lt;integer&gt;,
"Content-type: application/json" -H "X-Api-Key: "lnurl_title": &lt;string&gt;}' -H "Content-type: application/json"
{{user.wallets[0].adminkey }}" -H "X-Api-Key: {{user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -87,8 +87,9 @@
<code>[&lt;copilot_object&gt;, ...]</code> <code>[&lt;copilot_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}copilot/api/v1/copilot/&lt;copilot_id&gt; >curl -X GET {{ request.base_url
-H "X-Api-Key: {{ user.wallets[0].inkey }}" }}copilot/api/v1/copilot/&lt;copilot_id&gt; -H "X-Api-Key: {{
user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -110,8 +111,8 @@
<code>[&lt;copilot_object&gt;, ...]</code> <code>[&lt;copilot_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}copilot/api/v1/copilots -H "X-Api-Key: {{ >curl -X GET {{ request.base_url }}copilot/api/v1/copilots -H
user.wallets[0].inkey }}" "X-Api-Key: {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -161,9 +162,10 @@
<code></code> <code></code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}copilot/api/v1/copilot/ws/&lt;string, >curl -X GET {{ request.base_url
copilot_id&gt;/&lt;string, comment&gt;/&lt;string, gif name&gt; -H }}copilot/api/v1/copilot/ws/&lt;string, copilot_id&gt;/&lt;string,
"X-Api-Key: {{ user.wallets[0].adminkey }}" comment&gt;/&lt;string, gif name&gt; -H "X-Api-Key: {{
user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -10,12 +10,19 @@
Discord Bot: Connect Discord users to LNbits. Discord Bot: Connect Discord users to LNbits.
</h5> </h5>
<p> <p>
Connect your LNbits instance to a <a href="https://github.com/chrislennon/lnbits-discord-bot">Discord Bot</a> leveraging LNbits as a community based lightning node.<br /> Connect your LNbits instance to a
<a href="https://github.com/chrislennon/lnbits-discord-bot"
>Discord Bot</a
>
leveraging LNbits as a community based lightning node.<br />
<small> <small>
Created by, <a href="https://github.com/chrislennon">Chris Lennon</a></small Created by,
> <br /> <a href="https://github.com/chrislennon">Chris Lennon</a></small
>
<br />
<small> <small>
Based on User Manager, by <a href="https://github.com/benarc">Ben Arc</a></small Based on User Manager, by
<a href="https://github.com/benarc">Ben Arc</a></small
> >
</p> </p>
</q-card-section> </q-card-section>
@ -149,8 +156,9 @@
<code <code
>curl -X POST {{ request.base_url }}discordbot/api/v1/users -d >curl -X POST {{ request.base_url }}discordbot/api/v1/users -d
'{"admin_id": "{{ user.id }}", "wallet_name": &lt;string&gt;, '{"admin_id": "{{ user.id }}", "wallet_name": &lt;string&gt;,
"user_name": &lt;string&gt;, "discord_id": &lt;string&gt;}' -H "X-Api-Key: {{ "user_name": &lt;string&gt;, "discord_id": &lt;string&gt;}' -H
user.wallets[0].inkey }}" -H "Content-type: application/json" "X-Api-Key: {{ user.wallets[0].inkey }}" -H "Content-type:
application/json"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -136,7 +136,8 @@
<div class="col-12 col-md-4 col-lg-5 q-gutter-y-md"> <div class="col-12 col-md-4 col-lg-5 q-gutter-y-md">
<q-card> <q-card>
<q-card-section> <q-card-section>
<h6 class="text-subtitle1 q-my-none">LNbits Discord Bot Extension <h6 class="text-subtitle1 q-my-none">
LNbits Discord Bot Extension
<!--{{SITE_TITLE}} Discord Bot Extension--> <!--{{SITE_TITLE}} Discord Bot Extension-->
</h6> </h6>
</q-card-section> </q-card-section>
@ -236,7 +237,12 @@
columns: [ columns: [
{name: 'id', align: 'left', label: 'ID', field: 'id'}, {name: 'id', align: 'left', label: 'ID', field: 'id'},
{name: 'name', align: 'left', label: 'Username', field: 'name'}, {name: 'name', align: 'left', label: 'Username', field: 'name'},
{name: 'discord_id', align: 'left', label: 'discord_id', field: 'discord_id'} {
name: 'discord_id',
align: 'left',
label: 'discord_id',
field: 'discord_id'
}
], ],
pagination: { pagination: {
rowsPerPage: 10 rowsPerPage: 10

View file

@ -381,10 +381,10 @@
getTickets: function () { getTickets: function () {
var self = this var self = this
LNbits.api LNbits.api
.request( .request(
'GET', 'GET',
'/events/api/v1/tickets?all_wallets=true', '/events/api/v1/tickets?all_wallets=true',
this.g.user.wallets[0].inkey this.g.user.wallets[0].inkey
) )
.then(function (response) { .then(function (response) {
console.log(response) console.log(response)

View file

@ -3,9 +3,9 @@
Vue.component(VueQrcode.name, VueQrcode) Vue.component(VueQrcode.name, VueQrcode)
var mapJukebox = obj => { var mapJukebox = obj => {
if(obj.sp_device){ if (obj.sp_device) {
obj._data = _.clone(obj) obj._data = _.clone(obj)
obj.sp_id = obj._data.id obj.sp_id = obj._data.id
obj.device = obj._data.sp_device.split('-')[0] obj.device = obj._data.sp_device.split('-')[0]
playlists = obj._data.sp_playlists.split(',') playlists = obj._data.sp_playlists.split(',')
@ -17,11 +17,9 @@ var mapJukebox = obj => {
obj.playlist = playlistsar.join() obj.playlist = playlistsar.join()
console.log(obj) console.log(obj)
return obj return obj
} } else {
else {
return return
} }
} }
new Vue({ new Vue({
@ -87,14 +85,14 @@ new Vue({
var link = _.findWhere(this.JukeboxLinks, {id: linkId}) var link = _.findWhere(this.JukeboxLinks, {id: linkId})
this.qrCodeDialog.data = _.clone(link) this.qrCodeDialog.data = _.clone(link)
this.qrCodeDialog.data.url = this.qrCodeDialog.data.url =
window.location.protocol + '//' + window.location.host window.location.protocol + '//' + window.location.host
this.qrCodeDialog.show = true this.qrCodeDialog.show = true
}, },
getJukeboxes() { getJukeboxes() {
self = this self = this
LNbits.api LNbits.api
.request( .request(
'GET', 'GET',
@ -103,8 +101,7 @@ new Vue({
) )
.then(function (response) { .then(function (response) {
self.JukeboxLinks = response.data.map(function (obj) { self.JukeboxLinks = response.data.map(function (obj) {
return mapJukebox(obj)
return mapJukebox(obj)
}) })
console.log(self.JukeboxLinks) console.log(self.JukeboxLinks)
}) })
@ -154,7 +151,7 @@ new Vue({
submitSpotifyKeys() { submitSpotifyKeys() {
self = this self = this
self.jukeboxDialog.data.user = self.g.user.id self.jukeboxDialog.data.user = self.g.user.id
LNbits.api LNbits.api
.request( .request(
'POST', 'POST',

View file

@ -37,8 +37,8 @@
<code>[&lt;jukebox_object&gt;, ...]</code> <code>[&lt;jukebox_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}jukebox/api/v1/jukebox -H "X-Api-Key: {{ >curl -X GET {{ request.base_url }}jukebox/api/v1/jukebox -H
user.wallets[0].adminkey }}" "X-Api-Key: {{ user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -59,8 +59,9 @@
<code>&lt;jukebox_object&gt;</code> <code>&lt;jukebox_object&gt;</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}jukebox/api/v1/jukebox/&lt;juke_id&gt; -H >curl -X GET {{ request.base_url
"X-Api-Key: {{ user.wallets[0].adminkey }}" }}jukebox/api/v1/jukebox/&lt;juke_id&gt; -H "X-Api-Key: {{
user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -86,8 +87,8 @@
<code>&lt;jukbox_object&gt;</code> <code>&lt;jukbox_object&gt;</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X POST {{ request.base_url }}jukebox/api/v1/jukebox/ -d '{"user": >curl -X POST {{ request.base_url }}jukebox/api/v1/jukebox/ -d
&lt;string, user_id&gt;, "title": &lt;string&gt;, '{"user": &lt;string, user_id&gt;, "title": &lt;string&gt;,
"wallet":&lt;string&gt;, "sp_user": &lt;string, "wallet":&lt;string&gt;, "sp_user": &lt;string,
spotify_user_account&gt;, "sp_secret": &lt;string, spotify_user_account&gt;, "sp_secret": &lt;string,
spotify_user_secret&gt;, "sp_access_token": &lt;string, spotify_user_secret&gt;, "sp_access_token": &lt;string,
@ -116,8 +117,9 @@
<code>&lt;jukebox_object&gt;</code> <code>&lt;jukebox_object&gt;</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X DELETE {{ request.base_url }}jukebox/api/v1/jukebox/&lt;juke_id&gt; >curl -X DELETE {{ request.base_url
-H "X-Api-Key: {{ user.wallets[0].adminkey }}" }}jukebox/api/v1/jukebox/&lt;juke_id&gt; -H "X-Api-Key: {{
user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -38,8 +38,8 @@
<code>[&lt;livestream_object&gt;, ...]</code> <code>[&lt;livestream_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}livestream/api/v1/livestream -H "X-Api-Key: {{ >curl -X GET {{ request.base_url }}livestream/api/v1/livestream -H
user.wallets[0].inkey }}" "X-Api-Key: {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -110,11 +110,11 @@
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X POST {{ request.base_url }} >curl -X POST {{ request.base_url }}
livestream/api/v1/livestream/tracks -d livestream/api/v1/livestream/tracks -d '{"name": &lt;string&gt;,
'{"name": &lt;string&gt;, "download_url": &lt;string&gt;, "download_url": &lt;string&gt;, "price_msat": &lt;integer&gt;,
"price_msat": &lt;integer&gt;, "producer_id": &lt;integer&gt;, "producer_id": &lt;integer&gt;, "producer_name": &lt;string&gt;}' -H
"producer_name": &lt;string&gt;}' -H "Content-type: application/json" "Content-type: application/json" -H "X-Api-Key: {{
-H "X-Api-Key: {{ user.wallets[0].adminkey }}" user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -149,7 +149,13 @@
</q-card-section> </q-card-section>
</q-card> </q-card>
</q-expansion-item> </q-expansion-item>
<q-expansion-item group="api" dense expand-separator label="POST address" class="q-pb-md"> <q-expansion-item
group="api"
dense
expand-separator
label="POST address"
class="q-pb-md"
>
<q-card> <q-card>
<q-card-section> <q-card-section>
<code <code

View file

@ -372,7 +372,7 @@
} }
data.wallet_endpoint = data.wallet_endpoint ?? '{{ root_url }}' data.wallet_endpoint = data.wallet_endpoint ?? '{{ root_url }}'
data.duration = parseInt(data.duration) data.duration = parseInt(data.duration)
axios axios
.post('/lnaddress/api/v1/address/{{ domain_id }}', data) .post('/lnaddress/api/v1/address/{{ domain_id }}', data)
.then(response => { .then(response => {

View file

@ -191,9 +191,13 @@
type="text" type="text"
label="Cloudflare API token" label="Cloudflare API token"
> >
<template v-slot:hint> <template v-slot:hint>
Check extension <a href="https://github.com/lnbits/lnbits-legend/tree/master/lnbits/extensions/lnaddress">documentation!</a> Check extension
</template> <a
href="https://github.com/lnbits/lnbits-legend/tree/master/lnbits/extensions/lnaddress"
>documentation!</a
>
</template>
<q-tooltip class="bg-grey-8" anchor="bottom left" self="top left" <q-tooltip class="bg-grey-8" anchor="bottom left" self="top left"
>Your API key in cloudflare</q-tooltip >Your API key in cloudflare</q-tooltip
> >

View file

@ -120,7 +120,7 @@
<q-th auto-width></q-th> <q-th auto-width></q-th>
<q-th auto-width></q-th> <q-th auto-width></q-th>
<q-th v-for="col in props.cols" :key="col.name" :props="props"> <q-th v-for="col in props.cols" :key="col.name" :props="props">
{{ col.label }} {{ col.label }}
</q-th> </q-th>
</q-tr> </q-tr>
</template> </template>
@ -145,11 +145,13 @@
icon="launch" icon="launch"
:color="($q.dark.isActive) ? 'grey-7' : 'grey-5'" :color="($q.dark.isActive) ? 'grey-7' : 'grey-5'"
@click="ticketCard(props)" @click="ticketCard(props)"
><q-tooltip> Click to show ticket </q-tooltip></q-btn> ><q-tooltip> Click to show ticket </q-tooltip></q-btn
>
</q-td> </q-td>
<q-td v-for="col in props.cols" :key="col.name" :props="props"> <q-td v-for="col in props.cols" :key="col.name" :props="props">
{{ col.label == "Ticket" ? col.value.length > 20 ? `${col.value.substring(0, 20)}...` : col.value : col.value }} {{ col.label == "Ticket" ? col.value.length > 20 ?
`${col.value.substring(0, 20)}...` : col.value : col.value }}
</q-td> </q-td>
<q-td auto-width> <q-td auto-width>
@ -410,7 +412,7 @@
}) })
}) })
}, },
ticketCard(ticket){ ticketCard(ticket) {
this.ticketDialog.show = true this.ticketDialog.show = true
let {date, email, ltext, name} = ticket.row let {date, email, ltext, name} = ticket.row
this.ticketDialog.data = { this.ticketDialog.data = {
@ -469,7 +471,7 @@
}, },
updateformDialog: function (formId) { updateformDialog: function (formId) {
var link = _.findWhere(this.forms, {id: formId}) var link = _.findWhere(this.forms, {id: formId})
console.log("LINK", link) console.log('LINK', link)
this.formDialog.data.id = link.id this.formDialog.data.id = link.id
this.formDialog.data.wallet = link.wallet this.formDialog.data.wallet = link.wallet

View file

@ -39,8 +39,8 @@
<code>[&lt;lnurldevice_object&gt;, ...]</code> <code>[&lt;lnurldevice_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X POST {{ request.base_url }}lnurldevice/api/v1/lnurlpos -d '{"title": >curl -X POST {{ request.base_url }}lnurldevice/api/v1/lnurlpos -d
&lt;string&gt;, "message":&lt;string&gt;, "currency": '{"title": &lt;string&gt;, "message":&lt;string&gt;, "currency":
&lt;integer&gt;}' -H "Content-type: application/json" -H "X-Api-Key: &lt;integer&gt;}' -H "Content-type: application/json" -H "X-Api-Key:
{{user.wallets[0].adminkey }}" {{user.wallets[0].adminkey }}"
</code> </code>
@ -104,8 +104,8 @@
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url >curl -X GET {{ request.base_url
}}lnurldevice/api/v1/lnurlpos/&lt;lnurldevice_id&gt; -H "X-Api-Key: {{ }}lnurldevice/api/v1/lnurlpos/&lt;lnurldevice_id&gt; -H "X-Api-Key:
user.wallets[0].inkey }}" {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -159,8 +159,8 @@
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X DELETE {{ request.base_url >curl -X DELETE {{ request.base_url
}}lnurldevice/api/v1/lnurlpos/&lt;lnurldevice_id&gt; -H "X-Api-Key: {{ }}lnurldevice/api/v1/lnurlpos/&lt;lnurldevice_id&gt; -H "X-Api-Key:
user.wallets[0].adminkey }}" {{ user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -480,12 +480,11 @@
updatedData updatedData
) )
.then(function (response) { .then(function (response) {
self.lnurldeviceLinks = _.reject( self.lnurldeviceLinks = _.reject(self.lnurldeviceLinks, function (
self.lnurldeviceLinks, obj
function (obj) { ) {
return obj.id === updatedData.id return obj.id === updatedData.id
} })
)
self.lnurldeviceLinks.push(maplnurldevice(response.data)) self.lnurldeviceLinks.push(maplnurldevice(response.data))
self.formDialoglnurldevice.show = false self.formDialoglnurldevice.show = false
self.clearFormDialoglnurldevice() self.clearFormDialoglnurldevice()

View file

@ -17,8 +17,8 @@
<code>[&lt;pay_link_object&gt;, ...]</code> <code>[&lt;pay_link_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}lnurlp/api/v1/links -H "X-Api-Key: {{ >curl -X GET {{ request.base_url }}lnurlp/api/v1/links -H "X-Api-Key:
user.wallets[0].inkey }}" {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -39,8 +39,8 @@
<code>{"lnurl": &lt;string&gt;}</code> <code>{"lnurl": &lt;string&gt;}</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}lnurlp/api/v1/links/&lt;pay_id&gt; -H >curl -X GET {{ request.base_url }}lnurlp/api/v1/links/&lt;pay_id&gt;
"X-Api-Key: {{ user.wallets[0].inkey }}" -H "X-Api-Key: {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -68,11 +68,11 @@
<code>{"lnurl": &lt;string&gt;}</code> <code>{"lnurl": &lt;string&gt;}</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X POST {{ request.base_url }}lnurlp/api/v1/links -d '{"description": >curl -X POST {{ request.base_url }}lnurlp/api/v1/links -d
&lt;string&gt;, "amount": &lt;integer&gt;, "max": &lt;integer&gt;, '{"description": &lt;string&gt;, "amount": &lt;integer&gt;, "max":
"min": &lt;integer&gt;, "comment_chars": &lt;integer&gt;}' -H &lt;integer&gt;, "min": &lt;integer&gt;, "comment_chars":
"Content-type: application/json" -H "X-Api-Key: {{ &lt;integer&gt;}' -H "Content-type: application/json" -H "X-Api-Key:
user.wallets[0].adminkey }}" {{ user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -99,8 +99,8 @@
<code>{"lnurl": &lt;string&gt;}</code> <code>{"lnurl": &lt;string&gt;}</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X PUT {{ request.base_url }}lnurlp/api/v1/links/&lt;pay_id&gt; -d >curl -X PUT {{ request.base_url }}lnurlp/api/v1/links/&lt;pay_id&gt;
'{"description": &lt;string&gt;, "amount": &lt;integer&gt;}' -H -d '{"description": &lt;string&gt;, "amount": &lt;integer&gt;}' -H
"Content-type: application/json" -H "X-Api-Key: {{ "Content-type: application/json" -H "X-Api-Key: {{
user.wallets[0].adminkey }}" user.wallets[0].adminkey }}"
</code> </code>
@ -126,8 +126,9 @@
<code></code> <code></code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X DELETE {{ request.base_url }}lnurlp/api/v1/links/&lt;pay_id&gt; -H >curl -X DELETE {{ request.base_url
"X-Api-Key: {{ user.wallets[0].adminkey }}" }}lnurlp/api/v1/links/&lt;pay_id&gt; -H "X-Api-Key: {{
user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -127,7 +127,13 @@
</q-card-section> </q-card-section>
</q-card> </q-card>
</q-expansion-item> </q-expansion-item>
<q-expansion-item group="api" dense expand-separator label="Delete item" class="q-pb-md"> <q-expansion-item
group="api"
dense
expand-separator
label="Delete item"
class="q-pb-md"
>
<q-card> <q-card>
<q-card-section> <q-card-section>
<code><span class="text-blue">DELETE</span></code> <code><span class="text-blue">DELETE</span></code>

View file

@ -17,8 +17,8 @@
<code>[&lt;paywall_object&gt;, ...]</code> <code>[&lt;paywall_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}paywall/api/v1/paywalls -H "X-Api-Key: {{ >curl -X GET {{ request.base_url }}paywall/api/v1/paywalls -H
user.wallets[0].inkey }}" "X-Api-Key: {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -48,11 +48,11 @@
> >
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X POST {{ request.base_url }}paywall/api/v1/paywalls -d '{"url": >curl -X POST {{ request.base_url }}paywall/api/v1/paywalls -d
&lt;string&gt;, "memo": &lt;string&gt;, "description": &lt;string&gt;, '{"url": &lt;string&gt;, "memo": &lt;string&gt;, "description":
"amount": &lt;integer&gt;, "remembers": &lt;boolean&gt;}' -H &lt;string&gt;, "amount": &lt;integer&gt;, "remembers":
"Content-type: application/json" -H "X-Api-Key: {{ &lt;boolean&gt;}' -H "Content-type: application/json" -H "X-Api-Key:
user.wallets[0].adminkey }}" {{ user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -17,8 +17,8 @@
<code>[&lt;satsdice_link_object&gt;, ...]</code> <code>[&lt;satsdice_link_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}satsdice/api/v1/links -H "X-Api-Key: {{ >curl -X GET {{ request.base_url }}satsdice/api/v1/links -H
user.wallets[0].inkey }}" "X-Api-Key: {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -44,8 +44,9 @@
<code>{"lnurl": &lt;string&gt;}</code> <code>{"lnurl": &lt;string&gt;}</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}satsdice/api/v1/links/&lt;satsdice_id&gt; -H >curl -X GET {{ request.base_url
"X-Api-Key: {{ user.wallets[0].inkey }}" }}satsdice/api/v1/links/&lt;satsdice_id&gt; -H "X-Api-Key: {{
user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -73,8 +74,8 @@
<code>{"lnurl": &lt;string&gt;}</code> <code>{"lnurl": &lt;string&gt;}</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X POST {{ request.base_url }}satsdice/api/v1/links -d '{"title": >curl -X POST {{ request.base_url }}satsdice/api/v1/links -d
&lt;string&gt;, "min_satsdiceable": &lt;integer&gt;, '{"title": &lt;string&gt;, "min_satsdiceable": &lt;integer&gt;,
"max_satsdiceable": &lt;integer&gt;, "uses": &lt;integer&gt;, "max_satsdiceable": &lt;integer&gt;, "uses": &lt;integer&gt;,
"wait_time": &lt;integer&gt;, "is_unique": &lt;boolean&gt;}' -H "wait_time": &lt;integer&gt;, "is_unique": &lt;boolean&gt;}' -H
"Content-type: application/json" -H "X-Api-Key: {{ "Content-type: application/json" -H "X-Api-Key: {{
@ -109,8 +110,9 @@
<code>{"lnurl": &lt;string&gt;}</code> <code>{"lnurl": &lt;string&gt;}</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X PUT {{ request.base_url }}satsdice/api/v1/links/&lt;satsdice_id&gt; -d >curl -X PUT {{ request.base_url
'{"title": &lt;string&gt;, "min_satsdiceable": &lt;integer&gt;, }}satsdice/api/v1/links/&lt;satsdice_id&gt; -d '{"title":
&lt;string&gt;, "min_satsdiceable": &lt;integer&gt;,
"max_satsdiceable": &lt;integer&gt;, "uses": &lt;integer&gt;, "max_satsdiceable": &lt;integer&gt;, "uses": &lt;integer&gt;,
"wait_time": &lt;integer&gt;, "is_unique": &lt;boolean&gt;}' -H "wait_time": &lt;integer&gt;, "is_unique": &lt;boolean&gt;}' -H
"Content-type: application/json" -H "X-Api-Key: {{ "Content-type: application/json" -H "X-Api-Key: {{
@ -137,8 +139,9 @@
<code></code> <code></code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X DELETE {{ request.base_url }}satsdice/api/v1/links/&lt;satsdice_id&gt; >curl -X DELETE {{ request.base_url
-H "X-Api-Key: {{ user.wallets[0].adminkey }}" }}satsdice/api/v1/links/&lt;satsdice_id&gt; -H "X-Api-Key: {{
user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -165,8 +168,8 @@
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url >curl -X GET {{ request.base_url
}}satsdice/api/v1/links/&lt;the_hash&gt;/&lt;lnurl_id&gt; -H "X-Api-Key: {{ }}satsdice/api/v1/links/&lt;the_hash&gt;/&lt;lnurl_id&gt; -H
user.wallets[0].inkey }}" "X-Api-Key: {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -60,12 +60,13 @@
<code>[&lt;charge_object&gt;, ...]</code> <code>[&lt;charge_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X POST {{ request.base_url }}satspay/api/v1/charge/&lt;charge_id&gt; >curl -X POST {{ request.base_url
-d '{"onchainwallet": &lt;string, watchonly_wallet_id&gt;, }}satspay/api/v1/charge/&lt;charge_id&gt; -d '{"onchainwallet":
"description": &lt;string&gt;, "webhook":&lt;string&gt;, "time": &lt;string, watchonly_wallet_id&gt;, "description": &lt;string&gt;,
&lt;integer&gt;, "amount": &lt;integer&gt;, "lnbitswallet": "webhook":&lt;string&gt;, "time": &lt;integer&gt;, "amount":
&lt;string, lnbits_wallet_id&gt;}' -H "Content-type: &lt;integer&gt;, "lnbitswallet": &lt;string, lnbits_wallet_id&gt;}'
application/json" -H "X-Api-Key: {{user.wallets[0].adminkey }}" -H "Content-type: application/json" -H "X-Api-Key:
{{user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -89,8 +90,9 @@
<code>[&lt;charge_object&gt;, ...]</code> <code>[&lt;charge_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}satspay/api/v1/charge/&lt;charge_id&gt; >curl -X GET {{ request.base_url
-H "X-Api-Key: {{ user.wallets[0].inkey }}" }}satspay/api/v1/charge/&lt;charge_id&gt; -H "X-Api-Key: {{
user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -112,8 +114,8 @@
<code>[&lt;charge_object&gt;, ...]</code> <code>[&lt;charge_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}satspay/api/v1/charges -H "X-Api-Key: {{ >curl -X GET {{ request.base_url }}satspay/api/v1/charges -H
user.wallets[0].inkey }}" "X-Api-Key: {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -145,7 +147,8 @@
</q-expansion-item> </q-expansion-item>
<q-expansion-item <q-expansion-item
group="api" group="api"
dense expand-separator dense
expand-separator
label="Get balances" label="Get balances"
class="q-pb-md" class="q-pb-md"
> >

View file

@ -119,7 +119,7 @@ new Vue({
'/splitpayments/api/v1/targets', '/splitpayments/api/v1/targets',
this.selectedWallet.adminkey, this.selectedWallet.adminkey,
{ {
"targets": this.targets targets: this.targets
.filter(isTargetComplete) .filter(isTargetComplete)
.map(({wallet, percent, alias}) => ({wallet, percent, alias})) .map(({wallet, percent, alias}) => ({wallet, percent, alias}))
} }

View file

@ -52,8 +52,8 @@
> >
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}splitpayments/api/v1/targets -H "X-Api-Key: {{ >curl -X GET {{ request.base_url }}splitpayments/api/v1/targets -H
user.wallets[0].inkey }}" "X-Api-Key: {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -4,10 +4,9 @@
Tip Jar: Receive tips with messages! Tip Jar: Receive tips with messages!
</h4> </h4>
<p> <p>
Your personal Bitcoin tip page, which supports Your personal Bitcoin tip page, which supports lightning and on-chain
lightning and on-chain payments. payments. Notifications, including a donation message, can be sent via
Notifications, including a donation message, webhook.
can be sent via webhook.
<small> <small>
Created by, <a href="https://github.com/Fittiboy">Fitti</a></small Created by, <a href="https://github.com/Fittiboy">Fitti</a></small
> >

View file

@ -322,11 +322,7 @@
var self = this var self = this
LNbits.api LNbits.api
.request( .request('GET', '/tipjar/api/v1/tips', this.g.user.wallets[0].inkey)
'GET',
'/tipjar/api/v1/tips',
this.g.user.wallets[0].inkey
)
.then(function (response) { .then(function (response) {
self.tips = response.data.map(function (obj) { self.tips = response.data.map(function (obj) {
return mapTipJar(obj) return mapTipJar(obj)

View file

@ -69,8 +69,8 @@
<code></code> <code></code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X DELETE {{ request.base_url }}tpos/api/v1/tposs/&lt;tpos_id&gt; -H >curl -X DELETE {{ request.base_url
"X-Api-Key: &lt;admin_key&gt;" }}tpos/api/v1/tposs/&lt;tpos_id&gt; -H "X-Api-Key: &lt;admin_key&gt;"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -54,7 +54,8 @@
></q-btn> ></q-btn>
</q-td> </q-td>
<q-td v-for="col in props.cols" :key="col.name" :props="props"> <q-td v-for="col in props.cols" :key="col.name" :props="props">
{{ (col.name == 'tip_options' ? JSON.parse(col.value).join(", ") : col.value) }} {{ (col.name == 'tip_options' ? JSON.parse(col.value).join(", ")
: col.value) }}
</q-td> </q-td>
<q-td auto-width> <q-td auto-width>
<q-btn <q-btn
@ -360,15 +361,15 @@
{ {
name: 'tip_wallet', name: 'tip_wallet',
align: 'left', align: 'left',
label: "Tip Wallet", label: 'Tip Wallet',
field: "tip_wallet", field: 'tip_wallet'
}, },
{ {
name: 'tip_options', name: 'tip_options',
align: 'left', align: 'left',
label: "Tip Options %", label: 'Tip Options %',
field: "tip_options", field: 'tip_options'
}, }
], ],
pagination: { pagination: {
rowsPerPage: 10 rowsPerPage: 10
@ -403,8 +404,12 @@
var data = { var data = {
name: this.formDialog.data.name, name: this.formDialog.data.name,
currency: this.formDialog.data.currency, currency: this.formDialog.data.currency,
tip_options: (this.formDialog.data.tip_options ? JSON.stringify(this.formDialog.data.tip_options.map(str => parseInt(str))) : JSON.stringify([])), tip_options: this.formDialog.data.tip_options
tip_wallet: this.formDialog.data.tip_wallet || "", ? JSON.stringify(
this.formDialog.data.tip_options.map(str => parseInt(str))
)
: JSON.stringify([]),
tip_wallet: this.formDialog.data.tip_wallet || ''
} }
var self = this var self = this

View file

@ -1,7 +1,5 @@
<link rel="manifest" href="/tpos/manifest/{{ tpos.id }}.webmanifest" /> <link rel="manifest" href="/tpos/manifest/{{ tpos.id }}.webmanifest" />
{% extends "public.html" %} {% extends "public.html" %} {% block toolbar_title %} {{ tpos.name }}
{% block toolbar_title %}
{{ tpos.name }}
<q-btn <q-btn
flat flat
dense dense
@ -10,8 +8,7 @@
icon="share" icon="share"
color="white" color="white"
></q-btn> ></q-btn>
{% endblock %} {% endblock %} {% block footer %}{% endblock %} {% block page_container %}
{% block footer %}{% endblock %} {% block page_container %}
<q-page-container> <q-page-container>
<q-page> <q-page>
<q-page-sticky v-if="exchangeRate" expand position="top"> <q-page-sticky v-if="exchangeRate" expand position="top">
@ -180,27 +177,24 @@
</q-card> </q-card>
</q-dialog> </q-dialog>
<q-dialog <q-dialog v-model="tipDialog.show" position="top">
v-model="tipDialog.show"
position="top"
>
<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 class="text-center q-mb-xl"> <div class="text-center q-mb-xl">
<b style="font-size: 24px;">Would you like to leave a tip?</b> <b style="font-size: 24px">Would you like to leave a tip?</b>
</div> </div>
<div class="text-center q-mb-xl"> <div class="text-center q-mb-xl">
<q-btn <q-btn
style="padding: 10px; margin: 3px;" style="padding: 10px; margin: 3px"
unelevated unelevated
@click="processTipSelection(tip)" @click="processTipSelection(tip)"
size="xl" size="xl"
:outline="!($q.dark.isActive)" :outline="!($q.dark.isActive)"
rounded rounded
color="primary" color="primary"
v-for="tip in this.tip_options" v-for="tip in this.tip_options"
:key="tip" :key="tip"
>{% raw %}{{ tip }}{% endraw %}%</q-btn >{% raw %}{{ tip }}{% endraw %}%</q-btn
> >
</div> </div>
<div class="text-center q-mb-xl"> <div class="text-center q-mb-xl">
<p><a @click="processTipSelection(0)"> No, thanks</a></p> <p><a @click="processTipSelection(0)"> No, thanks</a></p>
@ -265,7 +259,7 @@
} }
.keypad .btn-confirm { .keypad .btn-confirm {
grid-area: 1 / 4 / 5 / 4; grid-area: 1 / 4 / 5 / 4;
} }
</style> </style>
{% endblock %} {% block scripts %} {% endblock %} {% block scripts %}
@ -282,7 +276,7 @@
tip_options: JSON.parse('{{ tpos.tip_options }}'), tip_options: JSON.parse('{{ tpos.tip_options }}'),
exchangeRate: null, exchangeRate: null,
stack: [], stack: [],
tipAmount: 0.00, tipAmount: 0.0,
invoiceDialog: { invoiceDialog: {
show: false, show: false,
data: null, data: null,
@ -290,7 +284,7 @@
paymentChecker: null paymentChecker: null
}, },
tipDialog: { tipDialog: {
show: false, show: false
}, },
urlDialog: { urlDialog: {
show: false show: false
@ -324,7 +318,7 @@
methods: { methods: {
closeInvoiceDialog: function () { closeInvoiceDialog: function () {
this.stack = [] this.stack = []
this.tipAmount = 0.00 this.tipAmount = 0.0
var dialog = this.invoiceDialog var dialog = this.invoiceDialog
setTimeout(function () { setTimeout(function () {
clearInterval(dialog.paymentChecker) clearInterval(dialog.paymentChecker)
@ -334,8 +328,10 @@
processTipSelection: function (selectedTipOption) { processTipSelection: function (selectedTipOption) {
this.tipDialog.show = false this.tipDialog.show = false
if(selectedTipOption) { if (selectedTipOption) {
const tipAmount = parseFloat(parseFloat((selectedTipOption / 100) * this.amount)) const tipAmount = parseFloat(
parseFloat((selectedTipOption / 100) * this.amount)
)
const subtotal = parseFloat(this.amount) const subtotal = parseFloat(this.amount)
const grandTotal = parseFloat((tipAmount + subtotal).toFixed(2)) const grandTotal = parseFloat((tipAmount + subtotal).toFixed(2))
const totalString = grandTotal.toFixed(2).toString() const totalString = grandTotal.toFixed(2).toString()
@ -344,7 +340,7 @@
for (var i = 0; i < totalString.length; i++) { for (var i = 0; i < totalString.length; i++) {
const char = totalString[i] const char = totalString[i]
if(char !== ".") { if (char !== '.') {
this.stack.push(char) this.stack.push(char)
} }
} }
@ -354,14 +350,14 @@
this.showInvoice() this.showInvoice()
}, },
submitForm: function() { submitForm: function () {
if(this.tip_options.length) { if (this.tip_options.length) {
this.showTipModal() this.showTipModal()
} else { } else {
this.showInvoice() this.showInvoice()
} }
}, },
showTipModal: function() { showTipModal: function () {
this.tipDialog.show = true this.tipDialog.show = true
}, },
showInvoice: function () { showInvoice: function () {
@ -372,7 +368,7 @@
.post('/tpos/api/v1/tposs/' + this.tposId + '/invoices', null, { .post('/tpos/api/v1/tposs/' + this.tposId + '/invoices', null, {
params: { params: {
amount: this.sat, amount: this.sat,
tipAmount: this.tipAmountSat, tipAmount: this.tipAmountSat
} }
}) })
.then(function (response) { .then(function (response) {

View file

@ -37,8 +37,8 @@
<code>[&lt;wallets_object&gt;, ...]</code> <code>[&lt;wallets_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}watchonly/api/v1/wallet -H "X-Api-Key: {{ >curl -X GET {{ request.base_url }}watchonly/api/v1/wallet -H
user.wallets[0].inkey }}" "X-Api-Key: {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -66,8 +66,9 @@
<code>[&lt;wallet_object&gt;, ...]</code> <code>[&lt;wallet_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}watchonly/api/v1/wallet/&lt;wallet_id&gt; >curl -X GET {{ request.base_url
-H "X-Api-Key: {{ user.wallets[0].inkey }}" }}watchonly/api/v1/wallet/&lt;wallet_id&gt; -H "X-Api-Key: {{
user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -89,9 +90,10 @@
<code>[&lt;wallet_object&gt;, ...]</code> <code>[&lt;wallet_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X POST {{ request.base_url }}watchonly/api/v1/wallet -d '{"title": >curl -X POST {{ request.base_url }}watchonly/api/v1/wallet -d
&lt;string&gt;, "masterpub": &lt;string&gt;}' -H "Content-type: '{"title": &lt;string&gt;, "masterpub": &lt;string&gt;}' -H
application/json" -H "X-Api-Key: {{ user.wallets[0].adminkey }}" "Content-type: application/json" -H "X-Api-Key: {{
user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -173,8 +175,9 @@
<code>[&lt;address_object&gt;, ...]</code> <code>[&lt;address_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}watchonly/api/v1/address/&lt;wallet_id&gt; >curl -X GET {{ request.base_url
-H "X-Api-Key: {{ user.wallets[0].inkey }}" }}watchonly/api/v1/address/&lt;wallet_id&gt; -H "X-Api-Key: {{
user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -202,8 +205,8 @@
<code>[&lt;mempool_object&gt;, ...]</code> <code>[&lt;mempool_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}watchonly/api/v1/mempool -H "X-Api-Key: {{ >curl -X GET {{ request.base_url }}watchonly/api/v1/mempool -H
user.wallets[0].adminkey }}" "X-Api-Key: {{ user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -233,9 +236,9 @@
<code>[&lt;mempool_object&gt;, ...]</code> <code>[&lt;mempool_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X PUT {{ request.base_url }}watchonly/api/v1/mempool -d '{"endpoint": >curl -X PUT {{ request.base_url }}watchonly/api/v1/mempool -d
&lt;string&gt;}' -H "Content-type: application/json" -H "X-Api-Key: '{"endpoint": &lt;string&gt;}' -H "Content-type: application/json"
{{ user.wallets[0].adminkey }}" -H "X-Api-Key: {{ user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -22,8 +22,8 @@
<code>[&lt;withdraw_link_object&gt;, ...]</code> <code>[&lt;withdraw_link_object&gt;, ...]</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}withdraw/api/v1/links -H "X-Api-Key: {{ >curl -X GET {{ request.base_url }}withdraw/api/v1/links -H
user.wallets[0].inkey }}" "X-Api-Key: {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -49,8 +49,9 @@
<code>{"lnurl": &lt;string&gt;}</code> <code>{"lnurl": &lt;string&gt;}</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url }}withdraw/api/v1/links/&lt;withdraw_id&gt; -H >curl -X GET {{ request.base_url
"X-Api-Key: {{ user.wallets[0].inkey }}" }}withdraw/api/v1/links/&lt;withdraw_id&gt; -H "X-Api-Key: {{
user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -79,12 +80,12 @@
<code>{"lnurl": &lt;string&gt;}</code> <code>{"lnurl": &lt;string&gt;}</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X POST {{ request.base_url }}withdraw/api/v1/links -d '{"title": >curl -X POST {{ request.base_url }}withdraw/api/v1/links -d
&lt;string&gt;, "min_withdrawable": &lt;integer&gt;, '{"title": &lt;string&gt;, "min_withdrawable": &lt;integer&gt;,
"max_withdrawable": &lt;integer&gt;, "uses": &lt;integer&gt;, "max_withdrawable": &lt;integer&gt;, "uses": &lt;integer&gt;,
"wait_time": &lt;integer&gt;, "is_unique": &lt;boolean&gt;, "webhook_url": &lt;string&gt;}' -H "wait_time": &lt;integer&gt;, "is_unique": &lt;boolean&gt;,
"Content-type: application/json" -H "X-Api-Key: {{ "webhook_url": &lt;string&gt;}' -H "Content-type: application/json" -H
user.wallets[0].adminkey }}" "X-Api-Key: {{ user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -115,8 +116,9 @@
<code>{"lnurl": &lt;string&gt;}</code> <code>{"lnurl": &lt;string&gt;}</code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X PUT {{ request.base_url }}withdraw/api/v1/links/&lt;withdraw_id&gt; -d >curl -X PUT {{ request.base_url
'{"title": &lt;string&gt;, "min_withdrawable": &lt;integer&gt;, }}withdraw/api/v1/links/&lt;withdraw_id&gt; -d '{"title":
&lt;string&gt;, "min_withdrawable": &lt;integer&gt;,
"max_withdrawable": &lt;integer&gt;, "uses": &lt;integer&gt;, "max_withdrawable": &lt;integer&gt;, "uses": &lt;integer&gt;,
"wait_time": &lt;integer&gt;, "is_unique": &lt;boolean&gt;}' -H "wait_time": &lt;integer&gt;, "is_unique": &lt;boolean&gt;}' -H
"Content-type: application/json" -H "X-Api-Key: {{ "Content-type: application/json" -H "X-Api-Key: {{
@ -143,8 +145,9 @@
<code></code> <code></code>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X DELETE {{ request.base_url }}withdraw/api/v1/links/&lt;withdraw_id&gt; >curl -X DELETE {{ request.base_url
-H "X-Api-Key: {{ user.wallets[0].adminkey }}" }}withdraw/api/v1/links/&lt;withdraw_id&gt; -H "X-Api-Key: {{
user.wallets[0].adminkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>
@ -171,8 +174,8 @@
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5> <h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code <code
>curl -X GET {{ request.base_url >curl -X GET {{ request.base_url
}}withdraw/api/v1/links/&lt;the_hash&gt;/&lt;lnurl_id&gt; -H "X-Api-Key: {{ }}withdraw/api/v1/links/&lt;the_hash&gt;/&lt;lnurl_id&gt; -H
user.wallets[0].inkey }}" "X-Api-Key: {{ user.wallets[0].inkey }}"
</code> </code>
</q-card-section> </q-card-section>
</q-card> </q-card>

View file

@ -1,10 +1,12 @@
{% extends "print.html" %} {% block page %} {% for page in link %} {% for threes in page %} {% for one in threes %} {{one}}, {% endfor %} {% endfor %} {% endfor %} {% endblock %} {% block scripts %} {% extends "print.html" %} {% block page %} {% for page in link %} {% for threes
in page %} {% for one in threes %} {{one}}, {% endfor %} {% endfor %} {% endfor
%} {% endblock %} {% block scripts %}
<script> <script>
new Vue({ new Vue({
el: '#vue', el: '#vue',
data: function() { data: function () {
return {} return {}
} }
}) })
</script> </script>
{% endblock %} {% endblock %}

View file

@ -1,28 +1,40 @@
{% extends "base.html" %} {% from "macros.jinja" import window_vars with context %} {% block scripts %} {{ window_vars(user) }} {% extends "base.html" %} {% from "macros.jinja" import window_vars with context
%} {% block scripts %} {{ window_vars(user) }}
<script src="/withdraw/static/js/index.js"></script> <script src="/withdraw/static/js/index.js"></script>
{% endblock %} {% block page %} {% endblock %} {% block page %}
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-md-7 q-gutter-y-md"> <div class="col-12 col-md-7 q-gutter-y-md">
<q-card> <q-card>
<q-card-section> <q-card-section>
<q-btn unelevated color="primary" @click="simpleformDialog.show = true">Quick vouchers</q-btn> <q-btn unelevated color="primary" @click="simpleformDialog.show = true"
<q-btn unelevated color="primary" @click="formDialog.show = true">Advanced withdraw link(s)</q-btn> >Quick vouchers</q-btn
</q-card-section> >
</q-card> <q-btn unelevated color="primary" @click="formDialog.show = true"
>Advanced withdraw link(s)</q-btn
>
</q-card-section>
</q-card>
<q-card> <q-card>
<q-card-section> <q-card-section>
<div class="row items-center no-wrap q-mb-md"> <div class="row items-center no-wrap q-mb-md">
<div class="col"> <div class="col">
<h5 class="text-subtitle1 q-my-none">Withdraw links</h5> <h5 class="text-subtitle1 q-my-none">Withdraw links</h5>
</div> </div>
<div class="col-auto"> <div class="col-auto">
<q-btn flat color="grey" @click="exportCSV">Export to CSV</q-btn> <q-btn flat color="grey" @click="exportCSV">Export to CSV</q-btn>
</div> </div>
</div> </div>
<q-table dense flat :data="sortedWithdrawLinks" row-key="id" :columns="withdrawLinksTable.columns" :pagination.sync="withdrawLinksTable.pagination"> <q-table
{% raw %} dense
<template v-slot:header="props"> flat
:data="sortedWithdrawLinks"
row-key="id"
:columns="withdrawLinksTable.columns"
:pagination.sync="withdrawLinksTable.pagination"
>
{% raw %}
<template v-slot:header="props">
<q-tr :props="props"> <q-tr :props="props">
<q-th auto-width></q-th> <q-th auto-width></q-th>
<q-th v-for="col in props.cols" :key="col.name" :props="props"> <q-th v-for="col in props.cols" :key="col.name" :props="props">
@ -32,7 +44,7 @@
<q-th auto-width></q-th> <q-th auto-width></q-th>
</q-tr> </q-tr>
</template> </template>
<template v-slot:body="props"> <template v-slot:body="props">
<q-tr :props="props"> <q-tr :props="props">
<q-td auto-width> <q-td auto-width>
<q-btn <q-btn
@ -106,72 +118,137 @@
></q-btn> ></q-btn>
</q-td> </q-td>
</q-tr> </q-tr>
</template> {% endraw %} </template>
</q-table> {% endraw %}
</q-card-section> </q-table>
</q-card> </q-card-section>
</div> </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>
<h6 class="text-subtitle1 q-my-none"> <h6 class="text-subtitle1 q-my-none">
{{SITE_TITLE}} LNURL-withdraw extension {{SITE_TITLE}} LNURL-withdraw extension
</h6> </h6>
</q-card-section> </q-card-section>
<q-card-section class="q-pa-none"> <q-card-section class="q-pa-none">
<q-separator></q-separator> <q-separator></q-separator>
<q-list> <q-list>
{% include "withdraw/_api_docs.html" %} {% include "withdraw/_api_docs.html" %}
<q-separator></q-separator> <q-separator></q-separator>
{% include "withdraw/_lnurl.html" %} {% include "withdraw/_lnurl.html" %}
</q-list> </q-list>
</q-card-section> </q-card-section>
</q-card> </q-card>
</div> </div>
<q-dialog v-model="formDialog.show" position="top" @hide="closeFormDialog"> <q-dialog v-model="formDialog.show" position="top" @hide="closeFormDialog">
<q-card class="q-pa-lg q-pt-xl lnbits__dialog-card"> <q-card class="q-pa-lg q-pt-xl lnbits__dialog-card">
<q-form @submit="sendFormData" class="q-gutter-md"> <q-form @submit="sendFormData" class="q-gutter-md">
<q-select filled dense emit-value v-model="formDialog.data.wallet" :options="g.user.walletOptions" label="Wallet *"> <q-select
</q-select> filled
<q-input filled dense v-model.trim="formDialog.data.title" type="text" label="Link title *"></q-input> dense
<q-input filled dense v-model.number="formDialog.data.min_withdrawable" type="number" min="10" label="Min withdrawable (sat, at least 10) *"></q-input> emit-value
<q-input filled dense v-model.number="formDialog.data.max_withdrawable" type="number" min="10" label="Max withdrawable (sat, at least 10) *"></q-input> v-model="formDialog.data.wallet"
<q-input filled dense v-model.number="formDialog.data.uses" type="number" max="250" :default="1" label="Amount of uses *"></q-input> :options="g.user.walletOptions"
<div class="row q-col-gutter-none"> label="Wallet *"
<div class="col-8"> >
<q-input filled dense v-model.number="formDialog.data.wait_time" type="number" :default="1" label="Time between withdrawals *"> </q-select>
</q-input> <q-input
</div> filled
<div class="col-4 q-pl-xs"> dense
<q-select filled dense v-model="formDialog.secondMultiplier" :options="formDialog.secondMultiplierOptions"> v-model.trim="formDialog.data.title"
</q-select> type="text"
</div> label="Link title *"
</div> ></q-input>
<q-input <q-input
filled filled
dense dense
v-model="formDialog.data.webhook_url" v-model.number="formDialog.data.min_withdrawable"
type="text" type="number"
label="Webhook URL (optional)" min="10"
hint="A URL to be called whenever this link gets used." label="Min withdrawable (sat, at least 10) *"
></q-input> ></q-input>
<q-list> <q-input
<q-item tag="label" class="rounded-borders"> filled
<q-item-section avatar> dense
<q-checkbox v-model="formDialog.data.is_unique" color="primary"></q-checkbox> v-model.number="formDialog.data.max_withdrawable"
</q-item-section> type="number"
<q-item-section> min="10"
<q-item-label>Use unique withdraw QR codes to reduce `assmilking` label="Max withdrawable (sat, at least 10) *"
</q-item-label> ></q-input>
<q-item-label caption>This is recommended if you are sharing the links on social media or print QR codes.</q-item-label> <q-input
</q-item-section> filled
</q-item> dense
</q-list> v-model.number="formDialog.data.uses"
<div class="row q-mt-lg"> type="number"
<q-btn v-if="formDialog.data.id" unelevated color="primary" type="submit">Update withdraw link</q-btn> max="250"
<q-btn v-else unelevated color="primary" :disable=" :default="1"
label="Amount of uses *"
></q-input>
<div class="row q-col-gutter-none">
<div class="col-8">
<q-input
filled
dense
v-model.number="formDialog.data.wait_time"
type="number"
:default="1"
label="Time between withdrawals *"
>
</q-input>
</div>
<div class="col-4 q-pl-xs">
<q-select
filled
dense
v-model="formDialog.secondMultiplier"
:options="formDialog.secondMultiplierOptions"
>
</q-select>
</div>
</div>
<q-input
filled
dense
v-model="formDialog.data.webhook_url"
type="text"
label="Webhook URL (optional)"
hint="A URL to be called whenever this link gets used."
></q-input>
<q-list>
<q-item tag="label" class="rounded-borders">
<q-item-section avatar>
<q-checkbox
v-model="formDialog.data.is_unique"
color="primary"
></q-checkbox>
</q-item-section>
<q-item-section>
<q-item-label
>Use unique withdraw QR codes to reduce `assmilking`
</q-item-label>
<q-item-label caption
>This is recommended if you are sharing the links on social
media or print QR codes.</q-item-label
>
</q-item-section>
</q-item>
</q-list>
<div class="row q-mt-lg">
<q-btn
v-if="formDialog.data.id"
unelevated
color="primary"
type="submit"
>Update withdraw link</q-btn
>
<q-btn
v-else
unelevated
color="primary"
:disable="
formDialog.data.wallet == null || formDialog.data.wallet == null ||
formDialog.data.title == null || formDialog.data.title == null ||
(formDialog.data.min_withdrawable == null || formDialog.data.min_withdrawable < 1) || (formDialog.data.min_withdrawable == null || formDialog.data.min_withdrawable < 1) ||
@ -181,43 +258,89 @@
formDialog.data.max_withdrawable < formDialog.data.min_withdrawable formDialog.data.max_withdrawable < formDialog.data.min_withdrawable
) || ) ||
formDialog.data.uses == null || formDialog.data.uses == null ||
formDialog.data.wait_time == null" type="submit">Create withdraw link</q-btn> formDialog.data.wait_time == null"
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Cancel</q-btn> type="submit"
</div> >Create withdraw link</q-btn
</q-form> >
</q-card> <q-btn v-close-popup flat color="grey" class="q-ml-auto"
</q-dialog> >Cancel</q-btn
>
</div>
</q-form>
</q-card>
</q-dialog>
<q-dialog v-model="simpleformDialog.show" position="top" @hide="simplecloseFormDialog"> <q-dialog
<q-card class="q-pa-lg q-pt-xl lnbits__dialog-card"> v-model="simpleformDialog.show"
<q-form @submit="simplesendFormData" class="q-gutter-md"> position="top"
<q-select filled dense emit-value v-model="simpleformDialog.data.wallet" :options="g.user.walletOptions" label="Wallet *"> @hide="simplecloseFormDialog"
</q-select> >
<q-input filled dense v-model.number="simpleformDialog.data.max_withdrawable" type="number" min="10" label="Withdraw amount per voucher (sat, at least 10)"></q-input> <q-card class="q-pa-lg q-pt-xl lnbits__dialog-card">
<q-input filled dense v-model.number="simpleformDialog.data.uses" type="number" max="250" :default="1" label="Number of vouchers"></q-input> <q-form @submit="simplesendFormData" class="q-gutter-md">
<q-select
filled
dense
emit-value
v-model="simpleformDialog.data.wallet"
:options="g.user.walletOptions"
label="Wallet *"
>
</q-select>
<q-input
filled
dense
v-model.number="simpleformDialog.data.max_withdrawable"
type="number"
min="10"
label="Withdraw amount per voucher (sat, at least 10)"
></q-input>
<q-input
filled
dense
v-model.number="simpleformDialog.data.uses"
type="number"
max="250"
:default="1"
label="Number of vouchers"
></q-input>
<div class="row q-mt-lg"> <div class="row q-mt-lg">
<q-btn unelevated color="primary" :disable=" <q-btn
unelevated
color="primary"
:disable="
simpleformDialog.data.wallet == null || simpleformDialog.data.wallet == null ||
simpleformDialog.data.max_withdrawable == null || simpleformDialog.data.max_withdrawable == null ||
simpleformDialog.data.max_withdrawable < 1 || simpleformDialog.data.max_withdrawable < 1 ||
simpleformDialog.data.uses == null" type="submit">Create vouchers</q-btn> simpleformDialog.data.uses == null"
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Cancel</q-btn> type="submit"
</div> >Create vouchers</q-btn
</q-form> >
</q-card> <q-btn v-close-popup flat color="grey" class="q-ml-auto"
</q-dialog> >Cancel</q-btn
>
</div>
</q-form>
</q-card>
</q-dialog>
<q-dialog v-model="qrCodeDialog.show" position="top"> <q-dialog v-model="qrCodeDialog.show" position="top">
<q-card v-if="qrCodeDialog.data" class="q-pa-lg lnbits__dialog-card"> <q-card v-if="qrCodeDialog.data" class="q-pa-lg lnbits__dialog-card">
<q-responsive :ratio="1" class="q-mx-xl q-mb-md"> <q-responsive :ratio="1" class="q-mx-xl q-mb-md">
<qrcode :value="qrCodeDialog.data.url + '/?lightning=' + qrCodeDialog.data.lnurl" :options="{width: 800}" class="rounded-borders"></qrcode> <qrcode
{% raw %} :value="qrCodeDialog.data.url + '/?lightning=' + qrCodeDialog.data.lnurl"
</q-responsive> :options="{width: 800}"
<p style="word-break: break-all"> class="rounded-borders"
<strong>ID:</strong> {{ qrCodeDialog.data.id }}<br /> ></qrcode>
<strong>Unique:</strong> {{ qrCodeDialog.data.is_unique }}<span v-if="qrCodeDialog.data.is_unique" class="text-deep-purple"> {% raw %}
</q-responsive>
<p style="word-break: break-all">
<strong>ID:</strong> {{ qrCodeDialog.data.id }}<br />
<strong>Unique:</strong> {{ qrCodeDialog.data.is_unique }}<span
v-if="qrCodeDialog.data.is_unique"
class="text-deep-purple"
>
(QR code will change after each withdrawal)</span (QR code will change after each withdrawal)</span
><br /> ><br />
<strong>Max. withdrawable:</strong> {{ <strong>Max. withdrawable:</strong> {{
@ -259,4 +382,4 @@
</q-card> </q-card>
</q-dialog> </q-dialog>
</div> </div>
{% endblock %} {% endblock %}

View file

@ -345,17 +345,18 @@ window.windowMixin = {
} }
}, },
created: function () { created: function () {
if (
if(this.$q.localStorage.getItem('lnbits.darkMode') == true || this.$q.localStorage.getItem('lnbits.darkMode') == false){ this.$q.localStorage.getItem('lnbits.darkMode') == true ||
this.$q.localStorage.getItem('lnbits.darkMode') == false
) {
this.$q.dark.set(this.$q.localStorage.getItem('lnbits.darkMode')) this.$q.dark.set(this.$q.localStorage.getItem('lnbits.darkMode'))
} } else {
else{
this.$q.dark.set(true) this.$q.dark.set(true)
} }
this.g.allowedThemes = window.allowedThemes ?? ['bitcoin'] this.g.allowedThemes = window.allowedThemes ?? ['bitcoin']
// failsafe if admin changes themes halfway // failsafe if admin changes themes halfway
if (!this.$q.localStorage.getItem('lnbits.theme')){ if (!this.$q.localStorage.getItem('lnbits.theme')) {
this.changeColor(this.g.allowedThemes[0]) this.changeColor(this.g.allowedThemes[0])
} }
if ( if (

View file

@ -13,7 +13,10 @@
></q-icon> ></q-icon>
<h5 class="q-my-none">{{ err }}</h5> <h5 class="q-my-none">{{ err }}</h5>
<h4>If you believe this shouldn't be an error please bring it up on https://t.me/lnbits</h4> <h4>
If you believe this shouldn't be an error please bring it up on
https://t.me/lnbits
</h4>
<br /> <br />
</center> </center>
</q-card-section> </q-card-section>
@ -33,4 +36,4 @@
</script> </script>
{% endblock %} {% endblock %}
</div> </div>