Bootstrap migration fixups (#2534)

* Remove xxl breakpoint

* Remove code bg

* Form updates

* Update PoS accordion

* Update forms

* Fix webhook password toggle

* Update highlight js styles

* Page updates

* Style unformatted checkboxes

* Fix typo

* Update accordions

* Update policies domain mapping

* Update toggles and checkboxes

* Update storage pages

* Fix specter logo filename casing

* Update checkout experience view

* Update webhook view

* Re-add used negative margins

* Update bootstrap

* POS layout fixes

* Decrease size of info icon in main headline

* Update BTCPayServer/Views/Stores/ModifyWebhook.cshtml

Co-authored-by: britttttk <39231115+britttttk@users.noreply.github.com>

Co-authored-by: britttttk <39231115+britttttk@users.noreply.github.com>
This commit is contained in:
d11n
2021-06-06 13:44:54 +02:00
committed by GitHub
parent 784a40e2ed
commit 64a7abe53a
72 changed files with 978 additions and 1565 deletions

View File

@@ -5,6 +5,7 @@ namespace BTCPayServer.Models.ServerViewModels
public class LndServicesViewModel public class LndServicesViewModel
{ {
public string Host { get; set; } public string Host { get; set; }
[Display(Name = "Use SSL")]
public bool SSL { get; set; } public bool SSL { get; set; }
public string Macaroon { get; set; } public string Macaroon { get; set; }
public string AdminMacaroon { get; set; } public string AdminMacaroon { get; set; }

View File

@@ -31,17 +31,16 @@ namespace BTCPayServer.Models.StoreViewModels
[Display(Name = "Default payment method on checkout")] [Display(Name = "Default payment method on checkout")]
public string DefaultPaymentMethod { get; set; } public string DefaultPaymentMethod { get; set; }
[Display(Name = "Requires a refund email")] [Display(Name = "Requires a refund email")]
public bool RequiresRefundEmail { get; set; } public bool RequiresRefundEmail { get; set; }
[Display(Name = "Display lightning payment amounts in Satoshis")] [Display(Name = "Display Lightning payment amounts in Satoshis")]
public bool LightningAmountInSatoshi { get; set; } public bool LightningAmountInSatoshi { get; set; }
[Display(Name = "Add hop hints for private channels to the lightning invoice")] [Display(Name = "Add hop hints for private channels to the Lightning invoice")]
public bool LightningPrivateRouteHints { get; set; } public bool LightningPrivateRouteHints { get; set; }
[Display(Name = "Include lightning invoice fallback to on-chain BIP21 payment url")] [Display(Name = "Include Lightning invoice fallback to on-chain BIP21 payment URL")]
public bool OnChainWithLnInvoiceFallback { get; set; } public bool OnChainWithLnInvoiceFallback { get; set; }
[Display(Name = "Only enable the payment method after user explicitly chooses it")] [Display(Name = "Only enable the payment method after user explicitly chooses it")]

View File

@@ -23,7 +23,7 @@
</p> </p>
<div asp-validation-summary="All" class="text-danger"></div> <div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group"> <div class="form-group">
<label asp-for="Email"></label> <label asp-for="Email" class="form-label"></label>
<input asp-for="Email" class="form-control" /> <input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span> <span asp-validation-for="Email" class="text-danger"></span>
</div> </div>

View File

@@ -13,13 +13,13 @@
<div asp-validation-summary="ModelOnly" class="text-danger"></div> <div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input asp-for="RememberMe" type="hidden"/> <input asp-for="RememberMe" type="hidden"/>
<div class="form-group"> <div class="form-group">
<label asp-for="TwoFactorCode"></label> <label asp-for="TwoFactorCode" class="form-label"></label>
<input asp-for="TwoFactorCode" class="form-control" autocomplete="off" autofocus style="width:13em" /> <input asp-for="TwoFactorCode" class="form-control" autocomplete="off" autofocus style="width:13em" />
<span asp-validation-for="TwoFactorCode" class="text-danger"></span> <span asp-validation-for="TwoFactorCode" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="checkbox"> <div class="checkbox">
<label asp-for="RememberMachine"> <label asp-for="RememberMachine" class="form-label">
<input asp-for="RememberMachine"/> <input asp-for="RememberMachine"/>
@Html.DisplayNameFor(m => m.RememberMachine) @Html.DisplayNameFor(m => m.RememberMachine)
</label> </label>

View File

@@ -37,17 +37,17 @@
<fieldset disabled="@(ViewData.ContainsKey("disabled") ? "disabled" : null)" > <fieldset disabled="@(ViewData.ContainsKey("disabled") ? "disabled" : null)" >
<div asp-validation-summary="ModelOnly" class="text-danger"></div> <div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group"> <div class="form-group">
<label asp-for="Email"></label> <label asp-for="Email" class="form-label"></label>
<input asp-for="Email" class="form-control" required autofocus /> <input asp-for="Email" class="form-control" required autofocus />
<span asp-validation-for="Email" class="text-danger"></span> <span asp-validation-for="Email" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Password"></label> <label asp-for="Password" class="form-label"></label>
<input asp-for="Password" class="form-control" required /> <input asp-for="Password" class="form-control" required />
<span asp-validation-for="Password" class="text-danger"></span> <span asp-validation-for="Password" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="ConfirmPassword"></label> <label asp-for="ConfirmPassword" class="form-label"></label>
<input asp-for="ConfirmPassword" class="form-control" required /> <input asp-for="ConfirmPassword" class="form-control" required />
<span asp-validation-for="ConfirmPassword" class="text-danger"></span> <span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div> </div>

View File

@@ -36,27 +36,26 @@
{ {
<input asp-for="Email" type="hidden"/> <input asp-for="Email" type="hidden"/>
<div class="form-group"> <div class="form-group">
<label asp-for="Email"></label> <label asp-for="Email" class="form-label"></label>
<input type="text" disabled value="@Model.Email" class="form-control"/> <input type="text" disabled value="@Model.Email" class="form-control"/>
<span asp-validation-for="Email" class="text-danger"></span> <span asp-validation-for="Email" class="text-danger"></span>
</div> </div>
} }
else else
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="Email"></label> <label asp-for="Email" class="form-label"></label>
<input asp-for="Email" value="@Model.Email" class="form-control"/> <input asp-for="Email" value="@Model.Email" class="form-control"/>
<span asp-validation-for="Email" class="text-danger"></span> <span asp-validation-for="Email" class="text-danger"></span>
</div> </div>
} }
<div class="form-group"> <div class="form-group">
<label asp-for="Password"></label> <label asp-for="Password" class="form-label"></label>
<input asp-for="Password" class="form-control"/> <input asp-for="Password" class="form-control"/>
<span asp-validation-for="Password" class="text-danger"></span> <span asp-validation-for="Password" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="ConfirmPassword"></label> <label asp-for="ConfirmPassword" class="form-label"></label>
<input asp-for="ConfirmPassword" class="form-control"/> <input asp-for="ConfirmPassword" class="form-control"/>
<span asp-validation-for="ConfirmPassword" class="text-danger"></span> <span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div> </div>

View File

@@ -44,7 +44,7 @@
</button> </button>
</div> </div>
</div> </div>
<div class="card-footer text-start"> <div class="card-footer text-start p-3">
<button type="button" class="btn btn-secondary" v-on:click="editItem(-1)" id="btn-add"> <button type="button" class="btn btn-secondary" v-on:click="editItem(-1)" id="btn-add">
<i class="fa fa-plus fa-fw"></i> Add <i class="fa fa-plus fa-fw"></i> Add
</button> </button>
@@ -65,13 +65,13 @@
<div class="modal-body" v-if="editingItem"> <div class="modal-body" v-if="editingItem">
<div class="mb-3"> <div class="mb-3">
<span class="text-danger row m-2" v-for="error of errors">{{error}}</span> <span class="text-danger row m-2" v-for="error of errors">{{error}}</span>
<div class="form-row"> <div class="form-group row">
<div class="col-sm-6"> <div class="col-sm-6">
<label data-required>Title</label> <label class="form-label" data-required>Title</label>
<input type="text" required pattern="[^\*#]+" class="form-control mb-2" v-model="editingItem.title" autofocus ref="txtTitle" /> <input type="text" required pattern="[^\*#]+" class="form-control mb-2" v-model="editingItem.title" autofocus ref="txtTitle" />
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<label data-required>Price</label> <label class="form-label" data-required>Price</label>
<input class="form-control mb-2" <input class="form-control mb-2"
inputmode="numeric" inputmode="numeric"
pattern="\d*" pattern="\d*"
@@ -82,45 +82,34 @@
v-model="editingItem.price" ref="txtPrice"/> v-model="editingItem.price" ref="txtPrice"/>
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<label>Custom price</label> <label class="form-label">Custom price</label>
<select class="form-select" v-model="editingItem.custom"> <select class="form-select" v-model="editingItem.custom">
<option v-for="option in customPriceOptions" :value="option.value">{{option.text}}</option> <option v-for="option in customPriceOptions" :value="option.value">{{option.text}}</option>
</select> </select>
</div> </div>
</div> </div>
<div class="form-row"> <div class="form-group">
<div class="col"> <label class="form-label">Image</label>
<label>Image</label>
<input type="text" class="form-control mb-2" pattern="[^\*#]+" v-model="editingItem.image" ref="txtImage"/> <input type="text" class="form-control mb-2" pattern="[^\*#]+" v-model="editingItem.image" ref="txtImage"/>
</div> </div>
</div> <div class="form-group">
<div class="form-row"> <label class="form-label">Description</label>
<div class="col">
<label>Description</label>
<textarea rows="3" cols="40" class="form-control mb-2" v-model="editingItem.description" ref="txtDescription"></textarea> <textarea rows="3" cols="40" class="form-control mb-2" v-model="editingItem.description" ref="txtDescription"></textarea>
</div> </div>
</div> <div class="form-group">
<div class="form-row"> <label class="form-label">Inventory (leave blank to not use inventory feature)</label>
<div class="col">
<label>Inventory (leave blank to not use inventory feature)</label>
<input type="number" min="0" step="1" class="form-control mb-2" v-model="editingItem.inventory" ref="txtInventory" /> <input type="number" min="0" step="1" class="form-control mb-2" v-model="editingItem.inventory" ref="txtInventory" />
</div> </div>
<div class="form-group">
</div> <label class="form-label">Id (leave blank to generate from title)</label>
<div class="form-row">
<div class="col">
<label>Id (leave blank to generate from title)</label>
<input type="text" required pattern="[^\*#]+" class="form-control mb-2" v-model="editingItem.id" ref="txtId"/> <input type="text" required pattern="[^\*#]+" class="form-control mb-2" v-model="editingItem.id" ref="txtId"/>
</div> </div>
</div> <div class="form-group">
<div class="form-row"> <label class="form-label">Buy Button Text</label>
<div class="col">
<label>Buy Button Text</label>
<input type="text" id="BuyButtonText" class="form-control mb-2" v-model="editingItem.buyButtonText" ref="txtBuyButtonText"/> <input type="text" id="BuyButtonText" class="form-control mb-2" v-model="editingItem.buyButtonText" ref="txtBuyButtonText"/>
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" v-on:click="clearEditingItem()">Close</button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal" v-on:click="clearEditingItem()">Close</button>
<button type="button" class="btn btn-primary" v-on:click="saveEditingItem()" id="SaveItemChanges">Save Changes</button> <button type="button" class="btn btn-primary" v-on:click="saveEditingItem()" id="SaveItemChanges">Save Changes</button>

View File

@@ -152,7 +152,7 @@
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Sounds"></label> <label asp-for="Sounds" class="form-label"></label>
<textarea asp-for="Sounds" class="form-control"></textarea> <textarea asp-for="Sounds" class="form-control"></textarea>
<span asp-validation-for="Sounds" class="text-danger"></span> <span asp-validation-for="Sounds" class="text-danger"></span>
</div> </div>
@@ -164,7 +164,7 @@
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="AnimationColors"></label> <label asp-for="AnimationColors" class="form-label"></label>
<textarea asp-for="AnimationColors" class="form-control"></textarea> <textarea asp-for="AnimationColors" class="form-control"></textarea>
<span asp-validation-for="AnimationColors" class="text-danger"></span> <span asp-validation-for="AnimationColors" class="text-danger"></span>
</div> </div>

View File

@@ -126,14 +126,15 @@
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="accordion" id="accordian-dev-info"> <div class="accordion" id="accordion-dev-info">
<div class="accordion-item"> <div class="accordion-item">
<h2 class="accordion-header" id="accordian-dev-info-embed-payment-button-header"> <h2 class="accordion-header" id="accordion-dev-info-embed-payment-button-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#accordian-dev-info-embed-payment-button" aria-expanded="false" aria-controls="accordian-dev-info-embed-payment-button"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#accordion-dev-info-embed-payment-button" aria-expanded="false" aria-controls="accordion-dev-info-embed-payment-button">
Embed Payment Button linking to POS item Embed Payment Button linking to POS item
<vc:icon symbol="caret-down"/>
</button> </button>
</h2> </h2>
<div id="accordian-dev-info-embed-payment-button" class="accordion-collapse collapse" aria-labelledby="accordian-dev-info-embed-payment-button-header" data-bs-parent="#accordian-dev-info"> <div id="accordion-dev-info-embed-payment-button" class="accordion-collapse collapse" aria-labelledby="accordion-dev-info-embed-payment-button-header" data-bs-parent="#accordion-dev-info">
<div class="accordion-body"> <div class="accordion-body">
<p>You can host point of sale buttons in an external website with the following code.</p> <p>You can host point of sale buttons in an external website with the following code.</p>
@if (Model.Example1 != null) @if (Model.Example1 != null)
@@ -150,12 +151,13 @@
</div> </div>
</div> </div>
<div class="accordion-item"> <div class="accordion-item">
<h2 class="accordion-header" id="accordian-dev-info-embed-pos-iframe-header"> <h2 class="accordion-header" id="accordion-dev-info-embed-pos-iframe-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#accordian-dev-info-embed-pos-iframe" aria-expanded="false" aria-controls="accordian-dev-info-embed-pos-iframe"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#accordion-dev-info-embed-pos-iframe" aria-expanded="false" aria-controls="accordion-dev-info-embed-pos-iframe">
Embed POS with Iframe Embed POS with Iframe
<vc:icon symbol="caret-down"/>
</button> </button>
</h2> </h2>
<div id="accordian-dev-info-embed-pos-iframe" class="accordion-collapse collapse" aria-labelledby="accordian-dev-info-embed-pos-iframe-header" data-bs-parent="#accordian-dev-info"> <div id="accordion-dev-info-embed-pos-iframe" class="accordion-collapse collapse" aria-labelledby="accordion-dev-info-embed-pos-iframe-header" data-bs-parent="#accordion-dev-info">
<div class="accordion-body"> <div class="accordion-body">
You can embed the POS using an iframe You can embed the POS using an iframe
@{ @{
@@ -166,12 +168,13 @@
</div> </div>
</div> </div>
<div class="accordion-item"> <div class="accordion-item">
<h2 class="accordion-header" id="accordian-dev-info-notification-header"> <h2 class="accordion-header" id="accordion-dev-info-notification-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#accordian-dev-info-notification" aria-expanded="false" aria-controls="accordian-dev-info-notification"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#accordion-dev-info-notification" aria-expanded="false" aria-controls="accordion-dev-info-notification">
Notification Url Callbacks Notification Url Callbacks
<vc:icon symbol="caret-down"/>
</button> </button>
</h2> </h2>
<div id="accordian-dev-info-notification" class="accordion-collapse collapse" aria-labelledby="accordian-dev-info-notification-header" data-bs-parent="#accordian-dev-info"> <div id="accordion-dev-info-notification" class="accordion-collapse collapse" aria-labelledby="accordion-dev-info-notification-header" data-bs-parent="#accordion-dev-info">
<div class="accordion-body"> <div class="accordion-body">
<p>A <code>POST</code> callback will be sent to notification with the following form will be sent to <code>notificationUrl</code> once the enough is paid and once again once there is enough confirmations to the payment:</p> <p>A <code>POST</code> callback will be sent to notification with the following form will be sent to <code>notificationUrl</code> once the enough is paid and once again once there is enough confirmations to the payment:</p>
<pre><code class="json">@Model.ExampleCallback</code></pre> <pre><code class="json">@Model.ExampleCallback</code></pre>
@@ -219,13 +222,13 @@
<div class="mb-3"> <div class="mb-3">
<input class="js-product-id" type="hidden" name="id" value="{id}"> <input class="js-product-id" type="hidden" name="id" value="{id}">
<input class="js-product-index" type="hidden" name="index" value="{index}"> <input class="js-product-index" type="hidden" name="index" value="{index}">
<div class="form-row"> <div class="form-group row">
<div class="col-sm-6"> <div class="col-sm-6">
<label data-required>Title</label> <label class="form-label" data-required>Title</label>
<input type="text" class="js-product-title form-control mb-2" value="{title}" autofocus required /> <input type="text" class="js-product-title form-control mb-2" value="{title}" autofocus required />
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<label data-required>Price</label> <label class="form-label" data-required>Price</label>
<input class="js-product-price form-control mb-2" <input class="js-product-price form-control mb-2"
inputmode="numeric" inputmode="numeric"
pattern="\d*" pattern="\d*"
@@ -234,31 +237,25 @@
required /> required />
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<label>Custom price</label> <label class="form-label">Custom price</label>
<select class="js-product-custom form-select"> <select class="js-product-custom form-select">
{custom} {custom}
</select> </select>
</div> </div>
</div> </div>
<div class="form-row"> <div class="form-group">
<div class="col"> <label class="form-label">Image</label>
<label>Image</label>
<input type="text" class="js-product-image form-control mb-2" value="{image}" /> <input type="text" class="js-product-image form-control mb-2" value="{image}" />
</div> </div>
</div> <div class="form-group">
<div class="form-row"> <label class="form-label">Description</label>
<div class="col">
<label>Description</label>
<textarea rows="3" cols="40" class="js-product-description form-control mb-2">{description}</textarea> <textarea rows="3" cols="40" class="js-product-description form-control mb-2">{description}</textarea>
</div> </div>
</div> <div class="form-group">
<div class="form-row"> <label class="form-label">Inventory (leave blank to not use inventory feature)</label>
<div class="col">
<label>Inventory (leave blank to not use inventory feature)</label>
<input type="number" step="1" class="js-product-inventory form-control mb-2" value="{inventory}" /> <input type="number" step="1" class="js-product-inventory form-control mb-2" value="{inventory}" />
</div> </div>
</div> </div>
</div>
</script> </script>
<bundle name="wwwroot/bundles/pos-admin-bundle.min.js" asp-append-version="true"></bundle> <bundle name="wwwroot/bundles/pos-admin-bundle.min.js" asp-append-version="true"></bundle>

View File

@@ -15,7 +15,7 @@
<td class="align-middle px-0"> <td class="align-middle px-0">
<div class="input-group align-items-center"> <div class="input-group align-items-center">
<a class="js-cart-item-minus btn btn-link px-2" href="#"><i class="fa fa-minus-circle fa-fw text-danger"></i></a> <a class="js-cart-item-minus btn btn-link px-2" href="#"><i class="fa fa-minus-circle fa-fw text-danger"></i></a>
<input class="js-cart-item-count form-control form-control-sm pull-left" type="number" step="1" name="count" placeholder="Qty" max="{inventory}" value="{count}" data-prev="{count}"> <input class="js-cart-item-count form-control form-control-sm pull-left hide-number-spin text-end" type="number" step="1" name="count" placeholder="Qty" max="{inventory}" value="{count}" data-prev="{count}">
<a class="input-group-text js-cart-item-plus btn btn-link px-2" href="#"> <a class="input-group-text js-cart-item-plus btn btn-link px-2" href="#">
<i class="fa fa-plus-circle fa-fw text-success"></i> <i class="fa fa-plus-circle fa-fw text-success"></i>
</a> </a>
@@ -211,14 +211,14 @@
} }
</div> </div>
<div id="js-pos-list" class="text-center mx-auto px-4"> <div id="js-pos-list" class="text-center mx-auto px-4">
<div class="row card-deck my-3"> <div class="card-deck my-3">
@for (var index = 0; index < Model.Items.Length; index++) @for (var index = 0; index < Model.Items.Length; index++)
{ {
var item = Model.Items[index]; var item = Model.Items[index];
var image = item.Image; var image = item.Image;
var description = item.Description; var description = item.Description;
<div class="js-add-cart card px-0 m-2 card-wrapper" data-index="@index"> <div class="js-add-cart card px-0 card-wrapper" data-index="@index">
@if (!String.IsNullOrWhiteSpace(image)) @if (!String.IsNullOrWhiteSpace(image))
{ {
@:<img class="card-img-top" src="@image" alt="Card image cap" asp-append-version="true"> @:<img class="card-img-top" src="@image" alt="Card image cap" asp-append-version="true">
@@ -230,7 +230,7 @@
<p class="card-text">@Safe.Raw(description)</p> <p class="card-text">@Safe.Raw(description)</p>
} }
</div> </div>
<div class="card-footer pt-0 bg-transparent border-0"> <div class="card-footer bg-transparent border-0 pt-0 pb-3">
<span class="text-muted small">@((item.BuyButtonText ?? Model.ButtonText).Replace("{0}",item.Price.Formatted).Replace("{Price}",item.Price.Formatted))</span> <span class="text-muted small">@((item.BuyButtonText ?? Model.ButtonText).Replace("{0}",item.Price.Formatted).Replace("{Price}",item.Price.Formatted))</span>
@if (item.Inventory.HasValue) @if (item.Inventory.HasValue)

View File

@@ -15,7 +15,7 @@
<div class="overflow-hidden col-12">@Safe.Raw(Model.Description)</div> <div class="overflow-hidden col-12">@Safe.Raw(Model.Description)</div>
</div> </div>
} }
<div class="row card-deck my-3 mx-auto"> <div class="card-deck my-3 mx-auto">
@for (int x = 0; x < Model.Items.Length; x++) @for (int x = 0; x < Model.Items.Length; x++)
{ {
var item = Model.Items[x]; var item = Model.Items[x];
@@ -26,13 +26,13 @@
: item.BuyButtonText) : item.BuyButtonText)
.Replace("{0}",item.Price.Formatted) .Replace("{0}",item.Price.Formatted)
.Replace("{Price}",item.Price.Formatted); .Replace("{Price}",item.Price.Formatted);
<div class="card px-0 m-2" data-id="@x"> <div class="card px-0" data-id="@x">
@if (!String.IsNullOrWhiteSpace(item.Image)) @if (!String.IsNullOrWhiteSpace(item.Image))
{ {
<img class="card-img-top" src="@item.Image" alt="Card image cap" asp-append-version="true"> <img class="card-img-top" src="@item.Image" alt="Card image cap" asp-append-version="true">
} }
@{CardBody(item.Title, item.Description);} @{CardBody(item.Title, item.Description);}
<div class="card-footer bg-transparent border-0"> <div class="card-footer bg-transparent border-0 pb-3">
@if (!item.Inventory.HasValue || item.Inventory.Value > 0) @if (!item.Inventory.HasValue || item.Inventory.Value > 0)
{ {
@if (item.Custom) @if (item.Custom)
@@ -74,9 +74,9 @@
} }
@if (Model.ShowCustomAmount) @if (Model.ShowCustomAmount)
{ {
<div class="card px-0 m-2"> <div class="card px-0">
@{CardBody("Custom Amount", "Create invoice to pay custom amount");} @{CardBody("Custom Amount", "Create invoice to pay custom amount");}
<div class="card-footer bg-transparent border-0"> <div class="card-footer bg-transparent border-0 pb-3">
<form method="post" asp-controller="AppsPublic" asp-action="ViewPointOfSale" asp-route-appId="@Model.AppId" asp-antiforgery="false" data-buy> <form method="post" asp-controller="AppsPublic" asp-action="ViewPointOfSale" asp-route-appId="@Model.AppId" asp-antiforgery="false" data-buy>
@{PayFormInputContent(Model.CustomButtonText);} @{PayFormInputContent(Model.CustomButtonText);}
</form> </form>

View File

@@ -22,22 +22,22 @@
</a> </a>
</p> </p>
<div class="form-group"> <div class="form-group">
<label asp-for="MerchantId"></label> <label asp-for="MerchantId" class="form-label"></label>
<input asp-for="MerchantId" class="form-control"/> <input asp-for="MerchantId" class="form-control"/>
<span asp-validation-for="MerchantId" class="text-danger"></span> <span asp-validation-for="MerchantId" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Mode"></label> <label asp-for="Mode" class="form-label"></label>
<select asp-for="Mode" asp-items="Model.Modes" class="form-select"></select> <select asp-for="Mode" asp-items="Model.Modes" class="form-select"></select>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="AmountMarkupPercentage"></label> <label asp-for="AmountMarkupPercentage" class="form-label"></label>
<input asp-for="AmountMarkupPercentage" class="form-control"/> <input asp-for="AmountMarkupPercentage" class="form-control"/>
<span asp-validation-for="AmountMarkupPercentage" class="text-danger"></span> <span asp-validation-for="AmountMarkupPercentage" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group form-check">
<label asp-for="Enabled"></label> <label asp-for="Enabled" class="form-check-label"></label>
<input asp-for="Enabled" type="checkbox" class="form-check"/> <input asp-for="Enabled" type="checkbox" class="form-check-input"/>
</div> </div>
<button name="command" type="submit" value="save" class="btn btn-primary">Submit</button> <button name="command" type="submit" value="save" class="btn btn-primary">Submit</button>
</form> </form>

View File

@@ -19,45 +19,45 @@
<input type="hidden" asp-for="OriginalIndex"/> <input type="hidden" asp-for="OriginalIndex"/>
<div class="form-group"> <div class="form-group">
<label asp-for="Seed"></label> <label asp-for="Seed" class="form-label"></label>
<input asp-for="Seed" type="text" class="form-control"/> <input asp-for="Seed" type="text" class="form-control"/>
<span asp-validation-for="Seed" class="text-danger"></span> <span asp-validation-for="Seed" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Passphrase"></label> <label asp-for="Passphrase" class="form-label"></label>
<input type="text" asp-for="Passphrase" class="form-control" autocomplete="off"/> <input type="text" asp-for="Passphrase" class="form-control" autocomplete="off"/>
<span asp-validation-for="Passphrase" class="text-danger"></span> <span asp-validation-for="Passphrase" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="KeyPath"></label> <label asp-for="KeyPath" class="form-label"></label>
<input asp-for="KeyPath" class="form-control"/> <input asp-for="KeyPath" class="form-control"/>
<span class="text-muted">Please see <a href="https://medium.com/myetherwallet/hd-wallets-and-derivation-paths-explained-865a643c7bf2" target="_blank">this article.</a></span> <span class="text-muted">Please see <a href="https://medium.com/myetherwallet/hd-wallets-and-derivation-paths-explained-865a643c7bf2" target="_blank">this article.</a></span>
<span asp-validation-for="KeyPath" class="text-danger"></span> <span asp-validation-for="KeyPath" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group form-check">
<label asp-for="StoreSeed"></label> <input asp-for="StoreSeed" type="checkbox" class="form-check-input"/>
<input asp-for="StoreSeed" type="checkbox" class="form-check"/> <label asp-for="StoreSeed" class="form-check-label"></label>
<span class="text-muted">Store the seed/password on server if provided. If not checked, will generate the xpub and erase the seed/pass from server</span> <span class="text-muted">Store the seed/password on server if provided. If not checked, will generate the xpub and erase the seed/pass from server</span>
<span asp-validation-for="StoreSeed" class="text-danger"></span> <span asp-validation-for="StoreSeed" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="XPub"></label> <label asp-for="XPub" class="form-label"></label>
<input asp-for="XPub" class="form-control"/> <input asp-for="XPub" class="form-control"/>
<span class="text-muted">The public master key derived from a seed/pass/keypath. This allows you to generate addresses without private keys on the server.</span> <span class="text-muted">The public master key derived from a seed/pass/keypath. This allows you to generate addresses without private keys on the server.</span>
<span asp-validation-for="XPub" class="text-danger"></span> <span asp-validation-for="XPub" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Index"></label> <label asp-for="Index" class="form-label"></label>
<input asp-for="Index" type="number" min="0" class="form-control"/> <input asp-for="Index" type="number" min="0" class="form-control"/>
<span class="text-muted">The index to generate the next address from. If you are using a wallet that you have used before, be sure to set this to the last index +1</span> <span class="text-muted">The index to generate the next address from. If you are using a wallet that you have used before, be sure to set this to the last index +1</span>
<span asp-validation-for="Index" class="text-danger"></span> <span asp-validation-for="Index" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="AddressCheck"></label> <label asp-for="AddressCheck" class="form-label"></label>
<div class="input-group"> <div class="input-group">
<input asp-for="AddressCheck" type="text" class="form-control"/> <input asp-for="AddressCheck" type="text" class="form-control"/>
<div class="input-group-text"> <div class="input-group-text">
@@ -67,9 +67,9 @@
<span class="text-muted">Check wallet by providing an address it can generate within the first 1000 indexes</span> <span class="text-muted">Check wallet by providing an address it can generate within the first 1000 indexes</span>
<span asp-validation-for="AddressCheck" class="text-danger"></span> <span asp-validation-for="AddressCheck" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group form-check">
<label asp-for="Enabled"></label> <input asp-for="Enabled" type="checkbox" class="form-check-input"/>
<input asp-for="Enabled" type="checkbox" class="form-check"/> <label asp-for="Enabled" class="form-check-label"></label>
<span asp-validation-for="Enabled" class="text-danger"></span> <span asp-validation-for="Enabled" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">

View File

@@ -73,9 +73,9 @@
</div> </div>
@if (Model.RequireConfirm) @if (Model.RequireConfirm)
{ {
<form id="RecoveryConfirmation" action="@Model.ReturnUrl" class="d-flex align-items-start justify-content-center" style="margin-top:4rem;padding-bottom: 80px"> <form id="RecoveryConfirmation" action="@Model.ReturnUrl" class="position-relative d-flex align-items-start justify-content-center" style="margin-top:4rem;padding-bottom: 80px">
<label class="form-check-label lead order-2" for="confirm">I have written down my recovery phrase and stored it in a secure location</label> <label class="form-check-label lead order-2" for="confirm">I have written down my recovery phrase and stored it in a secure location</label>
<input type="checkbox" class="mt-2 me-3 order-1" id="confirm"> <input type="checkbox" class="mt-2 me-3 order-1 form-check-input" id="confirm">
<button type="submit" class="btn btn-primary btn-lg px-5 order-3" id="submit">Done</button> <button type="submit" class="btn btn-primary btn-lg px-5 order-3" id="submit">Done</button>
<button type="submit" class="btn btn-primary btn-lg px-5 order-3" disabled>Done</button> <button type="submit" class="btn btn-primary btn-lg px-5 order-3" disabled>Done</button>
</form> </form>

View File

@@ -32,7 +32,7 @@
text-align: center; text-align: center;
white-space: nowrap; white-space: nowrap;
vertical-align: baseline; vertical-align: baseline;
border-radius: 0.25rem; border-radius: 4px;
} }
.badge .dropdown-toggle { .badge .dropdown-toggle {
@@ -329,7 +329,7 @@
<thead> <thead>
<tr> <tr>
<th style="width:2rem;" class="only-for-js"> <th style="width:2rem;" class="only-for-js">
<input id="selectAllCheckbox" type="checkbox" onclick="selectAll(this);"/> <input id="selectAllCheckbox" type="checkbox" class="form-check-input" onclick="selectAll(this);"/>
</th> </th>
<th style="min-width:90px;" class="col-md-auto"> <th style="min-width:90px;" class="col-md-auto">
Date Date
@@ -349,7 +349,7 @@
{ {
<tr id="invoice_@invoice.InvoiceId" class="invoice-row"> <tr id="invoice_@invoice.InvoiceId" class="invoice-row">
<td class="only-for-js"> <td class="only-for-js">
<input name="selectedItems" type="checkbox" class="selector" value="@invoice.InvoiceId"/> <input name="selectedItems" type="checkbox" class="selector form-check-input" value="@invoice.InvoiceId"/>
</td> </td>
<td> <td>
<span class="switchTimeFormat" data-switch="@invoice.Date.ToTimeAgo()"> <span class="switchTimeFormat" data-switch="@invoice.Date.ToTimeAgo()">

View File

@@ -32,21 +32,21 @@
<input type="hidden" asp-for="FiatAmount"/> <input type="hidden" asp-for="FiatAmount"/>
<input type="hidden" asp-for="CryptoAmountNow"/> <input type="hidden" asp-for="CryptoAmountNow"/>
<div class="form-group"> <div class="form-group">
<div class="form-check-inline"> <div class="form-check">
<input id="RateThenText" asp-for="SelectedRefundOption" type="radio" value="RateThen" class="form-check-input"/> <input id="RateThenText" asp-for="SelectedRefundOption" type="radio" value="RateThen" class="form-check-input"/>
<label for="RateThenText" class="form-check-label">@Model.RateThenText</label> <label for="RateThenText" class="form-check-label">@Model.RateThenText</label>
</div> </div>
<small class="form-text text-muted">The crypto currency price, at the rate the invoice got paid.</small> <small class="form-text text-muted">The crypto currency price, at the rate the invoice got paid.</small>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="form-check-inline"> <div class="form-check">
<input id="CurrentRateText" asp-for="SelectedRefundOption" type="radio" value="CurrentRate" class="form-check-input"/> <input id="CurrentRateText" asp-for="SelectedRefundOption" type="radio" value="CurrentRate" class="form-check-input"/>
<label for="CurrentRateText" class="form-check-label">@Model.CurrentRateText</label> <label for="CurrentRateText" class="form-check-label">@Model.CurrentRateText</label>
</div> </div>
<small class="form-text text-muted">The crypto currency price, at the current rate.</small> <small class="form-text text-muted">The crypto currency price, at the current rate.</small>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="form-check-inline"> <div class="form-check">
<input id="FiatText" asp-for="SelectedRefundOption" type="radio" value="Fiat" class="form-check-input"/> <input id="FiatText" asp-for="SelectedRefundOption" type="radio" value="Fiat" class="form-check-input"/>
<label for="FiatText" class="form-check-label">@Model.FiatText</label> <label for="FiatText" class="form-check-label">@Model.FiatText</label>
</div> </div>
@@ -54,7 +54,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="form-check-inline"> <div class="form-check">
<input id="CustomText" asp-for="SelectedRefundOption" type="radio" value="Custom" class="form-check-input"/> <input id="CustomText" asp-for="SelectedRefundOption" type="radio" value="Custom" class="form-check-input"/>
<label for="CustomText" class="form-check-label">Custom</label> <label for="CustomText" class="form-check-label">Custom</label>
</div> </div>

View File

@@ -26,7 +26,7 @@
<div asp-validation-summary="All" class="text-danger"></div> <div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group"> <div class="form-group">
<label asp-for="Label"></label> <label asp-for="Label" class="form-label"></label>
<input asp-for="Label" class="form-control"/> <input asp-for="Label" class="form-control"/>
<span asp-validation-for="Label" class="text-danger"></span> <span asp-validation-for="Label" class="text-danger"></span>
</div> </div>

View File

@@ -11,17 +11,17 @@
} }
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group">
<label asp-for="OldPassword"></label> <label asp-for="OldPassword" class="form-label"></label>
<input asp-for="OldPassword" class="form-control"/> <input asp-for="OldPassword" class="form-control"/>
<span asp-validation-for="OldPassword" class="text-danger"></span> <span asp-validation-for="OldPassword" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="NewPassword"></label> <label asp-for="NewPassword" class="form-label"></label>
<input asp-for="NewPassword" class="form-control"/> <input asp-for="NewPassword" class="form-control"/>
<span asp-validation-for="NewPassword" class="text-danger"></span> <span asp-validation-for="NewPassword" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="ConfirmPassword"></label> <label asp-for="ConfirmPassword" class="form-label"></label>
<input asp-for="ConfirmPassword" class="form-control"/> <input asp-for="ConfirmPassword" class="form-control"/>
<span asp-validation-for="ConfirmPassword" class="text-danger"></span> <span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div> </div>

View File

@@ -9,15 +9,15 @@
<div asp-validation-summary="All" class="text-danger"></div> <div asp-validation-summary="All" class="text-danger"></div>
} }
<div class="form-row"> <div class="form-group row">
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<label asp-for="Username"></label> <label asp-for="Username" class="form-label"></label>
<input asp-for="Username" class="form-control" disabled/> <input asp-for="Username" class="form-control" disabled/>
</div> </div>
</div> </div>
<div class="form-row"> <div class="form-group row">
<div class="col-md-6 mb-3"> <div class="col-md-6 mb-3">
<label asp-for="Email"></label> <label asp-for="Email" class="form-label"></label>
<input asp-for="Email" class="form-control"/> <input asp-for="Email" class="form-control"/>
<span asp-validation-for="Email" class="text-danger"></span> <span asp-validation-for="Email" class="text-danger"></span>
</div> </div>

View File

@@ -16,11 +16,8 @@
else else
{ {
<div class="form-group"> <div class="form-group">
<p>Do not receive notifications for</p>
<label> Do not receive notifications for</label>
<div class="card"> <div class="card">
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
@for (var index = 0; index < Model.DisabledNotifications.Count; index++) @for (var index = 0; index < Model.DisabledNotifications.Count; index++)
{ {

View File

@@ -33,17 +33,17 @@
<div class="card my-2"> <div class="card my-2">
<h3 class="card-title p-2">Upload Wallet</h3> <h3 class="card-title p-2">Upload Wallet</h3>
<div class="form-group p-2"> <div class="form-group p-2">
<label asp-for="WalletFile"></label> <label asp-for="WalletFile" class="form-label"></label>
<input class="form-control" asp-for="WalletFile" required> <input class="form-control" asp-for="WalletFile" required>
<span asp-validation-for="WalletFile" class="text-danger"></span> <span asp-validation-for="WalletFile" class="text-danger"></span>
</div> </div>
<div class="form-group p-2"> <div class="form-group p-2">
<label asp-for="WalletKeysFile"></label> <label asp-for="WalletKeysFile" class="form-label"></label>
<input class="form-control" asp-for="WalletKeysFile" required> <input class="form-control" asp-for="WalletKeysFile" required>
<span asp-validation-for="WalletKeysFile" class="text-danger"></span> <span asp-validation-for="WalletKeysFile" class="text-danger"></span>
</div> </div>
<div class="form-group p-2"> <div class="form-group p-2">
<label asp-for="WalletPassword"></label> <label asp-for="WalletPassword" class="form-label"></label>
<input class="form-control" asp-for="WalletPassword"> <input class="form-control" asp-for="WalletPassword">
<span asp-validation-for="WalletPassword" class="text-danger"></span> <span asp-validation-for="WalletPassword" class="text-danger"></span>
</div> </div>

View File

@@ -37,7 +37,7 @@
<th width="30px" class="only-for-js"> <th width="30px" class="only-for-js">
@if (Model.Total > 0) @if (Model.Total > 0)
{ {
<input name="selectedItems" type="checkbox" onClick="selectAll(this);" /> <input name="selectedItems" type="checkbox" class="form-check-input" onClick="selectAll(this);" />
} }
</th> </th>
<th width="190px"> <th width="190px">
@@ -55,7 +55,7 @@
{ {
<tr data-guid="@item.Id" class="notification-row @(item.Seen ? "seen" : "")"> <tr data-guid="@item.Id" class="notification-row @(item.Seen ? "seen" : "")">
<td class="only-for-js"> <td class="only-for-js">
<input name="selectedItems" type="checkbox" class="selector" value="@item.Id"/> <input name="selectedItems" type="checkbox" class="selector form-check-input" value="@item.Id"/>
</td> </td>
<td onclick="toggleRowCheckbox(this)"> <td onclick="toggleRowCheckbox(this)">
<span class="switchTimeFormat" data-switch="@item.Created.ToTimeAgo()"> <span class="switchTimeFormat" data-switch="@item.Created.ToTimeAgo()">

View File

@@ -69,7 +69,7 @@
<div class="input-group "> <div class="input-group ">
<input asp-for="ExpiryDate" <input asp-for="ExpiryDate"
value="@(Model.ExpiryDate?.ToString("u", CultureInfo.InvariantCulture))" value="@(Model.ExpiryDate?.ToString("u", CultureInfo.InvariantCulture))"
class="form-control flatdtpicker" min="today" placeholder="No expiry date has been set for this payment request" />x class="form-control flatdtpicker" min="today" placeholder="No expiry date has been set for this payment request" />
<button class="btn btn-secondary input-group-clear" type="button" title="Clear"> <button class="btn btn-secondary input-group-clear" type="button" title="Clear">
<span class="fa fa-times"></span> <span class="fa fa-times"></span>
</button> </button>

View File

@@ -51,7 +51,7 @@
<p>See QR Code information by clicking <a href="#detailsQR" data-bs-toggle="collapse">here</a></p> <p>See QR Code information by clicking <a href="#detailsQR" data-bs-toggle="collapse">here</a></p>
<div id="detailsQR" class="collapse"> <div id="detailsQR" class="collapse">
<div class="form-group"> <div class="form-group">
<label>QR Code data</label> <label class="form-label">QR Code data</label>
<input asp-for="QRCode" readonly class="form-control" /> <input asp-for="QRCode" readonly class="form-control" />
</div> </div>
<div class="form-group"> <div class="form-group">
@@ -68,60 +68,60 @@
@if (Model.Uri == null) @if (Model.Uri == null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="Host"></label> <label asp-for="Host" class="form-label"></label>
<input asp-for="Host" readonly class="form-control" /> <input asp-for="Host" readonly class="form-control" />
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="SSL"></label> <label asp-for="SSL" class="form-label"></label>
<input asp-for="SSL" disabled type="checkbox" class="form-check-inline" /> <input asp-for="SSL" disabled type="checkbox" class="btcpay-toggle ms-2" />
</div> </div>
} }
else else
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="Uri"></label> <label asp-for="Uri" class="form-label"></label>
<input asp-for="Uri" readonly class="form-control" /> <input asp-for="Uri" readonly class="form-control" />
</div> </div>
} }
@if (Model.Macaroon != null) @if (Model.Macaroon != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="Macaroon"></label> <label asp-for="Macaroon" class="form-label"></label>
<input asp-for="Macaroon" readonly class="form-control" /> <input asp-for="Macaroon" readonly class="form-control" />
</div> </div>
} }
@if (Model.AdminMacaroon != null) @if (Model.AdminMacaroon != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="AdminMacaroon"></label> <label asp-for="AdminMacaroon" class="form-label"></label>
<input asp-for="AdminMacaroon" readonly class="form-control" /> <input asp-for="AdminMacaroon" readonly class="form-control" />
</div> </div>
} }
@if (Model.InvoiceMacaroon != null) @if (Model.InvoiceMacaroon != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="InvoiceMacaroon"></label> <label asp-for="InvoiceMacaroon" class="form-label"></label>
<input asp-for="InvoiceMacaroon" readonly class="form-control" /> <input asp-for="InvoiceMacaroon" readonly class="form-control" />
</div> </div>
} }
@if (Model.ReadonlyMacaroon != null) @if (Model.ReadonlyMacaroon != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="ReadonlyMacaroon"></label> <label asp-for="ReadonlyMacaroon" class="form-label"></label>
<input asp-for="ReadonlyMacaroon" readonly class="form-control" /> <input asp-for="ReadonlyMacaroon" readonly class="form-control" />
</div> </div>
} }
@if (Model.GRPCSSLCipherSuites != null) @if (Model.GRPCSSLCipherSuites != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="GRPCSSLCipherSuites"></label> <label asp-for="GRPCSSLCipherSuites" class="form-label"></label>
<input asp-for="GRPCSSLCipherSuites" readonly class="form-control" /> <input asp-for="GRPCSSLCipherSuites" readonly class="form-control" />
</div> </div>
} }
@if (Model.CertificateThumbprint != null) @if (Model.CertificateThumbprint != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="CertificateThumbprint"></label> <label asp-for="CertificateThumbprint" class="form-label"></label>
<input asp-for="CertificateThumbprint" readonly class="form-control" /> <input asp-for="CertificateThumbprint" readonly class="form-control" />
</div> </div>
} }

View File

@@ -20,8 +20,8 @@
</div> </div>
<a href="@Model.ServiceLink" target="_blank" class="form-group"> <a href="@Model.ServiceLink" target="_blank" class="form-group">
<label>Service</label> <label asp-for="ServiceLink" class="form-label">Service</label>
<input asp-for="ServiceLink" readonly class="form-control" /> <input asp-for="ServiceLink" class="form-control" readonly />
</a> </a>
</div> </div>
</div> </div>

View File

@@ -13,9 +13,9 @@
<div asp-validation-summary="All" class="text-danger"></div> <div asp-validation-summary="All" class="text-danger"></div>
} }
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group form-check">
<label asp-for="IsDownload"></label> <input type="checkbox" class="form-check-input" asp-for="IsDownload"/>
<input type="checkbox" class="form-check" asp-for="IsDownload"/> <label asp-for="IsDownload" class="form-check-label"></label>
<span asp-validation-for="IsDownload" class="text-danger"></span> <span asp-validation-for="IsDownload" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">

View File

@@ -11,19 +11,19 @@
<div asp-validation-summary="ModelOnly" class="text-danger"></div> <div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group"> <div class="form-group">
<label asp-for="Email"></label> <label asp-for="Email" class="form-label"></label>
<input asp-for="Email" required="required" class="form-control"/> <input asp-for="Email" required="required" class="form-control"/>
<span asp-validation-for="Email" class="text-danger"></span> <span asp-validation-for="Email" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Password"></label> <label asp-for="Password" class="form-label"></label>
<input asp-for="Password" class="form-control"/> <input asp-for="Password" class="form-control"/>
<span asp-validation-for="Password" class="text-danger"></span> <span asp-validation-for="Password" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="ConfirmPassword"></label> <label asp-for="ConfirmPassword" class="form-label"></label>
<input asp-for="ConfirmPassword" class="form-control"/> <input asp-for="ConfirmPassword" class="form-control"/>
<span asp-validation-for="ConfirmPassword" class="text-danger"></span> <span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div> </div>

View File

@@ -15,7 +15,7 @@
<div class="form-group"> <div class="form-group">
<input type="hidden" asp-for="Modify"/> <input type="hidden" asp-for="Modify"/>
<div class="form-group"> <div class="form-group">
<label asp-for="Settings.ServiceUrl"></label> <label asp-for="Settings.ServiceUrl" class="form-label"></label>
<input id="ServiceUrl" asp-for="Settings.ServiceUrl" class="form-control" placeholder="Url"/> <input id="ServiceUrl" asp-for="Settings.ServiceUrl" class="form-control" placeholder="Url"/>
<p class="form-text text-muted"> <p class="form-text text-muted">
Well-known Dynamic DNS providers are: Well-known Dynamic DNS providers are:
@@ -26,7 +26,7 @@
</p> </p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Settings.Hostname"></label> <label asp-for="Settings.Hostname" class="form-label"></label>
@if (Model.Modify) @if (Model.Modify)
{ {
<input asp-for="Settings.Hostname" class="form-control" readonly placeholder="Hostname"/> <input asp-for="Settings.Hostname" class="form-control" readonly placeholder="Hostname"/>
@@ -45,18 +45,18 @@
} }
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Settings.Login"></label> <label asp-for="Settings.Login" class="form-label"></label>
<input asp-for="Settings.Login" class="form-control" placeholder="Login"/> <input asp-for="Settings.Login" class="form-control" placeholder="Login"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Settings.Password"></label> <label asp-for="Settings.Password" class="form-label"></label>
<input asp-for="Settings.Password" class="form-control" placeholder="Password"/> <input asp-for="Settings.Password" class="form-control" placeholder="Password"/>
</div> </div>
@if (Model.Modify) @if (Model.Modify)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="Settings.Enabled"></label> <label asp-for="Settings.Enabled" class="form-label"></label>
<input asp-for="Settings.Enabled" class="form-check-inline" type="checkbox"/> <input asp-for="Settings.Enabled" disabled type="checkbox" class="btcpay-toggle ms-2" />
</div> </div>
} }
<button name="command" class="btn btn-primary" type="submit" value="Save">Save</button> <button name="command" class="btn btn-primary" type="submit" value="Save">Save</button>

View File

@@ -9,37 +9,37 @@
<div class="col-lg-6"> <div class="col-lg-6">
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group">
<label asp-for="ContainerName"></label> <label asp-for="ContainerName" class="form-label"></label>
<input class="form-control" asp-for="ContainerName"/> <input class="form-control" asp-for="ContainerName"/>
<span asp-validation-for="ContainerName" class="text-danger"></span> <span asp-validation-for="ContainerName" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="SecretKey"></label> <label asp-for="SecretKey" class="form-label"></label>
<input class="form-control" asp-for="SecretKey"/> <input class="form-control" asp-for="SecretKey"/>
<span asp-validation-for="SecretKey" class="text-danger"></span> <span asp-validation-for="SecretKey" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Bucket"></label> <label asp-for="Bucket" class="form-label"></label>
<input class="form-control" asp-for="Bucket"/> <input class="form-control" asp-for="Bucket"/>
<span asp-validation-for="Bucket" class="text-danger"></span> <span asp-validation-for="Bucket" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="ServiceUrl"></label> <label asp-for="ServiceUrl" class="form-label"></label>
<input class="form-control" asp-for="ServiceUrl"/> <input class="form-control" asp-for="ServiceUrl"/>
<span asp-validation-for="ServiceUrl" class="text-danger"></span> <span asp-validation-for="ServiceUrl" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="ServerSideEncryptionMethod"></label> <label asp-for="ServerSideEncryptionMethod" class="form-label"></label>
<input class="form-control" asp-for="ServerSideEncryptionMethod"/> <input class="form-control" asp-for="ServerSideEncryptionMethod"/>
<span asp-validation-for="ServerSideEncryptionMethod" class="text-danger"></span> <span asp-validation-for="ServerSideEncryptionMethod" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="ProfileName"></label> <label asp-for="ProfileName" class="form-label"></label>
<input class="form-control" asp-for="ProfileName"/> <input class="form-control" asp-for="ProfileName"/>
<span asp-validation-for="ProfileName" class="text-danger"></span> <span asp-validation-for="ProfileName" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="ChunkedUploadThreshold"></label> <label asp-for="ChunkedUploadThreshold" class="form-label"></label>
<input class="form-control" type="number" asp-for="ChunkedUploadThreshold"/> <input class="form-control" type="number" asp-for="ChunkedUploadThreshold"/>
<span asp-validation-for="ChunkedUploadThreshold" class="text-danger"></span> <span asp-validation-for="ChunkedUploadThreshold" class="text-danger"></span>
</div> </div>

View File

@@ -9,18 +9,18 @@
<div class="col-lg-6"> <div class="col-lg-6">
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group">
<label asp-for="ContainerName"></label> <label asp-for="ContainerName" class="form-label">Container Name</label>
<input class="form-control" asp-for="ContainerName"/> <input asp-for="ContainerName" class="form-control" />
<span asp-validation-for="ContainerName" class="text-danger"></span> <span asp-validation-for="ContainerName" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="ConnectionString"></label> <label asp-for="ConnectionString" class="form-label">Connection String</label>
<input class="form-control" type="text" asp-for="ConnectionString"/> <input asp-for="ConnectionString" class="form-control" />
<span asp-validation-for="ConnectionString" class="text-danger"></span> <span asp-validation-for="ConnectionString" class="text-danger"></span>
</div> </div>
<button type="submit" class="btn btn-primary" name="command" value="Save">Save</button> <button type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
<a asp-action="Storage" asp-route-forceChoice="true">Change Storage provider</a> <a asp-action="Storage" asp-route-forceChoice="true" class="ms-2">Change Storage provider</a>
</form> </form>
</div> </div>
</div> </div>

View File

@@ -9,28 +9,28 @@
<div class="col-lg-6"> <div class="col-lg-6">
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group">
<label asp-for="ContainerName"></label> <label asp-for="ContainerName" class="form-label">Container Name</label>
<input class="form-control" asp-for="ContainerName"/> <input asp-for="ContainerName" class="form-control" />
<span asp-validation-for="ContainerName" class="text-danger"></span> <span asp-validation-for="ContainerName" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="JsonCredentials"></label> <label asp-for="JsonCredentials" class="form-label">JSON Credentials</label>
<input class="form-control" asp-for="JsonCredentials"/> <input asp-for="JsonCredentials" class="form-control" />
<span asp-validation-for="JsonCredentials" class="text-danger"></span> <span asp-validation-for="JsonCredentials" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Bucket"></label> <label asp-for="Bucket" class="form-label"></label>
<input class="form-control" asp-for="Bucket"/> <input asp-for="Bucket" class="form-control" />
<span asp-validation-for="Bucket" class="text-danger"></span> <span asp-validation-for="Bucket" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Email"></label> <label asp-for="Email" class="form-label"></label>
<input class="form-control" asp-for="Email"/> <input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span> <span asp-validation-for="Email" class="text-danger"></span>
</div> </div>
<button type="submit" class="btn btn-primary" name="command" value="Save">Save</button> <button type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
<a asp-action="Storage" asp-route-forceChoice="true">Change Storage provider</a> <a asp-action="Storage" asp-route-forceChoice="true" class="ms-2">Change Storage provider</a>
</form> </form>
</div> </div>
</div> </div>

View File

@@ -32,22 +32,22 @@
@if (Model.Uri != null) @if (Model.Uri != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="Uri"></label> <label asp-for="Uri" class="form-label"></label>
<input asp-for="Uri" readonly class="form-control" /> <input asp-for="Uri" class="form-control" readonly />
</div> </div>
} }
@if (Model.APIToken != null) @if (Model.APIToken != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="APIToken"></label> <label asp-for="APIToken" class="form-label"></label>
<input asp-for="APIToken" readonly class="form-control" /> <input asp-for="APIToken" class="form-control" readonly />
</div> </div>
} }
@if (Model.AuthenticatedUri != null) @if (Model.AuthenticatedUri != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="AuthenticatedUri"></label> <label asp-for="AuthenticatedUri" class="form-label"></label>
<input asp-for="AuthenticatedUri" readonly class="form-control" /> <input asp-for="AuthenticatedUri" class="form-control" readonly />
</div> </div>
} }
</div> </div>

View File

@@ -60,12 +60,12 @@
<p>See QR Code information by clicking <a href="#detailsQR" data-bs-toggle="collapse">here</a>.</p> <p>See QR Code information by clicking <a href="#detailsQR" data-bs-toggle="collapse">here</a>.</p>
<div id="detailsQR" class="collapse"> <div id="detailsQR" class="collapse">
<div class="form-group"> <div class="form-group">
<label>QR Code data</label> <label asp-for="QRCode" class="form-label">QR Code data</label>
<input asp-for="QRCode" readonly class="form-control"/> <input asp-for="QRCode" class="form-control" readonly />
</div> </div>
<div class="form-group"> <p>
Click <a href="@Model.QRCodeLink" target="_blank">here</a> to open the configuration file. Click <a href="@Model.QRCodeLink" target="_blank">here</a> to open the configuration file.
</div> </p>
</div> </div>
} }
@@ -76,60 +76,60 @@
@if (Model.Uri == null) @if (Model.Uri == null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="Host"></label> <label asp-for="Host" class="form-label"></label>
<input asp-for="Host" readonly class="form-control"/> <input asp-for="Host" readonly class="form-control"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="SSL"></label> <label asp-for="SSL" class="form-label"></label>
<input asp-for="SSL" disabled type="checkbox" class="form-check-inline"/> <input asp-for="SSL" disabled type="checkbox" class="btcpay-toggle ms-2" />
</div> </div>
} }
else else
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="Uri"></label> <label asp-for="Uri" class="form-label"></label>
<input asp-for="Uri" readonly class="form-control"/> <input asp-for="Uri" readonly class="form-control"/>
</div> </div>
} }
@if (Model.Macaroon != null) @if (Model.Macaroon != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="Macaroon"></label> <label asp-for="Macaroon" class="form-label"></label>
<input asp-for="Macaroon" readonly class="form-control"/> <input asp-for="Macaroon" readonly class="form-control"/>
</div> </div>
} }
@if (Model.AdminMacaroon != null) @if (Model.AdminMacaroon != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="AdminMacaroon"></label> <label asp-for="AdminMacaroon" class="form-label"></label>
<input asp-for="AdminMacaroon" readonly class="form-control"/> <input asp-for="AdminMacaroon" readonly class="form-control"/>
</div> </div>
} }
@if (Model.InvoiceMacaroon != null) @if (Model.InvoiceMacaroon != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="InvoiceMacaroon"></label> <label asp-for="InvoiceMacaroon" class="form-label"></label>
<input asp-for="InvoiceMacaroon" readonly class="form-control"/> <input asp-for="InvoiceMacaroon" readonly class="form-control"/>
</div> </div>
} }
@if (Model.ReadonlyMacaroon != null) @if (Model.ReadonlyMacaroon != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="ReadonlyMacaroon"></label> <label asp-for="ReadonlyMacaroon" class="form-label"></label>
<input asp-for="ReadonlyMacaroon" readonly class="form-control"/> <input asp-for="ReadonlyMacaroon" readonly class="form-control"/>
</div> </div>
} }
@if (Model.GRPCSSLCipherSuites != null) @if (Model.GRPCSSLCipherSuites != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="GRPCSSLCipherSuites"></label> <label asp-for="GRPCSSLCipherSuites" class="form-label"></label>
<input asp-for="GRPCSSLCipherSuites" readonly class="form-control"/> <input asp-for="GRPCSSLCipherSuites" readonly class="form-control"/>
</div> </div>
} }
@if (Model.CertificateThumbprint != null) @if (Model.CertificateThumbprint != null)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="CertificateThumbprint"></label> <label asp-for="CertificateThumbprint" class="form-label"></label>
<input asp-for="CertificateThumbprint" readonly class="form-control"/> <input asp-for="CertificateThumbprint" readonly class="form-control"/>
</div> </div>
} }

View File

@@ -62,8 +62,8 @@
<p>See QR Code information by clicking <a href="#detailsQR" data-bs-toggle="collapse">here</a></p> <p>See QR Code information by clicking <a href="#detailsQR" data-bs-toggle="collapse">here</a></p>
<div id="detailsQR" class="collapse"> <div id="detailsQR" class="collapse">
<div class="form-group"> <div class="form-group">
<label>QR Code data</label> <label asp-for="ServiceLink" class="form-label">QR Code data</label>
<input asp-for="ServiceLink" readonly class="form-control" /> <input asp-for="ServiceLink" class="form-control" readonly />
</div> </div>
</div> </div>
} }

View File

@@ -127,18 +127,16 @@
@if (Model.DomainToAppMapping.Any()) @if (Model.DomainToAppMapping.Any())
{ {
<div class="list-group mb-2"> <h5 class="mt-5 mb-0">
<div class="list-group-item">
<h5 class="mb-1">
Domain to app mapping Domain to app mapping
<button type="submit" name="command" value="add-domain" class="ms-1 btn btn-secondary btn-sm ">Add domain mapping </button> <button type="submit" name="command" value="add-domain" class="btn btn-secondary btn-sm ms-2">Add domain mapping</button>
</h5> </h5>
</div> <div class="list-group list-group-flush mb-2">
@for (var index = 0; index < Model.DomainToAppMapping.Count; index++) @for (var index = 0; index < Model.DomainToAppMapping.Count; index++)
{ {
<div class="list-group-item p-0 ps-lg-2"> <div class="list-group-item px-0 pt-3">
<div class="row"> <div class="row">
<div class="col-sm-12 col-md-12 col-lg-10 py-2 "> <div class="col-12 col-lg-8">
<div class="form-group"> <div class="form-group">
<label asp-for="DomainToAppMapping[index].Domain" class="form-label"></label> <label asp-for="DomainToAppMapping[index].Domain" class="form-label"></label>
<input asp-for="DomainToAppMapping[index].Domain" class="form-control"/> <input asp-for="DomainToAppMapping[index].Domain" class="form-control"/>
@@ -148,25 +146,24 @@
<label asp-for="DomainToAppMapping[index].AppId" class="form-label"></label> <label asp-for="DomainToAppMapping[index].AppId" class="form-label"></label>
<select asp-for="DomainToAppMapping[index].AppId" <select asp-for="DomainToAppMapping[index].AppId"
asp-items="@(new SelectList(ViewBag.AppsList, nameof(SelectListItem.Value), nameof(SelectListItem.Text), Model.DomainToAppMapping[index].AppId))" asp-items="@(new SelectList(ViewBag.AppsList, nameof(SelectListItem.Value), nameof(SelectListItem.Text), Model.DomainToAppMapping[index].AppId))"
class="form-select"> class="form-select w-auto">
</select> </select>
<span asp-validation-for="DomainToAppMapping[index].AppId" class="text-danger"></span> <span asp-validation-for="DomainToAppMapping[index].AppId" class="text-danger"></span>
</div> </div>
</div> </div>
<div class="col-sm-12 col-md-12 col-lg-2 pull-right"> <div class="col-12 col-lg-2 pull-right">
<button type="submit" title="Remove domain mapping" name="command" value="@($"remove-domain:{index}")" <button type="submit" title="Remove domain mapping" name="command" value="@($"remove-domain:{index}")"
class="d-block d-lg-none d-xl-none btn btn-danger mb-2 ms-2"> class="d-block d-lg-none d-xl-none btn btn-danger mb-2">
Remove Destination Remove Destination
</button> </button>
<button type="submit" title="Remove domain mapping" name="command" value="@($"remove-domain:{index}")" <button type="submit" title="Remove domain mapping" name="command" value="@($"remove-domain:{index}")"
class="d-none d-lg-block remove-domain-btn text-decoration-none h-100 align-middle btn text-danger btn-link fa fa-times rounded-0 pull-right"> class="d-none d-lg-block btn btn-outline-danger text-decoration-none h-100 align-middle border-0 fs-4">
<span class="fa fa-times"></span>
</button> </button>
</div> </div>
</div> </div>
</div> </div>
} }
</div> </div>
} }
@@ -175,14 +172,13 @@
</button> </button>
<div class="mb-3"> <div class="mb-3">
<div class="card collapse show collapse-on-js" id="explorer-links"> <div class="collapse show collapse-on-js" id="explorer-links">
<ul class="list-group list-group-flush">
@inject BTCPayNetworkProvider BTCPayNetworkProvider @inject BTCPayNetworkProvider BTCPayNetworkProvider
@{ @{
var networks = BTCPayNetworkProvider.GetAll().ToArray(); var networks = BTCPayNetworkProvider.GetAll().ToArray();
} }
@for (int i = 0; i < networks.Count(); i++) @for (var i = 0; i < networks.Count(); i++)
{ {
var network = networks.ElementAt(i); var network = networks.ElementAt(i);
var existingOverride = Model.BlockExplorerLinks?.SingleOrDefault(tuple => tuple.CryptoCode.Equals(network.CryptoCode, StringComparison.InvariantCultureIgnoreCase)); var existingOverride = Model.BlockExplorerLinks?.SingleOrDefault(tuple => tuple.CryptoCode.Equals(network.CryptoCode, StringComparison.InvariantCultureIgnoreCase));
@@ -191,29 +187,23 @@
{ {
Model.BlockExplorerLinks.Add(new PoliciesSettings.BlockExplorerOverrideItem() {CryptoCode = network.CryptoCode, Link = network.BlockExplorerLinkDefault}); Model.BlockExplorerLinks.Add(new PoliciesSettings.BlockExplorerOverrideItem() {CryptoCode = network.CryptoCode, Link = network.BlockExplorerLinkDefault});
} }
<li class="list-group-item"> <div class="form-group m-0 py-4">
<label class="form-label">@network.DisplayName (@network.CryptoCode)</label> <label class="form-label">@network.DisplayName (@network.CryptoCode)</label>
<input type="hidden" asp-for="BlockExplorerLinks[i].CryptoCode" value="@network.CryptoCode"/> <input type="hidden" asp-for="BlockExplorerLinks[i].CryptoCode" value="@network.CryptoCode"/>
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control" asp-for="BlockExplorerLinks[i].Link" value="@linkValue" data-default-link="@network.BlockExplorerLinkDefault"/> <input type="text" class="form-control" asp-for="BlockExplorerLinks[i].Link" value="@linkValue" data-default-link="@network.BlockExplorerLinkDefault"/>
<button type="button" class="text-decoration-none btn btn-link revert-default fa fa-refresh only-for-js" title="Revert to default"></button> <button type="button" class="btn btn-secondary only-for-js" title="Revert to default">
<span class="fa fa-refresh"></span>
</button>
</div>
</div> </div>
</li>
} }
</ul>
</div> </div>
</div> </div>
<button type="submit" class="btn btn-primary" name="command" value="Save">Save</button> <button type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
</form> </form>
@section PageHeadContent {
<style>
.remove-domain-btn { font-size: 1.5rem; border-radius: 0; }
.remove-domain-btn:hover { background-color: #CCCCCC; }
</style>
}
@section PageFootContent { @section PageFootContent {
<script> <script>
for (let element of document.getElementsByClassName("revert-default")) { for (let element of document.getElementsByClassName("revert-default")) {

View File

@@ -19,21 +19,21 @@
<div class="form-group"> <div class="form-group">
<div class="form-group"> <div class="form-group">
<label asp-for="CommandLine"></label> <label asp-for="CommandLine" class="form-label"></label>
<input asp-for="CommandLine" readonly class="form-control" /> <input asp-for="CommandLine" class="form-control" readonly />
</div> </div>
@if (!string.IsNullOrEmpty(Model.Password)) @if (!string.IsNullOrEmpty(Model.Password))
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="Password"></label> <label asp-for="Password" class="form-label"></label>
<input asp-for="Password" readonly class="form-control" /> <input asp-for="Password" class="form-control" readonly />
</div> </div>
} }
@if (!string.IsNullOrEmpty(Model.KeyFilePassword)) @if (!string.IsNullOrEmpty(Model.KeyFilePassword))
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="KeyFilePassword"></label> <label asp-for="KeyFilePassword" class="form-label"></label>
<input asp-for="KeyFilePassword" readonly class="form-control" /> <input asp-for="KeyFilePassword" class="form-control" readonly />
</div> </div>
} }
</div> </div>

View File

@@ -8,7 +8,7 @@
@if (Model.ShowChangeWarning) @if (Model.ShowChangeWarning)
{ {
<div class="alert alert-danger"> <div class="alert alert-danger mb-4">
If you change your configured storage provider, your current files will become inaccessible. If you change your configured storage provider, your current files will become inaccessible.
</div> </div>
} }
@@ -21,7 +21,7 @@
<div asp-validation-summary="All" class="text-danger"></div> <div asp-validation-summary="All" class="text-danger"></div>
} }
<div class="form-group"> <div class="form-group">
<label asp-for="Provider"></label> <label asp-for="Provider" class="form-label"></label>
<select asp-for="Provider" asp-items="@Model.ProvidersList" class="form-select"></select> <select asp-for="Provider" asp-items="@Model.ProvidersList" class="form-select"></select>
</div> </div>
<button type="submit" class="btn btn-primary" name="command" value="Save">Next</button> <button type="submit" class="btn btn-primary" name="command" value="Save">Next</button>

View File

@@ -15,7 +15,7 @@
<div asp-validation-summary="All" class="text-danger"></div> <div asp-validation-summary="All" class="text-danger"></div>
} }
<div class="form-group"> <div class="form-group">
<label asp-for="ThemeCssUri"></label> <label asp-for="ThemeCssUri" class="form-label"></label>
<select asp-for="ThemeCssUri" class="form-select"> <select asp-for="ThemeCssUri" class="form-select">
<option value="/main/themes/default.css">Default (Light)</option> <option value="/main/themes/default.css">Default (Light)</option>
<option value="/main/themes/default-dark.css">Default (Dark)</option> <option value="/main/themes/default-dark.css">Default (Dark)</option>
@@ -25,7 +25,7 @@
<span asp-validation-for="ThemeCssUri" class="text-danger"></span> <span asp-validation-for="ThemeCssUri" class="text-danger"></span>
</div> </div>
<div class="form-group mb-5"> <div class="form-group mb-5">
<label asp-for="CustomThemeCssUri"></label> <label asp-for="CustomThemeCssUri" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#1-custom-themes" target="_blank"> <a href="https://docs.btcpayserver.org/Theme/#1-custom-themes" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>
@@ -35,7 +35,7 @@
<h4 class="mb-3">Bootstrap theme</h4> <h4 class="mb-3">Bootstrap theme</h4>
<div class="form-group"> <div class="form-group">
<label asp-for="BootstrapCssUri"></label> <label asp-for="BootstrapCssUri" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank"> <a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>
@@ -47,7 +47,7 @@
</p> </p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="CreativeStartCssUri"></label> <label asp-for="CreativeStartCssUri" class="form-label"></label>
<input asp-for="CreativeStartCssUri" class="form-control" /> <input asp-for="CreativeStartCssUri" class="form-control" />
<span asp-validation-for="CreativeStartCssUri" class="text-danger"></span> <span asp-validation-for="CreativeStartCssUri" class="text-danger"></span>
<p class="form-text text-muted"> <p class="form-text text-muted">

View File

@@ -8,9 +8,9 @@
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-md-8">
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group form-check mb-4">
<label asp-for="IsAdmin">Is admin</label> <input asp-for="IsAdmin" type="checkbox" class="form-check-input" />
<input asp-for="IsAdmin" type="checkbox" class="btcpay-toggle ms-2"/> <label asp-for="IsAdmin" class="form-check-label">Is admin</label>
</div> </div>
<button name="command" type="submit" class="btn btn-primary" value="Save">Save</button> <button name="command" type="submit" class="btn btn-primary" value="Save">Save</button>
</form> </form>

View File

@@ -76,10 +76,8 @@
} }
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="form-check"> <label asp-for="Settings.EnableSSL" class="form-label"></label>
<input asp-for="Settings.EnableSSL" type="checkbox" data-fill="enablessl" class="form-check-input"/> <input asp-for="Settings.EnableSSL" type="checkbox" data-fill="enablessl" class="btcpay-toggle ms-2" />
<label asp-for="Settings.EnableSSL" class="form-check-label"></label>
</div>
</div> </div>
<input asp-for="PasswordSet" type="hidden"/> <input asp-for="PasswordSet" type="hidden"/>
<button type="submit" class="btn btn-primary" name="command" value="Save">Save</button> <button type="submit" class="btn btn-primary" name="command" value="Save">Save</button>

View File

@@ -49,12 +49,12 @@
.card-deck { .card-deck {
display: grid; display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
grid-gap: .5rem; grid-gap: 1.5rem;
} }
.card-deck .card:only-of-type { .card:only-of-type {
max-width: 320px; max-width: 320px;
margin: auto; margin: auto !important;
} }
.js-cart-item-minus .fa, .js-cart-item-minus .fa,
@@ -67,27 +67,12 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.js-cart-item-count {
-moz-appearance:textfield;
margin: 0;
text-align: right;
}
.js-cart-item-count::-webkit-inner-spin-button,
.js-cart-item-count::-webkit-outer-spin-button {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
</style> </style>
@if (!string.IsNullOrEmpty(Model.EmbeddedCSS)) @if (!string.IsNullOrEmpty(Model.EmbeddedCSS))
{ {
@Safe.Raw($"<style>{Model.EmbeddedCSS}</style>"); @Safe.Raw($"<style>{Model.EmbeddedCSS}</style>");
} }
</head> </head>
<body class="h-100"> <body class="h-100">
@RenderBody() @RenderBody()
</body> </body>

View File

@@ -15,89 +15,72 @@
<h4 class="mb-3">Payment</h4> <h4 class="mb-3">Payment</h4>
@if (Model.PaymentMethods.Any()) @if (Model.PaymentMethods.Any())
{ {
<div class="form-group"> <div class="form-group mb-4">
<label asp-for="DefaultPaymentMethod" class="form-label"></label> <label asp-for="DefaultPaymentMethod" class="form-label"></label>
<select asp-for="DefaultPaymentMethod" asp-items="Model.PaymentMethods" class="form-select w-auto"></select> <select asp-for="DefaultPaymentMethod" asp-items="Model.PaymentMethods" class="form-select w-auto"></select>
</div> </div>
<table class="table table-bordered table"> <div class="form-group mb-4">
<tr> <div class="form-label mb-1">Enable payment methods only when amount is …</div>
<td colspan="3" class="text-decoration-none"> <table class="table">
Enable payment methods only when amount is..
</td>
</tr>
@for (var index = 0; index < Model.PaymentMethodCriteria.Count; index++) @for (var index = 0; index < Model.PaymentMethodCriteria.Count; index++)
{ {
var criteria = Model.PaymentMethodCriteria[index]; var criteria = Model.PaymentMethodCriteria[index];
<tr> <tr>
<td class="border-start-0 border-end-0 pt-3"> <td class="border-0 ps-0 align-middle">
<input type="hidden" asp-for="PaymentMethodCriteria[index].PaymentMethod"/> <input type="hidden" asp-for="PaymentMethodCriteria[index].PaymentMethod"/>
@PaymentMethodId.Parse(criteria.PaymentMethod).ToPrettyString() @PaymentMethodId.Parse(criteria.PaymentMethod).ToPrettyString()
</td> </td>
<td class="border-start-0 border-end-0"> <td class="border-0">
<select asp-for="PaymentMethodCriteria[index].Type" <select asp-for="PaymentMethodCriteria[index].Type" class="form-select"
class="form-select"
asp-items="@((PaymentMethodCriteriaViewModel.CriteriaType[]) Enum.GetValues(typeof(PaymentMethodCriteriaViewModel.CriteriaType))).Select(s => new SelectListItem(PaymentMethodCriteriaViewModel.ToString(s), s.ToString()))"> asp-items="@((PaymentMethodCriteriaViewModel.CriteriaType[]) Enum.GetValues(typeof(PaymentMethodCriteriaViewModel.CriteriaType))).Select(s => new SelectListItem(PaymentMethodCriteriaViewModel.ToString(s), s.ToString()))">
</select> </select>
</td> </td>
<td class="border-start-0 border-end-0"> <td class="border-0">
<input placeholder="6.15 USD" asp-for="PaymentMethodCriteria[index].Value" class="form-control my-0" style="max-width: 20ch;"/> <input placeholder="6.15 USD" asp-for="PaymentMethodCriteria[index].Value" class="form-control my-0" style="max-width: 20ch;"/>
</td> </td>
</tr> </tr>
} }
</table> </table>
</div>
} }
<h5 class="mb-3">General</h5>
<div class="form-group"> <div class="form-check my-1">
<div class="form-check">
<input asp-for="RequiresRefundEmail" type="checkbox" class="form-check-input"/> <input asp-for="RequiresRefundEmail" type="checkbox" class="form-check-input"/>
<label asp-for="RequiresRefundEmail" class="form-check-label"></label> <label asp-for="RequiresRefundEmail" class="form-check-label"></label>
</div> </div>
</div> <div class="form-check my-1">
<div class="form-group">
<div class="form-check">
<input asp-for="LightningAmountInSatoshi" type="checkbox" class="form-check-input"/>
<label asp-for="LightningAmountInSatoshi" class="form-check-label"></label>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input asp-for="LightningPrivateRouteHints" type="checkbox" class="form-check-input"/>
<label asp-for="LightningPrivateRouteHints" class="form-check-label"></label>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input asp-for="OnChainWithLnInvoiceFallback" type="checkbox" class="form-check-input"/>
<label asp-for="OnChainWithLnInvoiceFallback" class="form-check-label"></label>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input asp-for="LazyPaymentMethods" type="checkbox" class="form-check-input" /> <input asp-for="LazyPaymentMethods" type="checkbox" class="form-check-input" />
<label asp-for="LazyPaymentMethods" class="form-check-label"></label> <label asp-for="LazyPaymentMethods" class="form-check-label"></label>
</div> </div>
</div> <div class="form-check my-1">
<div class="form-group">
<div class="form-check">
<input asp-for="RedirectAutomatically" type="checkbox" class="form-check-input" /> <input asp-for="RedirectAutomatically" type="checkbox" class="form-check-input" />
<label asp-for="RedirectAutomatically" class="form-check-label"></label> <label asp-for="RedirectAutomatically" class="form-check-label"></label>
</div> </div>
</div> <div class="form-check my-1">
<div class="form-group">
<div class="form-check">
<input asp-for="ShowRecommendedFee" type="checkbox" class="form-check-input"/> <input asp-for="ShowRecommendedFee" type="checkbox" class="form-check-input"/>
<label asp-for="ShowRecommendedFee" class="form-check-label"></label> <label asp-for="ShowRecommendedFee" class="form-check-label"></label>
<p class="form-text text-muted">Fee will be shown for BTC and LTC onchain payments only.</p> <p class="form-text text-muted mb-0">Fee will be shown for BTC and LTC onchain payments only.</p>
</div> </div>
</div> <div class="form-group mt-2 mb-4">
<div class="form-group">
<label asp-for="RecommendedFeeBlockTarget" class="form-label"></label> <label asp-for="RecommendedFeeBlockTarget" class="form-label"></label>
<input asp-for="RecommendedFeeBlockTarget" class="form-control" style="width:8ch"/> <input asp-for="RecommendedFeeBlockTarget" class="form-control" style="width:8ch" min="1" />
<span asp-validation-for="RecommendedFeeBlockTarget" class="text-danger"></span> <span asp-validation-for="RecommendedFeeBlockTarget" class="text-danger"></span>
</div> </div>
<h5 class="mt-4 mb-3">Lightning</h5>
<div class="form-check my-1">
<input asp-for="LightningAmountInSatoshi" type="checkbox" class="form-check-input"/>
<label asp-for="LightningAmountInSatoshi" class="form-check-label"></label>
</div>
<div class="form-check my-1">
<input asp-for="LightningPrivateRouteHints" type="checkbox" class="form-check-input"/>
<label asp-for="LightningPrivateRouteHints" class="form-check-label"></label>
</div>
<div class="form-check my-1">
<input asp-for="OnChainWithLnInvoiceFallback" type="checkbox" class="form-check-input"/>
<label asp-for="OnChainWithLnInvoiceFallback" class="form-check-label"></label>
</div>
<h4 class="mt-5 mb-3">Appearance</h4> <h4 class="mt-5 mb-3">Appearance</h4>
<div class="form-group"> <div class="form-group">
<label asp-for="DefaultLang" class="form-label"></label> <label asp-for="DefaultLang" class="form-label"></label>
@@ -127,7 +110,6 @@
Bundled Themes: Bundled Themes:
<a href="#" onclick="return setTheme(1);">Legacy</a> <a href="#" onclick="return setTheme(1);">Legacy</a>
| <a href="#" onclick="return setTheme(2);">Dark</a> | <a href="#" onclick="return setTheme(2);">Dark</a>
@* | <a href="#" onclick="return setTheme(0);">Default</a>*@
</p> </p>
</div> </div>
<button name="command" type="submit" class="btn btn-primary" value="Save">Save</button> <button name="command" type="submit" class="btn btn-primary" value="Save">Save</button>
@@ -141,7 +123,7 @@
function setTheme(themeChoice) { function setTheme(themeChoice) {
if (themeChoice === 1) { // reserving 0 for potential clear down the road if (themeChoice === 1) { // reserving 0 for potential clear down the road
$('#CustomCSS').val('/checkout/css/themes/legacy.css'); $('#CustomCSS').val('/checkout/css/themes/legacy.css');
} else if (themeChoice == 2) { } else if (themeChoice === 2) {
$('#CustomCSS').val('/checkout/css/themes/dark.css'); $('#CustomCSS').val('/checkout/css/themes/dark.css');
} else { } else {
$('#CustomCSS').val(''); $('#CustomCSS').val('');

View File

@@ -11,7 +11,7 @@
<h4 class="mb-4">@ViewData["PageTitle"]</h4> <h4 class="mb-4">@ViewData["PageTitle"]</h4>
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group">
<label asp-for="Label"></label> <label asp-for="Label" class="form-label"></label>
@if (ViewBag.HidePublicKey) @if (ViewBag.HidePublicKey)
{ {
<small class="text-muted">optional</small> <small class="text-muted">optional</small>
@@ -22,7 +22,7 @@
@if (!ViewBag.HidePublicKey) @if (!ViewBag.HidePublicKey)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="PublicKey"></label> <label asp-for="PublicKey" class="form-label"></label>
<small class="text-muted">Keep empty for server-initiated pairing</small> <small class="text-muted">Keep empty for server-initiated pairing</small>
<input asp-for="PublicKey" class="form-control" /> <input asp-for="PublicKey" class="form-control" />
<span asp-validation-for="PublicKey" class="text-danger"></span> <span asp-validation-for="PublicKey" class="text-danger"></span>

View File

@@ -89,8 +89,8 @@
</button> </button>
<div id="wrong-addresses" class="collapse @(ViewContext.ModelState.IsValid ? "" : "show")"> <div id="wrong-addresses" class="collapse @(ViewContext.ModelState.IsValid ? "" : "show")">
<div class="pb-1"> <div class="pb-1">
<label asp-for="HintAddress">Help us to find the correct settings by telling us the first address of your wallet.</label>
<div class="form-group"> <div class="form-group">
<label asp-for="HintAddress" class="form-label">Help us to find the correct settings by telling us the first address of your wallet.</label>
<input asp-for="HintAddress" class="form-control"/> <input asp-for="HintAddress" class="form-control"/>
<span asp-validation-for="HintAddress" class="text-danger"></span> <span asp-validation-for="HintAddress" class="text-danger"></span>
</div> </div>

View File

@@ -18,7 +18,7 @@
<form method="post" enctype="multipart/form-data" class="my-5"> <form method="post" enctype="multipart/form-data" class="my-5">
<div class="form-group"> <div class="form-group">
<label asp-for="WalletFile"></label> <label asp-for="WalletFile" class="form-label"></label>
<input asp-for="WalletFile" type="file" class="form-control" required> <input asp-for="WalletFile" type="file" class="form-control" required>
<span asp-validation-for="WalletFile" class="text-danger"></span> <span asp-validation-for="WalletFile" class="text-danger"></span>
</div> </div>

View File

@@ -62,15 +62,15 @@
<h4 class="mb-3">Public Key Information</h4> <h4 class="mb-3">Public Key Information</h4>
<div class="form-group"> <div class="form-group">
<label asp-for="DerivationScheme"></label> <label asp-for="DerivationScheme" class="form-label"></label>
<textarea asp-for="DerivationScheme" class="form-control store-derivation-scheme font-monospace py-2" rows="3" readonly></textarea> <textarea asp-for="DerivationScheme" class="form-control store-derivation-scheme font-monospace py-2" rows="3" readonly></textarea>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="RootFingerprint"></label> <label asp-for="RootFingerprint" class="form-label"></label>
<input asp-for="RootFingerprint" class="form-control" readonly /> <input asp-for="RootFingerprint" class="form-control" readonly />
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="KeyPath"></label> <label asp-for="KeyPath" class="form-label"></label>
<input asp-for="KeyPath" class="form-control" readonly /> <input asp-for="KeyPath" class="form-control" readonly />
</div> </div>
<button name="command" type="submit" class="btn btn-primary" value="save" id="Continue">Continue</button> <button name="command" type="submit" class="btn btn-primary" value="save" id="Continue">Continue</button>

View File

@@ -28,7 +28,7 @@
<input asp-for="AccountKey" type="hidden" /> <input asp-for="AccountKey" type="hidden" />
<div class="form-group"> <div class="form-group">
<label asp-for="DerivationScheme">Extended public key</label> <label asp-for="DerivationScheme" class="form-label">Extended public key</label>
<textarea asp-for="DerivationScheme" class="form-control store-derivation-scheme font-monospace py-2" rows="2"></textarea> <textarea asp-for="DerivationScheme" class="form-control store-derivation-scheme font-monospace py-2" rows="2"></textarea>
<span asp-validation-for="DerivationScheme" class="text-danger"></span> <span asp-validation-for="DerivationScheme" class="text-danger"></span>
</div> </div>

View File

@@ -4,23 +4,27 @@
Layout = "../Shared/_NavLayout.cshtml"; Layout = "../Shared/_NavLayout.cshtml";
ViewData.SetActivePageAndTitle(StoreNavPages.Webhooks, "Webhook Settings", Context.GetStoreData().StoreName); ViewData.SetActivePageAndTitle(StoreNavPages.Webhooks, "Webhook Settings", Context.GetStoreData().StoreName);
} }
@section PageHeadContent {
<style> <style>
#event-selector { display: none; } #event-selector { display: none; }
#Everything[data-value='false'] + #event-selector { display: block; } #Everything[data-value='false'] + #event-selector { display: block; }
</style> </style>
}
<div class="row"> <div class="row">
<div class="col-lg-8"> <div class="col-lg-8">
<form method="post"> <form method="post">
<h4 class="mb-3">@ViewData["PageTitle"]</h4> <h4 class="mb-3">@ViewData["PageTitle"]</h4>
<div class="form-group"> <div class="form-group">
<label asp-for="PayloadUrl">Payload URL</label> <label asp-for="PayloadUrl" class="form-label">Payload URL</label>
<input asp-for="PayloadUrl" class="form-control" /> <input asp-for="PayloadUrl" class="form-control" />
<span asp-validation-for="PayloadUrl" class="text-danger"></span> <span asp-validation-for="PayloadUrl" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Secret"></label> <label asp-for="Secret" class="form-label"></label>
<div class="input-group"> <div class="input-group">
<input asp-for="Secret" type="password" class="form-control" value="@Model.Secret" data-bs-toggle="password"> <input asp-for="Secret" type="password" class="form-control" value="@Model.Secret" data-toggle="password">
<span class="input-group-text"> <span class="input-group-text">
<i class="fa fa-eye"></i> <i class="fa fa-eye"></i>
</span> </span>
@@ -28,26 +32,23 @@
<p class="text-muted small form-text">The endpoint receiving the payload must validate the payload by checking that the HTTP header <code>BTCPAY-SIG</code> of the callback matches the HMAC256 of the secret on the payload's body bytes.</p> <p class="text-muted small form-text">The endpoint receiving the payload must validate the payload by checking that the HTTP header <code>BTCPAY-SIG</code> of the callback matches the HMAC256 of the secret on the payload's body bytes.</p>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="form-check"> <label asp-for="AutomaticRedelivery" class="form-label">Automatic redelivery</label>
<input asp-for="AutomaticRedelivery" type="checkbox" class="form-check-input" /> <input asp-for="AutomaticRedelivery" type="checkbox" class="btcpay-toggle ms-2" />
<label asp-for="AutomaticRedelivery" class="form-check-label">Automatic redelivery</label> <p class="text-muted small form-text">We will try to redeliver any failed delivery after 10 seconds, 1 minute and up to 6 times after 10 minutes</p>
<p class="text-muted small form-text">We will try to redeliver any failed delivery after 10 seconds, 1 minutes and up to 6 times after 10 minutes</p>
</div>
</div>
<div class="form-group mb-5">
<div class="form-check">
<input asp-for="Active" type="checkbox" class="form-check-input" />
<label asp-for="Active" class="form-check-label">Is enabled</label>
</div> </div>
<div class="form-group">
<label asp-for="Active" class="form-label">Is enabled</label>
<input asp-for="Active" type="checkbox" class="btcpay-toggle ms-2" />
</div> </div>
<h4 class="mb-3">Events</h4> <h4 class="mb-3">Events</h4>
<label asp-for="Everything" class="form-label">Which events would you like to trigger this webhook?</label> <label asp-for="Everything" class="form-label">Which events would you like to trigger this webhook?</label>
<select asp-for="Everything" class="form-select mb-3" onchange="this.dataset.value=this.value"> <select asp-for="Everything" class="form-select w-auto mb-3" onchange="this.dataset.value=this.value">
<option value="true">Send me everything</option> <option value="true">Send me everything</option>
<option value="false">Send specific events</option> <option value="false">Send specific events</option>
</select> </select>
<div id="event-selector" class="collapse"> <div id="event-selector" class="collapse">
<ul class="list-group"> <div class="pb-3">
@foreach (var evt in new[] @foreach (var evt in new[]
{ {
("A new invoice has been created", WebhookEventType.InvoiceCreated), ("A new invoice has been created", WebhookEventType.InvoiceCreated),
@@ -58,22 +59,20 @@
("An invoice became invalid", WebhookEventType.InvoiceInvalid) ("An invoice became invalid", WebhookEventType.InvoiceInvalid)
}) })
{ {
<li class="list-group-item "> <div class="form-check my-1">
<label for="@evt.Item2" class="d-flex align-items-center">
<span class="flex-fill me-3">@evt.Item1</span>
<input name="Events" id="@evt.Item2" value="@evt.Item2" @(Model.Events.Contains(evt.Item2) ? "checked" : "") type="checkbox" class="form-check-input"/> <input name="Events" id="@evt.Item2" value="@evt.Item2" @(Model.Events.Contains(evt.Item2) ? "checked" : "") type="checkbox" class="form-check-input"/>
</label> <label for="@evt.Item2" class="form-check-label">@evt.Item1</label>
</li> </div>
} }
</ul> </div>
</div> </div>
@if (Model.IsNew) @if (Model.IsNew)
{ {
<button name="add" type="submit" class="btn btn-primary mt-3 mb-5" value="New" id="New">Add webhook</button> <button name="add" type="submit" class="btn btn-primary mb-5" value="New" id="New">Add webhook</button>
} }
else else
{ {
<button name="update" type="submit" class="btn btn-primary mt-3 mb-5" value="Save" id="Save">Update webhook</button> <button name="update" type="submit" class="btn btn-primary mb-5" value="Save" id="Save">Update webhook</button>
} }
</form> </form>
@if (!Model.IsNew && Model.Deliveries.Count > 0) @if (!Model.IsNew && Model.Deliveries.Count > 0)

View File

@@ -55,28 +55,28 @@
<div class="row"> <div class="row">
<div class="col-lg-7"> <div class="col-lg-7">
<h4 class="mb-3">@ViewData["PageTitle"]</h4> <h4 class="mb-3">@ViewData["PageTitle"]</h4>
<div class="form-row"> <div class="row">
<div class="form-group col-md-8"> <div class="form-group col-md-8">
<label>Price</label> <label class="form-label">Price</label>
<input name="price" type="text" class="form-control" <input name="price" type="text" class="form-control"
v-model="srvModel.price" v-on:change="inputChanges" v-model="srvModel.price" v-on:change="inputChanges"
v-validate="'required|decimal|min_value:0'" :class="{'is-invalid': errors.has('price') }"> v-validate="'required|decimal|min_value:0'" :class="{'is-invalid': errors.has('price') }">
<small class="text-danger">{{ errors.first('price') }}</small> <small class="text-danger">{{ errors.first('price') }}</small>
</div> </div>
<div class="form-group col-md-4" v-if="!srvModel.appIdEndpoint"> <div class="form-group col-md-4" v-if="!srvModel.appIdEndpoint">
<label>&nbsp;</label> <label class="form-label">&nbsp;</label>
<input name="currency" type="text" class="form-control" <input name="currency" type="text" class="form-control"
v-model="srvModel.currency" v-on:change="inputChanges" v-model="srvModel.currency" v-on:change="inputChanges"
:class="{'is-invalid': errors.has('currency') }"> :class="{'is-invalid': errors.has('currency') }">
</div> </div>
</div> </div>
<div class="form-group" v-if="!srvModel.appIdEndpoint"> <div class="form-group" v-if="!srvModel.appIdEndpoint">
<label>Checkout Description</label> <label class="form-label">Checkout Description</label>
<input name="checkoutDesc" type="text" class="form-control" placeholder="(optional)" <input name="checkoutDesc" type="text" class="form-control" placeholder="(optional)"
v-model="srvModel.checkoutDesc" v-on:change="inputChanges"> v-model="srvModel.checkoutDesc" v-on:change="inputChanges">
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Order Id</label> <label class="form-label">Order Id</label>
<input name="orderId" type="text" class="form-control" id="inputAddress" placeholder="(optional)" <input name="orderId" type="text" class="form-control" id="inputAddress" placeholder="(optional)"
v-model="srvModel.orderId" v-on:change="inputChanges"> v-model="srvModel.orderId" v-on:change="inputChanges">
</div> </div>
@@ -94,23 +94,24 @@
<div class="row"> <div class="row">
<div class="col-lg-7"> <div class="col-lg-7">
<div class="form-group" v-if="!srvModel.appIdEndpoint">
<label>
<input type="checkbox" v-model="srvModel.useModal" v-on:change="inputChanges" class="form-check-inline"/>Use Modal
</label>
</div>
<div class="form-group"> <div class="form-group">
<label> <div class="form-check" v-if="!srvModel.appIdEndpoint">
<input type="checkbox" v-model="buttonInlineTextMode" v-on:change="inputChanges" class="form-check-inline"/> Customize text in button <input id="useModal" type="checkbox" v-model="srvModel.useModal" v-on:change="inputChanges" class="form-check-input"/>
</label> <label for="useModal" class="form-check-label">Use Modal</label>
</div> </div>
<div class="form-check">
<input id="buttonInlineTextMode" type="checkbox" v-model="buttonInlineTextMode" v-on:change="inputChanges" class="form-check-input"/>
<label for="buttonInlineTextMode" class="form-check-label">Customize text in button</label>
</div>
</div>
<div class="form-group" v-show="buttonInlineTextMode"> <div class="form-group" v-show="buttonInlineTextMode">
<label>Pay Button Text</label> <label class="form-label">Pay Button Text</label>
<input name="payButtonText" type="text" class="form-control" id="inputAddress" <input name="payButtonText" type="text" class="form-control" id="inputAddress"
v-model="srvModel.payButtonText" v-on:change="inputChanges"> v-model="srvModel.payButtonText" v-on:change="inputChanges">
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Pay Button Image Url</label> <label class="form-label">Pay Button Image Url</label>
<input name="payButtonImageUrl" type="text" class="form-control" id="inputAddress" <input name="payButtonImageUrl" type="text" class="form-control" id="inputAddress"
v-model="srvModel.payButtonImageUrl" v-on:change="inputChanges" v-model="srvModel.payButtonImageUrl" v-on:change="inputChanges"
v-validate="{ required: this.imageUrlRequired, url: {require_tld:false} }" v-validate="{ required: this.imageUrlRequired, url: {require_tld:false} }"
@@ -118,7 +119,7 @@
<small class="text-danger">{{ errors.first('payButtonImageUrl') }}</small> <small class="text-danger">{{ errors.first('payButtonImageUrl') }}</small>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Image Size</label> <label class="form-label">Image Size</label>
<div style="vertical-align:top; font-size:12px; display:flex;"> <div style="vertical-align:top; font-size:12px; display:flex;">
<button class="btn text-nowrap" style="width:146px;height:40px;margin-right:40px;" <button class="btn text-nowrap" style="width:146px;height:40px;margin-right:40px;"
v-on:click="inputChanges($event, 0)" v-bind:class="{'btn-primary': (srvModel.buttonSize == 0) }"> v-on:click="inputChanges($event, 0)" v-bind:class="{'btn-primary': (srvModel.buttonSize == 0) }">
@@ -135,44 +136,44 @@
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Button Type</label> <label class="form-label">Button Type</label>
<div> <div class="form-check">
<input type="radio" name="button-type" id="btn-fixed" value="0" v-model="srvModel.buttonType" v-on:change="inputChanges" checked/> <input class="form-check-input" type="radio" name="button-type" id="btn-fixed" value="0" v-model="srvModel.buttonType" v-on:change="inputChanges" checked/>
<label for="btn-fixed">Fixed amount</label> <label for="btn-fixed" class="form-check-label">Fixed amount</label>
</div> </div>
<div> <div class="form-check">
<input type="radio" name="button-type" id="btn-custom" value="1" v-model="srvModel.buttonType" v-on:change="inputChanges"/> <input class="form-check-input" type="radio" name="button-type" id="btn-custom" value="1" v-model="srvModel.buttonType" v-on:change="inputChanges"/>
<label for="btn-custom">Custom amount</label> <label for="btn-custom" class="form-check-label">Custom amount</label>
</div> </div>
<div> <div class="form-check">
<input type="radio" name="button-type" id="btn-slider" value="2" v-model="srvModel.buttonType" v-on:change="inputChanges"/> <input class="form-check-input" type="radio" name="button-type" id="btn-slider" value="2" v-model="srvModel.buttonType" v-on:change="inputChanges"/>
<label for="btn-slider">Slider</label> <label for="btn-slider" class="form-check-label">Slider</label>
</div> </div>
</div> </div>
<div class="form-row" v-if="srvModel.buttonType == 1 ||srvModel.buttonType == 2"> <div class="row" v-if="srvModel.buttonType == 1 ||srvModel.buttonType == 2">
<div class="form-group col-md-4"> <div class="form-group col-md-4">
<label>Min</label> <label class="form-label">Min</label>
<input name="min" type="text" class="form-control" <input name="min" type="text" class="form-control"
v-model="srvModel.min" v-on:change="inputChanges" v-model="srvModel.min" v-on:change="inputChanges"
v-validate="'required|decimal|min_value:0'" :class="{'is-invalid': errors.has('min') }"> v-validate="'required|decimal|min_value:0'" :class="{'is-invalid': errors.has('min') }">
<small class="text-danger">{{ errors.first('min') }}</small> <small class="text-danger">{{ errors.first('min') }}</small>
</div> </div>
<div class="form-group col-md-4"> <div class="form-group col-md-4">
<label>Max</label> <label class="form-label">Max</label>
<input name="max" type="text" class="form-control" <input name="max" type="text" class="form-control"
v-model="srvModel.max" v-on:change="inputChanges" v-model="srvModel.max" v-on:change="inputChanges"
v-validate="'required|decimal'" :class="{'is-invalid': errors.has('max') }"> v-validate="'required|decimal'" :class="{'is-invalid': errors.has('max') }">
<small class="text-danger">{{ errors.first('max') }}</small> <small class="text-danger">{{ errors.first('max') }}</small>
</div> </div>
<div class="form-group col-md-4"> <div class="form-group col-md-4">
<label>Step</label> <label class="form-label">Step</label>
<input name="step" type="text" class="form-control" <input name="step" type="text" class="form-control"
v-model="srvModel.step" v-on:change="inputChanges" v-model="srvModel.step" v-on:change="inputChanges"
v-validate="'required'" :class="{'is-invalid': errors.has('step') }"> v-validate="'required'" :class="{'is-invalid': errors.has('step') }">
<small class="text-danger">{{ errors.first('step') }}</small> <small class="text-danger">{{ errors.first('step') }}</small>
</div> </div>
</div> </div>
<div class="form-group" v-if="srvModel.buttonType == 1"> <template v-if="srvModel.buttonType == 1">
<div class="form-check"> <div class="form-check">
<input name="simpleInput" <input name="simpleInput"
id="simpleInput" id="simpleInput"
@@ -195,7 +196,7 @@
<label class="form-check-label" for="fitButtonInline">Fit button inline</label> <label class="form-check-label" for="fitButtonInline">Fit button inline</label>
<small class="text-danger">{{ errors.first('fitButtonInline') }}</small> <small class="text-danger">{{ errors.first('fitButtonInline') }}</small>
</div> </div>
</div> </template>
</div> </div>
<div class="col-lg-5"> <div class="col-lg-5">
<h5 class="mb-3">Preview</h5> <h5 class="mb-3">Preview</h5>
@@ -214,14 +215,14 @@
<div class="row"> <div class="row">
<div class="col-lg-7"> <div class="col-lg-7">
<div class="form-group"> <div class="form-group">
<label>Server IPN</label> <label class="form-label">Server IPN</label>
<input name="serverIpn" type="text" class="form-control" placeholder="(optional)" <input name="serverIpn" type="text" class="form-control" placeholder="(optional)"
v-model="srvModel.serverIpn" v-on:change="inputChanges" v-model="srvModel.serverIpn" v-on:change="inputChanges"
v-validate="'url'" :class="{'is-invalid': errors.has('serverIpn') }"> v-validate="'url'" :class="{'is-invalid': errors.has('serverIpn') }">
<small class="text-danger">{{ errors.first('serverIpn') }}</small> <small class="text-danger">{{ errors.first('serverIpn') }}</small>
</div> </div>
<div class="form-group" v-if="!srvModel.appIdEndpoint"> <div class="form-group" v-if="!srvModel.appIdEndpoint">
<label>Send Email Notifications to</label> <label class="form-label">Send Email Notifications to</label>
<input name="notifyEmail" type="text" class="form-control" placeholder="(optional)" <input name="notifyEmail" type="text" class="form-control" placeholder="(optional)"
v-model="srvModel.notifyEmail" v-on:change="inputChanges" v-model="srvModel.notifyEmail" v-on:change="inputChanges"
v-validate="'email'" :class="{'is-invalid': errors.has('notifyEmail') }"> v-validate="'email'" :class="{'is-invalid': errors.has('notifyEmail') }">
@@ -229,7 +230,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Browser Redirect</label> <label class="form-label">Browser Redirect</label>
<input name="browserRedirect" type="text" class="form-control" placeholder="(optional)" <input name="browserRedirect" type="text" class="form-control" placeholder="(optional)"
v-model="srvModel.browserRedirect" v-on:change="inputChanges" v-model="srvModel.browserRedirect" v-on:change="inputChanges"
v-validate="'url'" :class="{'is-invalid': errors.has('browserRedirect') }"> v-validate="'url'" :class="{'is-invalid': errors.has('browserRedirect') }">
@@ -250,7 +251,7 @@
<div class="row" v-if="!srvModel.appIdEndpoint"> <div class="row" v-if="!srvModel.appIdEndpoint">
<div class="col-lg-7"> <div class="col-lg-7">
<div class="form-group"> <div class="form-group">
<label>Checkout Additional Query String</label> <label class="form-label">Checkout Additional Query String</label>
<input name="checkoutQueryString" type="text" class="form-control" placeholder="(optional)" <input name="checkoutQueryString" type="text" class="form-control" placeholder="(optional)"
v-model="srvModel.checkoutQueryString" v-on:change="inputChanges" v-model="srvModel.checkoutQueryString" v-on:change="inputChanges"
:class="{'is-invalid': errors.has('checkoutQueryString') }"> :class="{'is-invalid': errors.has('checkoutQueryString') }">
@@ -259,15 +260,15 @@
</div> </div>
<div class="col-lg-5"> <div class="col-lg-5">
<br /> <br />
This parameter allows you to specify additional query string parameters that should be appended to the checkout page once the invoice is created. For example, <kbd>lang=da-DK</kbd> would load the checkout page in Danish by default. This parameter allows you to specify additional query string parameters that should be appended to the checkout page once the invoice is created.
For example, <code>lang=da-DK</code> would load the checkout page in Danish by default.
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-lg-7"> <div class="col-lg-7">
<div class="form-group"> <div class="form-group">
<label>Use App as endpoint</label> <label class="form-label">Use App as endpoint</label>
<select v-model="srvModel.appIdEndpoint" v-on:change="inputChanges" class="form-select"> <select v-model="srvModel.appIdEndpoint" v-on:change="inputChanges" class="form-select">
<option value="">Use default pay button endpoint</option> <option value="">Use default pay button endpoint</option>
<option v-for="app in srvModel.apps" v-bind:value="app.id" >{{app.appName}} ({{app.appType}})</option> <option v-for="app in srvModel.apps" v-bind:value="app.id" >{{app.appName}} ({{app.appType}})</option>

View File

@@ -19,17 +19,17 @@
<h5>Scripting</h5> <h5>Scripting</h5>
<p>Rate script allows you to express precisely how you want to calculate rates for currency pairs.</p> <p>Rate script allows you to express precisely how you want to calculate rates for currency pairs.</p>
<p>We are retrieving the rate of each exchange either directly, or via <a href="https://www.coingecko.com/" target="_blank">CoinGecko (free)</a>.</p> <p>We are retrieving the rate of each exchange either directly, or via <a href="https://www.coingecko.com/" target="_blank">CoinGecko (free)</a>.</p>
<div class="accordion" id="accordion-info"> <div class="accordion" id="accordion-info">
<div class="card"> <div class="accordion-item">
<div class="card-header" id="direct-header"> <h2 class="accordion-header" id="direct-header">
<h2 class="mb-0"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#direct-content" aria-expanded="false" aria-controls="direct-content">
<button class="btn btn-link" type="button" data-bs-toggle="collapse" data-bs-target="#direct-content" aria-expanded="true">
Direct integration Direct integration
<vc:icon symbol="caret-down"/>
</button> </button>
</h2> </h2>
</div> <div id="direct-content" class="accordion-collapse collapse" aria-labelledby="direct-header" data-bs-parent="#accordion-info">
<div class="collapse" id="direct-content"> <div class="accordion-body">
<div class="card-body text-muted overflow-auto">
@foreach (var exchange in Model.AvailableExchanges.Where(a => a.Source == BTCPayServer.Rating.RateSource.Direct)) @foreach (var exchange in Model.AvailableExchanges.Where(a => a.Source == BTCPayServer.Rating.RateSource.Direct))
{ {
<a href="@exchange.Url">@exchange.Id</a><span>&nbsp;</span> <a href="@exchange.Url">@exchange.Id</a><span>&nbsp;</span>
@@ -37,16 +37,15 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card"> <div class="accordion-item">
<div class="card-header" id="coingecko-header"> <h2 class="accordion-header" id="coingecko-header">
<h2 class="mb-0"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#coingecko-content" aria-expanded="false" aria-controls="coingecko-content">
<button class="btn btn-link" type="button" data-bs-toggle="collapse" data-bs-target="#coingecko-content" aria-expanded="true">
Coingecko integration Coingecko integration
<vc:icon symbol="caret-down"/>
</button> </button>
</h2> </h2>
</div> <div id="coingecko-content" class="accordion-collapse collapse" aria-labelledby="coingecko-header" data-bs-parent="#accordion-info">
<div id="coingecko-content" class="collapse"> <div class="accordion-body">
<div class="card-body text-muted overflow-auto">
@foreach (var exchange in Model.AvailableExchanges.Where(a => a.Source == BTCPayServer.Rating.RateSource.Coingecko)) @foreach (var exchange in Model.AvailableExchanges.Where(a => a.Source == BTCPayServer.Rating.RateSource.Coingecko))
{ {
<a href="@exchange.Url">@exchange.Id</a><span>&nbsp;</span> <a href="@exchange.Url">@exchange.Id</a><span>&nbsp;</span>
@@ -135,24 +134,26 @@
It is worth noting that the inverses of those pairs are automatically supported as well.<br /> It is worth noting that the inverses of those pairs are automatically supported as well.<br />
It means that the rule <code>USD_DOGE = 1 / DOGE_USD</code> implicitely exists. It means that the rule <code>USD_DOGE = 1 / DOGE_USD</code> implicitely exists.
</p> </p>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="Script"></label> <a href="#help" data-bs-toggle="collapse"> <label asp-for="Script" class="form-label"></label>
<a href="#help" data-bs-toggle="collapse">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>
<textarea asp-for="Script" rows="20" cols="80" class="form-control"></textarea> <textarea asp-for="Script" rows="20" cols="80" class="form-control"></textarea>
<span asp-validation-for="Script" class="text-danger"></span> <span asp-validation-for="Script" class="text-danger"></span>
<a href="#" onclick="$('#Script').val(defaultScript); return false;">Set to default settings</a> <p>
</div> <button type="button" class="btn btn-link text-secondary px-0" onclick="document.getElementById('Script').value=defaultScript;return false;">Set to default settings</button>
<div class="form-group"> </p>
<button type="submit" class="btn btn-link" value="scripting-off" name="command">Turn off advanced rate rule scripting</button>
</div> </div>
<p>
<button type="submit" class="btn btn-secondary" value="scripting-off" name="command">Turn off advanced rate rule scripting</button>
</p>
} }
else else
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="PreferredExchange"></label> <label asp-for="PreferredExchange" class="form-label"></label>
<select asp-for="PreferredExchange" asp-items="Model.Exchanges" class="form-select"></select> <select asp-for="PreferredExchange" asp-items="Model.Exchanges" class="form-select"></select>
<span asp-validation-for="PreferredExchange" class="text-danger"></span> <span asp-validation-for="PreferredExchange" class="text-danger"></span>
<p id="PreferredExchangeHelpBlock" class="form-text text-muted"> <p id="PreferredExchangeHelpBlock" class="form-text text-muted">
@@ -160,11 +161,11 @@
</p> </p>
</div> </div>
<p> <p>
<button type="submit" class="btn btn-link p-0" value="scripting-on" name="command">Turn on advanced rate rule scripting</button> <button type="submit" class="btn btn-secondary" value="scripting-on" name="command">Turn on advanced rate rule scripting</button>
</p> </p>
} }
<div class="form-group"> <div class="form-group">
<label asp-for="Spread"></label> <label asp-for="Spread" class="form-label"></label>
<div class="input-group"> <div class="input-group">
<input asp-for="Spread" class="form-control" /> <input asp-for="Spread" class="form-control" />
<span class="input-group-text">%</span> <span class="input-group-text">%</span>
@@ -172,17 +173,17 @@
<span asp-validation-for="Spread" class="text-danger"></span> <span asp-validation-for="Spread" class="text-danger"></span>
</div> </div>
<h4 class="mt-5 mb-3">Testing</h4> <h4 class="mt-5 mb-3">Testing</h4>
<p>Enter currency pairs which you want to test against your rule (eg. <code>DOGE_USD,DOGE_CAD,BTC_CAD,BTC_USD</code>)</p>
<div class="form-group"> <div class="form-group">
<input placeholder="BTC_USD, BTC_CAD" asp-for="ScriptTest" class="form-control" /> <label asp-for="ScriptTest" class="form-label">Enter currency pairs which you want to test against your rule (eg. <code>DOGE_USD,DOGE_CAD,BTC_CAD,BTC_USD</code>)</label>
<input asp-for="ScriptTest" class="form-control" placeholder="BTC_USD, BTC_CAD" />
<span asp-validation-for="ScriptTest" class="text-danger"></span> <span asp-validation-for="ScriptTest" class="text-danger"></span>
</div> </div>
<button name="command" value="Test" type="submit" class="btn btn-primary" title="Test">Test</button> <button name="command" value="Test" type="submit" class="btn btn-primary" title="Test">Test</button>
<h4 class="mt-5 mb-3">Default currency pairs</h4> <h4 class="mt-5 mb-3">Default currency pairs</h4>
<p>You can query those pairs via REST by querying <a asp-controller="Rate" asp-action="GetRates2" asp-route-storeId="@Model.StoreId" target="_blank">this link</a> without the need to specify currencyPairs.</p>
<div class="form-group"> <div class="form-group">
<input placeholder="BTC_USD, BTC_CAD" asp-for="DefaultCurrencyPairs" class="form-control" /> <label asp-for="DefaultCurrencyPairs" class="form-label">You can query those pairs via REST by querying <a asp-controller="Rate" asp-action="GetRates2" asp-route-storeId="@Model.StoreId" target="_blank">this link</a> without the need to specify currencyPairs.</label>
<input asp-for="DefaultCurrencyPairs" class="form-control" placeholder="BTC_USD, BTC_CAD" />
<span asp-validation-for="DefaultCurrencyPairs" class="text-danger"></span> <span asp-validation-for="DefaultCurrencyPairs" class="text-danger"></span>
</div> </div>
<button name="command" type="submit" class="btn btn-primary" value="Save">Save</button> <button name="command" type="submit" class="btn btn-primary" value="Save">Save</button>

View File

@@ -25,7 +25,7 @@
<div class="col-md-4"> <div class="col-md-4">
<form asp-action="Pair" method="post"> <form asp-action="Pair" method="post">
<div class="form-group"> <div class="form-group">
<label asp-for="StoreId"></label> <label asp-for="StoreId" class="form-label"></label>
<select asp-for="StoreId" asp-items="@(new SelectList(Model.Stores,"Id","Name"))" class="form-select"></select> <select asp-for="StoreId" asp-items="@(new SelectList(Model.Stores,"Id","Name"))" class="form-select"></select>
<span asp-validation-for="StoreId" class="text-danger"></span> <span asp-validation-for="StoreId" class="text-danger"></span>
</div> </div>

View File

@@ -60,39 +60,14 @@
list-style: none; list-style: none;
padding-left: 0; padding-left: 0;
} }
#CustomSetup ul li code, #CustomSetup ul li pre { #CustomSetup ul li code,
color: var(--btcpay-code-color); #CustomSetup pre {
}
#CustomSetup ul li > code, #CustomSetup ul pre {
display: block; display: block;
color: var(--btcpay-code-text); color: var(--btcpay-code-text);
background: var(--btcpay-code-bg); background: var(--btcpay-bg-tile);
margin: .25rem 0; margin: .25rem 0;
padding: .75rem 1rem; padding: .75rem 1rem;
border-radius: .25rem; border-radius: 4px;
}
#CustomSetup > ul > li {
padding: 0;
}
#CustomSetup > ul > li + li {
border-top: 1px solid var(--btcpay-border-color-medium);
}
a[data-bs-toggle="collapse"] {
display: flex;
align-items: center;
justify-content: space-between;
color: inherit;
padding: 1rem 0;
text-decoration: none
}
a[data-bs-toggle="collapse"] .icon {
transform: rotate(90deg);
transition: transform 200ms;
width: 24px;
height: 24px;
}
a[data-bs-toggle="collapse"][aria-expanded="true"] .icon {
transform: rotate(270deg);
} }
</style> </style>
} }
@@ -113,21 +88,24 @@
} }
</div> </div>
<div id="CustomSetup" class="text-start"> <div id="CustomSetup" class="text-start">
<label asp-for="ConnectionString" class="mt-4">Connection configuration for your custom Lightning node:</label> <label asp-for="ConnectionString" class="form-label mt-4">Connection configuration for your custom Lightning node:</label>
<div class="d-sm-flex"> <div class="d-sm-flex">
<input asp-for="ConnectionString" class="form-control mb-2 me-2" placeholder="type=…;server=…;" value="@(Model.LightningNodeType == LightningNodeType.Internal ? "" : Model.ConnectionString)"/> <input asp-for="ConnectionString" class="form-control mb-2 me-2" placeholder="type=…;server=…;" value="@(Model.LightningNodeType == LightningNodeType.Internal ? "" : Model.ConnectionString)"/>
<button id="test" name="command" type="submit" value="test" class="btn btn-secondary text-nowrap mb-2">Test connection</button> <button id="test" name="command" type="submit" value="test" class="btn btn-secondary text-nowrap mb-2">Test connection</button>
</div> </div>
<span asp-validation-for="ConnectionString" class="text-danger"></span> <span asp-validation-for="ConnectionString" class="text-danger"></span>
<p class="mt-4 mb-2">BTCPay Server currently supports:</p> <p class="mt-4 mb-2">BTCPay Server currently supports:</p>
<ul> <div class="accordion" id="CustomNodeSupport">
<li> <div class="accordion-item">
<a data-bs-toggle="collapse" href="#c-lightning-notes" role="button" aria-expanded="false" aria-controls="c-lightning-notes"> <h2 class="accordion-header" id="CustomNodeCLightningHeader">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse" data-bs-target="#CustomNodeCLightningContent" aria-controls="CustomNodeCLightningContent" aria-expanded="false">
<span><strong>c-lightning</strong> via TCP or unix domain socket connection</span> <span><strong>c-lightning</strong> via TCP or unix domain socket connection</span>
<vc:icon symbol="caret-right"/> <vc:icon symbol="caret-down"/>
</a> </button>
<div id="c-lightning-notes" class="collapse"> </h2>
<ul class="pb-3"> <div id="CustomNodeCLightningContent" class="accordion-collapse collapse" aria-labelledby="CustomNodeCLightningHeader" data-bs-parent="#CustomNodeSupport">
<div class="accordion-body">
<ul class="mb-0">
<li> <li>
<code><b>type=</b>clightning;<b>server=</b>unix://root/.lightning/lightning-rpc</code> <code><b>type=</b>clightning;<b>server=</b>unix://root/.lightning/lightning-rpc</code>
</li> </li>
@@ -136,39 +114,51 @@
</li> </li>
</ul> </ul>
</div> </div>
</li> </div>
<li> </div>
<a data-bs-toggle="collapse" href="#charge-notes" role="button" aria-expanded="false" aria-controls="charge-notes"> <div class="accordion-item">
<h2 class="accordion-header" id="CustomNodeChargeHeader">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse" data-bs-target="#CustomNodeChargeContent" aria-controls="CustomNodeChargeContent" aria-expanded="false">
<span><strong>Lightning Charge</strong> via HTTPS</span> <span><strong>Lightning Charge</strong> via HTTPS</span>
<vc:icon symbol="caret-right"/> <vc:icon symbol="caret-down"/>
</a> </button>
<div id="charge-notes" class="collapse"> </h2>
<ul class="pb-3"> <div id="CustomNodeChargeContent" class="accordion-collapse collapse" aria-labelledby="CustomNodeChargeHeader" data-bs-parent="#CustomNodeSupport">
<div class="accordion-body">
<ul class="mb-0">
<li> <li>
<code><b>type=</b>charge;<b>server=</b>https://charge:8080/;<b>api-token=</b>myapitoken...</code> <code><b>type=</b>charge;<b>server=</b>https://charge:8080/;<b>api-token=</b>myapitoken...</code>
</li> </li>
</ul> </ul>
</div> </div>
</li> </div>
<li> </div>
<a data-bs-toggle="collapse" href="#eclair-notes" role="button" aria-expanded="false" aria-controls="eclair-notes"> <div class="accordion-item">
<h2 class="accordion-header" id="CustomNodeEclairHeader">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse" data-bs-target="#CustomNodeEclairContent" aria-controls="CustomNodeEclairContent" aria-expanded="false">
<span><strong>Eclair</strong> via HTTPS</span> <span><strong>Eclair</strong> via HTTPS</span>
<vc:icon symbol="caret-right"/> <vc:icon symbol="caret-down"/>
</a> </button>
<div id="eclair-notes" class="collapse"> </h2>
<ul class="pb-3"> <div id="CustomNodeEclairContent" class="accordion-collapse collapse" aria-labelledby="CustomNodeEclairHeader" data-bs-parent="#CustomNodeSupport">
<div class="accordion-body">
<ul class="mb-0">
<li> <li>
<code><b>type=</b>eclair;<b>server=</b>https://eclair:8080/;<b>password=</b>eclairpassword...</code> <code><b>type=</b>eclair;<b>server=</b>https://eclair:8080/;<b>password=</b>eclairpassword...</code>
</li> </li>
</ul> </ul>
</div> </div>
</li> </div>
<li> </div>
<a data-bs-toggle="collapse" href="#lnd-notes" role="button" aria-expanded="false" aria-controls="lnd-notes"> <div class="accordion-item">
<h2 class="accordion-header" id="CustomNodeLNDHeader">
<button type="button" class="accordion-button collapsed" data-bs-toggle="collapse" data-bs-target="#CustomNodeLNDContent" aria-controls="CustomNodeLNDContent" aria-expanded="false">
<span><strong>LND</strong> via the REST proxy</span> <span><strong>LND</strong> via the REST proxy</span>
<vc:icon symbol="caret-right"/> <vc:icon symbol="caret-down"/>
</a> </button>
<div id="lnd-notes" class="collapse"> </h2>
<div id="CustomNodeLNDContent" class="accordion-collapse collapse" aria-labelledby="CustomNodeLNDHeader" data-bs-parent="#CustomNodeSupport">
<div class="accordion-body">
<ul class="pb-3"> <ul class="pb-3">
<li> <li>
<code><b>type=</b>lnd-rest;<b>server=</b>https://mylnd:8080/;<b>macaroon=</b>abef263adfe...</code> <code><b>type=</b>lnd-rest;<b>server=</b>https://mylnd:8080/;<b>macaroon=</b>abef263adfe...</code>
@@ -190,8 +180,9 @@
<pre class="mb-4">openssl x509 -noout -fingerprint -sha256 -in /root/.lnd/tls.cert | sed -e 's/.*=//;s/://g'</pre> <pre class="mb-4">openssl x509 -noout -fingerprint -sha256 -in /root/.lnd/tls.cert | sed -e 's/.*=//;s/://g'</pre>
<p class="mb-0">If your LND REST server is using HTTP or HTTPS with an untrusted certificate, you can set <code>allowinsecure=true</code> as a fallback.</p> <p class="mb-0">If your LND REST server is using HTTP or HTTPS with an untrusted certificate, you can set <code>allowinsecure=true</code> as a fallback.</p>
</div> </div>
</li> </div>
</ul> </div>
</div>
</div> </div>
<div class="text-start mt-4"> <div class="text-start mt-4">
<button id="save" name="command" type="submit" value="save" class="btn btn-primary me-2">Save</button> <button id="save" name="command" type="submit" value="save" class="btn btn-primary me-2">Save</button>

View File

@@ -160,32 +160,29 @@
<form method="post"> <form method="post">
<h4 class="mb-3">General</h4> <h4 class="mb-3">General</h4>
<div class="form-group"> <div class="form-group">
<label asp-for="Id"></label> <label asp-for="Id" class="form-label"></label>
<input asp-for="Id" readonly class="form-control" /> <input asp-for="Id" readonly class="form-control" />
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="StoreName"></label> <label asp-for="StoreName" class="form-label"></label>
<input asp-for="StoreName" class="form-control" /> <input asp-for="StoreName" class="form-control" />
<span asp-validation-for="StoreName" class="text-danger"></span> <span asp-validation-for="StoreName" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="StoreWebsite"></label> <label asp-for="StoreWebsite" class="form-label"></label>
<input asp-for="StoreWebsite" class="form-control" /> <input asp-for="StoreWebsite" class="form-control" />
<span asp-validation-for="StoreWebsite" class="text-danger"></span> <span asp-validation-for="StoreWebsite" class="text-danger"></span>
</div> </div>
<h4 class="mt-5 mb-3">Payment</h4> <h4 class="mt-5 mb-3">Payment</h4>
<div class="form-group"> <div class="form-group form-check">
<div class="form-check">
<input asp-for="AnyoneCanCreateInvoice" type="checkbox" class="form-check-input" /> <input asp-for="AnyoneCanCreateInvoice" type="checkbox" class="form-check-input" />
<label asp-for="AnyoneCanCreateInvoice" class="form-check-label"></label> <label asp-for="AnyoneCanCreateInvoice" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#allow-anyone-to-create-invoice" target="_blank"> <a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#allow-anyone-to-create-invoice" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>
</div> </div>
</div> <div class="form-group form-check">
<div class="form-group">
<div class="form-check">
<input asp-for="PayJoinEnabled" type="checkbox" class="form-check-input" /> <input asp-for="PayJoinEnabled" type="checkbox" class="form-check-input" />
<label asp-for="PayJoinEnabled" class="form-check-label"></label> <label asp-for="PayJoinEnabled" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/Payjoin/" target="_blank"> <a href="https://docs.btcpayserver.org/Payjoin/" target="_blank">
@@ -193,9 +190,8 @@
</a> </a>
<span asp-validation-for="PayJoinEnabled" class="text-danger"></span> <span asp-validation-for="PayJoinEnabled" class="text-danger"></span>
</div> </div>
</div>
<div class="form-group"> <div class="form-group">
<label asp-for="NetworkFeeMode"></label> <label asp-for="NetworkFeeMode" class="form-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#add-network-fee-to-invoice-vary-with-mining-fees" target="_blank"> <a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#add-network-fee-to-invoice-vary-with-mining-fees" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>
@@ -206,12 +202,10 @@
</select> </select>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="mb-2"> <label asp-for="InvoiceExpiration" class="form-label"></label>
<label asp-for="InvoiceExpiration" class="d-inline"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#invoice-expires-if-the-full-amount-has-not-been-paid-after-minutes" target="_blank"> <a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#invoice-expires-if-the-full-amount-has-not-been-paid-after-minutes" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>
</div>
<div class="input-group"> <div class="input-group">
<input asp-for="InvoiceExpiration" class="form-control" style="max-width:10ch;" /> <input asp-for="InvoiceExpiration" class="form-control" style="max-width:10ch;" />
<span class="input-group-text">minutes</span> <span class="input-group-text">minutes</span>
@@ -219,12 +213,10 @@
<span asp-validation-for="InvoiceExpiration" class="text-danger"></span> <span asp-validation-for="InvoiceExpiration" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="mb-2"> <label asp-for="MonitoringExpiration" class="form-label"></label>
<label asp-for="MonitoringExpiration" class="d-inline"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#payment-invalid-if-transactions-fails-to-confirm-minutes-after-invoice-expiration" target="_blank"> <a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#payment-invalid-if-transactions-fails-to-confirm-minutes-after-invoice-expiration" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>
</div>
<div class="input-group"> <div class="input-group">
<input asp-for="MonitoringExpiration" class="form-control" style="max-width:10ch;" /> <input asp-for="MonitoringExpiration" class="form-control" style="max-width:10ch;" />
<span class="input-group-text">minutes</span> <span class="input-group-text">minutes</span>
@@ -232,12 +224,10 @@
<span asp-validation-for="MonitoringExpiration" class="text-danger"></span> <span asp-validation-for="MonitoringExpiration" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="mb-2"> <label asp-for="PaymentTolerance" class="form-label"></label>
<label asp-for="PaymentTolerance" class="d-inline"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#consider-the-invoice-paid-even-if-the-paid-amount-is-less-than-expected" target="_blank"> <a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#consider-the-invoice-paid-even-if-the-paid-amount-is-less-than-expected" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>
</div>
<div class="input-group"> <div class="input-group">
<input asp-for="PaymentTolerance" class="form-control" style="max-width:10ch;" /> <input asp-for="PaymentTolerance" class="form-control" style="max-width:10ch;" />
<span class="input-group-text">percent</span> <span class="input-group-text">percent</span>
@@ -245,18 +235,11 @@
<span asp-validation-for="PaymentTolerance" class="text-danger"></span> <span asp-validation-for="PaymentTolerance" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<div class="mb-2"> <label asp-for="SpeedPolicy" class="form-label"></label>
<label asp-for="SpeedPolicy" class="d-inline"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#consider-the-invoice-confirmed-when-the-payment-transaction" target="_blank"> <a href="https://docs.btcpayserver.org/FAQ/FAQ-Stores/#consider-the-invoice-confirmed-when-the-payment-transaction" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>
</div> <select asp-for="SpeedPolicy" class="form-select w-auto" onchange="document.getElementById('unconfirmed-warning').hidden = this.value !== '0';">
<script>
function handleSpeedPolicyChange(select) {
document.getElementById('unconfirmed-warning').hidden = select.value !== '0';
}
</script>
<select asp-for="SpeedPolicy" class="form-select w-auto" onchange="handleSpeedPolicyChange(this)">
<option value="0">Is unconfirmed</option> <option value="0">Is unconfirmed</option>
<option value="1">Has at least 1 confirmation</option> <option value="1">Has at least 1 confirmation</option>
<option value="3">Has at least 2 confirmations</option> <option value="3">Has at least 2 confirmations</option>
@@ -268,7 +251,7 @@
<span asp-validation-for="SpeedPolicy" class="text-danger"></span> <span asp-validation-for="SpeedPolicy" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="LightningDescriptionTemplate"></label> <label asp-for="LightningDescriptionTemplate" class="form-label"></label>
<input asp-for="LightningDescriptionTemplate" class="form-control" /> <input asp-for="LightningDescriptionTemplate" class="form-control" />
<span asp-validation-for="LightningDescriptionTemplate" class="text-danger"></span> <span asp-validation-for="LightningDescriptionTemplate" class="text-danger"></span>
<p class="form-text text-muted"> <p class="form-text text-muted">

View File

@@ -66,7 +66,7 @@
@if (isImport) // hide account option when creating a wallet @if (isImport) // hide account option when creating a wallet
{ {
<div class="form-group mb-5"> <div class="form-group mb-5">
<label asp-for="AccountNumber">Account</label> <label asp-for="AccountNumber" class="form-label">Account</label>
<select asp-for="AccountNumber" class="form-select w-auto"> <select asp-for="AccountNumber" class="form-select w-auto">
@for (var i = 0; i < 20; i++) @for (var i = 0; i < 20; i++)
{ {
@@ -77,12 +77,12 @@
</div> </div>
} }
<div class="form-group"> <div class="form-group">
<label asp-for="Passphrase">Optional passphrase (BIP39)</label> <label asp-for="Passphrase" class="form-label">Optional passphrase (BIP39)</label>
<input type="text" asp-for="Passphrase" class="form-control" autocomplete="off"/> <input type="text" asp-for="Passphrase" class="form-control" autocomplete="off"/>
<span asp-validation-for="Passphrase" class="text-danger"></span> <span asp-validation-for="Passphrase" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="passphrase_conf">Confirm passphrase</label> <label for="passphrase_conf" class="form-label">Confirm passphrase</label>
<input type="text" name="passphrase_conf" id="passphrase_conf" class="form-control"/> <input type="text" name="passphrase_conf" id="passphrase_conf" class="form-control"/>
<span class="text-danger field-validation-valid" id="passphrase_conf_validation"></span> <span class="text-danger field-validation-valid" id="passphrase_conf_validation"></span>
</div> </div>

View File

@@ -24,7 +24,7 @@
v-bind:class="{ 'list-group-item-secondary': item.selected }" v-bind:class="{ 'list-group-item-secondary': item.selected }"
v-on:click="toggleItem($event, item, !item.selected)"> v-on:click="toggleItem($event, item, !item.selected)">
<div class="d-flex justify-content-between align-items-center w-100"> <div class="d-flex justify-content-between align-items-center w-100">
<input class="me-2" <input class="me-2 form-check-input flex-shrink-0"
type="checkbox" type="checkbox"
v-bind:id="item.outpoint" v-bind:id="item.outpoint"
v-bind:value="item.outpoint" v-bind:value="item.outpoint"

View File

@@ -60,7 +60,7 @@
<input asp-for="Name" class="form-control" /> <input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span> <span asp-validation-for="Name" class="text-danger"></span>
</div> </div>
<div class="form-row"> <div class="row">
<div class="form-group col-8"> <div class="form-group col-8">
<label asp-for="Amount" class="form-label"></label> <label asp-for="Amount" class="form-label"></label>
<input asp-for="Amount" class="form-control" /> <input asp-for="Amount" class="form-control" />

View File

@@ -82,7 +82,7 @@
<thead class="thead-inverse"> <thead class="thead-inverse">
<tr> <tr>
<th> <th>
<input id="@state.State-selectAllCheckbox" type="checkbox" onclick="selectAll(this, '@state.State.ToString()'); return true;"/> <input id="@state.State-selectAllCheckbox" type="checkbox" class="form-check-input" onclick="selectAll(this, '@state.State.ToString()'); return true;"/>
</th> </th>
<th style="min-width: 90px;" class="col-md-auto"> <th style="min-width: 90px;" class="col-md-auto">
Date Date
@@ -103,7 +103,7 @@
<tr class="payout"> <tr class="payout">
<td> <td>
<span> <span>
<input type="checkbox" class="selection-item-@state.State.ToString()" asp-for="PayoutStateSets[index].Payouts[i].Selected"/> <input type="checkbox" class="selection-item-@state.State.ToString() form-check-input" asp-for="PayoutStateSets[index].Payouts[i].Selected"/>
<input type="hidden" asp-for="PayoutStateSets[index].Payouts[i].PayoutId"/> <input type="hidden" asp-for="PayoutStateSets[index].Payouts[i].PayoutId"/>
</span> </span>
</td> </td>

View File

@@ -81,7 +81,7 @@
<label asp-for="UploadedPSBTFile" class="form-label"></label> <label asp-for="UploadedPSBTFile" class="form-label"></label>
<input asp-for="UploadedPSBTFile" type="file" class="form-control"> <input asp-for="UploadedPSBTFile" type="file" class="form-control">
</div> </div>
<button type="button" id="scanqrcode" class="ms-2 btn btn-secondary only-for-js" data-bs-toggle="modal" data-bs-target="#scanModal" title="Scan with camera"> <button type="button" id="scanqrcode" class="btn btn-secondary only-for-js" data-bs-toggle="modal" data-bs-target="#scanModal" title="Scan with camera">
<i class="fa fa-camera"></i> <i class="fa fa-camera"></i>
</button> </button>
<button type="submit" name="command" value="decode" class="btn btn-primary" id="Decode">Decode</button> <button type="submit" name="command" value="decode" class="btn btn-primary" id="Decode">Decode</button>

View File

@@ -196,7 +196,7 @@
@if (Model.SupportRBF) @if (Model.SupportRBF)
{ {
<div class="form-group"> <div class="form-group">
<label asp-for="AllowFeeBump"></label> <label asp-for="AllowFeeBump" class="form-label"></label>
<a href="https://docs.btcpayserver.org/Wallet/#rbf-replace-by-fee" target="_blank"> <a href="https://docs.btcpayserver.org/Wallet/#rbf-replace-by-fee" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>

View File

@@ -43,7 +43,7 @@
<input asp-for="@Model.AccountKeys[i].AccountKey" class="form-control" readonly/> <input asp-for="@Model.AccountKeys[i].AccountKey" class="form-control" readonly/>
<span asp-validation-for="@Model.AccountKeys[i].AccountKey" class="text-danger"></span> <span asp-validation-for="@Model.AccountKeys[i].AccountKey" class="text-danger"></span>
</div> </div>
<div class="form-row"> <div class="row">
<div class="form-group col-auto"> <div class="form-group col-auto">
<label asp-for="@Model.AccountKeys[i].MasterFingerprint" class="form-label"></label> <label asp-for="@Model.AccountKeys[i].MasterFingerprint" class="form-label"></label>
<input asp-for="@Model.AccountKeys[i].MasterFingerprint" class="form-control" style="max-width:16ch;"/> <input asp-for="@Model.AccountKeys[i].MasterFingerprint" class="form-control" style="max-width:16ch;"/>
@@ -57,7 +57,7 @@
</div> </div>
@if (Model.IsMultiSig) @if (Model.IsMultiSig)
{ {
<div class="form-check form-check-inline"> <div class="form-check">
<input asp-for="SelectedSigningKey" class="form-check-input" type="radio" value="@Model.AccountKeys[i].AccountKey"/> <input asp-for="SelectedSigningKey" class="form-check-input" type="radio" value="@Model.AccountKeys[i].AccountKey"/>
<label asp-for="SelectedSigningKey" class="form-check-label"></label> <label asp-for="SelectedSigningKey" class="form-check-label"></label>
</div> </div>

View File

@@ -3,6 +3,7 @@
<symbol id="back" viewBox="0 0 21 18"><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="back" viewBox="0 0 21 18"><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="close" viewBox="0 0 16 16"><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="close" viewBox="0 0 16 16"><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="caret-right" viewBox="0 0 24 24"><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="caret-right" viewBox="0 0 24 24"><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="caret-down" viewBox="0 0 24 24"><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="new-wallet" viewBox="0 0 32 32"><path d="M16 10V22" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M22 16H10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><circle fill="none" cx="16" cy="16" r="15" stroke="currentColor" stroke-width="2"/></symbol> <symbol id="new-wallet" viewBox="0 0 32 32"><path d="M16 10V22" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M22 16H10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><circle fill="none" cx="16" cy="16" r="15" stroke="currentColor" stroke-width="2"/></symbol>
<symbol id="existing-wallet" viewBox="0 0 32 32"><g clip-path="url(#clip0)"><path d="M26.5362 7.08746H25.9614V3.25512C25.9614 2.10542 25.3865 1.14734 24.6201 0.572488C23.8536 -0.00236247 22.7039 -0.193979 21.7458 -0.00236246L4.11707 5.36291C2.00929 5.93776 0.667969 7.85392 0.667969 9.96171V12.0695V12.836V27.3988C0.667969 30.0815 2.77575 32.1893 5.45839 32.1893H26.5362C29.2189 32.1893 31.3267 30.0815 31.3267 27.3988V12.0695C31.3267 9.38686 29.2189 7.08746 26.5362 7.08746ZM4.69192 7.08746L22.129 1.91381C22.5123 1.72219 23.0871 1.91381 23.4704 2.10542C23.8536 2.29704 24.0452 2.87189 24.0452 3.25512V7.08746H5.45839C4.88354 7.08746 4.5003 7.27908 3.92545 7.47069C4.11707 7.27908 4.5003 7.08746 4.69192 7.08746ZM29.4105 27.2072C29.4105 28.7402 28.0692 30.0815 26.5362 30.0815H5.45839C3.92545 30.0815 2.58414 28.7402 2.58414 27.2072V12.836V11.8779C2.58414 10.3449 3.92545 9.00362 5.45839 9.00362H26.5362C28.0692 9.00362 29.4105 10.3449 29.4105 11.8779V27.2072Z" fill="currentColor"/><path d="M25.9591 21.6487C27.0174 21.6487 27.8753 20.7908 27.8753 19.7326C27.8753 18.6743 27.0174 17.8164 25.9591 17.8164C24.9009 17.8164 24.043 18.6743 24.043 19.7326C24.043 20.7908 24.9009 21.6487 25.9591 21.6487Z" fill="currentColor"/></g><defs><clipPath id="clip0"><rect width="32" height="32" fill="white"/></clipPath></defs></symbol> <symbol id="existing-wallet" viewBox="0 0 32 32"><g clip-path="url(#clip0)"><path d="M26.5362 7.08746H25.9614V3.25512C25.9614 2.10542 25.3865 1.14734 24.6201 0.572488C23.8536 -0.00236247 22.7039 -0.193979 21.7458 -0.00236246L4.11707 5.36291C2.00929 5.93776 0.667969 7.85392 0.667969 9.96171V12.0695V12.836V27.3988C0.667969 30.0815 2.77575 32.1893 5.45839 32.1893H26.5362C29.2189 32.1893 31.3267 30.0815 31.3267 27.3988V12.0695C31.3267 9.38686 29.2189 7.08746 26.5362 7.08746ZM4.69192 7.08746L22.129 1.91381C22.5123 1.72219 23.0871 1.91381 23.4704 2.10542C23.8536 2.29704 24.0452 2.87189 24.0452 3.25512V7.08746H5.45839C4.88354 7.08746 4.5003 7.27908 3.92545 7.47069C4.11707 7.27908 4.5003 7.08746 4.69192 7.08746ZM29.4105 27.2072C29.4105 28.7402 28.0692 30.0815 26.5362 30.0815H5.45839C3.92545 30.0815 2.58414 28.7402 2.58414 27.2072V12.836V11.8779C2.58414 10.3449 3.92545 9.00362 5.45839 9.00362H26.5362C28.0692 9.00362 29.4105 10.3449 29.4105 11.8779V27.2072Z" fill="currentColor"/><path d="M25.9591 21.6487C27.0174 21.6487 27.8753 20.7908 27.8753 19.7326C27.8753 18.6743 27.0174 17.8164 25.9591 17.8164C24.9009 17.8164 24.043 18.6743 24.043 19.7326C24.043 20.7908 24.9009 21.6487 25.9591 21.6487Z" fill="currentColor"/></g><defs><clipPath id="clip0"><rect width="32" height="32" fill="white"/></clipPath></defs></symbol>
<symbol id="hot-wallet" viewBox="0 0 32 32"><g clip-path="url(#clip0)"><path d="M26.5362 7.08746H25.9614V3.25512C25.9614 2.10542 25.3865 1.14734 24.6201 0.572488C23.8536 -0.00236247 22.7039 -0.193979 21.7458 -0.00236246L4.11707 5.36291C2.00929 5.93776 0.667969 7.85392 0.667969 9.96171V12.0695V12.836V27.3988C0.667969 30.0815 2.77575 32.1893 5.45839 32.1893H26.5362C29.2189 32.1893 31.3267 30.0815 31.3267 27.3988V12.0695C31.3267 9.38686 29.2189 7.08746 26.5362 7.08746ZM4.69192 7.08746L22.129 1.91381C22.5123 1.72219 23.0871 1.91381 23.4704 2.10542C23.8536 2.29704 24.0452 2.87189 24.0452 3.25512V7.08746H5.45839C4.88354 7.08746 4.5003 7.27908 3.92545 7.47069C4.11707 7.27908 4.5003 7.08746 4.69192 7.08746ZM29.4105 27.2072C29.4105 28.7402 28.0692 30.0815 26.5362 30.0815H5.45839C3.92545 30.0815 2.58414 28.7402 2.58414 27.2072V12.836V11.8779C2.58414 10.3449 3.92545 9.00362 5.45839 9.00362H26.5362C28.0692 9.00362 29.4105 10.3449 29.4105 11.8779V27.2072Z" fill="currentColor"/><path d="M25.9591 21.6487C27.0174 21.6487 27.8753 20.7908 27.8753 19.7326C27.8753 18.6743 27.0174 17.8164 25.9591 17.8164C24.9009 17.8164 24.043 18.6743 24.043 19.7326C24.043 20.7908 24.9009 21.6487 25.9591 21.6487Z" fill="currentColor"/></g><defs><clipPath id="clip0"><rect width="32" height="32" fill="white"/></clipPath></defs></symbol> <symbol id="hot-wallet" viewBox="0 0 32 32"><g clip-path="url(#clip0)"><path d="M26.5362 7.08746H25.9614V3.25512C25.9614 2.10542 25.3865 1.14734 24.6201 0.572488C23.8536 -0.00236247 22.7039 -0.193979 21.7458 -0.00236246L4.11707 5.36291C2.00929 5.93776 0.667969 7.85392 0.667969 9.96171V12.0695V12.836V27.3988C0.667969 30.0815 2.77575 32.1893 5.45839 32.1893H26.5362C29.2189 32.1893 31.3267 30.0815 31.3267 27.3988V12.0695C31.3267 9.38686 29.2189 7.08746 26.5362 7.08746ZM4.69192 7.08746L22.129 1.91381C22.5123 1.72219 23.0871 1.91381 23.4704 2.10542C23.8536 2.29704 24.0452 2.87189 24.0452 3.25512V7.08746H5.45839C4.88354 7.08746 4.5003 7.27908 3.92545 7.47069C4.11707 7.27908 4.5003 7.08746 4.69192 7.08746ZM29.4105 27.2072C29.4105 28.7402 28.0692 30.0815 26.5362 30.0815H5.45839C3.92545 30.0815 2.58414 28.7402 2.58414 27.2072V12.836V11.8779C2.58414 10.3449 3.92545 9.00362 5.45839 9.00362H26.5362C28.0692 9.00362 29.4105 10.3449 29.4105 11.8779V27.2072Z" fill="currentColor"/><path d="M25.9591 21.6487C27.0174 21.6487 27.8753 20.7908 27.8753 19.7326C27.8753 18.6743 27.0174 17.8164 25.9591 17.8164C24.9009 17.8164 24.043 18.6743 24.043 19.7326C24.043 20.7908 24.9009 21.6487 25.9591 21.6487Z" fill="currentColor"/></g><defs><clipPath id="clip0"><rect width="32" height="32" fill="white"/></clipPath></defs></symbol>

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -67,6 +67,13 @@
content: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSIxMCIgdmlld0JveD0iMCAwIDcgMTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQuMzg3MzkgNC4zMTYyOFY1LjYyMUwzLjczNDM5IDQuOTY5MjZMNC4zODczOSA0LjMxNzUxVjQuMzE2MjhaTTAuMDAxMjMxMzkgMS4zMDM0OUwxLjMwNTk5IDBMNi4zMTU1NyA1TDEuMzA1OTkgMTBMMCA4LjY5NjUxTDMuNzAxMTMgNUwwIDEuMzAzNDlIMC4wMDEyMzEzOVoiIGZpbGw9IiM4RDhEOEYiLz48L3N2Zz4K"); content: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSIxMCIgdmlld0JveD0iMCAwIDcgMTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQuMzg3MzkgNC4zMTYyOFY1LjYyMUwzLjczNDM5IDQuOTY5MjZMNC4zODczOSA0LjMxNzUxVjQuMzE2MjhaTTAuMDAxMjMxMzkgMS4zMDM0OUwxLjMwNTk5IDBMNi4zMTU1NyA1TDEuMzA1OTkgMTBMMCA4LjY5NjUxTDMuNzAxMTMgNUwwIDEuMzAzNDlIMC4wMDEyMzEzOVoiIGZpbGw9IiM4RDhEOEYiLz48L3N2Zz4K");
} }
/* Info icons in main headline */
h2 small .fa-question-circle-o {
position: relative;
top: -.2rem;
font-size: 1.2rem;
}
/* Admin Sidebar Navigation */ /* Admin Sidebar Navigation */
.col-md-3 .nav-pills { .col-md-3 .nav-pills {
margin-left: -1rem; margin-left: -1rem;

View File

@@ -80,6 +80,23 @@ document.addEventListener("DOMContentLoaded", function () {
} }
$('[data-clipboard]').on('click', window.copyToClipboard); $('[data-clipboard]').on('click', window.copyToClipboard);
$('[data-toggle="password"]').each(function () {
var input = $(this);
var eye_btn = $(this).parent().find('.input-group-text');
eye_btn.css('cursor', 'pointer').addClass('input-password-hide');
eye_btn.on('click', function () {
if (eye_btn.hasClass('input-password-hide')) {
eye_btn.removeClass('input-password-hide').addClass('input-password-show');
eye_btn.find('.fa').removeClass('fa-eye').addClass('fa-eye-slash')
input.attr('type', 'text');
} else {
eye_btn.removeClass('input-password-show').addClass('input-password-hide');
eye_btn.find('.fa').removeClass('fa-eye-slash').addClass('fa-eye')
input.attr('type', 'password');
}
});
});
}); });
function switchTimeFormat() { function switchTimeFormat() {

View File

@@ -169,7 +169,7 @@
--btcpay-footer-link: var(--btcpay-neutral-400); --btcpay-footer-link: var(--btcpay-neutral-400);
--btcpay-footer-link-accent: var(--btcpay-neutral-100); --btcpay-footer-link-accent: var(--btcpay-neutral-100);
--btcpay-code-text: var(--btcpay-body-text); --btcpay-code-text: var(--btcpay-body-text);
--btcpay-code-bg: var(--btcpay-neutral-200); --btcpay-code-bg: transparent;
--btcpay-pre-text: var(--btcpay-white); --btcpay-pre-text: var(--btcpay-white);
--btcpay-pre-bg: var(--btcpay-neutral-900); --btcpay-pre-bg: var(--btcpay-neutral-900);

View File

@@ -179,7 +179,7 @@
--btcpay-footer-link: var(--btcpay-neutral-400); --btcpay-footer-link: var(--btcpay-neutral-400);
--btcpay-footer-link-accent: var(--btcpay-neutral-100); --btcpay-footer-link-accent: var(--btcpay-neutral-100);
--btcpay-code-text: var(--btcpay-body-text); --btcpay-code-text: var(--btcpay-body-text);
--btcpay-code-bg: var(--btcpay-neutral-200); --btcpay-code-bg: transparent;
--btcpay-pre-text: var(--btcpay-white); --btcpay-pre-text: var(--btcpay-white);
--btcpay-pre-bg: var(--btcpay-neutral-900); --btcpay-pre-bg: var(--btcpay-neutral-900);
--btcpay-primary: #329f80; --btcpay-primary: #329f80;

View File

@@ -36,7 +36,6 @@
--btcpay-footer-link: var(--btcpay-neutral-600); --btcpay-footer-link: var(--btcpay-neutral-600);
--btcpay-footer-link-accent: var(--btcpay-neutral-300); --btcpay-footer-link-accent: var(--btcpay-neutral-300);
--btcpay-pre-bg: var(--btcpay-bg-dark); --btcpay-pre-bg: var(--btcpay-bg-dark);
--btcpay-code-bg: var(--btcpay-bg-dark);
--btcpay-light: var(--btcpay-neutral-800); --btcpay-light: var(--btcpay-neutral-800);
--btcpay-light-accent: var(--btcpay-black); --btcpay-light-accent: var(--btcpay-black);
--btcpay-light-text: var(--btcpay-neutral-200); --btcpay-light-text: var(--btcpay-neutral-200);

View File

@@ -184,7 +184,7 @@
--btcpay-footer-link: var(--btcpay-neutral-400); --btcpay-footer-link: var(--btcpay-neutral-400);
--btcpay-footer-link-accent: var(--btcpay-neutral-100); --btcpay-footer-link-accent: var(--btcpay-neutral-100);
--btcpay-code-text: var(--btcpay-body-text); --btcpay-code-text: var(--btcpay-body-text);
--btcpay-code-bg: var(--btcpay-neutral-200); --btcpay-code-bg: transparent;
--btcpay-pre-text: var(--btcpay-white); --btcpay-pre-text: var(--btcpay-white);
--btcpay-pre-bg: var(--btcpay-neutral-900); --btcpay-pre-bg: var(--btcpay-neutral-900);
--btcpay-primary: var(--btcpay-brand-primary); --btcpay-primary: var(--btcpay-brand-primary);

View File

@@ -3053,7 +3053,7 @@
children = _ref.children; children = _ref.children;
return h(props.tag, mergeData(data, { return h(props.tag, mergeData(data, {
staticClass: 'form-row' staticClass: 'row'
}), children); }), children);
} }
}; };

