mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-21 22:11:48 +01:00
parent
c6742f5533
commit
53f3758abc
18 changed files with 195 additions and 153 deletions
|
@ -4,26 +4,29 @@
|
|||
<template id="bitcoin-method-checkout-template">
|
||||
@await Component.InvokeAsync("UiExtensionPoint", new {location = "checkout-v2-bitcoin-pre-content", model = Model})
|
||||
<div class="payment-box">
|
||||
<div v-if="model.invoiceBitcoinUrlQR" class="qr-container" :data-qr-value="model.invoiceBitcoinUrlQR" :data-clipboard="model.btcAddress" data-clipboard-confirm-element="QR_Text_@Model.PaymentMethodId">
|
||||
<div v-if="model.invoiceBitcoinUrlQR" class="qr-container" :data-qr-value="model.invoiceBitcoinUrlQR" :data-clipboard="model.btcAddress">
|
||||
<div>
|
||||
<qrcode :value="model.invoiceBitcoinUrlQR" tag="div" :options="qrOptions" />
|
||||
</div>
|
||||
<img class="qr-icon" :src="model.cryptoImage" :alt="model.paymentMethodName"/>
|
||||
<small class="qr-text" id="QR_Text_@Model.PaymentMethodId" v-t="'qr_text'"></small>
|
||||
</div>
|
||||
<div v-if="model.btcAddress" class="input-group mt-3">
|
||||
<div class="form-floating">
|
||||
<input id="Address_@Model.PaymentMethodId" class="form-control-plaintext" readonly="readonly" :value="model.btcAddress">
|
||||
<label for="Address_@Model.PaymentMethodId" v-t="{ path: 'address', args: { paymentMethod: model.paymentMethodName }}"></label>
|
||||
</div>
|
||||
<button type="button" class="btn btn-link" data-clipboard-target="#Address_@Model.PaymentMethodId" :data-clipboard-confirm="$t('copy_confirm')" v-t="'copy'"></button>
|
||||
<button type="button" class="btn btn-link" data-clipboard-target="#Address_@Model.PaymentMethodId">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
<div v-if="lightning" class="input-group mt-3">
|
||||
<div class="form-floating">
|
||||
<input id="Lightning_@Model.PaymentMethodId" class="form-control-plaintext" readonly="readonly" :value="lightning" />
|
||||
<label for="Lightning_@Model.PaymentMethodId" v-t="'lightning'"></label>
|
||||
</div>
|
||||
<button type="button" class="btn btn-link" data-clipboard-target="#Lightning_@Model.PaymentMethodId" :data-clipboard-confirm="$t('copy_confirm')" v-t="'copy'"></button>
|
||||
<button type="button" class="btn btn-link" data-clipboard-target="#Lightning_@Model.PaymentMethodId">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
<a v-if="model.invoiceBitcoinUrl" class="btn btn-primary rounded-pill w-100 mt-4" target="_top" id="PayInWallet"
|
||||
:href="model.invoiceBitcoinUrl" :title="$t(hasPayjoin ? 'BIP21 payment link with PayJoin support' : 'BIP21 payment link')" v-t="'pay_in_wallet'"></a>
|
||||
|
|
|
@ -3,19 +3,20 @@
|
|||
<template id="lightning-method-checkout-template">
|
||||
<div class="payment-box">
|
||||
@await Component.InvokeAsync("UiExtensionPoint" , new { location="checkout-v2-lightning-pre-content", model = Model})
|
||||
<div v-if="model.invoiceBitcoinUrlQR" class="qr-container" :data-qr-value="model.invoiceBitcoinUrlQR" :data-clipboard="model.btcAddress" data-clipboard-confirm-element="QR_Text_@Model.PaymentMethodId">
|
||||
<div v-if="model.invoiceBitcoinUrlQR" class="qr-container" :data-qr-value="model.invoiceBitcoinUrlQR" :data-clipboard="model.btcAddress">
|
||||
<div>
|
||||
<qrcode :value="model.invoiceBitcoinUrlQR" tag="div" :options="qrOptions" />
|
||||
</div>
|
||||
<img class="qr-icon" :src="model.cryptoImage" :alt="model.paymentMethodName"/>
|
||||
<small class="qr-text" id="QR_Text_@Model.PaymentMethodId" v-t="'qr_text'"></small>
|
||||
</div>
|
||||
<div v-if="model.btcAddress" class="input-group mt-3">
|
||||
<div class="form-floating">
|
||||
<input id="Lightning_@Model.PaymentMethodId" class="form-control-plaintext" readonly="readonly" :value="model.btcAddress">
|
||||
<label for="Lightning_@Model.PaymentMethodId" v-t="'lightning'"></label>
|
||||
</div>
|
||||
<button type="button" class="btn btn-link" data-clipboard-target="#Lightning_@Model.PaymentMethodId" :data-clipboard-confirm="$t('copy_confirm')" v-t="'copy'"></button>
|
||||
<button type="button" class="btn btn-link" data-clipboard-target="#Lightning_@Model.PaymentMethodId">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
<a v-if="model.invoiceBitcoinUrl" class="btn btn-primary rounded-pill w-100 mt-4" target="_top" id="PayInWallet"
|
||||
:href="model.invoiceBitcoinUrl" v-t="'pay_in_wallet'"></a>
|
||||
|
|
|
@ -392,9 +392,8 @@
|
|||
<div class="row" v-show="!errors.any()">
|
||||
<div class="col-xxl-8">
|
||||
<pre><code id="mainCode" class="html"></code></pre>
|
||||
<button class="btn btn-primary" data-clipboard-target="#mainCode">
|
||||
<vc:icon symbol="copy"/>
|
||||
Copy Code
|
||||
<button class="btn btn-outline-secondary" data-clipboard-target="#mainCode">
|
||||
<vc:icon symbol="copy"/> Copy Code
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
</button>
|
||||
</div>
|
||||
<div class="modal-body text-center">
|
||||
<div class="text-center mt-3" :style="{height: `${qrOptions.height}px`}">
|
||||
<div class="text-center my-2" :style="{height: `${qrOptions.height}px`}">
|
||||
<component v-if="currentFragment" :is="currentMode.href ? 'a': 'div'" class="qr-container d-inline-block" :href="currentMode.href">
|
||||
<qrcode :value="currentFragment" :options="qrOptions"></qrcode>
|
||||
</component>
|
||||
|
@ -19,11 +19,11 @@
|
|||
<a class="btcpay-pill" :class="{ 'active': key === mode }" href="#" v-on:click="mode = key">{{item.title}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div v-if="currentFragment && currentMode.showData">
|
||||
<div class="input-group input-group-sm" :data-clipboard="currentFragment">
|
||||
<input type="text" class="form-control" style="cursor:copy" readonly="readonly" :value="currentFragment" id="qr-code-data-input">
|
||||
<button type="button" class="btn btn-outline-secondary" data-clipboard-confirm="">Copy</button>
|
||||
</div>
|
||||
<div class="input-group input-group-sm mt-3" :data-clipboard="currentFragment" v-if="currentFragment && currentMode.showData">
|
||||
<input type="text" class="form-control" readonly="readonly" :value="currentFragment" id="qr-code-data-input">
|
||||
<button type="button" class="btn btn-outline-secondary px-3">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
<p v-if="note" v-html="note" class="text-muted mt-3"></p>
|
||||
</div>
|
||||
|
|
|
@ -4,40 +4,40 @@
|
|||
<footer class="btcpay-footer">
|
||||
<div class="d-flex flex-wrap flex-column justify-content-between flex-xl-row gap-3">
|
||||
<div class="d-flex flex-wrap justify-content-center justify-content-xl-start gap-4">
|
||||
<a href="https://github.com/btcpayserver/btcpayserver" class="d-flex align-items-center" target="_blank" rel="noreferrer noopener">
|
||||
<a href="https://github.com/btcpayserver/btcpayserver" target="_blank" rel="noreferrer noopener">
|
||||
<vc:icon symbol="github"/>
|
||||
<span style="margin-left:.4rem">Github</span>
|
||||
<span>Github</span>
|
||||
</a>
|
||||
<a href="https://chat.btcpayserver.org/" class="d-flex align-items-center" target="_blank" rel="noreferrer noopener">
|
||||
<a href="https://chat.btcpayserver.org/" target="_blank" rel="noreferrer noopener">
|
||||
<vc:icon symbol="mattermost"/>
|
||||
<span style="margin-left:.4rem">Mattermost</span>
|
||||
<span>Mattermost</span>
|
||||
</a>
|
||||
<a href="https://twitter.com/BtcpayServer" class="d-flex align-items-center" target="_blank" rel="noreferrer noopener">
|
||||
<a href="https://twitter.com/BtcpayServer" target="_blank" rel="noreferrer noopener">
|
||||
<vc:icon symbol="twitter"/>
|
||||
<span style="margin-left:.4rem">Twitter</span>
|
||||
<span>Twitter</span>
|
||||
</a>
|
||||
<a href="https://t.me/btcpayserver" class="d-flex align-items-center" target="_blank" rel="noreferrer noopener">
|
||||
<a href="https://t.me/btcpayserver" target="_blank" rel="noreferrer noopener">
|
||||
<vc:icon symbol="telegram"/>
|
||||
<span style="margin-left:.4rem">Telegram</span>
|
||||
<span>Telegram</span>
|
||||
</a>
|
||||
<a href="https://btcpayserver.org/donate/" class="d-flex align-items-center" target="_blank" rel="noreferrer noopener">
|
||||
<a href="https://btcpayserver.org/donate/" target="_blank" rel="noreferrer noopener">
|
||||
<vc:icon symbol="donate"/>
|
||||
<span style="margin-left:.4rem">Donate</span>
|
||||
<span>Donate</span>
|
||||
</a>
|
||||
<a asp-controller="UIHome" asp-action="SwaggerDocs" class="d-flex align-items-center" target="_blank">
|
||||
<a asp-controller="UIHome" asp-action="SwaggerDocs" target="_blank">
|
||||
<vc:icon symbol="api"/>
|
||||
<span style="margin-left:.4rem">API</span>
|
||||
<span>API</span>
|
||||
</a>
|
||||
<a href="https://docs.btcpayserver.org/" class="d-flex align-items-center" target="_blank" rel="noreferrer noopener">
|
||||
<a href="https://docs.btcpayserver.org/" target="_blank" rel="noreferrer noopener">
|
||||
<vc:icon symbol="docs"/>
|
||||
<span style="margin-left:.4rem">Docs</span>
|
||||
<span>Docs</span>
|
||||
</a>
|
||||
@if (!string.IsNullOrEmpty(_env.OnionUrl) && !Context.Request.IsOnion())
|
||||
{
|
||||
<a href="@_env.OnionUrl" class="d-flex align-items-center" target="_onion" rel="noreferrer noopener" role="button" data-clipboard="@_env.OnionUrl" data-clipboard-confirm-element="CopyTorUrlText" style="min-width:9em;">
|
||||
<button type="button" class="d-flex align-items-center btn btn-link" data-clipboard="@_env.OnionUrl" data-clipboard-hover>
|
||||
<vc:icon symbol="onion"/>
|
||||
<span style="margin-left:.4rem" id="CopyTorUrlText">Copy Tor URL</span>
|
||||
</a>
|
||||
<span>Copy Tor URL</span>
|
||||
</button>
|
||||
}
|
||||
</div>
|
||||
@if (User.Identity.IsAuthenticated)
|
||||
|
|
|
@ -193,8 +193,8 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<div class="input-group" :data-clipboard="deposit.link">
|
||||
<input type="text" class="form-control" style="cursor:copy" readonly="readonly" :value="deposit.link" id="payment-link"/>
|
||||
<button type="button" class="btn btn-outline-secondary p-2" style="width:7em;" data-clipboard-confirm>
|
||||
<input type="text" class="form-control" readonly="readonly" :value="deposit.link" id="payment-link"/>
|
||||
<button type="button" class="btn btn-outline-secondary px-3">
|
||||
<vc:icon symbol="copy"/>
|
||||
</button>
|
||||
</div>
|
||||
|
@ -207,8 +207,8 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<div class="input-group" :data-clipboard="deposit.address">
|
||||
<input type="text" class="form-control" style="cursor:copy" readonly="readonly" :value="deposit.address" id="address"/>
|
||||
<button type="button" class="input-group-text btn btn-outline-secondary p-2" style="width:7em;" data-clipboard-confirm>
|
||||
<input type="text" class="form-control" readonly="readonly" :value="deposit.address" id="address"/>
|
||||
<button type="button" class="btn btn-outline-secondary px-3">
|
||||
<vc:icon symbol="copy"/>
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -48,18 +48,16 @@
|
|||
</button>
|
||||
</nav>
|
||||
<section id="payment" v-if="isActive">
|
||||
@if (!string.IsNullOrEmpty(Model.ItemDesc) && Model.ItemDesc != Model.StoreName)
|
||||
{
|
||||
<h5 class="text-center mt-1 mb-3 fw-semibold" v-if="srvModel.itemDesc" v-text="srvModel.itemDesc"></h5>
|
||||
}
|
||||
@if (Model.IsUnsetTopUp)
|
||||
{
|
||||
<h2 id="AmountDue" class="mt-1 text-center" v-t="'any_amount'"></h2>
|
||||
}
|
||||
else
|
||||
{
|
||||
<h2 id="AmountDue" class="mt-1 text-center" v-text="`${srvModel.btcDue} ${srvModel.cryptoCode}`" :data-clipboard="srvModel.btcDue" :data-clipboard-confirm="$t('copy_confirm')" :data-amount-due="srvModel.btcDue">@Model.BtcDue @Model.CryptoCode</h2>
|
||||
}
|
||||
<div class="d-flex justify-content-center mt-1 text-center">
|
||||
@if (Model.IsUnsetTopUp)
|
||||
{
|
||||
<h2 id="AmountDue" v-t="'any_amount'"></h2>
|
||||
}
|
||||
else
|
||||
{
|
||||
<h2 id="AmountDue" v-text="`${srvModel.btcDue} ${srvModel.cryptoCode}`" :data-clipboard="srvModel.btcDue" data-clipboard-hover :data-amount-due="srvModel.btcDue">@Model.BtcDue @Model.CryptoCode</h2>
|
||||
}
|
||||
</div>
|
||||
<div id="PaymentInfo" class="info mt-3 mb-2" v-collapsible="showInfo">
|
||||
<div>
|
||||
<div class="timer" v-if="showTimer">
|
||||
|
@ -67,7 +65,7 @@
|
|||
<span v-t="'expiry_info'"></span> <span class="expiryTime">{{timeText}}</span>
|
||||
</div>
|
||||
<div class="payment-due" v-if="showPaymentDueInfo">
|
||||
<vc:icon symbol="info"/>
|
||||
<vc:icon symbol="info" />
|
||||
<span v-t="'partial_payment_info'"></span>
|
||||
</div>
|
||||
<div v-if="showPaymentDueInfo" v-html="replaceNewlines($t('still_due', { amount: `${srvModel.btcDue} ${srvModel.cryptoCode}` }))"></div>
|
||||
|
@ -75,7 +73,7 @@
|
|||
</div>
|
||||
<button id="DetailsToggle" class="d-flex align-items-center gap-1 btn btn-link payment-details-button mb-2" type="button" :aria-expanded="displayPaymentDetails ? 'true' : 'false'" v-on:click="displayPaymentDetails = !displayPaymentDetails">
|
||||
<span class="fw-semibold" v-t="'view_details'"></span>
|
||||
<vc:icon symbol="caret-down"/>
|
||||
<vc:icon symbol="caret-down" />
|
||||
</button>
|
||||
<div id="PaymentDetails" class="payment-details" v-collapsible="displayPaymentDetails">
|
||||
<payment-details :srv-model="srvModel" :is-active="isActive" class="pb-4"></payment-details>
|
||||
|
@ -112,11 +110,11 @@
|
|||
<dl class="mb-0">
|
||||
<div>
|
||||
<dt v-t="'invoice_id'"></dt>
|
||||
<dd v-text="srvModel.invoiceId" :data-clipboard="srvModel.invoiceId" :data-clipboard-confirm="$t('copy_confirm')"></dd>
|
||||
<dd v-text="srvModel.invoiceId" :data-clipboard="srvModel.invoiceId" data-clipboard-hover="start"></dd>
|
||||
</div>
|
||||
<div v-if="srvModel.orderId">
|
||||
<dt v-t="'order_id'"></dt>
|
||||
<dd v-text="srvModel.orderId" :data-clipboard="srvModel.orderId" :data-clipboard-confirm="$t('copy_confirm')"></dd>
|
||||
<dd v-text="srvModel.orderId" :data-clipboard="srvModel.orderId" data-clipboard-hover="start"></dd>
|
||||
</div>
|
||||
</dl>
|
||||
<payment-details :srv-model="srvModel" :is-active="isActive" class="mb-5"></payment-details>
|
||||
|
@ -138,11 +136,11 @@
|
|||
<dl class="mb-0">
|
||||
<div>
|
||||
<dt v-t="'invoice_id'"></dt>
|
||||
<dd v-text="srvModel.invoiceId" :data-clipboard="srvModel.invoiceId" :data-clipboard-confirm="$t('copy_confirm')"></dd>
|
||||
<dd v-text="srvModel.invoiceId" :data-clipboard="srvModel.invoiceId" data-clipboard-hover="start"></dd>
|
||||
</div>
|
||||
<div v-if="srvModel.orderId">
|
||||
<dt v-t="'order_id'"></dt>
|
||||
<dd v-text="srvModel.orderId" :data-clipboard="srvModel.orderId" :data-clipboard-confirm="$t('copy_confirm')"></dd>
|
||||
<dd v-text="srvModel.orderId" :data-clipboard="srvModel.orderId" data-clipboard-hover="start"></dd>
|
||||
</div>
|
||||
</dl>
|
||||
<payment-details :srv-model="srvModel" :is-active="isActive" v-collapsible="displayPaymentDetails"></payment-details>
|
||||
|
@ -185,37 +183,37 @@
|
|||
<dl>
|
||||
<div v-if="orderAmount > 0" id="PaymentDetails-TotalPrice">
|
||||
<dt v-t="'total_price'"></dt>
|
||||
<dd :data-clipboard="srvModel.orderAmount" :data-clipboard-confirm="$t('copy_confirm')">{{srvModel.orderAmount}} {{ srvModel.cryptoCode }}</dd>
|
||||
<dd :data-clipboard="srvModel.orderAmount" data-clipboard-hover="start">{{srvModel.orderAmount}} {{ srvModel.cryptoCode }}</dd>
|
||||
</div>
|
||||
<div v-if="orderAmount > 0 && srvModel.orderAmountFiat" id="PaymentDetails-TotalFiat">
|
||||
<dt v-t="'total_fiat'"></dt>
|
||||
<dd :data-clipboard="srvModel.orderAmountFiat" :data-clipboard-confirm="$t('copy_confirm')">{{srvModel.orderAmountFiat}}</dd>
|
||||
<dd :data-clipboard="srvModel.orderAmountFiat" data-clipboard-hover="start">{{srvModel.orderAmountFiat}}</dd>
|
||||
</div>
|
||||
<div v-if="srvModel.rate && srvModel.cryptoCode" id="PaymentDetails-ExchangeRate">
|
||||
<dt v-t="'exchange_rate'"></dt>
|
||||
<dd :data-clipboard="srvModel.rate" :data-clipboard-confirm="$t('copy_confirm')">
|
||||
<dd :data-clipboard="srvModel.rate" data-clipboard-hover="start">
|
||||
<template v-if="srvModel.cryptoCode === 'sats'">1 sat = {{ srvModel.rate }}</template>
|
||||
<template v-else>1 {{ srvModel.cryptoCode }} = {{ srvModel.rate }}</template>
|
||||
</dd>
|
||||
</div>
|
||||
<div v-if="srvModel.networkFee" id="PaymentDetails-NetworkCost">
|
||||
<dt v-t="'network_cost'"></dt>
|
||||
<dd :data-clipboard="srvModel.networkFee" :data-clipboard-confirm="$t('copy_confirm')">
|
||||
<dd :data-clipboard="srvModel.networkFee" data-clipboard-hover="start">
|
||||
<div v-if="srvModel.txCountForFee > 0" v-t="{ path: 'tx_count', args: { count: srvModel.txCount } }"></div>
|
||||
<div v-text="`${srvModel.networkFee} ${srvModel.cryptoCode}`"></div>
|
||||
</dd>
|
||||
</div>
|
||||
<div v-if="btcPaid > 0" id="PaymentDetails-AmountPaid">
|
||||
<dt v-t="'amount_paid'"></dt>
|
||||
<dd :data-clipboard="srvModel.btcPaid" :data-clipboard-confirm="$t('copy_confirm')" v-text="`${srvModel.btcPaid} ${srvModel.cryptoCode}`"></dd>
|
||||
<dd :data-clipboard="srvModel.btcPaid" data-clipboard-hover="start" v-text="`${srvModel.btcPaid} ${srvModel.cryptoCode}`"></dd>
|
||||
</div>
|
||||
<div v-if="btcDue > 0" id="PaymentDetails-AmountDue">
|
||||
<dt v-t="'amount_due'"></dt>
|
||||
<dd :data-clipboard="srvModel.btcDue" :data-clipboard-confirm="$t('copy_confirm')" v-text="`${srvModel.btcDue} ${srvModel.cryptoCode}`"></dd>
|
||||
<dd :data-clipboard="srvModel.btcDue" data-clipboard-hover="start" v-text="`${srvModel.btcDue} ${srvModel.cryptoCode}`"></dd>
|
||||
</div>
|
||||
<div v-if="showRecommendedFee" id="PaymentDetails-RecommendedFee">
|
||||
<dt v-t="'recommended_fee'"></dt>
|
||||
<dd :data-clipboard="srvModel.feeRate" :data-clipboard-confirm="$t('copy_confirm')" v-t="{ path: 'fee_rate', args: { feeRate: srvModel.feeRate } }"></dd>
|
||||
<dd :data-clipboard="srvModel.feeRate" data-clipboard-hover="start" v-t="{ path: 'fee_rate', args: { feeRate: srvModel.feeRate } }"></dd>
|
||||
</div>
|
||||
</dl>
|
||||
</script>
|
||||
|
|
|
@ -118,8 +118,10 @@
|
|||
<tr>
|
||||
<td>
|
||||
<div class="input-group" data-clipboard="@address">
|
||||
<input type="text" class="form-control copy-cursor lightning-address-value" readonly="readonly" value="@address"/>
|
||||
<button type="button" class="btn btn-outline-secondary" data-clipboard-confirm>Copy</button>
|
||||
<input type="text" class="form-control copy-cursor lightning-address-value" readonly="readonly" value="@address"/>
|
||||
<button type="button" class="btn btn-outline-secondary px-3">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</td>
|
||||
|
|
|
@ -43,12 +43,12 @@
|
|||
<td>@keyData.Label</td>
|
||||
<td>
|
||||
<code class="hide-when-js">@keyData.Id</code>
|
||||
<a class="only-for-js" data-reveal-btn>Click to reveal</a>
|
||||
<div hidden>
|
||||
<code data-api-key>@keyData.Id</code>
|
||||
<a class="mt-2" data-clipboard-confirm>
|
||||
Copy to clipboard
|
||||
</a>
|
||||
<button type="button" class="btn btn-link only-for-js p-0" data-reveal-btn>Reveal</button>
|
||||
<div hidden class="gap-2 align-items-center">
|
||||
<code>@keyData.Id</code>
|
||||
<button type="button" class="btn btn-link d-flex p-0" data-clipboard="@keyData.Id">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
|
@ -61,20 +61,18 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<ul>
|
||||
@foreach (var permission in Permission.ToPermissions(permissions).Select(c => c.ToString()).Distinct().ToArray())
|
||||
{
|
||||
<li>
|
||||
<code class="text-break">@permission</code>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
@foreach (var permission in Permission.ToPermissions(permissions).Select(c => c.ToString()).Distinct().ToArray())
|
||||
{
|
||||
<div><code class="text-break">@permission</code></div>
|
||||
}
|
||||
}
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<a asp-action="DeleteAPIKey" asp-route-id="@keyData.Id" asp-controller="UIManage" data-bs-toggle="modal" data-bs-target="#ConfirmModal" data-description="Any application using the API key <strong>@Html.Encode(keyData.Label ?? keyData.Id)</strong> will immediately lose access." data-confirm-input="DELETE">Delete</a>
|
||||
<span>-</span>
|
||||
<button type="button" class="btn btn-link only-for-js p-0" data-qr="@index">Show QR</button>
|
||||
<td>
|
||||
<div class="d-flex align-items-center justify-content-end gap-1">
|
||||
<a asp-action="DeleteAPIKey" asp-route-id="@keyData.Id" asp-controller="UIManage" data-bs-toggle="modal" data-bs-target="#ConfirmModal" data-description="Any application using the API key <strong>@Html.Encode(keyData.Label ?? keyData.Id)</strong> will immediately lose access." data-confirm-input="DELETE">Delete</a>
|
||||
<span>-</span>
|
||||
<button type="button" class="btn btn-link only-for-js p-0" data-qr="@index">Show QR</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
index++;
|
||||
|
@ -99,27 +97,18 @@
|
|||
<script src="~/vendor/vue-qrcode-reader/VueQrcodeReader.umd.min.js" asp-append-version="true"></script>
|
||||
|
||||
<script>
|
||||
delegate('click', '[data-reveal-btn]', e => {
|
||||
const $container = e.target.parentElement.querySelector('[hidden]')
|
||||
e.target.setAttribute('hidden', 'true')
|
||||
$container.removeAttribute('hidden')
|
||||
$container.classList.add('d-inline-flex')
|
||||
})
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
$("[data-reveal-btn]").on("click", function (){
|
||||
var $revealButton = $(this);
|
||||
$revealButton.attr("hidden", "true");
|
||||
|
||||
var $apiKeyContainer = $revealButton.next("[hidden]");
|
||||
$apiKeyContainer.removeAttr("hidden");
|
||||
|
||||
(function setupCopyToClipboardButton() {
|
||||
var $clipboardBtn = $apiKeyContainer.children("[data-clipboard-confirm]");
|
||||
var apiKey = $apiKeyContainer.children("[data-api-key]").text().trim();
|
||||
$clipboardBtn.attr("data-clipboard", apiKey);
|
||||
$clipboardBtn.click(window.copyToClipboard);
|
||||
})();
|
||||
});
|
||||
|
||||
const apiKeys = @Safe.Json(Model.ApiKeyDatas.Select(data => new
|
||||
{
|
||||
ApiKey = data.Id,
|
||||
Host = Context.Request.GetAbsoluteRoot()
|
||||
}));
|
||||
{
|
||||
ApiKey = data.Id,
|
||||
Host = Context.Request.GetAbsoluteRoot()
|
||||
}));
|
||||
const qrApp = initQRShow({ title: "API Key QR" });
|
||||
delegate("click", "button[data-qr]", e => {
|
||||
e.preventDefault();
|
||||
|
|
|
@ -31,7 +31,9 @@
|
|||
<p class="mb-2">Scan the QR Code or enter the following key into your two-factor authenticator app:</p>
|
||||
<div class="input-group input-group-sm mb-4">
|
||||
<input readonly class="form-control font-monospace" value="@Model.SharedKey" id="SharedKey" style="max-width:20rem">
|
||||
<button type="button" class="btn btn-outline-secondary" data-clipboard-target="#SharedKey">Copy</button>
|
||||
<button type="button" class="btn btn-outline-secondary" data-clipboard-target="#SharedKey">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
<div id="qrCode"></div>
|
||||
<div id="qrCodeData" data-url="@Model.AuthenticatorUri"></div>
|
||||
|
|
|
@ -13,16 +13,16 @@
|
|||
<body>
|
||||
<div id="app" class="container">
|
||||
<div class="row" style="height:100vh">
|
||||
<div class="col-md-8 col-sm-12 col-lg-6 mx-auto my-auto">
|
||||
<div class="mx-auto my-auto" style="max-width:360px;">
|
||||
<div class="card border-0">
|
||||
<div class="card-body p-4">
|
||||
<h1 class="card-title text-center mt-3">@Model.StoreName</h1>
|
||||
<h2 class="h3 card-subtitle text-center text-secondary my-3">
|
||||
<h1 class="h2 card-title text-center mt-3">@Model.StoreName</h1>
|
||||
<h2 class="h4 card-subtitle text-center text-secondary my-3">
|
||||
<span>@Model.CryptoCode</span>
|
||||
Lightning Node
|
||||
</h2>
|
||||
<h4 class="text-center">
|
||||
<span class="me-1 btcpay-status btcpay-status--@(Model.Available ? "enabled" : "disabled")"></span>
|
||||
<h4 class="d-flex align-items-center justify-content-center gap-2">
|
||||
<span class="btcpay-status btcpay-status--@(Model.Available ? "enabled" : "disabled")" style="margin-top:.1rem;"></span>
|
||||
<span>
|
||||
@(Model.Available ? "Online" : "Unavailable")
|
||||
</span>
|
||||
|
@ -53,8 +53,10 @@
|
|||
<vc:qr-code data="@nodeInfo"/>
|
||||
</div>
|
||||
<div class="input-group" data-clipboard="@nodeInfo">
|
||||
<input type="text" class="form-control" style="cursor:copy" readonly="readonly" value="@nodeInfo" id="nodeInfo-addr-@i"/>
|
||||
<button type="button" class="btn btn-outline-secondary" data-clipboard-confirm>Copy</button>
|
||||
<input type="text" class="form-control" readonly="readonly" value="@nodeInfo" id="nodeInfo-addr-@i"/>
|
||||
<button type="button" class="btn btn-outline-secondary px-3">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
|
|
@ -90,8 +90,10 @@
|
|||
<div class="form-group">
|
||||
<label asp-for="DerivationScheme" class="form-label"></label>
|
||||
<div class="input-group" data-clipboard="@Model.DerivationScheme">
|
||||
<input asp-for="DerivationScheme" class="form-control" style="cursor:copy" readonly />
|
||||
<button type="button" class="input-group-text btn btn-outline-secondary" data-clipboard-confirm style="min-width:8em;">Copy</button>
|
||||
<input asp-for="DerivationScheme" class="form-control" readonly />
|
||||
<button type="button" class="btn btn-outline-secondary px-3">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@if (!string.IsNullOrEmpty(Model.DerivationSchemeInput) && Model.DerivationSchemeInput != Model.DerivationScheme)
|
||||
|
@ -99,8 +101,10 @@
|
|||
<div class="form-group">
|
||||
<label asp-for="DerivationSchemeInput" class="form-label"></label>
|
||||
<div class="input-group" data-clipboard="@Model.DerivationSchemeInput">
|
||||
<input asp-for="DerivationSchemeInput" class="form-control" style="cursor:copy" readonly/>
|
||||
<button type="button" class="input-group-text btn btn-outline-secondary" data-clipboard-confirm style="min-width:8em;">Copy</button>
|
||||
<input asp-for="DerivationSchemeInput" class="form-control" readonly/>
|
||||
<button type="button" class="btn btn-outline-secondary px-3">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
@ -115,8 +119,10 @@
|
|||
</button>
|
||||
</div>
|
||||
<div class="input-group" data-clipboard="@Model.AccountKeys[i].AccountKey">
|
||||
<input asp-for="@Model.AccountKeys[i].AccountKey" class="form-control" style="cursor:copy" readonly/>
|
||||
<button type="button" class="input-group-text btn btn-outline-secondary" data-clipboard-confirm style="min-width:8em;">Copy</button>
|
||||
<input asp-for="@Model.AccountKeys[i].AccountKey" class="form-control" readonly/>
|
||||
<button type="button" class="btn btn-outline-secondary px-3">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
|
|
@ -62,31 +62,33 @@
|
|||
<div class="only-for-js col-sm-10 col-xxl-8 mx-auto" id="app">
|
||||
<div class="tab-content text-center">
|
||||
<div class="tab-pane payment-box" id="link-tab" role="tabpanel">
|
||||
<div class="qr-container" data-clipboard="@Model.PaymentLink" data-clipboard-confirm-element="QR_Text_PaymentLink">
|
||||
<div class="qr-container" data-clipboard="@Model.PaymentLink">
|
||||
<vc:qr-code data="@Model.PaymentLink"/>
|
||||
<img src="@Model.CryptoImage" class="qr-icon" alt="@Model.CryptoCode"/>
|
||||
<small class="qr-text" id="QR_Text_PaymentLink">Scan the QR code, or tap to copy the address.</small>
|
||||
</div>
|
||||
<div class="input-group mt-3">
|
||||
<div class="form-floating">
|
||||
<input id="PaymentLink" class="form-control-plaintext" readonly="readonly" value="@Model.PaymentLink">
|
||||
<label for="PaymentLink">Payment Link</label>
|
||||
</div>
|
||||
<button type="button" class="btn btn-link" data-clipboard-target="#PaymentLink">Copy</button>
|
||||
<button type="button" class="btn btn-link" data-clipboard-target="#PaymentLink">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane payment-box show active" id="address-tab" role="tabpanel">
|
||||
<div class="qr-container" data-clipboard="@Model.Address" data-clipboard-confirm-element="QR_Text_Address">
|
||||
<div class="qr-container" data-clipboard="@Model.Address">
|
||||
<vc:qr-code data="@Model.Address"/>
|
||||
<img src="@Model.CryptoImage" class="qr-icon" alt="@Model.CryptoCode"/>
|
||||
<small class="qr-text" id="QR_Text_Address">Scan the QR code, or tap to copy the address.</small>
|
||||
</div>
|
||||
<div class="input-group mt-3">
|
||||
<div class="form-floating">
|
||||
<input id="Address" class="form-control-plaintext" readonly="readonly" value="@Model.Address">
|
||||
<label for="Address">Address</label>
|
||||
</div>
|
||||
<button type="button" class="btn btn-link" data-clipboard-target="#Address">Copy</button>
|
||||
<button type="button" class="btn btn-link" data-clipboard-target="#Address">
|
||||
<vc:icon symbol="copy" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -126,28 +126,6 @@ section dl > div dd {
|
|||
.payment-details-button .icon {
|
||||
margin-left: -1rem; /* Adjust for visual center */
|
||||
}
|
||||
[data-clipboard] {
|
||||
cursor: copy;
|
||||
}
|
||||
.payment-details [data-clipboard] {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.payment-details [data-clipboard]::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: .5rem;
|
||||
left: -1.5rem;
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGcgY2xpcC1wYXRoPSJ1cmwoI2EpIiBzdHJva2U9IiM4Rjk3OUUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgICA8cGF0aCBkPSJNMTMuMzMgNmgtNkM2LjYgNiA2IDYuNiA2IDcuMzN2NmMwIC43NC42IDEuMzQgMS4zMyAxLjM0aDZjLjc0IDAgMS4zNC0uNiAxLjM0LTEuMzR2LTZjMC0uNzMtLjYtMS4zMy0xLjM0LTEuMzNaIi8+CiAgICA8cGF0aCBkPSJNMy4zMyAxMGgtLjY2YTEuMzMgMS4zMyAwIDAgMS0xLjM0LTEuMzN2LTZhMS4zMyAxLjMzIDAgMCAxIDEuMzQtMS4zNGg2QTEuMzMgMS4zMyAwIDAgMSAxMCAyLjY3di42NiIvPgogIDwvZz4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iYSI+CiAgICAgIDxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTZ2MTZIMHoiLz4KICAgIDwvY2xpcFBhdGg+CiAgPC9kZWZzPgo8L3N2Zz4K");
|
||||
pointer-events: none;
|
||||
opacity: 0;
|
||||
transition: opacity var(--btcpay-transition-duration-fast);
|
||||
}
|
||||
.payment-details [data-clipboard]:hover::before {
|
||||
opacity: 1;
|
||||
}
|
||||
#payment .btcpay-pills .btcpay-pill {
|
||||
padding: var(--btcpay-space-xs) var(--btcpay-space-m);
|
||||
}
|
||||
|
|
|
@ -5,8 +5,9 @@
|
|||
<symbol id="back" viewBox="0 0 21 18" fill="none"><path d="M7.63754 1.10861L0.578503 8.16764C0.119666 8.62648 0.119666 9.37121 0.578503 9.83122L7.63754 16.8902C8.09637 17.3491 8.8411 17.3491 9.30111 16.8902C9.53053 16.6608 9.64583 16.3608 9.64583 16.0585C9.64583 15.7561 9.53053 15.4561 9.30111 15.2267L4.25038 10.1759H19.0579C19.7085 10.1759 20.2344 9.65004 20.2344 8.99943C20.2344 8.34882 19.7085 7.82293 19.0579 7.82293L4.25038 7.82293L9.30111 2.77219C9.53053 2.54277 9.64583 2.24276 9.64583 1.9404C9.64583 1.63804 9.53053 1.33803 9.30111 1.10861C8.84228 0.649771 8.09755 0.649771 7.63754 1.10861Z" fill="currentColor"/></symbol>
|
||||
<symbol id="caret-down" viewBox="0 0 24 24" fill="none"><path d="M7 9.5L12 14.5L17 9.5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/></symbol>
|
||||
<symbol id="caret-right" viewBox="0 0 24 24" fill="none"><path d="M9.5 17L14.5 12L9.5 7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"/></symbol>
|
||||
<symbol id="checkmark" viewBox="0 0 16 16" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.7808 4.21934C13.9213 4.35997 14.0002 4.55059 14.0002 4.74934C14.0002 4.94809 13.9213 5.13871 13.7808 5.27934L6.53082 12.5293C6.3902 12.6698 6.19957 12.7487 6.00082 12.7487C5.80207 12.7487 5.61145 12.6698 5.47082 12.5293L2.22082 9.27934C2.08834 9.13717 2.01622 8.94912 2.01965 8.75482C2.02308 8.56052 2.10179 8.37513 2.2392 8.23772C2.37661 8.10031 2.562 8.02159 2.7563 8.01816C2.9506 8.01474 3.13865 8.08686 3.28082 8.21934L6.00082 10.9393L12.7208 4.21934C12.8614 4.07889 13.0521 4 13.2508 4C13.4496 4 13.6402 4.07889 13.7808 4.21934Z" fill="currentColor"/></symbol>
|
||||
<symbol id="close" viewBox="0 0 16 16" fill="none"><path d="M9.38526 8.08753L15.5498 1.85558C15.9653 1.43545 15.9653 0.805252 15.5498 0.385121C15.1342 -0.0350102 14.5108 -0.0350102 14.0952 0.385121L7.93072 6.61707L1.76623 0.315098C1.35065 -0.105033 0.727273 -0.105033 0.311688 0.315098C-0.103896 0.73523 -0.103896 1.36543 0.311688 1.78556L6.47618 8.0175L0.311688 14.2495C-0.103896 14.6696 -0.103896 15.2998 0.311688 15.7199C0.519481 15.93 0.796499 16 1.07355 16C1.35061 16 1.62769 15.93 1.83548 15.7199L7.99997 9.48797L14.1645 15.7199C14.3722 15.93 14.6493 16 14.9264 16C15.2034 16 15.4805 15.93 15.6883 15.7199C16.1039 15.2998 16.1039 14.6696 15.6883 14.2495L9.38526 8.08753Z" fill="currentColor"/></symbol>
|
||||
<symbol id="copy" viewBox="0 0 24 24" fill="none"><path d="M20 6H8a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2Zm0 13a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v10Z" fill="currentColor"/><path d="M4 5a1 1 0 0 1 1-1h12a1 1 0 1 0 0-2H4a2 2 0 0 0-2 2v13a1 1 0 1 0 2 0V5Z" fill="currentColor"/></symbol>
|
||||
<symbol id="copy" viewBox="0 0 16 16" fill="none"><path d="M13.3333 6H7.33333C6.59695 6 6 6.59695 6 7.33333V13.3333C6 14.0697 6.59695 14.6667 7.33333 14.6667H13.3333C14.0697 14.6667 14.6667 14.0697 14.6667 13.3333V7.33333C14.6667 6.59695 14.0697 6 13.3333 6Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M3.33203 10.0007H2.66536C2.31174 10.0007 1.9726 9.86018 1.72256 9.61013C1.47251 9.36008 1.33203 9.02094 1.33203 8.66732V2.66732C1.33203 2.3137 1.47251 1.97456 1.72256 1.72451C1.9726 1.47446 2.31174 1.33398 2.66536 1.33398H8.66536C9.01899 1.33398 9.35813 1.47446 9.60817 1.72451C9.85822 1.97456 9.9987 2.3137 9.9987 2.66732V3.33398" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></symbol>
|
||||
<symbol id="crowdfund" viewBox="0 0 24 24" fill="none"><path d="M9.1638 12.4922C11.339 12.4922 13.1023 10.7288 13.1023 8.5537C13.1023 6.37854 11.339 4.61523 9.1638 4.61523C6.98865 4.61523 5.22534 6.37854 5.22534 8.5537C5.22534 10.7288 6.98865 12.4922 9.1638 12.4922Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M15.9331 18.0307C17.4965 18.0307 18.7638 16.7633 18.7638 15.1999C18.7638 13.6365 17.4965 12.3691 15.9331 12.3691C14.3697 12.3691 13.1023 13.6365 13.1023 15.1999C13.1023 16.7633 14.3697 18.0307 15.9331 18.0307Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M8.24067 19.3839C9.49818 19.3839 10.5176 18.3645 10.5176 17.107C10.5176 15.8495 9.49818 14.8301 8.24067 14.8301C6.98316 14.8301 5.96375 15.8495 5.96375 17.107C5.96375 18.3645 6.98316 19.3839 8.24067 19.3839Z" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></symbol>
|
||||
<symbol id="docs" viewBox="0 0 16 16" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M8 16A8 8 0 1 0 7.998-.002 8 8 0 0 0 8 16Zm-.336-8.032.773-.616c.258-.203.437-.414.546-.624a1.43 1.43 0 0 0 .172-.71c0-.32-.094-.578-.297-.758-.202-.18-.483-.273-.85-.273s-.664.094-.882.289c-.203.195-.312.46-.312.804 0 .255-.194.489-.449.47l-.728-.053a.458.458 0 0 1-.435-.4 2.521 2.521 0 0 1-.012-.244c0-.655.258-1.178.765-1.568.523-.383 1.21-.578 2.076-.578.913 0 1.616.187 2.115.57.492.374.742.905.742 1.592 0 .765-.367 1.452-1.093 2.068l-.679.57a1.375 1.375 0 0 0-.28.312.738.738 0 0 0-.071.351.36.36 0 0 1-.36.36h-.78a.5.5 0 0 1-.5-.5v-.023c0-.235.048-.43.133-.586a1.82 1.82 0 0 1 .406-.453Zm-.406 4.036a.97.97 0 0 0 .726.288c.305 0 .547-.093.734-.288a.988.988 0 0 0 .289-.734c0-.304-.094-.546-.289-.742-.187-.195-.43-.288-.734-.288a.97.97 0 0 0-.726.288 1.019 1.019 0 0 0-.28.742c0 .296.093.539.28.734Z" fill="currentColor"/></symbol>
|
||||
<symbol id="donate" viewBox="0 0 16 16" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.65 14.91a.75.75 0 0 0 .7 0L8 14.26l.35.66h.02c1.33-.74 2.59-1.6 3.75-2.6C13.96 10.74 16 8.36 16 5.5 16 2.84 13.91 1 11.75 1 10.2 1 8.85 1.8 8 3.02A4.57 4.57 0 0 0 4.25 1 4.38 4.38 0 0 0 0 5.5c0 2.85 2.04 5.23 3.88 6.82a22.08 22.08 0 0 0 3.75 2.58l.02.01Z" fill="currentColor"/></symbol>
|
||||
|
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 46 KiB |
|
@ -1,15 +1,17 @@
|
|||
function confirmCopy(el, message) {
|
||||
el.dataset.clipboardInitial = el.innerHTML;
|
||||
el.style.minWidth = el.getBoundingClientRect().width + 'px';
|
||||
const confirmHTML = `<span class="text-success">${message}</span>`;
|
||||
el.innerHTML = confirmHTML;
|
||||
const hasIcon = !!el.innerHTML.match('icon-copy')
|
||||
if (hasIcon) {
|
||||
el.innerHTML = el.innerHTML.replace('#copy', '#checkmark');
|
||||
}
|
||||
el.dataset.clipboardConfirming = true;
|
||||
if (el.dataset.clipboardHandler) {
|
||||
clearTimeout(parseInt(el.dataset.clipboardHandler));
|
||||
}
|
||||
const timeoutId = setTimeout(function () {
|
||||
if (el.innerHTML === confirmHTML) {
|
||||
el.innerHTML = el.dataset.clipboardInitial;
|
||||
if (hasIcon) {
|
||||
el.innerHTML = el.innerHTML.replace('#checkmark', '#copy');
|
||||
}
|
||||
delete el.dataset.clipboardConfirming;
|
||||
el.dataset.clipboardHandler = null;
|
||||
}, 2500);
|
||||
el.dataset.clipboardHandler = timeoutId.toString();
|
||||
|
|
|
@ -425,16 +425,28 @@
|
|||
background: var(--btcpay-footer-bg);
|
||||
}
|
||||
|
||||
.btcpay-footer a {
|
||||
.btcpay-footer a,
|
||||
.btcpay-footer button {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--btcpay-space-s);
|
||||
color: var(--btcpay-footer-link);
|
||||
font-size: var(--btcpay-font-size-s);
|
||||
text-decoration: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.btcpay-footer a:focus,
|
||||
.btcpay-footer a:hover {
|
||||
.btcpay-footer a:hover,
|
||||
.btcpay-footer button:focus,
|
||||
.btcpay-footer button:hover {
|
||||
color: var(--btcpay-footer-link-accent);
|
||||
}
|
||||
|
||||
.btcpay-footer [data-clipboard-hover]::before {
|
||||
top: .125rem;
|
||||
}
|
||||
|
||||
@media (max-width: 991px) {
|
||||
:root {
|
||||
--header-height: var(--mobile-header-height);
|
||||
|
|
|
@ -769,7 +769,7 @@ a.store-powered-by:hover .logo-brand-dark {
|
|||
font-weight: var(--btcpay-font-weight-semibold);
|
||||
}
|
||||
.payment-box .input-group button {
|
||||
padding: var(--btcpay-space-xs) 0;
|
||||
padding: 0 0 var(--btcpay-space-xs) 0;
|
||||
font-weight: var(--btcpay-font-weight-semibold);
|
||||
}
|
||||
|
||||
|
@ -853,3 +853,48 @@ a.store-powered-by:hover .logo-brand-dark {
|
|||
margin: 0;
|
||||
padding-left: var(--btcpay-space-m);
|
||||
}
|
||||
|
||||
/* Copy */
|
||||
[data-clipboard],
|
||||
[data-clipboard] input[readonly] {
|
||||
cursor: copy;
|
||||
}
|
||||
[data-clipboard-hover] {
|
||||
position: relative;
|
||||
}
|
||||
[data-clipboard-hover]::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: .45rem;
|
||||
left: calc(100% + var(--btcpay-space-s));
|
||||
width: .75em;
|
||||
height: .75em;
|
||||
min-width: 1rem;
|
||||
min-height: 1rem;
|
||||
pointer-events: none;
|
||||
opacity: 0;
|
||||
transition: opacity var(--btcpay-transition-duration-fast);
|
||||
background-repeat: no-repeat;
|
||||
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.3333 6H7.33333C6.59695 6 6 6.59695 6 7.33333V13.3333C6 14.0697 6.59695 14.6667 7.33333 14.6667H13.3333C14.0697 14.6667 14.6667 14.0697 14.6667 13.3333V7.33333C14.6667 6.59695 14.0697 6 13.3333 6Z' stroke='%236E7681' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M3.33203 10.0007H2.66536C2.31174 10.0007 1.9726 9.86018 1.72256 9.61013C1.47251 9.36008 1.33203 9.02094 1.33203 8.66732V2.66732C1.33203 2.3137 1.47251 1.97456 1.72256 1.72451C1.9726 1.47446 2.31174 1.33398 2.66536 1.33398H8.66536C9.01899 1.33398 9.35813 1.47446 9.60817 1.72451C9.85822 1.97456 9.9987 2.3137 9.9987 2.66732V3.33398' stroke='%236E7681' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
||||
}
|
||||
[data-clipboard-hover="start"]::before {
|
||||
left: auto;
|
||||
right: calc(100% + var(--btcpay-space-s));
|
||||
}
|
||||
[data-clipboard-hover][data-clipboard-confirming]::before {
|
||||
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13.7808 4.21934C13.9213 4.35997 14.0002 4.55059 14.0002 4.74934C14.0002 4.94809 13.9213 5.13871 13.7808 5.27934L6.53082 12.5293C6.3902 12.6698 6.19957 12.7487 6.00082 12.7487C5.80207 12.7487 5.61145 12.6698 5.47082 12.5293L2.22082 9.27934C2.08834 9.13717 2.01622 8.94912 2.01965 8.75482C2.02308 8.56052 2.10179 8.37513 2.2392 8.23772C2.37661 8.10031 2.562 8.02159 2.7563 8.01816C2.9506 8.01474 3.13865 8.08686 3.28082 8.21934L6.00082 10.9393L12.7208 4.21934C12.8614 4.07889 13.0521 4 13.2508 4C13.4496 4 13.6402 4.07889 13.7808 4.21934Z' fill='%2351B13E'/%3E%3C/svg%3E ");
|
||||
}
|
||||
[data-clipboard-hover]:hover::before {
|
||||
opacity: 1;
|
||||
}
|
||||
.btn[data-clipboard],
|
||||
.btn[data-clipboard-target] {
|
||||
color: var(--btcpay-body-text-muted);
|
||||
}
|
||||
.btn[data-clipboard]:hover,
|
||||
.btn[data-clipboard-target]:hover {
|
||||
color: var(--btcpay-body-link-accent);
|
||||
}
|
||||
.btn[data-clipboard-confirming] {
|
||||
color: var(--btcpay-success) !important;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue