Improve and unify page headers (#2412)

* Improve and unify page headers

* Altcoin test fixes

* Update BTCPayServer/Views/Apps/UpdateCrowdfund.cshtml

Co-authored-by: Andrew Camilleri <evilkukka@gmail.com>

* Update BTCPayServer/Views/Apps/UpdateCrowdfund.cshtml

Co-authored-by: Andrew Camilleri <evilkukka@gmail.com>

* Fix missing store name in pairing view

* Fix CanUsePairing test

* Bump header navigation font size

* Use partial tag instead of Html.PartialAsync in views

As suggested by @nicolasdorier. These are equivalent, see details [here](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-3.1#partial-tag-helper).

* Fix docs link

As in #2432.

* Update BTCPayServer/Views/Wallets/SignWithSeed.cshtml

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

* Update BTCPayServer/Views/Wallets/WalletSendVault.cshtml

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

* Update BTCPayServer/Views/Wallets/WalletTransactions.cshtml

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

Co-authored-by: Andrew Camilleri <evilkukka@gmail.com>
Co-authored-by: britttttk <39231115+britttttk@users.noreply.github.com>
This commit is contained in:
d11n 2021-04-08 15:32:42 +02:00 committed by GitHub
parent 6473da7114
commit b12c4c5fa0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
147 changed files with 1434 additions and 1790 deletions

View File

@ -225,7 +225,7 @@ namespace BTCPayServer.Tests
public void ClickOnAllSideMenus()
{
var links = Driver.FindElements(By.CssSelector(".nav-pills .nav-link")).Select(c => c.GetAttribute("href")).ToList();
var links = Driver.FindElements(By.CssSelector(".nav .nav-link")).Select(c => c.GetAttribute("href")).ToList();
Driver.AssertNoError();
Assert.NotEmpty(links);
foreach (var l in links)

View File

@ -16,23 +16,22 @@ namespace BTCPayServer.Controllers
public string StoreId { get; set; }
public override string ToString()
{
return String.Empty;
return string.Empty;
}
}
[HttpGet]
[Route("{appId}/settings/crowdfund")]
[HttpGet("{appId}/settings/crowdfund")]
public async Task<IActionResult> UpdateCrowdfund(string appId)
{
var app = await GetOwnedApp(appId, AppType.Crowdfund);
if (app == null)
return NotFound();
var settings = app.GetSettings<CrowdfundSettings>();
var vm = new UpdateCrowdfundViewModel()
var vm = new UpdateCrowdfundViewModel
{
Title = settings.Title,
StoreId = app.StoreDataId,
StoreName = app.StoreData?.StoreName,
Enabled = settings.Enabled,
EnforceTargetAmount = settings.EnforceTargetAmount,
StartDate = settings.StartDate,

View File

@ -97,10 +97,11 @@ namespace BTCPayServer.Controllers
settings.DefaultView = settings.EnableShoppingCart ? PosViewType.Cart : settings.DefaultView;
settings.EnableShoppingCart = false;
var vm = new UpdatePointOfSaleViewModel()
var vm = new UpdatePointOfSaleViewModel
{
Id = appId,
StoreId = app.StoreDataId,
StoreName = app.StoreData?.StoreName,
Title = settings.Title,
DefaultView = settings.DefaultView,
ShowCustomAmount = settings.ShowCustomAmount,
@ -183,7 +184,7 @@ namespace BTCPayServer.Controllers
var app = await GetOwnedApp(appId, AppType.PointOfSale);
if (app == null)
return NotFound();
app.SetSettings(new PointOfSaleSettings()
app.SetSettings(new PointOfSaleSettings
{
Title = vm.Title,
DefaultView = vm.DefaultView,

View File

@ -857,6 +857,12 @@ namespace BTCPayServer.Controllers
if (string.IsNullOrWhiteSpace(userId))
return Challenge(AuthenticationSchemes.Cookie);
var storeId = CurrentStore?.Id;
if (storeId != null)
{
var store = await _Repo.FindStore(storeId, userId);
if (store != null)
HttpContext.SetStoreData(store);
}
var model = new CreateTokenViewModel();
ViewBag.HidePublicKey = true;
ViewBag.ShowStores = true;
@ -913,6 +919,14 @@ namespace BTCPayServer.Controllers
return Challenge(AuthenticationSchemes.Cookie);
if (pairingCode == null)
return NotFound();
if (selectedStore != null)
{
var store = await _Repo.FindStore(selectedStore, userId);
if (store == null)
return NotFound();
HttpContext.SetStoreData(store);
ViewBag.ShowStores = false;
}
var pairing = await _TokenRepository.GetPairingAsync(pairingCode);
if (pairing == null)
{
@ -922,7 +936,7 @@ namespace BTCPayServer.Controllers
else
{
var stores = await _Repo.GetStoresByUserId(userId);
return View(new PairingModel()
return View(new PairingModel
{
Id = pairing.Id,
Label = pairing.Label,
@ -981,8 +995,6 @@ namespace BTCPayServer.Controllers
return _UserManager.GetUserId(User);
}
// TODO: Need to have talk about how architect default currency implementation
// For now we have also hardcoded USD for Store creation and then Invoice creation
const string DEFAULT_CURRENCY = "USD";

View File

@ -341,6 +341,8 @@ namespace BTCPayServer.Controllers
model.Transactions = model.Transactions.OrderByDescending(t => t.Timestamp).Skip(skip).Take(count).ToList();
}
model.CryptoCode = walletId.CryptoCode;
return View(model);
}

View File

@ -9,6 +9,8 @@ namespace BTCPayServer.Models.AppViewModels
public class UpdateCrowdfundViewModel
{
public string StoreId { get; set; }
public string StoreName { get; set; }
[Required]
[MaxLength(30)]
public string Title { get; set; }
@ -95,12 +97,7 @@ namespace BTCPayServer.Models.AppViewModels
[Display(Name = "Colors to rotate between with animation when a payment is made. First color is the default background. One color per line. Can be any valid css color value.")]
public string AnimationColors { get; set; }
// NOTE: Improve validation if needed
public bool ModelWithMinimumData
{
get { return Description != null && Title != null && TargetCurrency != null; }
}
public bool ModelWithMinimumData => Description != null && Title != null && TargetCurrency != null;
}
}

View File

@ -9,6 +9,8 @@ namespace BTCPayServer.Models.AppViewModels
public class UpdatePointOfSaleViewModel
{
public string StoreId { get; set; }
public string StoreName { get; set; }
[Required]
[MaxLength(30)]
public string Title { get; set; }

View File

@ -19,5 +19,6 @@ namespace BTCPayServer.Models.WalletViewModels
}
public HashSet<ColoredLabel> Labels { get; set; } = new HashSet<ColoredLabel>();
public List<TransactionViewModel> Transactions { get; set; } = new List<TransactionViewModel>();
public string CryptoCode { get; set; }
}
}

View File

@ -5,14 +5,8 @@
<section>
<div class="container">
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-lg-12 text-center">
<partial name="_StatusMessage" />
</div>
</div>
}
<partial name="_StatusMessage" />
<div class="row justify-content-center">
<div class="col-md-6 section-heading">
<h2>@ViewData["Title"]</h2>
@ -39,6 +33,7 @@
</div>
</div>
</section>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -7,7 +7,7 @@
}
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}
<div class="row justify-content-center mb-2">
@ -18,10 +18,7 @@
<h1 class="h2 mb-3">Welcome to your BTCPay&nbsp;Server</h1>
@if (TempData.HasStatusMessage())
{
<partial name="_StatusMessage"/>
}
<partial name="_StatusMessage" />
</div>
</div>

View File

@ -43,5 +43,5 @@
</section>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -33,5 +33,5 @@
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -6,7 +6,7 @@
}
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}
<div class="row justify-content-center mb-2">
@ -22,10 +22,7 @@
<span class="d-sm-block">It is secure, private, censorship-resistant and free.</span>
</p>
@if (TempData.HasStatusMessage())
{
<partial name="_StatusMessage"/>
}
<partial name="_StatusMessage" />
</div>
</div>

View File

@ -36,6 +36,7 @@
</div>
</div>
</section>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,12 +1,11 @@
@model BTCPayServer.Models.AccountViewModels.SetPasswordViewModel
@{
ViewData["Title"] = "Reset password";
Layout = "_LayoutSimple";
}
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}
<div class="row justify-content-center mb-2">
@ -17,10 +16,7 @@
<h1 class="h2 mb-3">Welcome to your BTCPay&nbsp;Server</h1>
@if (TempData.HasStatusMessage())
{
<partial name="_StatusMessage"/>
}
<partial name="_StatusMessage" />
</div>
</div>

View File

@ -2,6 +2,6 @@ namespace BTCPayServer.Views.Apps
{
public enum AppsNavPages
{
Index, Create
Index, Create, Update
}
}

View File

@ -1,15 +1,13 @@
@model CreateAppViewModel
@{
ViewData["Title"] = "Create a new app";
ViewData.SetActivePageAndTitle(AppsNavPages.Create, "Create a new app");
}
<section>
<div class="container">
<div class="row">
<div class="col-lg-12 section-heading">
<h2>@ViewData["Title"]</h2>
<hr class="primary">
</div>
</div>
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["Title"]</h2>
<div class="row">
<div class="col-lg-12">
<form asp-action="CreateApp">
@ -28,10 +26,10 @@
<select asp-for="SelectedStore" asp-items="Model.Stores" class="form-control"></select>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" id="Create" />
<input type="submit" value="Create" class="btn btn-primary" id="Create"/>
<a asp-action="ListApps" class="text-muted ml-3">Back to list</a>
</div>
</form>
<a asp-action="ListApps">Back to the app list</a>
</div>
</div>
</div>

View File

@ -1,6 +1,6 @@
@model ListAppsViewModel
@{
ViewData["Title"] = "Apps";
ViewData.SetActivePageAndTitle(AppsNavPages.Index, "Apps");
var storeNameSortOrder = (string)ViewData["StoreNameSortOrder"];
var appNameSortOrder = (string)ViewData["AppNameSortOrder"];
var appTypeSortOrder = (string)ViewData["AppTypeSortOrder"];
@ -10,27 +10,20 @@
<section>
<div class="container">
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-lg-12 text-center">
<partial name="_StatusMessage" />
</div>
</div>
}
<div class="row">
<div class="col-lg-12 section-heading">
<h2>@ViewData["Title"]</h2>
<hr class="primary">
<p>Create and manage apps.</p>
</div>
</div>
<div class="row button-row mb-3">
<div class="col-lg-12">
<a asp-action="CreateApp" class="btn btn-primary" role="button" id="CreateNewApp"><span class="fa fa-plus"></span> Create a new app</a>
<a href="https://docs.btcpayserver.org/Apps/" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
</div>
<partial name="_StatusMessage" />
<div class="d-sm-flex align-items-center justify-content-between mb-2">
<h2 class="mb-0">
@ViewData["PageTitle"]
<small>
<a href="https://docs.btcpayserver.org/Apps/" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</small>
</h2>
<a asp-action="CreateApp" class="btn btn-primary mt-3 mt-sm-0" role="button" id="CreateNewApp"><span class="fa fa-plus"></span> Create a new app</a>
</div>
<div class="row">
<div class="col-lg-12">
@if (Model.Apps.Any())

View File

@ -2,25 +2,14 @@
@using System.Globalization
@model UpdateCrowdfundViewModel
@{
ViewData["Title"] = "Update Crowdfund";
ViewData.SetActivePageAndTitle(AppsNavPages.Update, "Update Crowdfund", Model.StoreName);
}
<section>
<div class="container">
<div class="row">
<div class="col-lg-12 section-heading">
<h2>@ViewData["Title"]</h2>
<hr class="primary">
</div>
</div>
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-lg-12 text-center">
<partial name="_StatusMessage" />
</div>
</div>
}
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<div class="row">
<div class="col-lg-12">
<form method="post">
@ -92,7 +81,9 @@
</div>
<span asp-validation-for="EndDate" class="text-danger"></span>
</div>
<partial name="TemplateEditor" model="@(nameof(Model.PerksTemplate), "Perks" )"/>
<partial name="TemplateEditor" model="@(nameof(Model.PerksTemplate), "Perks")" />
<div class="form-group">
<label asp-for="PerksTemplate" class="control-label"></label>
<textarea asp-for="PerksTemplate" rows="10" cols="40" class="js-product-template form-control"></textarea>
@ -100,7 +91,9 @@
</div>
<div class="form-group">
<label asp-for="CustomCSSLink" class="control-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<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>
</a>
<input asp-for="CustomCSSLink" class="form-control" />
<span asp-validation-for="CustomCSSLink" class="text-danger"></span>
</div>

View File

@ -2,24 +2,14 @@
@addTagHelper *, BundlerMinifier.TagHelpers
@model UpdatePointOfSaleViewModel
@{
ViewData["Title"] = "Update Point of Sale";
ViewData.SetActivePageAndTitle(AppsNavPages.Update, "Update Point of Sale", Model.StoreName);
}
<section>
<div class="container">
<div class="row">
<div class="col-lg-12 section-heading">
<h2>@ViewData["Title"]</h2>
<hr class="primary">
</div>
</div>
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-lg-12 text-center">
<partial name="_StatusMessage" />
</div>
</div>
}
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<div class="row">
<div class="col-lg-12">
<form method="post">
@ -79,11 +69,15 @@
</div>
<div class="form-group">
<label asp-for="CustomCSSLink" class="control-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<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>
</a>
<input asp-for="CustomCSSLink" class="form-control" />
<span asp-validation-for="CustomCSSLink" class="text-danger"></span>
</div>
<partial name="TemplateEditor" model="@(nameof(Model.Template), "Products")" />
<div class="form-group">
<label asp-for="Template" class="control-label"></label>
<textarea asp-for="Template" rows="10" cols="40" class="js-product-template form-control"></textarea>

View File

@ -1 +1,2 @@
@using BTCPayServer.Models.AppViewModels
@using BTCPayServer.Views.Apps
@using BTCPayServer.Models.AppViewModels

View File

@ -1,6 +1,6 @@
@using BTCPayServer.Views
@using BTCPayServer.Views.Apps
@{
ViewBag.MainTitle = "Manage app";
ViewBag.CategoryTitle = "Apps";
ViewData.SetActiveCategory(typeof(AppsNavPages));
}

View File

@ -202,10 +202,8 @@
<div id="content">
<div class="p-2 p-sm-4">
<div class="row">
@if (this.TempData.HasStatusMessage())
{
<partial name="_StatusMessage" />
}
<partial name="_StatusMessage" />
<div class="col-sm-4 col-lg-2 order-sm-last text-right mb-2">
<a class="js-cart btn btn-lg btn-outline-primary" href="#">
<i class="fa fa-shopping-basket"></i>&nbsp;

View File

@ -5,12 +5,12 @@
@if (Context.Request.Query.ContainsKey("simple"))
{
@await Html.PartialAsync("/Views/AppsPublic/PointOfSale/MinimalLight.cshtml", Model)
<partial name="/Views/AppsPublic/PointOfSale/MinimalLight.cshtml" model="Model" />
}
else
{
<noscript>
@await Html.PartialAsync("/Views/AppsPublic/PointOfSale/MinimalLight.cshtml", Model)
<partial name="/Views/AppsPublic/PointOfSale/MinimalLight.cshtml" model="Model" />
</noscript>
@await Html.PartialAsync("/Views/AppsPublic/PointOfSale/VueLight.cshtml", Model)
<partial name="/Views/AppsPublic/PointOfSale/VueLight.cshtml" model="Model" />
}

View File

@ -6,10 +6,8 @@
<div class="container d-flex h-100">
<div class="justify-content-center align-self-center text-center mx-auto px-2 py-3 w-100 m-auto">
@if (TempData.HasStatusMessage())
{
<partial name="_StatusMessage" />
}
<partial name="_StatusMessage" />
<h1 class="mb-4">@Model.Title</h1>
@if (!string.IsNullOrEmpty(Model.Description))
{

View File

@ -40,12 +40,12 @@
<body>
@if (Context.Request.Query.ContainsKey("simple"))
{
@await Html.PartialAsync("/Views/AppsPublic/Crowdfund/MinimalCrowdfund.cshtml", Model)
<partial name="/Views/AppsPublic/Crowdfund/MinimalCrowdfund.cshtml" model="Model" />
}
else
{
<noscript>
@await Html.PartialAsync("/Views/AppsPublic/Crowdfund/MinimalCrowdfund.cshtml", Model)
<partial name="/Views/AppsPublic/Crowdfund/MinimalCrowdfund.cshtml" model="Model" />
<style>
/* Hide the below canvas or else user will be staring "Loading..." text when JS is disabled */
@ -60,8 +60,7 @@
{
<canvas id="fireworks"></canvas>
}
@await Html.PartialAsync("/Views/AppsPublic/Crowdfund/VueCrowdfund.cshtml", Model)
<partial name="/Views/AppsPublic/Crowdfund/VueCrowdfund.cshtml" model="Model" />
}
</body>
</html>

View File

@ -1,29 +1,20 @@
@using BTCPayServer.Views.Stores
@model BTCPayServer.Services.Altcoins.Ethereum.UI.EditEthereumPaymentMethodViewModel
@{
Layout = "../Shared/_NavLayout.cshtml";
ViewData["NavPartialName"] = "../Stores/_Nav";
ViewData.SetActivePageAndTitle(StoreNavPages.ActivePage, $"{this.Context.GetRouteValue("cryptoCode")} Settings");
ViewData.SetActivePageAndTitle(StoreNavPages.ActivePage, $"{Context.GetRouteValue("cryptoCode")} Settings", Context.GetStoreData().StoreName);
}
<partial name="_StatusMessage"/>
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="alert alert-warning">DO NOT USE THE WALLET TO ACCEPT PAYMENTS OUTSIDE OF THIS STORE.<br/>If you spend funds received on invoices which have not been marked complete yet, the invoice will be marked as unpaid.
</div>
<div asp-validation-summary="All" class="text-danger"></div>
<form method="post" asp-action="GetStoreEthereumLikePaymentMethod"
asp-route-storeId="@this.Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@this.Context.GetRouteValue("cryptoCode")"
asp-route-storeId="@Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@Context.GetRouteValue("cryptoCode")"
class="mt-4" enctype="multipart/form-data">
<input type="hidden" asp-for="OriginalIndex"/>
@ -85,8 +76,8 @@
<button type="submit" class="btn btn-primary" id="SaveButton">Save</button>
<a class="btn btn-secondary" asp-action="GetStoreEthereumLikePaymentMethods"
asp-route-storeId="@this.Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@this.Context.GetRouteValue("cryptoCode")"
asp-route-storeId="@Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@Context.GetRouteValue("cryptoCode")"
asp-controller="EthereumLikeStore">
Back to list
</a>

View File

@ -5,22 +5,13 @@
@inject BTCPayNetworkProvider BTCPayNetworkProvider;
@{
Layout = "../Shared/_NavLayout.cshtml";
ViewData.SetActivePageAndTitle(StoreNavPages.ActivePage, "Ethereum Settings");
ViewData.SetActivePageAndTitle(StoreNavPages.ActivePage, "Ethereum Settings", Context.GetStoreData().StoreName);
ViewData["NavPartialName"] = "../Stores/_Nav";
}
<partial name="_StatusMessage"/>
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<table class="table table-sm table-responsive-md">
<thead>
@ -49,11 +40,10 @@
</td>
<td class="text-right">
<a id="Modify@(item.CryptoCode)" asp-action="GetStoreEthereumLikePaymentMethod"
asp-route-storeId="@this.Context.GetRouteValue("storeId")"
asp-route-storeId="@Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@item.CryptoCode">
Modify
</a>
</td>
</tr>
}
@ -67,7 +57,6 @@
var chains = BTCPayNetworkProvider.GetAll().OfType<EthereumBTCPayNetwork>().Select(network => network.ChainId).Distinct();
foreach (var chain in chains)
{
<a asp-action="UpdateChainConfig" asp-controller="EthereumConfig" asp-route-chainId="@chain">Configure Web3 for chain @chain</a>
}
}

View File

@ -5,7 +5,7 @@
}
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}
<style>

View File

@ -1,6 +1,6 @@
@model BTCPayServer.Models.InvoicingModels.CreateInvoiceModel
@{
ViewData["Title"] = "Create an invoice";
ViewData.SetActivePageAndTitle(InvoiceNavPages.Create, "Create an invoice");
}
<script>
$(function() {
@ -12,12 +12,10 @@
</script>
<section>
<div class="container">
<div class="row">
<div class="col-lg-12 section-heading">
<h2>@ViewData["Title"]</h2>
<hr class="primary">
</div>
</div>
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["Title"]</h2>
<div class="row">
<div class="col-lg-12">
<form asp-action="CreateInvoice" method="post" id="create-invoice-form">
@ -69,9 +67,9 @@
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" id="Create" />
<a asp-action="ListInvoices" class="text-muted ml-3">Back to list</a>
</div>
</form>
<a asp-action="ListInvoices">Back to List</a>
</div>
</div>
</div>

View File

@ -13,14 +13,7 @@
<section class="invoice-details">
<div class="container">
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-lg-12 text-center">
<partial name="_StatusMessage" />
</div>
</div>
}
<partial name="_StatusMessage" />
<div class="row mb-4">
<h2 class="col-xs-12 col-lg-9 mb-4 mb-lg-0">@ViewData["Title"]</h2>

View File

@ -1,7 +1,6 @@
@using BTCPayServer.Payments
@model InvoicesModel
@{
ViewData["Title"] = "Invoices";
ViewData.SetActivePageAndTitle(InvoiceNavPages.Index, "Invoices");
var storeIds = string.Join("", Model.StoreIds.Select(storeId => $",storeid:{storeId}"));
}
@section HeadScripts {
@ -11,31 +10,25 @@
@Html.HiddenFor(a => a.Count)
<section>
<div class="container">
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-lg-12 text-center">
<partial name="_StatusMessage" />
</div>
</div>
}
<partial name="_StatusMessage" />
<div class="row">
<div class="col-lg-12 section-heading">
<h2>@ViewData["Title"]</h2>
<hr class="primary">
<p>Create, search or pay an invoice.</p>
</div>
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h2 class="mb-0">
@ViewData["Title"]
<small>
<a href="https://docs.btcpayserver.org/PaymentRequests/" class="ml-1" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</small>
</h2>
<a id="CreateNewInvoice" asp-action="CreateInvoice" class="btn btn-primary mt-3 mt-sm-0">
<span class="fa fa-plus"></span>
Create an invoice
</a>
</div>
<div class="row">
<div class="col-12 col-sm-4 col-lg-6 mb-3">
<a id="CreateNewInvoice" asp-action="CreateInvoice" class="btn btn-primary mb-1">
<span class="fa fa-plus"></span>
Create an invoice
</a>
</div>
<div class="col-12 col-sm-8 col-lg-6 mb-3">
<div class="col-12 col-lg-6 mb-5 mb-lg-2 ml-auto">
<form asp-action="ListInvoices" method="get">
<input type="hidden" asp-for="Count"/>
<input asp-for="TimezoneOffset" type="hidden"/>
@ -184,7 +177,7 @@
@if (Model.Total > 0)
{
<form method="post" id="MassAction" asp-action="MassAction" class="mt-3">
<form method="post" id="MassAction" asp-action="MassAction" class="mt-lg-n5">
<span class="mr-2">
<button class="btn btn-secondary dropdown-toggle mb-1" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Actions

View File

@ -1 +1,2 @@
@using BTCPayServer.Services.Invoices
@using BTCPayServer.Views.Invoice

View File

@ -4,7 +4,7 @@
ViewData.SetActivePageAndTitle(ManageNavPages.APIKeys, "Manage your API Keys");
}
<partial name="_StatusMessage"/>
<partial name="_StatusMessage" />
<p>
The <a asp-controller="Home" asp-action="SwaggerDocs" target="_blank">BTCPay Server Greenfield API</a> offers programmatic access to your instance. You can manage your BTCPay

View File

@ -7,11 +7,11 @@
ViewData.SetActivePageAndTitle(ManageNavPages.APIKeys, "Add API Key");
}
<h4>@ViewData["Title"]</h4>
<partial name="_StatusMessage"/>
<p>
Generate a new api key to use BTCPay through its API.
</p>
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<p>Generate a new api key to use BTCPay through its API.</p>
<form method="post" asp-action="AddApiKey">
<div asp-validation-summary="All" class="text-danger"></div>
@ -109,7 +109,7 @@
</form>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
<style>
.remove-btn {

View File

@ -4,7 +4,6 @@
}
<form asp-action="AddU2FDevice" method="post" id="registerForm" class="hidden">
<input type="hidden" asp-for="AppId"/>
<input type="hidden" asp-for="Version"/>
<input type="hidden" asp-for="Challenge"/>
@ -12,7 +11,6 @@
<input type="hidden" asp-for="DeviceResponse"/>
</form>
<div class="card">
<div class="card-header">
<h4 class="mb-0">

View File

@ -5,11 +5,12 @@
@{
Layout = "_Layout";
ViewData["Title"] = $"Authorize {(Model.ApplicationName ?? "Application")}";
ViewData["Title"] = $"Authorize {Model.ApplicationName ?? "Application"}";
var permissions = Permission.ToPermissions(Model.Permissions.Split(';')).GroupBy(permission => permission.Policy);
}
<partial name="_StatusMessage"/>
<partial name="_StatusMessage" />
<form method="post" asp-action="AuthorizeAPIKey">
<input type="hidden" asp-for="RedirectUrl" value="@Model.RedirectUrl"/>
<input type="hidden" asp-for="Permissions" value="@Model.Permissions"/>

View File

@ -5,31 +5,26 @@
<partial name="_StatusMessage" />
@if (!this.ViewContext.ModelState.IsValid)
{
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
}
<div class="row">
<div class="col-md-6">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<form method="post">
<div class="form-group">
<label asp-for="OldPassword"></label>
<input asp-for="OldPassword" class="form-control" />
<input asp-for="OldPassword" class="form-control"/>
<span asp-validation-for="OldPassword" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="NewPassword"></label>
<input asp-for="NewPassword" class="form-control" />
<input asp-for="NewPassword" class="form-control"/>
<span asp-validation-for="NewPassword" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="ConfirmPassword"></label>
<input asp-for="ConfirmPassword" class="form-control" />
<input asp-for="ConfirmPassword" class="form-control"/>
<span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary" id="UpdatePassword">Update password</button>
@ -38,5 +33,5 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -12,7 +12,7 @@
<partial name="Header" />
</head>
<body class="bg-light">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-dialog modal-dialog-centered min-vh-100">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title w-100 text-center">@ViewData["Title"]</h4>

View File

@ -56,7 +56,7 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
<script type="text/javascript" src="~/js/qrcode.js" asp-append-version="true"></script>
<script type="text/javascript">
new QRCode(document.getElementById("qrCode"),

View File

@ -3,32 +3,28 @@
ViewData.SetActivePageAndTitle(ManageNavPages.Index, "Profile");
}
<partial name="_StatusMessage" />)
<partial name="_StatusMessage" />
@if (!this.ViewContext.ModelState.IsValid)
{
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
}
<form method="post">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<div class="form-row">
<div class="col-md-6 mb-3">
<label asp-for="Username"></label>
<input asp-for="Username" class="form-control" disabled />
<input asp-for="Username" class="form-control" disabled/>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label asp-for="Email"></label>
<input asp-for="Email" class="form-control" />
<input asp-for="Email" class="form-control"/>
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="col-md-6 mb-3 d-flex align-items-end">
@if(Model.IsEmailConfirmed)
@if (Model.IsEmailConfirmed)
{
<span class="badge badge-success p-2 my-1">
<span class="fa fa-check"></span>
@ -45,5 +41,5 @@
</form>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -5,7 +5,8 @@
ViewData.SetActivePageAndTitle(ManageNavPages.Notifications, "Notification preferences");
}
<partial name="_StatusMessage"/>
<partial name="_StatusMessage" />
<form method="post" asp-action="NotificationSettings">
@if (Model.All)
{

View File

@ -3,8 +3,10 @@
ViewData.SetActivePageAndTitle(ManageNavPages.ChangePassword, "Set password");
}
<h4>Set your password</h4>
<partial name="_StatusMessage" />
<h4>Set your password</h4>
<p class="text-info">
You do not have a local username/password for this site. Add a local
account so you can log in without an external login.
@ -29,5 +31,5 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -83,5 +83,5 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,6 +1,6 @@
@inject SignInManager<ApplicationUser> SignInManager
<div class="nav flex-column nav-pills mb-4">
<div class="nav flex-column mb-4">
<a id="@ManageNavPages.Index.ToString()" class="nav-link @ViewData.IsActivePage(ManageNavPages.Index)" asp-action="Index">Profile</a>
<a id="@ManageNavPages.ChangePassword.ToString()" class="nav-link @ViewData.IsActivePage(ManageNavPages.ChangePassword)" asp-action="ChangePassword">Password</a>
<a id="@ManageNavPages.TwoFactorAuthentication.ToString()" class="nav-link @ViewData.IsActivePage(ManageNavPages.TwoFactorAuthentication)" asp-action="TwoFactorAuthentication">Two-factor authentication</a>

View File

@ -2,6 +2,6 @@
@using BTCPayServer.Views.Manage
@{
Layout = "../Shared/_NavLayout.cshtml";
ViewBag.MainTitle = "Manage your account";
ViewBag.CategoryTitle = "Account";
ViewData.SetActiveCategory(typeof(ManageNavPages));
}

View File

@ -4,21 +4,13 @@
@{
Layout = "../Shared/_NavLayout.cshtml";
ViewData["NavPartialName"] = "../Stores/_Nav";
ViewData.SetActivePageAndTitle(StoreNavPages.ActivePage, $"{Model.CryptoCode} Settings");
}
<partial name="_StatusMessage" />
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div asp-validation-summary="All" class="text-danger"></div>
@if (Model.Summary != null)
{
<div class="card">
@ -31,11 +23,11 @@
</div>
}
@if (!Model.WalletFileFound || Model.Summary.WalletHeight == default(long))
@if (!Model.WalletFileFound || Model.Summary.WalletHeight == default)
{
<form method="post" asp-action="GetStoreMoneroLikePaymentMethod"
asp-route-storeId="@this.Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@this.Context.GetRouteValue("cryptoCode")"
asp-route-storeId="@Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@Context.GetRouteValue("cryptoCode")"
class="mt-4" enctype="multipart/form-data">
<div class="card my-2">
@ -62,12 +54,12 @@
</form>
}
<form method="post" asp-action="GetStoreMoneroLikePaymentMethod"
asp-route-storeId="@this.Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@this.Context.GetRouteValue("cryptoCode")"
asp-route-storeId="@Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@Context.GetRouteValue("cryptoCode")"
class="mt-4" enctype="multipart/form-data">
<input type="hidden" asp-for="CryptoCode"/>
@if (!Model.WalletFileFound || Model.Summary.WalletHeight == default(long))
@if (!Model.WalletFileFound || Model.Summary.WalletHeight == default)
{
<input type="hidden" asp-for="AccountIndex"/>
}
@ -90,7 +82,7 @@
<div class="input-group my-3">
<input type="text" class="form-control" placeholder="New account label" asp-for="NewAccountLabel">
<div class="input-group-append">
<button name="command" value="add-account" class="btn btn-secondary"type="submit">Add account</button>
<button name="command" value="add-account" class="btn btn-secondary" type="submit">Add account</button>
</div>
</div>
@ -107,9 +99,8 @@
<button type="submit" class="btn btn-primary" id="SaveButton">Save</button>
<a class="btn btn-secondary" asp-action="GetStoreMoneroLikePaymentMethods"
asp-route-storeId="@this.Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@this.Context.GetRouteValue("cryptoCode")"
asp-route-storeId="@Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@Context.GetRouteValue("cryptoCode")"
asp-controller="MoneroLikeStore">
Back to list
</a>

View File

@ -3,22 +3,13 @@
@{
Layout = "../Shared/_NavLayout.cshtml";
ViewData.SetActivePageAndTitle(StoreNavPages.ActivePage, "Monero Settings");
ViewData["NavPartialName"] = "../Stores/_Nav";
}
<partial name="_StatusMessage"/>
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<table class="table table-sm table-responsive-md">
<thead>
@ -47,7 +38,7 @@
</td>
<td class="text-right">
<a id="Modify" asp-action="GetStoreMoneroLikePaymentMethod"
asp-route-storeId="@this.Context.GetRouteValue("storeId")"
asp-route-storeId="@Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@item.CryptoCode">
Modify
</a>

View File

@ -5,14 +5,8 @@
<section>
<div class="container">
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-lg-12 text-center">
<partial name="_StatusMessage"/>
</div>
</div>
}
<partial name="_StatusMessage" />
<div class="row">
<div class="col-lg-12 section-heading">
<h2>@ViewData["Title"]</h2>

View File

@ -3,24 +3,14 @@
@model BTCPayServer.Models.PaymentRequestViewModels.UpdatePaymentRequestViewModel
@addTagHelper *, BundlerMinifier.TagHelpers
@{
ViewData["Title"] = (string.IsNullOrEmpty(Model.Id) ? "Create" : "Edit") + " Payment Request";
ViewData.SetActivePageAndTitle(PaymentRequestsNavPages.Create, (string.IsNullOrEmpty(Model.Id) ? "Create" : "Edit") + " Payment Request");
}
<section>
<div class="container">
<div class="row">
<div class="col-lg-12 section-heading">
<h2>@ViewData["Title"]</h2>
<hr class="primary">
</div>
</div>
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-lg-12 text-center">
<partial name="_StatusMessage" />
</div>
</div>
}
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["Title"]</h2>
<div class="row">
<div class="col-lg-12">
<form method="post" action="@Url.Action("EditPaymentRequest", "PaymentRequest", new { id = Model.Id}, Context.Request.Scheme)">
@ -86,7 +76,7 @@
<div class="form-group">
<label asp-for="CustomCSSLink" class="control-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank">
<span class="fa fa-question-circle-o" title="More information..."></span>
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<input asp-for="CustomCSSLink" class="form-control" />
<span asp-validation-for="CustomCSSLink" class="text-danger"></span>
@ -100,28 +90,25 @@
<button type="submit" class="btn btn-primary" id="SaveButton">Save</button>
@if (!string.IsNullOrEmpty(Model.Id))
{
<a class="btn btn-secondary" target="_blank" asp-action="ViewPaymentRequest" asp-route-id="@this.Context.GetRouteValue("id")" id="@Model.Id" name="ViewAppButton">View</a>
<a class="btn btn-secondary" target="_blank" asp-action="ViewPaymentRequest" asp-route-id="@Context.GetRouteValue("id")" id="@Model.Id" name="ViewAppButton">View</a>
<a class="btn btn-secondary"
target="_blank"
asp-action="ListInvoices"
asp-controller="Invoice"
asp-route-searchterm="@($"orderid:{PaymentRequestRepository.GetOrderIdForPaymentRequest(Model.Id)}")">Invoices</a>
<a class="btn btn-secondary" asp-route-id="@this.Context.GetRouteValue("id")" asp-action="ClonePaymentRequest" id="@Model.Id">Clone</a>
<a class="btn btn-secondary" asp-route-id="@Context.GetRouteValue("id")" asp-action="ClonePaymentRequest" id="@Model.Id">Clone</a>
@if (!Model.Archived)
{
<a class="btn btn-secondary" data-toggle="tooltip" title="Archive this payment request so that it does not appear in the payment request list by default" asp-route-id="@this.Context.GetRouteValue("id")" asp-controller="PaymentRequest" asp-action="TogglePaymentRequestArchival">Archive</a>
<a class="btn btn-secondary" data-toggle="tooltip" title="Archive this payment request so that it does not appear in the payment request list by default" asp-route-id="@Context.GetRouteValue("id")" asp-controller="PaymentRequest" asp-action="TogglePaymentRequestArchival">Archive</a>
}
else
{
<a class="btn btn-secondary" data-toggle="tooltip" title="Unarchive this payment request" asp-route-id="@this.Context.GetRouteValue("id")" asp-controller="PaymentRequest" asp-action="TogglePaymentRequestArchival">Unarchive</a>
<a class="btn btn-secondary" data-toggle="tooltip" title="Unarchive this payment request" asp-route-id="@Context.GetRouteValue("id")" asp-controller="PaymentRequest" asp-action="TogglePaymentRequestArchival">Unarchive</a>
}
}
<a asp-action="GetPaymentRequests" class="text-muted ml-3">Back to list</a>
</div>
</form>
<a asp-action="GetPaymentRequests">Back to List</a>
</div>
</div>
</div>

View File

@ -6,35 +6,25 @@
}
<section>
<div class="container">
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-lg-12 text-center">
<partial name="_StatusMessage" />
</div>
</div>
}
<div class="row">
<div class="col-lg-12 section-heading">
<h2>Payment Requests</h2>
<hr class="primary">
<p>
Create, search or pay a payment request.
<partial name="_StatusMessage" />
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h2 class="mb-0">
@ViewData["Title"]
<small>
<a href="https://docs.btcpayserver.org/PaymentRequests/" class="ml-1" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</p>
</div>
</small>
</h2>
<a asp-action="EditPaymentRequest" class="btn btn-primary mt-3 mt-sm-0" role="button" id="CreatePaymentRequest">
<span class="fa fa-plus"></span>
Create a payment request
</a>
</div>
<div class="row">
<div class="col-12 col-md-4 col-lg-6 mb-3">
<a asp-action="EditPaymentRequest" class="btn btn-primary" role="button" id="CreatePaymentRequest">
<span class="fa fa-plus"></span>
Create a payment request
</a>
</div>
<div class="col-12 col-md-8 col-lg-6 mb-3">
<div class="col-12 col-lg-6 mb-3 ml-auto">
<form asp-action="GetPaymentRequests" method="get">
<input type="hidden" asp-for="Count"/>
<input type="hidden" asp-for="TimezoneOffset" />

View File

@ -1,7 +1,6 @@
@using BTCPayServer.Services.Invoices
@using BTCPayServer.Client.Models
@model BTCPayServer.Models.PaymentRequestViewModels.ViewPaymentRequestViewModel
@addTagHelper *, BundlerMinifier.TagHelpers
@inject BTCPayServer.Services.BTCPayServerEnvironment env
@inject BTCPayServer.HostedServices.CssThemeManager themeManager
@ -197,7 +196,7 @@
<main class="flex-grow-1 py-4">
<div class="container">
@await Html.PartialAsync("_StatusMessage", new ViewDataDictionary(ViewData){ { "Margin", "mb-4" } })
<partial name="_StatusMessage" model="@(new ViewDataDictionary(ViewData){ { "Margin", "mb-4" } })" />
<div class="row">
<div class="col col-12 col-lg-6 mb-4">
<div class="jumbotron h-100 m-0 p-sm-5">

View File

@ -0,0 +1 @@
@using BTCPayServer.Views.PaymentRequest

View File

@ -76,7 +76,7 @@
<main class="flex-grow-1 py-4">
<div class="container">
@await Html.PartialAsync("_StatusMessage", new ViewDataDictionary(ViewData){ { "Margin", "mb-4" } })
<partial name="_StatusMessage" model="@(new ViewDataDictionary(ViewData){ { "Margin", "mb-4" } })" />
@if (!ViewContext.ModelState.IsValid)
{
@Html.ValidationSummary(string.Empty, new { @class = "alert alert-danger mb-4 pb-0 text-center" })

View File

@ -1,45 +1,29 @@
@model LndServicesViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, $"C-Lightning {Model.ConnectionType}");
}
<h4>C-Lightning @Model.ConnectionType</h4>
<partial name="_StatusMessage" />
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<h2 class="mb-4">@ViewData["Title"]</h2>
<div class="row">
<div class="col-md-8">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<div class="form-group">
<p>
<span>BTCPay exposes Clightning-Rest's service for outside consumption, you will find connection information here.<br /></span>
</p>
</div>
<div class="form-group">
<h5>Compatible wallets</h5>
</div>
<h5>Compatible wallets</h5>
<div class="row">
<div class="col-lg-3 ml-auto text-center">
<a href="https://github.com/ZeusLN/zeus" target="_blank">
<img src="~/img/zeus.jpg" height="100" asp-append-version="true" />
</a>
<p><a href="https://github.com/ZeusLN/zeus" target="_blank">Zeus</a></p>
</div>
<div class="col-lg-3 mr-auto text-center">
</div>
<div class="col-lg-3 mr-auto text-center">
</div>
<div class="col-lg-3 mr-auto text-center">
</div>
<div>
<a href="https://github.com/ZeusLN/zeus" target="_blank" class="d-inline-block mr-3 mb-3 text-center">
<img src="~/img/zeus.jpg" width="100" height="100" asp-append-version="true" alt="Zeus" />
<div class="mt-2">Zeus</div>
</a>
</div>
<div class="form-group">
@ -147,9 +131,9 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
@if(Model.QRCode != null)
@if (Model.QRCode != null)
{
<script type="text/javascript" src="~/js/qrcode.js" asp-append-version="true"></script>
<script type="text/javascript">

View File

@ -1,10 +1,9 @@
@model LightningWalletServices
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, "BTCPay Server Configurator");
}
<h4>BTCPay Server Configurator</h4>
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["Title"]</h2>
<div class="row">
<div class="col-md-6">
@ -28,6 +27,5 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -2,18 +2,16 @@
@model BTCPayServer.Controllers.ServerController.CreateTemporaryFileUrlViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services, $"Create temporary file link");
}
<h2 class="mb-4">@ViewData["Title"]</h2>
<partial name="_StatusMessage" />
<div class="row">
<div class="col-lg-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-lg-6">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<form method="post">
<div class="form-group">
<label asp-for="IsDownload"></label>
@ -24,12 +22,12 @@
<label asp-for="TimeAmount" class="control-label"></label>
<div class="input-group">
<input type="number" asp-for="TimeAmount" class="form-control">
<input type="number" asp-for="TimeAmount" class="form-control">
<div class="input-group-append">
<select asp-for="TimeType" asp-items="@Html.GetEnumSelectList< ServerController.CreateTemporaryFileUrlViewModel.TmpFileTimeType>()" class="custom-select"></select>
<select asp-for="TimeType" asp-items="@Html.GetEnumSelectList<ServerController.CreateTemporaryFileUrlViewModel.TmpFileTimeType>()" class="custom-select"></select>
</div>
</div>
<span asp-validation-for="TimeAmount" class="text-danger"></span>
<span asp-validation-for="TimeType" class="text-danger"></span>
</div>
@ -39,5 +37,5 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,9 +1,9 @@
@model BTCPayServer.Controllers.RegisterFromAdminViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Users, $"Users - Create account");
ViewData.SetActivePageAndTitle(ServerNavPages.Users, "Create account");
}
<partial name="_StatusMessage"/>
<h2 class="mb-4">@ViewData["Title"]</h2>
<div class="row">
<div class="col-md-6">

View File

@ -1,27 +1,22 @@
@model BTCPayServer.Models.ServerViewModels.DynamicDnsViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, "Dynamic DNS Service");
}
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<h4>Dynamic DNS Service</h4>
<partial name="_StatusMessage" />
@if (!this.ViewContext.ModelState.IsValid)
{
<div class="row">
<div class="col-md-8">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
}
<div class="row">
<div class="col-md-8">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<form method="post">
<div class="form-group">
<input type="hidden" asp-for="Modify" />
<input type="hidden" asp-for="Modify"/>
<div class="form-group">
<label asp-for="Settings.ServiceUrl"></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">
Well-known Dynamic DNS providers are:
@for (int i = 0; i < Model.KnownServices.Length; i++)
@ -34,7 +29,7 @@
<label asp-for="Settings.Hostname"></label>
@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"/>
<p class="form-text text-muted">
<span>The DNS record has been refreshed: </span>
@if (Model.LastUpdated != null)
@ -45,23 +40,23 @@
}
else
{
<input asp-for="Settings.Hostname" class="form-control" placeholder="Hostname" />
<input asp-for="Settings.Hostname" class="form-control" placeholder="Hostname"/>
<span asp-validation-for="Settings.Hostname" class="text-danger"></span>
}
</div>
<div class="form-group">
<label asp-for="Settings.Login"></label>
<input asp-for="Settings.Login" class="form-control" placeholder="Login" />
<input asp-for="Settings.Login" class="form-control" placeholder="Login"/>
</div>
<div class="form-group">
<label asp-for="Settings.Password"></label>
<input asp-for="Settings.Password" class="form-control" placeholder="Password" />
<input asp-for="Settings.Password" class="form-control" placeholder="Password"/>
</div>
@if (Model.Modify)
{
<div class="form-group">
<label asp-for="Settings.Enabled"></label>
<input asp-for="Settings.Enabled" class="form-check-inline" type="checkbox" />
<input asp-for="Settings.Enabled" class="form-check-inline" type="checkbox"/>
</div>
}
<button name="command" class="btn btn-primary" type="submit" value="Save">Save</button>

View File

@ -1,11 +1,9 @@
@model BTCPayServer.Models.ServerViewModels.DynamicDnsViewModel[]
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, "Dynamic DNS Settings");
}
<h4>Dynamic DNS Settings</h4>
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<div class="row">
<div class="col-md-8">

View File

@ -1,21 +1,20 @@
@model BTCPayServer.Storage.Services.Providers.AmazonS3Storage.Configuration.AmazonS3StorageConfiguration
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services, $"Storage - Amazon S3");
ViewData.SetActivePageAndTitle(ServerNavPages.Services, "Amazon S3 Storage");
}
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<partial name="_StatusMessage" />
<div class="row">
<div class="col-lg-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-lg-6">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<form method="post">
<div class="form-group">
<label asp-for="ContainerName"></label>
<input class="form-control" asp-for="ContainerName" />
<input class="form-control" asp-for="ContainerName"/>
<span asp-validation-for="ContainerName" class="text-danger"></span>
</div>
<div class="form-group">
@ -45,16 +44,16 @@
</div>
<div class="form-group">
<label asp-for="ChunkedUploadThreshold"></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>
</div>
<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">Change Storage provider</a>
</form>
</div>
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,21 +1,20 @@
@model BTCPayServer.Storage.Services.Providers.AzureBlobStorage.Configuration.AzureBlobStorageConfiguration
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services, $"Storage - Azure Blob Storage");
ViewData.SetActivePageAndTitle(ServerNavPages.Services, "Azure Blob Storage");
}
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<partial name="_StatusMessage" />
<div class="row">
<div class="col-lg-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-lg-6">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<form method="post">
<div class="form-group">
<label asp-for="ContainerName"></label>
<input class="form-control" asp-for="ContainerName" />
<input class="form-control" asp-for="ContainerName"/>
<span asp-validation-for="ContainerName" class="text-danger"></span>
</div>
<div class="form-group">
@ -25,11 +24,11 @@
</div>
<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">Change Storage provider</a>
</form>
</div>
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,21 +1,21 @@
@model BTCPayServer.Storage.Services.Providers.FileSystemStorage.Configuration.FileSystemStorageConfiguration
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services, $"Storage - Local Filesystem");
ViewData.SetActivePageAndTitle(ServerNavPages.Services, $"Local Filesystem Storage");
}
<partial name="_StatusMessage" />
<div class="row">
<div class="col-lg-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<p>Any uploaded files are being saved on the same machine that hosts BTCPay; please pay attention to your storage space.</p>
<div class="row">
<div class="col-lg-6">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<a asp-action="Storage" asp-route-forceChoice="true">Change Storage provider</a>
</div>
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,20 +1,20 @@
@model BTCPayServer.Storage.Services.Providers.GoogleCloudStorage.Configuration.GoogleCloudStorageConfiguration
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services, $"Storage - Google Cloud Storage");
ViewData.SetActivePageAndTitle(ServerNavPages.Services, "Google Cloud Storage");
}
<partial name="_StatusMessage" />
<div class="row">
<div class="col-lg-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<div class="row">
<div class="col-lg-6">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<form method="post">
<div class="form-group">
<label asp-for="ContainerName"></label>
<input class="form-control" asp-for="ContainerName" />
<input class="form-control" asp-for="ContainerName"/>
<span asp-validation-for="ContainerName" class="text-danger"></span>
</div>
<div class="form-group">
@ -34,11 +34,11 @@
</div>
<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">Change Storage provider</a>
</form>
</div>
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -3,5 +3,9 @@
ViewData.SetActivePageAndTitle(ServerNavPages.Emails);
}
<partial name="EmailsBody" model="Model" />
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}
<partial name="EmailsBody" model="@Model"/>

View File

@ -1,16 +1,16 @@
@model ViewFilesViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Files);
ViewData.SetActivePageAndTitle(ServerNavPages.Files, "File Storage");
}
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<partial name="_StatusMessage" />
<h4>File Storage</h4>
<div class="form-group">
<span>Change your <a asp-action="Services" asp-route-returnurl="@ViewData["ReturnUrl"]">external storage service</a> provider</span>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-upload-files-to-btcpay" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
</div>
<p>
Change your <a asp-action="Services" asp-route-returnurl="@ViewData["ReturnUrl"]">external storage service</a> provider.
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-upload-files-to-btcpay" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</p>
@if (Model.Files.Any())
{
@ -81,23 +81,16 @@ else
@if (Model.StorageConfigured)
{
<div class="card">
<form asp-action="CreateFile" method="post" enctype="multipart/form-data">
<form asp-action="CreateFile" method="post" enctype="multipart/form-data">
<h4 class="mt-5 mb-3">Upload File</h4>
<div class="card-body">
<h3 class="header">Upload File</h3>
<div class="custom-file mb-3">
<input type="file" class="custom-file-input" name="file" id="file" required>
<label class="custom-file-label" for="customFile">Choose file</label>
</div>
<div class="custom-file">
<input type="file" class="custom-file-input" name="file" id="file" required>
<label class="custom-file-label" for="customFile">Choose file</label>
</div>
</div>
<div class="card-footer">
<button class="btn btn-primary" role="button"><span class="fa fa-plus"></span> Upload file</button>
</div>
</form>
</div>
<button class="btn btn-primary" role="button"><span class="fa fa-plus"></span> Upload file</button>
</form>
@section Scripts {
<script>

View File

@ -1,34 +1,28 @@
@model ChargeServiceViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, "Lightning charge service");
}
<h4>Lightning charge service</h4>
<partial name="_StatusMessage" />
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<div class="row">
<div class="col-md-8">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<div class="form-group">
<p>
<span>Lightning charge is a simple API for invoicing on lightning network, you can use it with several plugins:</span>
<ul>
<li><a href="https://github.com/ElementsProject/woocommerce-gateway-lightning" target="_blank">WooCommerce Lightning Gateway</a>: A comprehensive e-commerce application that integrates with stock-management and order-tracking systems</li>
<li><a href="https://github.com/ElementsProject/nanopos" target="_blank">Nanopos</a>: A simple point-of-sale system for fixed-price goods</li>
<li><a href="https://github.com/ElementsProject/filebazaar" target="_blank">FileBazaar</a>: A system for selling files such as documents, images, and videos</li>
<li><a href="https://github.com/ElementsProject/wordpress-lightning-publisher" target="_blank">Lightning Publisher for WordPress</a>: A patronage model for unlocking WordPress blog entries</li>
<li><a href="https://github.com/ElementsProject/paypercall" target="_blank">Paypercall</a>: A programmers toolkit for Lightning that enables micropayments for individual API calls</li>
<li><a href="https://github.com/ElementsProject/ifpaytt" target="_blank">Ifpaytt</a>: An extension of paypercall that allows web developers using IFTTT to request payments for service usage</li>
<li><a href="https://github.com/ElementsProject/lightning-jukebox" target="_blank">Lightning Jukebox</a>: A fun demo that reimagines a classic technology for the Lightning Network</li>
<li><a href="https://github.com/ElementsProject/nanotip" target="_blank">Nanotip</a>: The simple tip jar, rebuilt to issue Lightning Network invoices</li>
</ul>
</p>
<p>Lightning charge is a simple API for invoicing on lightning network, you can use it with several plugins:</p>
<ul>
<li><a href="https://github.com/ElementsProject/woocommerce-gateway-lightning" target="_blank">WooCommerce Lightning Gateway</a>: A comprehensive e-commerce application that integrates with stock-management and order-tracking systems</li>
<li><a href="https://github.com/ElementsProject/nanopos" target="_blank">Nanopos</a>: A simple point-of-sale system for fixed-price goods</li>
<li><a href="https://github.com/ElementsProject/filebazaar" target="_blank">FileBazaar</a>: A system for selling files such as documents, images, and videos</li>
<li><a href="https://github.com/ElementsProject/wordpress-lightning-publisher" target="_blank">Lightning Publisher for WordPress</a>: A patronage model for unlocking WordPress blog entries</li>
<li><a href="https://github.com/ElementsProject/paypercall" target="_blank">Paypercall</a>: A programmers toolkit for Lightning that enables micropayments for individual API calls</li>
<li><a href="https://github.com/ElementsProject/ifpaytt" target="_blank">Ifpaytt</a>: An extension of paypercall that allows web developers using IFTTT to request payments for service usage</li>
<li><a href="https://github.com/ElementsProject/lightning-jukebox" target="_blank">Lightning Jukebox</a>: A fun demo that reimagines a classic technology for the Lightning Network</li>
<li><a href="https://github.com/ElementsProject/nanotip" target="_blank">Nanotip</a>: The simple tip jar, rebuilt to issue Lightning Network invoices</li>
</ul>
</div>
</div>
</div>

View File

@ -1,11 +1,9 @@
@model LightningWalletServices
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, Model.WalletName);
}
<h4>@Model.WalletName</h4>
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
@if (Model.ShowQR)
{
@ -19,25 +17,22 @@
}
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-md-8">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<div class="form-group">
<h5>Browser connection</h5>
<p>
<span>You can go to @Model.WalletName from your browser by <a href="@Model.ServiceLink">clicking here</a><br /></span>
<span>You can go to @Model.WalletName from your browser by <a href="@Model.ServiceLink">clicking here</a><br/></span>
</p>
</div>
<div class="form-group">
<h5>QR Code connection</h5>
<p>
<span>You can use QR Code to connect to your @Model.WalletName from your mobile.<br /></span>
<span>You can use QR Code to connect to your @Model.WalletName from your mobile.<br/></span>
</p>
</div>
<div class="form-group">
@ -45,7 +40,7 @@
{
<div class="form-group">
<form method="get">
<input type="hidden" asp-for="ShowQR" value="true" />
<input type="hidden" asp-for="ShowQR" value="true"/>
<button type="submit" class="btn btn-primary">Show Confidential QR Code</button>
</form>
</div>
@ -62,7 +57,7 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
@if (Model.ShowQR)
{

View File

@ -88,8 +88,6 @@
}
}
<partial name="_StatusMessage"/>
<style>
.version-switch .nav-link { display: inline; }
.version-switch .nav-link.active { display: none; }
@ -118,7 +116,7 @@
@if (Model.Installed.Any())
{
<h3 class="mb-3">Installed Plugins</h3>
<h2 class="mb-4">Installed Plugins</h2>
<div class="row mb-4">
@foreach (var plugin in Model.Installed)
{
@ -235,9 +233,10 @@
}
</div>
}
@if (availableAndNotInstalled.Any())
{
<h3 class="mb-3">Available Plugins</h3>
<h2 class="mb-4">Available Plugins</h2>
<div class="row mb-4">
@foreach (var pluginT in availableAndNotInstalled)
{
@ -250,7 +249,7 @@
@plugin.Version
@if (pluginT.Item2)
{
<div class="badge badge-light ml-2" data-toggle="tooltip" title="This plugin has been recommended to be installed by your deployment method." class="text-nowrap">Recommended <span class="fa fa-question-circle-o"></span></div>
<div class="badge badge-light ml-2" data-toggle="tooltip" title="This plugin has been recommended to be installed by your deployment method." class="text-nowrap">Recommended <span class="fa fa-question-circle-o text-secondary"></span></div>
}
</h5>
<p class="card-text">@plugin.Description</p>

View File

@ -23,79 +23,68 @@
var sortByAsc = "Sort by ascending...";
}
<partial name="_StatusMessage"/>
<div class="row button-row">
<div class="col-12 col-sm-4 col-lg-6 mb-3">
<a asp-action="CreateUser" class="btn btn-primary" role="button" id="CreateUser">
<span class="fa fa-plus"></span> Add User
</a>
</div>
<div class="col-12 col-sm-8 col-lg-6 mb-3">
<form
asp-action="ListUsers"
asp-route-sortOrder="@(userEmailSortOrder)"
>
<div class="input-group">
<input asp-for="SearchTerm" class="form-control" placeholder="Search by email..." />
<div class="input-group-append">
<button type="submit" class="btn btn-secondary" title="Search by email">
<span class="fa fa-search"></span> Search
</button>
</div>
</div>
<span asp-validation-for="SearchTerm" class="text-danger"></span>
</form>
</div>
<div class="d-flex align-items-center justify-content-between mb-4">
<h2 class="mb-0">@ViewData["Title"]</h2>
<a asp-action="CreateUser" class="btn btn-primary" role="button" id="CreateUser">
<span class="fa fa-plus"></span> Add User
</a>
</div>
<div class="row">
<div class="col-lg-9 col-xl-8">
<table class="table table-sm">
<thead>
<tr>
<th>
<a
asp-action="ListUsers"
asp-route-sortOrder="@(nextUserEmailSortOrder ?? "asc")"
class="text-nowrap"
title="@(nextUserEmailSortOrder == "desc" ? sortByAsc : sortByDesc)"
>
Email
<span class="fa @(sortIconClass)" />
</a>
</th>
<th>Created</th>
<th>Verified</th>
<th class="text-right">Actions</th>
</tr>
</thead>
<tbody>
@foreach (var user in Model.Users)
{
<tr>
<td>@user.Email</td>
<td>@user.Created?.ToBrowserDate()</td>
<td class="text-center">
@if (user.Verified)
{
<span class="text-success fa fa-check"></span>
}
else
{
<span class="text-danger fa fa-times"></span>
}
</td>
<td class="text-right">
<a asp-action="User" asp-route-userId="@user.Id">Edit</a> <span> - </span> <a asp-action="DeleteUser" asp-route-userId="@user.Id">Remove</a>
</td>
</tr>
}
</tbody>
</table>
<vc:pager view-model="Model"></vc:pager>
<form
asp-action="ListUsers"
asp-route-sortOrder="@(userEmailSortOrder)"
>
<div class="input-group">
<input asp-for="SearchTerm" class="form-control" placeholder="Search by email..." />
<div class="input-group-append">
<button type="submit" class="btn btn-secondary" title="Search by email">
<span class="fa fa-search"></span> Search
</button>
</div>
</div>
</div>
<span asp-validation-for="SearchTerm" class="text-danger"></span>
</form>
<table class="table table-sm">
<thead>
<tr>
<th>
<a
asp-action="ListUsers"
asp-route-sortOrder="@(nextUserEmailSortOrder ?? "asc")"
class="text-nowrap"
title="@(nextUserEmailSortOrder == "desc" ? sortByAsc : sortByDesc)"
>
Email
<span class="fa @(sortIconClass)" />
</a>
</th>
<th>Created</th>
<th>Verified</th>
<th class="text-right">Actions</th>
</tr>
</thead>
<tbody>
@foreach (var user in Model.Users)
{
<tr>
<td>@user.Email</td>
<td>@user.Created?.ToBrowserDate()</td>
<td class="text-center">
@if (user.Verified)
{
<span class="text-success fa fa-check"></span>
}
else
{
<span class="text-danger fa fa-times"></span>
}
</td>
<td class="text-right">
<a asp-action="User" asp-route-userId="@user.Id">Edit</a> <span> - </span> <a asp-action="DeleteUser" asp-route-userId="@user.Id">Remove</a>
</td>
</tr>
}
</tbody>
</table>
<vc:pager view-model="Model"></vc:pager>

View File

@ -1,23 +1,14 @@
@model LndSeedBackupViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, "LND Seed Backup");
}
<h4>LND Seed Backup</h4>
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-md-8 text-center">
<partial name="_StatusMessage" />
</div>
</div>
}
<h2 class="mb-4">@ViewData["Title"]</h2>
@if (Model.IsWalletUnlockPresent)
{
<div class="row">
<div class="col-md-8">
<div class="col-lg-8">
<div class="form-group">
<p>The LND seed backup is useful to recover funds of your LND wallet in case of a corruption of your server.</p>
<p>The recovering process is documented by LND on <a href="https://github.com/lightningnetwork/lnd/blob/master/docs/recovery.md">this page</a>.</p>

View File

@ -1,189 +1,150 @@
@model LndServicesViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, $"LND {Model.ConnectionType}");
}
<h4>LND @Model.ConnectionType</h4>
<partial name="_StatusMessage" />
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="form-group">
<p>
<span>BTCPay exposes LND's @Model.ConnectionType service for outside consumption, you will find connection information here.<br /></span>
</p>
<h2 class="mb-4">@ViewData["Title"]</h2>
<p>
BTCPay exposes LND's @Model.ConnectionType service for outside consumption, you will find connection information here.
</p>
<h4 class="mb-3">Compatible wallets</h4>
<div>
@if (Model.Uri == null) // if GRPC
{
<a href="https://www.pebble.indiesquare.me/" target="_blank" class="d-inline-block mr-3 text-center">
<img src="~/img/pebblewallet.jpg" width="100" height="100" asp-append-version="true" alt="Pebble" />
<div class="mt-2">Pebble</div>
</a>
<a href="https://zaphq.io/" target="_blank" class="d-inline-block mr-3 text-center">
<img src="~/img/zapwallet.jpg" width="100" height="100" asp-append-version="true" alt="Zap" />
<div class="mt-2">Zap</div>
</a>
}
else
{
<a href="https://lightningjoule.com/" target="_blank" class="d-inline-block mr-3 mb-3 text-center">
<img src="~/img/joule.png" width="100" height="100" asp-append-version="true" alt="Joule" />
<div class="mt-2">Joule</div>
</a>
<a href="https://github.com/ZeusLN/zeus" target="_blank" class="d-inline-block mr-3 mb-3 text-center">
<img src="~/img/zeus.jpg" width="100" height="100" asp-append-version="true" alt="Zeus" />
<div class="mt-2">Zeus</div>
</a>
}
</div>
<div class="form-group">
<h5>Compatible wallets</h5>
</div>
@if (Model.Uri == null) // if GRPC
<h4 class="mt-5 mb-3">QR Code connection</h4>
<p>
You can use this QR Code to connect external software to your LND instance.<br/>
This QR Code is only valid for 10 minutes.
</p>
@if (Model.QRCode == null)
{
<div class="row">
<div class="col-lg-3 ml-auto text-center">
<a href="https://www.pebble.indiesquare.me/" target="_blank">
<img src="~/img/pebblewallet.jpg" height="100" asp-append-version="true" />
</a>
<p><a href="https://www.pebble.indiesquare.me/" target="_blank">Pebble</a></p>
</div>
<div class="col-lg-3 ml-auto text-center">
<a href="https://zaphq.io/" target="_blank">
<img src="~/img/zapwallet.jpg" height="100" asp-append-version="true" />
</a>
<p><a href="https://zaphq.io/" target="_blank">Zap</a></p>
</div>
<div class="col-lg-3 mr-auto text-center">
</div>
<div class="col-lg-3 mr-auto text-center">
</div>
<div class="form-group">
<form method="post">
<button type="submit" class="btn btn-primary">Show QR Code</button>
</form>
</div>
}
else
{
<div class="row">
<div class="col-lg-3 ml-auto text-center">
<a href="https://lightningjoule.com/" target="_blank">
<img src="~/img/joule.png" height="100" asp-append-version="true" />
</a>
<p><a href="https://lightningjoule.com/" target="_blank">Joule</a></p>
<div class="form-group">
<div id="qrCode"></div>
<div id="qrCodeData" data-url="@Model.QRCode"></div>
</div>
<p>See QR Code information by clicking <a href="#detailsQR" data-toggle="collapse">here</a>.</p>
<div id="detailsQR" class="collapse">
<div class="form-group">
<label>QR Code data</label>
<input asp-for="QRCode" readonly class="form-control"/>
</div>
<div class="col-lg-3 ml-auto text-center">
<a href="https://github.com/ZeusLN/zeus" target="_blank">
<img src="~/img/zeus.jpg" height="100" asp-append-version="true" />
</a>
<p><a href="https://github.com/ZeusLN/zeus" target="_blank">Zeus</a></p>
</div>
<div class="col-lg-3 mr-auto text-center">
</div>
<div class="col-lg-3 mr-auto text-center">
<div class="form-group">
Click <a href="@Model.QRCodeLink" target="_blank">here</a> to open the configuration file.
</div>
</div>
}
<div class="form-group">
<h5>QR Code connection</h5>
<p>
<span>You can use this QR Code to connect external software to your LND instance.<br /></span>
<span>This QR Code is only valid for 10 minutes</span>
</p>
</div>
<div class="form-group">
@if (Model.QRCode == null)
<h4 class="mt-5 mb-3">More details</h4>
<p>Alternatively, you can see the settings by clicking <a href="#details" data-toggle="collapse">here</a>.</p>
<div id="details" class="collapse">
@if (Model.Uri == null)
{
<div class="form-group">
<form method="post">
<button type="submit" class="btn btn-primary">Show QR Code</button>
</form>
<label asp-for="Host"></label>
<input asp-for="Host" readonly class="form-control"/>
</div>
<div class="form-group">
<label asp-for="SSL"></label>
<input asp-for="SSL" disabled type="checkbox" class="form-check-inline"/>
</div>
}
else
{
<div class="form-group">
<div id="qrCode"></div>
<div id="qrCodeData" data-url="@Model.QRCode"></div>
</div>
<p>See QR Code information by clicking <a href="#detailsQR" data-toggle="collapse">here</a></p>
<div id="detailsQR" class="collapse">
<div class="form-group">
<label>QR Code data</label>
<input asp-for="QRCode" readonly class="form-control" />
</div>
<div class="form-group">
Click <a href="@Model.QRCodeLink" target="_blank">here</a> to open the configuration file.
</div>
<label asp-for="Uri"></label>
<input asp-for="Uri" readonly class="form-control"/>
</div>
}
@if (Model.Macaroon != null)
{
<div class="form-group">
<label asp-for="Macaroon"></label>
<input asp-for="Macaroon" readonly class="form-control"/>
</div>
}
@if (Model.AdminMacaroon != null)
{
<div class="form-group">
<label asp-for="AdminMacaroon"></label>
<input asp-for="AdminMacaroon" readonly class="form-control"/>
</div>
}
@if (Model.InvoiceMacaroon != null)
{
<div class="form-group">
<label asp-for="InvoiceMacaroon"></label>
<input asp-for="InvoiceMacaroon" readonly class="form-control"/>
</div>
}
@if (Model.ReadonlyMacaroon != null)
{
<div class="form-group">
<label asp-for="ReadonlyMacaroon"></label>
<input asp-for="ReadonlyMacaroon" readonly class="form-control"/>
</div>
}
@if (Model.GRPCSSLCipherSuites != null)
{
<div class="form-group">
<label asp-for="GRPCSSLCipherSuites"></label>
<input asp-for="GRPCSSLCipherSuites" readonly class="form-control"/>
</div>
}
@if (Model.CertificateThumbprint != null)
{
<div class="form-group">
<label asp-for="CertificateThumbprint"></label>
<input asp-for="CertificateThumbprint" readonly class="form-control"/>
</div>
}
<div class="form-group">
<h5>More details...</h5>
<p>Alternatively, you can see the settings by clicking <a href="#details" data-toggle="collapse">here</a></p>
</div>
<div id="details" class="collapse">
@if (Model.Uri == null)
{
<div class="form-group">
<label asp-for="Host"></label>
<input asp-for="Host" readonly class="form-control" />
</div>
<div class="form-group">
<label asp-for="SSL"></label>
<input asp-for="SSL" disabled type="checkbox" class="form-check-inline" />
</div>
}
else
{
<div class="form-group">
<label asp-for="Uri"></label>
<input asp-for="Uri" readonly class="form-control" />
</div>
}
@if (Model.Macaroon != null)
{
<div class="form-group">
<label asp-for="Macaroon"></label>
<input asp-for="Macaroon" readonly class="form-control" />
</div>
}
@if (Model.AdminMacaroon != null)
{
<div class="form-group">
<label asp-for="AdminMacaroon"></label>
<input asp-for="AdminMacaroon" readonly class="form-control" />
</div>
}
@if (Model.InvoiceMacaroon != null)
{
<div class="form-group">
<label asp-for="InvoiceMacaroon"></label>
<input asp-for="InvoiceMacaroon" readonly class="form-control" />
</div>
}
@if (Model.ReadonlyMacaroon != null)
{
<div class="form-group">
<label asp-for="ReadonlyMacaroon"></label>
<input asp-for="ReadonlyMacaroon" readonly class="form-control" />
</div>
}
@if (Model.GRPCSSLCipherSuites != null)
{
<div class="form-group">
<label asp-for="GRPCSSLCipherSuites"></label>
<input asp-for="GRPCSSLCipherSuites" readonly class="form-control" />
</div>
}
@if (Model.CertificateThumbprint != null)
{
<div class="form-group">
<label asp-for="CertificateThumbprint"></label>
<input asp-for="CertificateThumbprint" readonly class="form-control" />
</div>
}
</div>
</div>
</div>
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
@if(Model.QRCode != null)
{
<script type="text/javascript" src="~/js/qrcode.js" asp-append-version="true"></script>
<script type="text/javascript">
new QRCode(document.getElementById("qrCode"),
{
new QRCode(document.getElementById("qrCode"), {
text: @Safe.Json(Model.QRCode),
width: 200,
height: 200,

View File

@ -1,9 +1,9 @@
@model BTCPayServer.Models.ServerViewModels.LogsViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Logs);
ViewData.SetActivePageAndTitle(ServerNavPages.Logs, "Logs");
}
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<ul class="list-unstyled">
@foreach (var file in Model.LogFiles)
@ -41,5 +41,5 @@
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,17 +1,15 @@
@model BTCPayServer.Models.ServerViewModels.MaintenanceViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Maintenance);
ViewData.SetActivePageAndTitle(ServerNavPages.Maintenance, "Maintenance");
}
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<form method="post">
<div class="row mb-5">
<div class="col-lg-9 col-xl-8">
<div class="form-group">
<h5>Change domain name</h5>
<span>You can change the domain name of your server by following <a href="https://docs.btcpayserver.org/ChangeDomain" target="_blank">this guide</a></span>
</div>
<h4 class="mb-3">Change domain name</h4>
<p>You can change the domain name of your server by following <a href="https://docs.btcpayserver.org/ChangeDomain" target="_blank">this guide</a>.</p>
<div class="form-group">
<div class="form-inline">
@ -22,28 +20,25 @@
</div>
<span asp-validation-for="DNSDomain" class="text-danger"></span>
</div>
</div>
</div>
<div class="row mb-5">
<div class="col-lg-9 col-xl-8">
<h5>Update</h5>
<p class="text-secondary mb-2">Update to the latest version of BTCPay server.</p>
<h4 class="mt-5 mb-3">Update</h4>
<p class="text-secondary">Update to the latest version of BTCPay server.</p>
<div class="form-group">
<div class="input-group">
<button name="command" type="submit" class="btn btn-primary" value="update" disabled="@(Model.CanUseSSH ? null : "disabled")">Update</button>
</div>
</div>
<h5 class="mt-5">Restart</h5>
<p class="text-secondary mb-2">Restart BTCPay server and related services.</p>
<h4 class="mt-5 mb-3">Restart</h4>
<p class="text-secondary">Restart BTCPay server and related services.</p>
<div class="form-group">
<div class="input-group">
<button name="command" type="submit" class="btn btn-primary" value="restart" disabled="@(Model.CanUseSSH ? null : "disabled")">Restart</button>
</div>
</div>
<h5 class="mt-5">Clean</h5>
<p class="text-secondary mb-2">Delete unused docker images present on your system.</p>
<h4 class="mt-5 mb-3">Clean</h4>
<p class="text-secondary">Delete unused docker images present on your system.</p>
<div class="form-group">
<div class="input-group">
<button name="command" type="submit" class="btn btn-secondary" value="clean" disabled="@(Model.CanUseSSH ? null : "disabled")">Clean</button>
@ -54,5 +49,5 @@
</form>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,11 +1,9 @@
@model LightningWalletServices
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, Model.WalletName);
}
<h4>@Model.WalletName</h4>
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
@if (Model.ShowQR)
{
@ -18,49 +16,31 @@
</div>
}
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="form-group">
<h5>Full node connection</h5>
<p>
<span>This page exposes information to connect remotely to your full node via the P2P protocol.</span>
</p>
</div>
<div class="form-group">
<h5>Compatible wallets</h5>
</div>
<div class="row">
<div class="col-lg-3 ml-auto text-center">
<a href="https://play.google.com/store/apps/details?id=com.greenaddress.greenbits_android_wallet" target="_blank">
<img src="~/img/GreenWallet.png" height="100" asp-append-version="true" />
</a>
<p><a href="https://play.google.com/store/apps/details?id=com.greenaddress.greenbits_android_wallet" target="_blank">Blockstream Green Wallet</a></p>
</div>
<div class="col-lg-3 mr-auto text-center">
<a href="https://www.wasabiwallet.io/" target="_blank">
<img src="~/img/wasabi.png" height="100" asp-append-version="true" />
</a>
<p><a href="https://www.wasabiwallet.io/" target="_blank">Wasabi Wallet</a> <a href="https://www.reddit.com/r/WasabiWallet/comments/aqlyia/how_to_connect_wasabi_wallet_to_my_own_full/" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a></p>
</div>
<div class="col-lg-3 mr-auto text-center">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
</div>
<div class="col-lg-3 mr-auto text-center">
<h4 class="mb-3">Full node connection</h4>
<p>This page exposes information to connect remotely to your full node via the P2P protocol.</p>
</div>
</div>
<div class="form-group">
<h5>QR Code connection</h5>
<p>
<span>You can use QR Code to connect to @Model.WalletName with compatible wallets.<br /></span>
</p>
<h4 class="mb-3">Compatible wallets</h4>
<div>
<a href="https://play.google.com/store/apps/details?id=com.greenaddress.greenbits_android_wallet" target="_blank" class="d-inline-block mr-3 mb-3 text-center">
<img src="~/img/GreenWallet.png" width="100" height="100" asp-append-version="true" alt="Blockstream Green" />
<div class="mt-2">Blockstream Green</div>
</a>
<a href="https://www.wasabiwallet.io/" target="_blank" class="d-inline-block mr-3 mb-3 text-center">
<img src="~/img/wasabi.png" width="100" height="100" asp-append-version="true" alt="Wasabi Wallet" />
<div class="mt-2">Wasabi Wallet</div>
</a>
</div>
<h4 class="mt-5 mb-3">QR Code connection</h4>
<p>You can use QR Code to connect to @Model.WalletName with compatible wallets.</p>
<div class="form-group">
@if (!Model.ShowQR)
{
@ -90,7 +70,7 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
@if (Model.ShowQR)
{

View File

@ -6,7 +6,7 @@
ViewData.SetActivePageAndTitle(ServerNavPages.Policies);
}
<partial name="_StatusMessage"/>
<h2 class="mb-4">@ViewData["Title"]</h2>
@if (!ViewContext.ModelState.IsValid)
{
@ -14,18 +14,22 @@
}
<form method="post">
<div class="form-group mb-4">
<h5>Existing User Settings</h5>
<div class="form-group mb-5">
<h4 class="mb-3">Existing User Settings</h4>
<div class="form-check my-1">
<input asp-for="AllowLightningInternalNodeForAll" type="checkbox" class="form-check-input"/>
<label asp-for="AllowLightningInternalNodeForAll" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-LightningNetwork/#how-many-users-can-use-lightning-network-in-btcpay" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-LightningNetwork/#how-many-users-can-use-lightning-network-in-btcpay" target="_blank">\
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="AllowLightningInternalNodeForAll" class="text-danger"></span>
</div>
<div class="form-check my-1">
<input asp-for="AllowHotWalletForAll" type="checkbox" class="form-check-input"/>
<label asp-for="AllowHotWalletForAll" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/CreateWallet/#requirements-to-create-wallets" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<a href="https://docs.btcpayserver.org/CreateWallet/#requirements-to-create-wallets" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="AllowHotWalletForAll" class="text-danger"></span>
</div>
<div class="form-check my-1">
@ -35,8 +39,8 @@
</div>
</div>
<div class="form-group mb-4">
<h5>New User Settings</h5>
<div class="form-group mb-5">
<h4 class="mb-3">New User Settings</h4>
<div class="form-check my-1">
@{
var emailSettings = (await _SettingsRepository.GetSettingAsync<EmailSettings>()) ?? new EmailSettings();
@ -46,7 +50,9 @@
}
<input asp-for="RequiresConfirmedEmail" type="checkbox" class="form-check-input" disabled="@(isEmailConfigured ? null : "disabled")"/>
<label asp-for="RequiresConfirmedEmail" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-allow-registration-on-my-btcpay-server" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-allow-registration-on-my-btcpay-server" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="RequiresConfirmedEmail" class="text-danger"></span>
@if (!isEmailConfigured)
{
@ -68,24 +74,28 @@
</div>
</div>
<div class="form-group mb-4">
<h5>Notification Settings</h5>
<div class="form-group mb-5">
<h4 class="mb-3">Notification Settings</h4>
<div class="form-check my-1">
<input asp-for="DisableInstantNotifications" type="checkbox" class="form-check-input"/>
<label asp-for="DisableInstantNotifications" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/Notifications/#notifications" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<a href="https://docs.btcpayserver.org/Notifications/#notifications" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="DisableInstantNotifications" class="text-danger"></span>
</div>
<div class="form-check my-1">
<input asp-for="DisableStoresToUseServerEmailSettings" type="checkbox" class="form-check-input"/>
<label asp-for="DisableStoresToUseServerEmailSettings" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/Notifications/#server-emails" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<a href="https://docs.btcpayserver.org/Notifications/#server-emails" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="DisableStoresToUseServerEmailSettings" class="text-danger"></span>
</div>
</div>
<div class="form-group mb-4">
<h5>Maintenance Settings</h5>
<div class="form-group mb-5">
<h4 class="mb-3">Maintenance Settings</h4>
@if (ViewBag.UpdateUrlPresent)
{
<div class="form-check my-1">
@ -97,12 +107,14 @@
<div class="form-check my-1">
<input asp-for="DiscourageSearchEngines" type="checkbox" class="form-check-input"/>
<label asp-for="DiscourageSearchEngines" class="form-check-label"></label>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-hide-my-btcpay-server-from-search-engines" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<a href="https://docs.btcpayserver.org/FAQ/FAQ-ServerSettings/#how-to-hide-my-btcpay-server-from-search-engines" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<span asp-validation-for="DiscourageSearchEngines" class="text-danger"></span>
</div>
</div>
<h5>Customization Settings</h5>
<h4 class="mb-3">Customization Settings</h4>
<div class="form-group">
<label asp-for="RootAppId"></label>

View File

@ -1,11 +1,9 @@
@model LightningWalletServices
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, Model.WalletName);
}
<h4>@Model.WalletName</h4>
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
@if (Model.ShowQR)
{
@ -18,55 +16,37 @@
</div>
}
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="form-group">
<h5>Full node connection</h5>
<p>
<span>This page exposes information to connect remotely to your full node via the RPC protocol.</span>
</p>
</div>
<div class="form-group">
<h5>Compatible wallets</h5>
</div>
<div class="row">
<div class="col-lg-3 ml-auto text-center">
<a href="https://apps.apple.com/us/app/fully-noded/id1436425586" target="_blank">
<img src="~/img/fullynoded.png" height="100" asp-append-version="true" />
</a>
<p><a href="https://apps.apple.com/us/app/fully-noded/id1436425586" target="_blank">Fully Noded</a></p>
</div>
<div class="col-lg-3 mr-auto text-center">
<a href="https://github.com/cryptoadvance/specter-desktop" target="_blank">
<img src="~/img/Specter.png" height="100" asp-append-version="true" />
</a>
<p><a href="https://github.com/cryptoadvance/specter-desktop" target="_blank">Specter</a></p>
</div>
<div class="col-lg-3 mr-auto text-center">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
</div>
<div class="col-lg-3 mr-auto text-center">
<h4 class="mb-3">Full node connection</h4>
<p>This page exposes information to connect remotely to your full node via the RPC protocol.</p>
</div>
</div>
<div class="form-group">
<h5>QR Code connection</h5>
<p>
<span>You can use QR Code to connect to @Model.WalletName with compatible wallets.<br /></span>
</p>
<h4 class="mb-3">Compatible wallets</h4>
<div>
<a href="https://apps.apple.com/us/app/fully-noded/id1436425586" target="_blank" class="d-inline-block mr-3 text-center">
<img src="~/img/fullynoded.png" width="100" height="100" asp-append-version="true" alt="Fully Noded" />
<div class="mt-2">Fully Noded</div>
</a>
<a href="https://github.com/cryptoadvance/specter-desktop" target="_blank" class="d-inline-block mr-3 text-center">
<img src="~/img/specter.png" width="100" height="100" asp-append-version="true" alt="Specter Desktop" />
<div class="mt-2">Specter Desktop</div>
</a>
</div>
<h4 class="mt-5 mb-3">QR Code connection</h4>
<p>You can use QR Code to connect to @Model.WalletName with compatible wallets.</p>
<div class="form-group">
@if (!Model.ShowQR)
{
<div class="form-group">
<form method="get">
<input type="hidden" asp-for="ShowQR" value="true" />
<input type="hidden" asp-for="ShowQR" value="true"/>
<button type="submit" class="btn btn-primary">Show Confidential QR Code</button>
</form>
</div>
@ -81,7 +61,7 @@
<div id="detailsQR" class="collapse">
<div class="form-group">
<label>QR Code data</label>
<input asp-for="ServiceLink" readonly class="form-control" />
<input asp-for="ServiceLink" readonly class="form-control"/>
</div>
</div>
}
@ -90,7 +70,7 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
@if (Model.ShowQR)
{

View File

@ -1,19 +1,11 @@
@model BTCPayServer.Models.ServerViewModels.SSHServiceViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, "SSH settings");
}
<h4>SSH settings</h4>
<partial name="_StatusMessage" />
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<div class="row">
<div class="col-md-8">
<div class="form-group">
<p>
@ -21,6 +13,10 @@
</p>
</div>
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<div class="form-group">
<div class="form-group">

View File

@ -1,20 +1,13 @@
@model BTCPayServer.Models.ServerViewModels.ServicesViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, "Services");
}
<partial name="_StatusMessage" />
<div class="row">
<div class="col-lg-9 col-xl-8">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<div class="row mb-5">
<div class="col-lg-9 col-xl-8">
<h4>Crypto services exposed by your server</h4>
<h4 class="mb-3">Crypto services exposed by your server</h4>
<table class="table table-sm mt-2">
<thead>
<tr>
@ -50,7 +43,7 @@
{
<div class="row mb-5">
<div class="col-lg-9 col-xl-8">
<h4>Other external services</h4>
<h4 class="mb-3">Other external services</h4>
<table class="table table-sm mt-2">
<thead>
@ -88,7 +81,7 @@
{
<div class="row mb-5">
<div class="col-lg-9 col-xl-8">
<h4>HTTP-based TOR hidden services</h4>
<h4 class="mb-3">HTTP-based TOR hidden services</h4>
<table class="table table-sm mt-2">
<thead>
@ -117,7 +110,7 @@
{
<div class="row mb-5">
<div class="col-lg-9 col-xl-8">
<h4>Other TOR hidden services</h4>
<h4 class="mb-3">Other TOR hidden services</h4>
<table class="table table-sm mt-2">
<thead>
@ -143,7 +136,7 @@
}
<div class="row mb-5">
<div class="col-lg-9 col-xl-8">
<h4>External storage services</h4>
<h4 class="mb-3">External storage services</h4>
<p class="text-secondary mb-0">Integrated storage providers to store file uploads from BTCPay Server.</p>
<table class="table table-sm mt-2">
@ -169,5 +162,5 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,35 +1,34 @@
@using BTCPayServer.Storage.Models
@model BTCPayServer.Storage.ViewModels.ChooseStorageViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Services);
ViewData.SetActivePageAndTitle(ServerNavPages.Services, "Storage");
}
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<partial name="_StatusMessage" />
@if (Model.ShowChangeWarning)
{
<div class="alert alert-danger">
If you change your configured storage provider, your current files will become inaccessible.
</div>
}
<div class="row">
<div class="col-lg-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-lg-6">
<form method="post">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<div class="form-group">
<label asp-for="Provider"></label>
<select asp-for="Provider" asp-items="@Html.GetEnumSelectList<StorageProvider>()" class="form-control"></select>
</div>
<button type="submit" class="btn btn-primary" name="command" value="Save">Next</button>
</form>
</div>
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,20 +1,19 @@
@model BTCPayServer.Services.ThemeSettings
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Theme);
ViewData.SetActivePageAndTitle(ServerNavPages.Theme, "Theme");
}
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<partial name="_StatusMessage" />
<div class="row">
<div class="col-lg-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row">
<div class="col-lg-6">
<form method="post">
<h4>Custom theme</h4>
<h4 class="mb-3">Custom theme</h4>
<p>Select one of our predefined themes. Optionally you can also provide a CSS file that customizes the chosen theme.</p>
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<div class="form-group">
<label asp-for="ThemeCssUri"></label>
<select asp-for="ThemeCssUri" class="form-control">
@ -27,14 +26,19 @@
</div>
<div class="form-group mb-5">
<label asp-for="CustomThemeCssUri"></label>
<a href="https://docs.btcpayserver.org/Theme/#1-custom-themes" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<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>
</a>
<input asp-for="CustomThemeCssUri" class="form-control" />
<span asp-validation-for="CustomThemeCssUri" class="text-danger"></span>
</div>
<h4>Bootstrap theme</h4>
<h4 class="mb-3">Bootstrap theme</h4>
<div class="form-group">
<label asp-for="BootstrapCssUri"></label>
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<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>
</a>
<input asp-for="BootstrapCssUri" class="form-control" />
<span asp-validation-for="BootstrapCssUri" class="text-danger"></span>
<p class="form-text text-muted">
@ -51,11 +55,12 @@
is used on top of Bootstrap
</p>
</div>
<button type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
</form>
</div>
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,21 +1,16 @@
@model UsersViewModel.UserViewModel
@{
ViewData.SetActivePageAndTitle(ServerNavPages.Users);
ViewData.SetActivePageAndTitle(ServerNavPages.Users, Model.Email);
}
<h4>Modify User - @Model.Email</h4>
<partial name="_StatusMessage" />
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<div class="row">
<div class="col-md-8">
<form method="post">
<div class="form-group">
<div class="form-check">
<input asp-for="IsAdmin" type="checkbox" class="form-check-input" />
<label asp-for="IsAdmin" class="form-check-label"></label>
</div>
<label asp-for="IsAdmin">Is admin</label>
<input asp-for="IsAdmin" type="checkbox" class="btcpay-toggle ml-2"/>
</div>
<button name="command" type="submit" class="btn btn-primary" value="Save">Save</button>
</form>