View File

@@ -1 +1 @@
.hljs{display:block;overflow-x:auto;padding:0.5em;background:#F0F0F0}.hljs,.hljs-subst{color:#444}.hljs-comment{color:#888888}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-selector-pseudo{color:#BC6060}.hljs-literal{color:#78A960}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold} .hljs{display:block;overflow-x:auto;padding:.5em;background:var(--btcpay-pre-bg);color:var(--btcpay-pre-text)}.hljs-comment,.hljs-quote{color:#969896;font-style:italic}.hljs-addition,.hljs-keyword,.hljs-literal,.hljs-selector-tag,.hljs-type{color:#c9c}.hljs-number,.hljs-selector-attr,.hljs-selector-pseudo{color:#f99157}.hljs-doctag,.hljs-regexp,.hljs-string{color:#8abeb7}.hljs-built_in,.hljs-name,.hljs-section,.hljs-title{color:#b5bd68}.hljs-class .hljs-title,.hljs-selector-id,.hljs-template-variable,.hljs-variable{color:#fc6}.hljs-name,.hljs-section,.hljs-strong{font-weight:700}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-subst,.hljs-symbol{color:#f99157}.hljs-deletion{color:#dc322f}.hljs-formula{background:#eee8d5}.hljs-attr,.hljs-attribute{color:#81a2be}.hljs-emphasis{font-style:italic}