2020-05-08 21:03:18 +01:00
|
|
|
{% extends "public.html" %} {% 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 class="q-pa-lg">
|
|
|
|
<q-card-section class="q-pa-none">
|
|
|
|
<h3 class="q-my-none">{{ form_name }}</h3>
|
|
|
|
<br />
|
|
|
|
<h5 class="q-my-none">{{ form_desc }}</h5>
|
|
|
|
<br />
|
|
|
|
<q-form @submit="Invoice()" class="q-gutter-md">
|
|
|
|
<q-input
|
|
|
|
filled
|
|
|
|
dense
|
|
|
|
v-model.trim="formDialog.data.name"
|
|
|
|
type="name"
|
|
|
|
label="Your name "
|
|
|
|
></q-input>
|
|
|
|
<q-input
|
|
|
|
filled
|
|
|
|
dense
|
|
|
|
v-model.trim="formDialog.data.email"
|
|
|
|
type="email"
|
|
|
|
label="Your email (optional, if you want a reply)"
|
|
|
|
></q-input>
|
|
|
|
<q-input
|
|
|
|
filled
|
|
|
|
dense
|
|
|
|
v-model.number="formDialog.data.text"
|
|
|
|
type="textarea"
|
|
|
|
label="{{ form_costpword }} sats per word"
|
|
|
|
></q-input>
|
|
|
|
<p>{% raw %}{{amountWords}}{% endraw %}</p>
|
|
|
|
<div class="row q-mt-lg">
|
|
|
|
<q-btn
|
|
|
|
unelevated
|
|
|
|
color="deep-purple"
|
|
|
|
:disable="formDialog.data.name == '' || formDialog.data.text == ''"
|
|
|
|
type="submit"
|
|
|
|
>Submit</q-btn
|
|
|
|
>
|
|
|
|
<q-btn @click="resetForm" flat color="grey" class="q-ml-auto"
|
|
|
|
>Cancel</q-btn
|
|
|
|
>
|
|
|
|
</div>
|
|
|
|
</q-form>
|
|
|
|
</q-card-section>
|
|
|
|
</q-card>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<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-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="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>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
{% endblock %} {% block scripts %}
|
|
|
|
<script>
|
|
|
|
console.log('{{ form_costpword }}')
|
|
|
|
Vue.component(VueQrcode.name, VueQrcode)
|
|
|
|
|
|
|
|
new Vue({
|
|
|
|
el: '#vue',
|
|
|
|
mixins: [windowMixin],
|
|
|
|
data: function () {
|
|
|
|
return {
|
|
|
|
paymentReq: null,
|
|
|
|
redirectUrl: null,
|
|
|
|
formDialog: {
|
|
|
|
show: false,
|
|
|
|
data: {
|
|
|
|
name: '',
|
|
|
|
email: '',
|
|
|
|
text: ''
|
|
|
|
}
|
|
|
|
},
|
|
|
|
receive: {
|
|
|
|
show: false,
|
|
|
|
status: 'pending',
|
|
|
|
paymentReq: null
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
computed: {
|
|
|
|
amountWords() {
|
|
|
|
var regex = /\s+/gi
|
2020-09-02 12:44:54 -03:00
|
|
|
var nwords = this.formDialog.data.text
|
2020-05-08 21:03:18 +01:00
|
|
|
.trim()
|
|
|
|
.replace(regex, ' ')
|
|
|
|
.split(' ').length
|
2020-09-02 12:44:54 -03:00
|
|
|
var sats = nwords * parseInt('{{ form_costpword }}')
|
|
|
|
if (sats === parseInt('{{ form_costpword }}')) {
|
2020-05-08 21:03:18 +01:00
|
|
|
return '0 Sats to pay'
|
|
|
|
} else {
|
2020-11-30 14:02:17 +00:00
|
|
|
this.formDialog.data.sats = sats
|
2020-09-02 12:44:54 -03:00
|
|
|
return sats + ' Sats to pay'
|
2020-05-08 21:03:18 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
methods: {
|
|
|
|
resetForm: function (e) {
|
|
|
|
e.preventDefault()
|
|
|
|
this.formDialog.data.name = ''
|
|
|
|
this.formDialog.data.email = ''
|
|
|
|
this.formDialog.data.text = ''
|
|
|
|
},
|
|
|
|
|
|
|
|
closeReceiveDialog: function () {
|
|
|
|
var checker = this.receive.paymentChecker
|
|
|
|
dismissMsg()
|
|
|
|
|
|
|
|
clearInterval(paymentChecker)
|
|
|
|
setTimeout(function () {}, 10000)
|
|
|
|
},
|
|
|
|
Invoice: function () {
|
|
|
|
var self = this
|
|
|
|
axios
|
2020-09-02 19:19:18 -03:00
|
|
|
.post('/lnticket/api/v1/tickets/{{ form_id }}', {
|
|
|
|
form: '{{ form_id }}',
|
|
|
|
name: self.formDialog.data.name,
|
|
|
|
email: self.formDialog.data.email,
|
2020-11-30 14:02:17 +00:00
|
|
|
ltext: self.formDialog.data.text,
|
|
|
|
sats: self.formDialog.data.sats,
|
2020-09-02 19:19:18 -03:00
|
|
|
})
|
2020-05-08 21:03:18 +01:00
|
|
|
.then(function (response) {
|
|
|
|
self.paymentReq = response.data.payment_request
|
2020-08-31 22:12:46 -03:00
|
|
|
self.paymentCheck = response.data.payment_hash
|
2020-05-08 21:03:18 +01:00
|
|
|
|
|
|
|
dismissMsg = self.$q.notify({
|
|
|
|
timeout: 0,
|
|
|
|
message: 'Waiting for payment...'
|
|
|
|
})
|
|
|
|
|
|
|
|
self.receive = {
|
|
|
|
show: true,
|
|
|
|
status: 'pending',
|
|
|
|
paymentReq: self.paymentReq
|
|
|
|
}
|
|
|
|
|
|
|
|
paymentChecker = setInterval(function () {
|
|
|
|
axios
|
2020-08-10 19:06:56 +01:00
|
|
|
.get('/lnticket/api/v1/tickets/' + self.paymentCheck)
|
2020-05-08 21:03:18 +01:00
|
|
|
.then(function (res) {
|
|
|
|
if (res.data.paid) {
|
|
|
|
self.$q.notify({
|
|
|
|
type: 'positive',
|
|
|
|
message: 'Sent, thank you!',
|
|
|
|
icon: null
|
|
|
|
})
|
|
|
|
self.receive = {
|
|
|
|
show: false,
|
|
|
|
status: 'complete',
|
|
|
|
paymentReq: null
|
|
|
|
}
|
2020-11-30 14:02:17 +00:00
|
|
|
clearInterval(paymentChecker)
|
|
|
|
dismissMsg()
|
|
|
|
self.formDialog.data.name = ''
|
|
|
|
self.formDialog.data.email = ''
|
|
|
|
self.formDialog.data.text = ''
|
2020-05-08 21:03:18 +01:00
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(function (error) {
|
|
|
|
LNbits.utils.notifyApiError(error)
|
|
|
|
})
|
|
|
|
}, 2000)
|
2020-11-30 14:02:17 +00:00
|
|
|
|
|
|
|
|
2020-05-08 21:03:18 +01:00
|
|
|
})
|
|
|
|
.catch(function (error) {
|
|
|
|
LNbits.utils.notifyApiError(error)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
</script>
|
|
|
|
{% endblock %}
|