View File

@ -1,6 +1,6 @@
@using BTCPayServer.Configuration
@inject BTCPayServerOptions BTCPayServerOptions
<div class="nav flex-column nav-pills mb-4">
<div class="nav flex-column mb-4">
<a asp-controller="Server" id="Server-@ServerNavPages.Users" class="nav-link @ViewData.IsActivePage(ServerNavPages.Users)" asp-action="ListUsers">Users</a>
<a asp-controller="Server" id="Server-@ServerNavPages.Emails" class="nav-link @ViewData.IsActivePage(ServerNavPages.Emails)" asp-action="Emails">Email server</a>
<a asp-controller="Server" id="Server-@ServerNavPages.Policies" class="nav-link @ViewData.IsActivePage(ServerNavPages.Policies)" asp-action="Policies">Policies</a>

View File

@ -2,6 +2,6 @@
@using BTCPayServer.Views.Server
@{
Layout = "../Shared/_NavLayout.cshtml";
ViewBag.MainTitle = "Server settings";
ViewBag.CategoryTitle = "Server settings";
ViewData.SetActiveCategory(typeof(ServerNavPages));
}

View File

@ -11,7 +11,7 @@
<partial name="Header" />
</head>
<body class="bg-light">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-dialog modal-dialog-centered min-vh-100">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title w-100 text-center">@Model.Title</h4>

View File

@ -1,35 +1,118 @@
@model BTCPayServer.Models.ServerViewModels.EmailsViewModel
<partial name="_StatusMessage" />
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row row-quick-fill" style="display: none">
<div class="col-sm-6">
<div class="dropdown quick-fill">
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Quick fill settings for...
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="" data-Server="smtp.gmail.com" data-Port="587" data-EnableSSL="true">Gmail.com</a>
<a class="dropdown-item" href="" data-Server="mail.yahoo.com" data-Port="587" data-EnableSSL="true">Yahoo.com</a>
<a class="dropdown-item" href="" data-Server="smtp.mailgun.org" data-Port="587" data-EnableSSL="true">Mailgun</a>
<a class="dropdown-item" href="" data-Server="smtp.office365.com" data-Port="587" data-EnableSSL="true">Office365</a>
<a class="dropdown-item" href="" data-Server="smtp.sendgrid.net" data-Port="587" data-EnableSSL="true">SendGrid</a>
<div class="col-lg-6">
<div class="d-flex align-items-center justify-content-between mb-4">
<h2 class="mb-0">@ViewData["Title"]</h2>
<div class="dropdown quick-fill" style="display: none">
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Quick fill settings for...
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="" data-Server="smtp.gmail.com" data-Port="587" data-EnableSSL="true">Gmail.com</a>
<a class="dropdown-item" href="" data-Server="mail.yahoo.com" data-Port="587" data-EnableSSL="true">Yahoo.com</a>
<a class="dropdown-item" href="" data-Server="smtp.mailgun.org" data-Port="587" data-EnableSSL="true">Mailgun</a>
<a class="dropdown-item" href="" data-Server="smtp.office365.com" data-Port="587" data-EnableSSL="true">Office365</a>
<a class="dropdown-item" href="" data-Server="smtp.sendgrid.net" data-Port="587" data-EnableSSL="true">SendGrid</a>
</div>
</div>
</div>
<p></p>
</div>
</div>
<form method="post" autocomplete="off">
<div class="row">
<div class="col-lg-6">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<div class="form-group">
<label asp-for="Settings.Server"></label>
<input asp-for="Settings.Server" class="form-control"/>
<span asp-validation-for="Settings.Server" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Settings.Port"></label>
<input asp-for="Settings.Port" class="form-control"/>
<span asp-validation-for="Settings.Port" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Settings.FromDisplay"></label>
<input asp-for="Settings.FromDisplay" class="form-control"/>
<small class="form-text text-muted">
Some email providers (like Gmail) don't allow you to set your display name, so this setting may not have any effect.
</small>
<span asp-validation-for="Settings.FromDisplay" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Settings.From"></label>
<input asp-for="Settings.From" class="form-control"/>
<span asp-validation-for="Settings.From" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Settings.Login"></label>
<input asp-for="Settings.Login" class="form-control"/>
<small class="form-text text-muted">
For many email providers (like Gmail) your login is your email address.
</small>
<span asp-validation-for="Settings.Login" class="text-danger"></span>
</div>
<div class="form-group">
@if (!Model.PasswordSet)
{
<label asp-for="Settings.Password"></label>
<input asp-for="Settings.Password" type="password" class="form-control"/>
<span asp-validation-for="Settings.Password" class="text-danger"></span>
}
else
{
<label asp-for="Settings.Password"></label>
<div class="input-group">
<input value="Configured" type="text" readonly class="form-control"/>
<div class="input-group-append">
<button type="submit" class="btn btn-danger" name="command" value="ResetPassword">Reset</button>
</div>
</div>
}
</div>
<div class="form-group">
<div class="form-check">
<input asp-for="Settings.EnableSSL" type="checkbox" class="form-check-input"/>
<label asp-for="Settings.EnableSSL" class="form-check-label"></label>
</div>
</div>
<input asp-for="PasswordSet" type="hidden"/>
<button type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
</div>
</div>
<hr class="mt-5 mb-4" />
<div class="row">
<div class="col-md-6">
<div class="form-group">
<p class="form-text text-muted">
If you want to test your settings, enter an email address here and click "Send Test Email".
<strong>Your settings won't be saved</strong>, only a test email will be sent.
<br />
After a successful test, you can click "Save".
</p>
<label asp-for="TestEmail"></label>
<input asp-for="TestEmail" class="form-control" />
<span asp-validation-for="TestEmail" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-secondary" name="command" value="Test">Send Test Email</button>
</div>
</div>
</form>
<script>
$(document).ready(function () {
$('.row-quick-fill').show();
$('.dropdown.quick-fill').show();
$('.dropdown.quick-fill a').click(function (e) {
e.preventDefault();
@ -55,94 +138,5 @@
}
}
});
});
</script>
<form method="post" autocomplete="off">
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label asp-for="Settings.Server"></label>
<input asp-for="Settings.Server" class="form-control" />
<span asp-validation-for="Settings.Server" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Settings.Port"></label>
<input asp-for="Settings.Port" class="form-control" />
<span asp-validation-for="Settings.Port" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Settings.FromDisplay"></label>
<input asp-for="Settings.FromDisplay" class="form-control" />
<small class="form-text text-muted">
Some email providers (like Gmail) don't allow you to set your display name, so this setting may not have any effect.
</small>
<span asp-validation-for="Settings.FromDisplay" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Settings.From"></label>
<input asp-for="Settings.From" class="form-control" />
<span asp-validation-for="Settings.From" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Settings.Login"></label>
<input asp-for="Settings.Login" class="form-control" />
<small class="form-text text-muted">
For many email providers (like Gmail) your login is your email address.
</small>
<span asp-validation-for="Settings.Login" class="text-danger"></span>
</div>
<div class="form-group">
@if (!Model.PasswordSet)
{
<label asp-for="Settings.Password"></label>
<input asp-for="Settings.Password" type="password" class="form-control" />
<span asp-validation-for="Settings.Password" class="text-danger"></span>
}
else
{
<label asp-for="Settings.Password"></label>
<div class="input-group">
<input value="Configured" type="text" readonly class="form-control" />
<div class="input-group-append">
<button type="submit" class="btn btn-danger" name="command" value="ResetPassword">Reset</button>
</div>
</div>
}
</div>
<div class="form-group">
<div class="form-check">
<input asp-for="Settings.EnableSSL" type="checkbox" class="form-check-input" />
<label asp-for="Settings.EnableSSL" class="form-check-label"></label>
</div>
</div>
<input asp-for="PasswordSet" type="hidden" />
<button type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
</div>
</div>
<hr class="mt-5 mb-4" />
<div class="row">
<div class="col-md-6">
<div class="form-group">
<p class="form-text text-muted">
If you want to test your settings, enter an email address here and click "Send Test Email".
<strong>Your settings won't be saved</strong>, only a test email will be sent.
<br />
After a successful test, you can click "Save".
</p>
<label asp-for="TestEmail"></label>
<input asp-for="TestEmail" class="form-control" />
<span asp-validation-for="TestEmail" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-secondary" name="command" value="Test">Send Test Email</button>
</div>
</div>
</form>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
}

View File

@ -24,7 +24,7 @@
<input type="hidden" name="@o.Key" value="@o.Value"/>
}
<noscript>
<div class="modal-dialog modal-dialog-centered">
<div class="modal-dialog modal-dialog-centered min-vh-100">
<div class="modal-content">
<div class="modal-body text-center my-3">
<p>

View File

@ -13,23 +13,19 @@
<!DOCTYPE html>
<html lang="en"@(Env.IsDeveloping ? " data-devenv" : "")>
<head>
<partial name="Header" />
@await RenderSectionAsync("HeadScripts", false)
@await RenderSectionAsync("HeaderContent", false)
</head>
<body id="page-top">
@{
@{
if (ViewBag.AlwaysShrinkNavBar == null)
{
ViewBag.AlwaysShrinkNavBar = true;
}
var additionalStyle = ViewBag.AlwaysShrinkNavBar ? "navbar-shrink always-shrinked" : "";
}
<!-- Navigation -->
<nav class="navbar navbar-expand-lg fixed-top @additionalStyle" id="mainNav">
<div class="container px-sm-3">
@ -133,5 +129,4 @@
}
</script>
</body>
</html>

View File

@ -1,44 +1,57 @@
@{
Layout = "/Views/Shared/_Layout.cshtml";
ViewBag.ShowMenu = ViewBag.ShowMenu ?? true;
ViewBag.ShowMainTitle = ViewBag.ShowMainTitle ?? true;
ViewBag.ShowBreadcrumb = ViewBag.ShowBreadcrumb ?? false;
if (!ViewData.ContainsKey("NavPartialName"))
{
ViewData["NavPartialName"] = "_Nav";
}
var title = $"{(ViewData.ContainsKey("MainTitle") ? $"{ViewData["MainTitle"]}:" : String.Empty)} {ViewData["Title"]}";
}
<section>
<div class="container">
<div class="row">
<div class="col-lg-12 section-heading">
@if (ViewBag.ShowMenu)
{
<h2>@title</h2>
<hr class="primary ml-0">
}
</div>
</div>
<div>
<div class="row">
<div class="col-md-3">
@if (ViewBag.ShowMenu)
@if (ViewBag.ShowBreadcrumb)
{
<nav aria-label="breadcrumb" class="mt-n3 mb-4">
<ol class="breadcrumb px-0">
@if (!string.IsNullOrEmpty(ViewData["CategoryTitle"] as string))
{
@await Html.PartialAsync(ViewData["NavPartialName"].ToString())
<li class="breadcrumb-item" aria-current="page">@ViewData["CategoryTitle"]</li>
}
@if (!string.IsNullOrEmpty(ViewData["MainTitle"] as string))
{
<li class="breadcrumb-item" aria-current="page">@ViewData["MainTitle"]</li>
}
@if (!string.IsNullOrEmpty(ViewData["PageTitle"] as string))
{
<li class="breadcrumb-item" aria-current="page">@ViewData["PageTitle"]</li>
}
</ol>
</nav>
}
else if (!string.IsNullOrEmpty(ViewData["MainTitle"] as string))
{
<h2 class="mb-5">@ViewData["MainTitle"]</h2>
}
<div class="row">
@if (ViewBag.ShowMenu)
{
<div class="col-md-3 ml-n3 ml-md-0">
<partial name="@ViewData["NavPartialName"].ToString()" />
</div>
<div class="col-md-9">
@RenderBody()
</div>
}
<div class="col-md-9">
<partial name="_StatusMessage" />
@RenderBody()
</div>
</div>
</div>
</section>
@section HeadScripts {
@RenderSection("HeadScripts", required: false)
}
@section Scripts {
@RenderSection("Scripts", required: false)
@section HeadScripts {
@await RenderSectionAsync("HeadScripts", false)
}
@section Scripts {
@await RenderSectionAsync("Scripts", false)
}

View File

@ -14,9 +14,11 @@
<form method="post" id="shopifyForm">
<h4 class="mb-3">
Shopify
<a href="https://docs.btcpayserver.org/Shopify" target="_blank">
<span class="fa fa-question-circle-o" title="More information..."></span>
</a>
<small>
<a href="https://docs.btcpayserver.org/Shopify" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
</small>
</h4>
@if (!shopifyCredsSet)
{

View File

@ -1,12 +1,12 @@
@model LightningNodeViewModel
@{
Layout = "../Shared/_NavLayout.cshtml";
ViewData.SetActivePageAndTitle(StoreNavPages.Index, "Add lightning node");
ViewData.SetActivePageAndTitle(StoreNavPages.Index, "Lightning node settings", Context.GetStoreData().StoreName);
}
<partial name="_StatusMessage" />
<h4 class="mb-3">@ViewData["PageTitle"]</h4>
<div class="alert alert-warning alert-dismissible mb-5" role="alert">
<div class="alert alert-warning alert-dismissible my-4" role="alert">
<p class="mb-0">
Please understand that the Lightning Network is still under active development and considered experimental.
Before you proceed, take time to familiarize yourself with the risks.
@ -122,5 +122,5 @@
</form>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -2,23 +2,16 @@
@model CheckoutExperienceViewModel
@{
Layout = "../Shared/_NavLayout.cshtml";
ViewData.SetActivePageAndTitle(StoreNavPages.Checkout, "Checkout experience");
}
<partial name="_StatusMessage" />
@if (!ViewContext.ModelState.IsValid)
{
<div class="row">
<div class="col-md-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
ViewData.SetActivePageAndTitle(StoreNavPages.Checkout, "Checkout experience", Context.GetStoreData().StoreName);
}
<div class="row">
<div class="col-md-8">
<div class="col-lg-8">
<form method="post">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<h4 class="mb-3">Payment</h4>
@if (Model.PaymentMethods.Any())
{
@ -38,7 +31,7 @@
var criteria = Model.PaymentMethodCriteria[index];
<tr>
<td class="border-right-0 border-left-0 pt-3">
<input type="hidden" asp-for="PaymentMethodCriteria[index].PaymentMethod" />
<input type="hidden" asp-for="PaymentMethodCriteria[index].PaymentMethod"/>
@PaymentMethodId.Parse(criteria.PaymentMethod).ToPrettyString()
</td>
<td class="border-right-0 border-left-0 ">
@ -49,7 +42,7 @@
</td>
<td class="border-right-0 border-left-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>
</tr>
}
@ -58,25 +51,25 @@
<div class="form-group">
<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>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input asp-for="LightningAmountInSatoshi" type="checkbox" class="form-check-input" />
<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" />
<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" />
<input asp-for="OnChainWithLnInvoiceFallback" type="checkbox" class="form-check-input"/>
<label asp-for="OnChainWithLnInvoiceFallback" class="form-check-label"></label>
</div>
</div>
@ -94,14 +87,14 @@
</div>
<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>
<p class="form-text text-muted">Fee will be shown for BTC and LTC onchain payments only.</p>
</div>
</div>
<div class="form-group">
<label asp-for="RecommendedFeeBlockTarget"></label>
<input asp-for="RecommendedFeeBlockTarget" class="form-control" style="width:8ch" />
<input asp-for="RecommendedFeeBlockTarget" class="form-control" style="width:8ch"/>
<span asp-validation-for="RecommendedFeeBlockTarget" class="text-danger"></span>
</div>
@ -112,19 +105,23 @@
</div>
<div class="form-group">
<label asp-for="HtmlTitle"></label>
<input asp-for="HtmlTitle" class="form-control" />
<input asp-for="HtmlTitle" class="form-control"/>
<span asp-validation-for="HtmlTitle" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="CustomLogo"></label>
<a href="https://docs.btcpayserver.org/Theme/#checkout-page-themes" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<input asp-for="CustomLogo" class="form-control" />
<a href="https://docs.btcpayserver.org/Theme/#checkout-page-themes" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<input asp-for="CustomLogo" class="form-control"/>
<span asp-validation-for="CustomLogo" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="CustomCSS"></label>
<a href="https://docs.btcpayserver.org/Theme/#checkout-page-themes" target="_blank"><span class="fa fa-question-circle-o" title="More information..."></span></a>
<input asp-for="CustomCSS" class="form-control" />
<a href="https://docs.btcpayserver.org/Theme/#checkout-page-themes" target="_blank">
<span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a>
<input asp-for="CustomCSS" class="form-control"/>
<span asp-validation-for="CustomCSS" class="text-danger"></span>
<p class="form-text text-muted">
Bundled Themes:
@ -151,5 +148,5 @@
</div>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -1,14 +1,14 @@
@model CreateTokenViewModel
@{
Layout = "../Shared/_NavLayout.cshtml";
ViewData.SetActivePageAndTitle(StoreNavPages.Tokens, "Create a new token");
ViewData.SetActivePageAndTitle(StoreNavPages.Tokens, "Create a new token", Context.GetStoreData()?.StoreName);
ViewBag.HidePublicKey = ViewBag.HidePublicKey ?? false;
ViewBag.ShowStores = ViewBag.ShowStores ?? false;
}
<div class="row">
<div class="col-md-6">
<div class="col-lg-6">
<h4 class="mb-4">@ViewData["PageTitle"]</h4>
<form method="post">
<div class="form-group">
<label asp-for="Label"></label>

View File

@ -1,8 +1,11 @@
@model BTCPayServer.Models.ServerViewModels.EmailsViewModel
@{
Layout = "../Shared/_NavLayout.cshtml";
ViewData.SetActivePageAndTitle(StoreNavPages.Index, "Update Store Email Settings");
ViewData.SetActivePageAndTitle(StoreNavPages.Index, "Email Settings", Context.GetStoreData().StoreName);
}
<partial name="EmailsBody" model="Model" />
<partial name="EmailsBody" model="@Model"/>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}

View File

@ -4,7 +4,7 @@
var isHotWallet = Model.Method == WalletSetupMethod.HotWallet;
var type = isHotWallet ? "Hot" : "Watch-Only";
Layout = "_LayoutWalletSetup";
ViewData["Title"] = $"Create {Model.CryptoCode} {type} Wallet";
ViewData.SetActivePageAndTitle(StoreNavPages.Wallet, $"Create {Model.CryptoCode} {type} Wallet", Context.GetStoreData().StoreName);
ViewData.Add(nameof(Model.CanUseHotWallet), Model.CanUseHotWallet);
ViewData.Add(nameof(Model.CanUseRPCImport), Model.CanUseRPCImport);
ViewData.Add(nameof(Model.Method), Model.Method);
@ -18,9 +18,8 @@
<h1 class="text-center">@ViewData["Title"]</h1>
<br>
@await Html.PartialAsync("_GenerateWalletForm", Model.SetupRequest)
<partial name="_GenerateWalletForm" model="Model.SetupRequest" />
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
}

View File

@ -2,7 +2,7 @@
@addTagHelper *, BundlerMinifier.TagHelpers
@{
Layout = "_LayoutWalletSetup";
ViewData["Title"] = $"Generate {Model.CryptoCode} Wallet";
ViewData.SetActivePageAndTitle(StoreNavPages.Wallet, $"Generate {Model.CryptoCode} Wallet", Context.GetStoreData().StoreName);
}
@section Navbar {

View File

@ -2,7 +2,7 @@
@addTagHelper *, BundlerMinifier.TagHelpers
@{
Layout = "_LayoutWalletSetup";
ViewData["Title"] = "Confirm addresses";
ViewData.SetActivePageAndTitle(StoreNavPages.Wallet, "Confirm addresses", Context.GetStoreData().StoreName);
}
@section Navbar {
@ -104,8 +104,8 @@
</form>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
@await Html.PartialAsync("VaultElements")
<partial name="_ValidationScriptsPartial" />
<partial name="VaultElements" />
<script src="~/js/vaultbridge.js" type="text/javascript" defer asp-append-version="true"></script>
<script src="~/js/vaultbridge.ui.js" type="text/javascript" defer asp-append-version="true"></script>

View File

@ -2,7 +2,7 @@
@addTagHelper *, BundlerMinifier.TagHelpers
@{
Layout = "_LayoutWalletSetup";
ViewData["Title"] = "Import your wallet file";
ViewData.SetActivePageAndTitle(StoreNavPages.Wallet, "Import your wallet file", Context.GetStoreData().StoreName);
}
@section Navbar {

View File

@ -2,7 +2,7 @@
@addTagHelper *, BundlerMinifier.TagHelpers
@{
Layout = "_LayoutWalletSetup";
ViewData["Title"] = "Connect your hardware wallet";
ViewData.SetActivePageAndTitle(StoreNavPages.Wallet, "Connect your hardware wallet", Context.GetStoreData().StoreName);
}
@section Navbar {
@ -79,8 +79,8 @@
</form>
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
@await Html.PartialAsync("VaultElements")
<partial name="_ValidationScriptsPartial" />
<partial name="VaultElements" />
<script src="~/js/vaultbridge.js" defer asp-append-version="true"></script>
<script src="~/js/vaultbridge.ui.js" defer asp-append-version="true"></script>

View File

@ -2,7 +2,7 @@
@addTagHelper *, BundlerMinifier.TagHelpers
@{
Layout = "_LayoutWalletSetup";
ViewData["Title"] = "Scan QR code";
ViewData.SetActivePageAndTitle(StoreNavPages.Wallet, "Scan QR code", Context.GetStoreData().StoreName);
}
@section Navbar {
@ -58,7 +58,7 @@
@section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial")
<partial name="_ValidationScriptsPartial" />
<bundle name="wwwroot/bundles/camera-bundle.min.js"></bundle>
<link href="~/vendor/vue-qrcode-reader/vue-qrcode-reader.css" rel="stylesheet" asp-append-version="true"/>

Some files were not shown because too many files have changed in this diff Show More