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
147 changed files with 1434 additions and 1790 deletions

View File

@@ -225,7 +225,7 @@ namespace BTCPayServer.Tests
public void ClickOnAllSideMenus() 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(); Driver.AssertNoError();
Assert.NotEmpty(links); Assert.NotEmpty(links);
foreach (var l in links) foreach (var l in links)

View File

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

View File

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

View File

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

View File

@@ -9,6 +9,8 @@ namespace BTCPayServer.Models.AppViewModels
public class UpdateCrowdfundViewModel public class UpdateCrowdfundViewModel
{ {
public string StoreId { get; set; } public string StoreId { get; set; }
public string StoreName { get; set; }
[Required] [Required]
[MaxLength(30)] [MaxLength(30)]
public string Title { get; set; } 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.")] [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; } public string AnimationColors { get; set; }
// NOTE: Improve validation if needed // NOTE: Improve validation if needed
public bool ModelWithMinimumData public bool ModelWithMinimumData => Description != null && Title != null && TargetCurrency != null;
{
get { return Description != null && Title != null && TargetCurrency != null; }
}
} }
} }

View File

@@ -9,6 +9,8 @@ namespace BTCPayServer.Models.AppViewModels
public class UpdatePointOfSaleViewModel public class UpdatePointOfSaleViewModel
{ {
public string StoreId { get; set; } public string StoreId { get; set; }
public string StoreName { get; set; }
[Required] [Required]
[MaxLength(30)] [MaxLength(30)]
public string Title { get; set; } 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 HashSet<ColoredLabel> Labels { get; set; } = new HashSet<ColoredLabel>();
public List<TransactionViewModel> Transactions { get; set; } = new List<TransactionViewModel>(); public List<TransactionViewModel> Transactions { get; set; } = new List<TransactionViewModel>();
public string CryptoCode { get; set; }
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
@model ListAppsViewModel @model ListAppsViewModel
@{ @{
ViewData["Title"] = "Apps"; ViewData.SetActivePageAndTitle(AppsNavPages.Index, "Apps");
var storeNameSortOrder = (string)ViewData["StoreNameSortOrder"]; var storeNameSortOrder = (string)ViewData["StoreNameSortOrder"];
var appNameSortOrder = (string)ViewData["AppNameSortOrder"]; var appNameSortOrder = (string)ViewData["AppNameSortOrder"];
var appTypeSortOrder = (string)ViewData["AppTypeSortOrder"]; var appTypeSortOrder = (string)ViewData["AppTypeSortOrder"];
@@ -10,27 +10,20 @@
<section> <section>
<div class="container"> <div class="container">
@if (TempData.HasStatusMessage()) <partial name="_StatusMessage" />
{
<div class="row"> <div class="d-sm-flex align-items-center justify-content-between mb-2">
<div class="col-lg-12 text-center"> <h2 class="mb-0">
<partial name="_StatusMessage" /> @ViewData["PageTitle"]
</div> <small>
</div> <a href="https://docs.btcpayserver.org/Apps/" target="_blank">
} <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
<div class="row"> </a>
<div class="col-lg-12 section-heading"> </small>
<h2>@ViewData["Title"]</h2> </h2>
<hr class="primary"> <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>
<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>
</div> </div>
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
@if (Model.Apps.Any()) @if (Model.Apps.Any())

View File

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

View File

@@ -2,24 +2,14 @@
@addTagHelper *, BundlerMinifier.TagHelpers @addTagHelper *, BundlerMinifier.TagHelpers
@model UpdatePointOfSaleViewModel @model UpdatePointOfSaleViewModel
@{ @{
ViewData["Title"] = "Update Point of Sale"; ViewData.SetActivePageAndTitle(AppsNavPages.Update, "Update Point of Sale", Model.StoreName);
} }
<section> <section>
<div class="container"> <div class="container">
<div class="row"> <partial name="_StatusMessage" />
<div class="col-lg-12 section-heading">
<h2>@ViewData["Title"]</h2> <h2 class="mb-4">@ViewData["PageTitle"]</h2>
<hr class="primary">
</div>
</div>
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-lg-12 text-center">
<partial name="_StatusMessage" />
</div>
</div>
}
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<form method="post"> <form method="post">
@@ -79,11 +69,15 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="CustomCSSLink" class="control-label"></label> <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" /> <input asp-for="CustomCSSLink" class="form-control" />
<span asp-validation-for="CustomCSSLink" class="text-danger"></span> <span asp-validation-for="CustomCSSLink" class="text-danger"></span>
</div> </div>
<partial name="TemplateEditor" model="@(nameof(Model.Template), "Products")" /> <partial name="TemplateEditor" model="@(nameof(Model.Template), "Products")" />
<div class="form-group"> <div class="form-group">
<label asp-for="Template" class="control-label"></label> <label asp-for="Template" class="control-label"></label>
<textarea asp-for="Template" rows="10" cols="40" class="js-product-template form-control"></textarea> <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
@using BTCPayServer.Views.Apps @using BTCPayServer.Views.Apps
@{ @{
ViewBag.MainTitle = "Manage app"; ViewBag.CategoryTitle = "Apps";
ViewData.SetActiveCategory(typeof(AppsNavPages)); ViewData.SetActiveCategory(typeof(AppsNavPages));
} }

View File

@@ -202,10 +202,8 @@
<div id="content"> <div id="content">
<div class="p-2 p-sm-4"> <div class="p-2 p-sm-4">
<div class="row"> <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"> <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="#"> <a class="js-cart btn btn-lg btn-outline-primary" href="#">
<i class="fa fa-shopping-basket"></i>&nbsp; <i class="fa fa-shopping-basket"></i>&nbsp;

View File

@@ -5,12 +5,12 @@
@if (Context.Request.Query.ContainsKey("simple")) @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 else
{ {
<noscript> <noscript>
@await Html.PartialAsync("/Views/AppsPublic/PointOfSale/MinimalLight.cshtml", Model) <partial name="/Views/AppsPublic/PointOfSale/MinimalLight.cshtml" model="Model" />
</noscript> </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="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"> <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> <h1 class="mb-4">@Model.Title</h1>
@if (!string.IsNullOrEmpty(Model.Description)) @if (!string.IsNullOrEmpty(Model.Description))
{ {

View File

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

View File

@@ -1,29 +1,20 @@
@using BTCPayServer.Views.Stores @using BTCPayServer.Views.Stores
@model BTCPayServer.Services.Altcoins.Ethereum.UI.EditEthereumPaymentMethodViewModel @model BTCPayServer.Services.Altcoins.Ethereum.UI.EditEthereumPaymentMethodViewModel
@{ @{
Layout = "../Shared/_NavLayout.cshtml"; Layout = "../Shared/_NavLayout.cshtml";
ViewData["NavPartialName"] = "../Stores/_Nav"; 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="row">
<div class="col-md-8"> <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 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>
<div asp-validation-summary="All" class="text-danger"></div>
<form method="post" asp-action="GetStoreEthereumLikePaymentMethod" <form method="post" asp-action="GetStoreEthereumLikePaymentMethod"
asp-route-storeId="@this.Context.GetRouteValue("storeId")" asp-route-storeId="@Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@this.Context.GetRouteValue("cryptoCode")" asp-route-cryptoCode="@Context.GetRouteValue("cryptoCode")"
class="mt-4" enctype="multipart/form-data"> class="mt-4" enctype="multipart/form-data">
<input type="hidden" asp-for="OriginalIndex"/> <input type="hidden" asp-for="OriginalIndex"/>
@@ -85,8 +76,8 @@
<button type="submit" class="btn btn-primary" id="SaveButton">Save</button> <button type="submit" class="btn btn-primary" id="SaveButton">Save</button>
<a class="btn btn-secondary" asp-action="GetStoreEthereumLikePaymentMethods" <a class="btn btn-secondary" asp-action="GetStoreEthereumLikePaymentMethods"
asp-route-storeId="@this.Context.GetRouteValue("storeId")" asp-route-storeId="@Context.GetRouteValue("storeId")"
asp-route-cryptoCode="@this.Context.GetRouteValue("cryptoCode")" asp-route-cryptoCode="@Context.GetRouteValue("cryptoCode")"
asp-controller="EthereumLikeStore"> asp-controller="EthereumLikeStore">
Back to list Back to list
</a> </a>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,11 +5,12 @@
@{ @{
Layout = "_Layout"; 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); var permissions = Permission.ToPermissions(Model.Permissions.Split(';')).GroupBy(permission => permission.Policy);
} }
<partial name="_StatusMessage"/> <partial name="_StatusMessage" />
<form method="post" asp-action="AuthorizeAPIKey"> <form method="post" asp-action="AuthorizeAPIKey">
<input type="hidden" asp-for="RedirectUrl" value="@Model.RedirectUrl"/> <input type="hidden" asp-for="RedirectUrl" value="@Model.RedirectUrl"/>
<input type="hidden" asp-for="Permissions" value="@Model.Permissions"/> <input type="hidden" asp-for="Permissions" value="@Model.Permissions"/>

View File

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

View File

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

View File

@@ -56,7 +56,7 @@
</div> </div>
@section Scripts { @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" src="~/js/qrcode.js" asp-append-version="true"></script>
<script type="text/javascript"> <script type="text/javascript">
new QRCode(document.getElementById("qrCode"), new QRCode(document.getElementById("qrCode"),

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
@inject SignInManager<ApplicationUser> SignInManager @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.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.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> <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 @using BTCPayServer.Views.Manage
@{ @{
Layout = "../Shared/_NavLayout.cshtml"; Layout = "../Shared/_NavLayout.cshtml";
ViewBag.MainTitle = "Manage your account"; ViewBag.CategoryTitle = "Account";
ViewData.SetActiveCategory(typeof(ManageNavPages)); ViewData.SetActiveCategory(typeof(ManageNavPages));
} }

View File

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

View File

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

View File

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

View File

@@ -3,24 +3,14 @@
@model BTCPayServer.Models.PaymentRequestViewModels.UpdatePaymentRequestViewModel @model BTCPayServer.Models.PaymentRequestViewModels.UpdatePaymentRequestViewModel
@addTagHelper *, BundlerMinifier.TagHelpers @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> <section>
<div class="container"> <div class="container">
<div class="row"> <partial name="_StatusMessage" />
<div class="col-lg-12 section-heading">
<h2>@ViewData["Title"]</h2> <h2 class="mb-4">@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>
}
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<form method="post" action="@Url.Action("EditPaymentRequest", "PaymentRequest", new { id = Model.Id}, Context.Request.Scheme)"> <form method="post" action="@Url.Action("EditPaymentRequest", "PaymentRequest", new { id = Model.Id}, Context.Request.Scheme)">
@@ -86,7 +76,7 @@
<div class="form-group"> <div class="form-group">
<label asp-for="CustomCSSLink" class="control-label"></label> <label asp-for="CustomCSSLink" class="control-label"></label>
<a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank"> <a href="https://docs.btcpayserver.org/Theme/#2-bootstrap-themes" target="_blank">
<span class="fa fa-question-circle-o" title="More information..."></span> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>
<input asp-for="CustomCSSLink" class="form-control" /> <input asp-for="CustomCSSLink" class="form-control" />
<span asp-validation-for="CustomCSSLink" class="text-danger"></span> <span asp-validation-for="CustomCSSLink" class="text-danger"></span>
@@ -100,28 +90,25 @@
<button type="submit" class="btn btn-primary" id="SaveButton">Save</button> <button type="submit" class="btn btn-primary" id="SaveButton">Save</button>
@if (!string.IsNullOrEmpty(Model.Id)) @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" <a class="btn btn-secondary"
target="_blank" target="_blank"
asp-action="ListInvoices" asp-action="ListInvoices"
asp-controller="Invoice" asp-controller="Invoice"
asp-route-searchterm="@($"orderid:{PaymentRequestRepository.GetOrderIdForPaymentRequest(Model.Id)}")">Invoices</a> 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) @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 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> </div>
</form> </form>
<a asp-action="GetPaymentRequests">Back to List</a>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -6,35 +6,25 @@
} }
<section> <section>
<div class="container"> <div class="container">
@if (TempData.HasStatusMessage()) <partial name="_StatusMessage" />
{
<div class="row"> <div class="d-sm-flex align-items-center justify-content-between mb-4">
<div class="col-lg-12 text-center"> <h2 class="mb-0">
<partial name="_StatusMessage" /> @ViewData["Title"]
</div> <small>
</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.
<a href="https://docs.btcpayserver.org/PaymentRequests/" class="ml-1" target="_blank"> <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> <span class="fa fa-question-circle-o text-secondary" title="More information..."></span>
</a> </a>
</p> </small>
</div> </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>
<div class="row"> <div class="row">
<div class="col-12 col-md-4 col-lg-6 mb-3"> <div class="col-12 col-lg-6 mb-3 ml-auto">
<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">
<form asp-action="GetPaymentRequests" method="get"> <form asp-action="GetPaymentRequests" method="get">
<input type="hidden" asp-for="Count"/> <input type="hidden" asp-for="Count"/>
<input type="hidden" asp-for="TimezoneOffset" /> <input type="hidden" asp-for="TimezoneOffset" />

View File

@@ -1,7 +1,6 @@
@using BTCPayServer.Services.Invoices @using BTCPayServer.Services.Invoices
@using BTCPayServer.Client.Models @using BTCPayServer.Client.Models
@model BTCPayServer.Models.PaymentRequestViewModels.ViewPaymentRequestViewModel @model BTCPayServer.Models.PaymentRequestViewModels.ViewPaymentRequestViewModel
@addTagHelper *, BundlerMinifier.TagHelpers @addTagHelper *, BundlerMinifier.TagHelpers
@inject BTCPayServer.Services.BTCPayServerEnvironment env @inject BTCPayServer.Services.BTCPayServerEnvironment env
@inject BTCPayServer.HostedServices.CssThemeManager themeManager @inject BTCPayServer.HostedServices.CssThemeManager themeManager
@@ -197,7 +196,7 @@
<main class="flex-grow-1 py-4"> <main class="flex-grow-1 py-4">
<div class="container"> <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="row">
<div class="col col-12 col-lg-6 mb-4"> <div class="col col-12 col-lg-6 mb-4">
<div class="jumbotron h-100 m-0 p-sm-5"> <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"> <main class="flex-grow-1 py-4">
<div class="container"> <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) @if (!ViewContext.ModelState.IsValid)
{ {
@Html.ValidationSummary(string.Empty, new { @class = "alert alert-danger mb-4 pb-0 text-center" }) @Html.ValidationSummary(string.Empty, new { @class = "alert alert-danger mb-4 pb-0 text-center" })

View File

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

View File

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

View File

@@ -2,18 +2,16 @@
@model BTCPayServer.Controllers.ServerController.CreateTemporaryFileUrlViewModel @model BTCPayServer.Controllers.ServerController.CreateTemporaryFileUrlViewModel
@{ @{
ViewData.SetActivePageAndTitle(ServerNavPages.Services, $"Create temporary file link"); 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="row">
<div class="col-lg-6"> <div class="col-lg-6">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group">
<label asp-for="IsDownload"></label> <label asp-for="IsDownload"></label>
@@ -24,9 +22,9 @@
<label asp-for="TimeAmount" class="control-label"></label> <label asp-for="TimeAmount" class="control-label"></label>
<div class="input-group"> <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"> <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>
</div> </div>
@@ -39,5 +37,5 @@
</div> </div>
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
} }

View File

@@ -1,9 +1,9 @@
@model BTCPayServer.Controllers.RegisterFromAdminViewModel @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="row">
<div class="col-md-6"> <div class="col-md-6">

View File

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

View File

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

View File

@@ -1,21 +1,20 @@
@model BTCPayServer.Storage.Services.Providers.AmazonS3Storage.Configuration.AmazonS3StorageConfiguration @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="row">
<div class="col-lg-6"> <div class="col-lg-6">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group">
<label asp-for="ContainerName"></label> <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> <span asp-validation-for="ContainerName" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
@@ -45,16 +44,16 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label asp-for="ChunkedUploadThreshold"></label> <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> <span asp-validation-for="ChunkedUploadThreshold" class="text-danger"></span>
</div> </div>
<button type="submit" class="btn btn-primary" name="command" value="Save">Save</button> <button type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
<a asp-action="Storage" asp-route-forceChoice="true" >Change Storage provider</a> <a asp-action="Storage" asp-route-forceChoice="true">Change Storage provider</a>
</form> </form>
</div> </div>
</div> </div>
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
} }

View File

@@ -1,21 +1,20 @@
@model BTCPayServer.Storage.Services.Providers.AzureBlobStorage.Configuration.AzureBlobStorageConfiguration @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="row">
<div class="col-lg-6"> <div class="col-lg-6">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group">
<label asp-for="ContainerName"></label> <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> <span asp-validation-for="ContainerName" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
@@ -25,11 +24,11 @@
</div> </div>
<button type="submit" class="btn btn-primary" name="command" value="Save">Save</button> <button type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
<a asp-action="Storage" asp-route-forceChoice="true" >Change Storage provider</a> <a asp-action="Storage" asp-route-forceChoice="true">Change Storage provider</a>
</form> </form>
</div> </div>
</div> </div>
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
} }

View File

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

View File

@@ -1,20 +1,20 @@
@model BTCPayServer.Storage.Services.Providers.GoogleCloudStorage.Configuration.GoogleCloudStorageConfiguration @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" /> <h2 class="mb-4">@ViewData["PageTitle"]</h2>
<div class="row">
<div class="col-lg-6">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-lg-6"> <div class="col-lg-6">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group">
<label asp-for="ContainerName"></label> <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> <span asp-validation-for="ContainerName" class="text-danger"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
@@ -34,11 +34,11 @@
</div> </div>
<button type="submit" class="btn btn-primary" name="command" value="Save">Save</button> <button type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
<a asp-action="Storage" asp-route-forceChoice="true" >Change Storage provider</a> <a asp-action="Storage" asp-route-forceChoice="true">Change Storage provider</a>
</form> </form>
</div> </div>
</div> </div>
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
} }

View File

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

View File

@@ -1,34 +1,28 @@
@model ChargeServiceViewModel @model ChargeServiceViewModel
@{ @{
ViewData.SetActivePageAndTitle(ServerNavPages.Services); ViewData.SetActivePageAndTitle(ServerNavPages.Services, "Lightning charge service");
} }
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<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>
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-md-8">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<div class="form-group"> <div class="form-group">
<p> <p>Lightning charge is a simple API for invoicing on lightning network, you can use it with several plugins:</p>
<span>Lightning charge is a simple API for invoicing on lightning network, you can use it with several plugins:</span> <ul>
<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/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/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/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/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/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/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/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>
<li><a href="https://github.com/ElementsProject/nanotip" target="_blank">Nanotip</a>: The simple tip jar, rebuilt to issue Lightning Network invoices</li> </ul>
</ul>
</p>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,11 +1,9 @@
@model LightningWalletServices @model LightningWalletServices
@{ @{
ViewData.SetActivePageAndTitle(ServerNavPages.Services); ViewData.SetActivePageAndTitle(ServerNavPages.Services, Model.WalletName);
} }
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<h4>@Model.WalletName</h4>
<partial name="_StatusMessage" />
@if (Model.ShowQR) @if (Model.ShowQR)
{ {
@@ -19,25 +17,22 @@
} }
<div class="row"> <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="col-md-8">
@if (!ViewContext.ModelState.IsValid)
{
<div asp-validation-summary="All" class="text-danger"></div>
}
<div class="form-group"> <div class="form-group">
<h5>Browser connection</h5> <h5>Browser connection</h5>
<p> <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> </p>
</div> </div>
<div class="form-group"> <div class="form-group">
<h5>QR Code connection</h5> <h5>QR Code connection</h5>
<p> <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> </p>
</div> </div>
<div class="form-group"> <div class="form-group">
@@ -45,7 +40,7 @@
{ {
<div class="form-group"> <div class="form-group">
<form method="get"> <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> <button type="submit" class="btn btn-primary">Show Confidential QR Code</button>
</form> </form>
</div> </div>
@@ -62,7 +57,7 @@
</div> </div>
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
@if (Model.ShowQR) @if (Model.ShowQR)
{ {

View File

@@ -88,8 +88,6 @@
} }
} }
<partial name="_StatusMessage"/>
<style> <style>
.version-switch .nav-link { display: inline; } .version-switch .nav-link { display: inline; }
.version-switch .nav-link.active { display: none; } .version-switch .nav-link.active { display: none; }
@@ -118,7 +116,7 @@
@if (Model.Installed.Any()) @if (Model.Installed.Any())
{ {
<h3 class="mb-3">Installed Plugins</h3> <h2 class="mb-4">Installed Plugins</h2>
<div class="row mb-4"> <div class="row mb-4">
@foreach (var plugin in Model.Installed) @foreach (var plugin in Model.Installed)
{ {
@@ -235,9 +233,10 @@
} }
</div> </div>
} }
@if (availableAndNotInstalled.Any()) @if (availableAndNotInstalled.Any())
{ {
<h3 class="mb-3">Available Plugins</h3> <h2 class="mb-4">Available Plugins</h2>
<div class="row mb-4"> <div class="row mb-4">
@foreach (var pluginT in availableAndNotInstalled) @foreach (var pluginT in availableAndNotInstalled)
{ {
@@ -250,7 +249,7 @@
@plugin.Version @plugin.Version
@if (pluginT.Item2) @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> </h5>
<p class="card-text">@plugin.Description</p> <p class="card-text">@plugin.Description</p>

View File

@@ -23,79 +23,68 @@
var sortByAsc = "Sort by ascending..."; var sortByAsc = "Sort by ascending...";
} }
<partial name="_StatusMessage"/> <div class="d-flex align-items-center justify-content-between mb-4">
<h2 class="mb-0">@ViewData["Title"]</h2>
<div class="row button-row"> <a asp-action="CreateUser" class="btn btn-primary" role="button" id="CreateUser">
<div class="col-12 col-sm-4 col-lg-6 mb-3"> <span class="fa fa-plus"></span> Add User
<a asp-action="CreateUser" class="btn btn-primary" role="button" id="CreateUser"> </a>
<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> </div>
<form
<div class="row"> asp-action="ListUsers"
<div class="col-lg-9 col-xl-8"> asp-route-sortOrder="@(userEmailSortOrder)"
<table class="table table-sm"> >
<thead> <div class="input-group">
<tr> <input asp-for="SearchTerm" class="form-control" placeholder="Search by email..." />
<th> <div class="input-group-append">
<a <button type="submit" class="btn btn-secondary" title="Search by email">
asp-action="ListUsers" <span class="fa fa-search"></span> Search
asp-route-sortOrder="@(nextUserEmailSortOrder ?? "asc")" </button>
class="text-nowrap" </div>
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>
</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 @model LndSeedBackupViewModel
@{ @{
ViewData.SetActivePageAndTitle(ServerNavPages.Services); ViewData.SetActivePageAndTitle(ServerNavPages.Services, "LND Seed Backup");
} }
<h4>LND Seed Backup</h4> <h2 class="mb-4">@ViewData["Title"]</h2>
@if (TempData.HasStatusMessage())
{
<div class="row">
<div class="col-md-8 text-center">
<partial name="_StatusMessage" />
</div>
</div>
}
@if (Model.IsWalletUnlockPresent) @if (Model.IsWalletUnlockPresent)
{ {
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-lg-8">
<div class="form-group"> <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 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> <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 @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="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="col-md-8">
<div class="form-group"> <h2 class="mb-4">@ViewData["Title"]</h2>
<p> <p>
<span>BTCPay exposes LND's @Model.ConnectionType service for outside consumption, you will find connection information here.<br /></span> BTCPay exposes LND's @Model.ConnectionType service for outside consumption, you will find connection information here.
</p> </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>
<div class="form-group"> <h4 class="mt-5 mb-3">QR Code connection</h4>
<h5>Compatible wallets</h5> <p>
</div> You can use this QR Code to connect external software to your LND instance.<br/>
@if (Model.Uri == null) // if GRPC This QR Code is only valid for 10 minutes.
</p>
@if (Model.QRCode == null)
{ {
<div class="row"> <div class="form-group">
<div class="col-lg-3 ml-auto text-center"> <form method="post">
<a href="https://www.pebble.indiesquare.me/" target="_blank"> <button type="submit" class="btn btn-primary">Show QR Code</button>
<img src="~/img/pebblewallet.jpg" height="100" asp-append-version="true" /> </form>
</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> </div>
} }
else else
{ {
<div class="row"> <div class="form-group">
<div class="col-lg-3 ml-auto text-center"> <div id="qrCode"></div>
<a href="https://lightningjoule.com/" target="_blank"> <div id="qrCodeData" data-url="@Model.QRCode"></div>
<img src="~/img/joule.png" height="100" asp-append-version="true" /> </div>
</a> <p>See QR Code information by clicking <a href="#detailsQR" data-toggle="collapse">here</a>.</p>
<p><a href="https://lightningjoule.com/" target="_blank">Joule</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>
<div class="col-lg-3 ml-auto text-center"> <div class="form-group">
<a href="https://github.com/ZeusLN/zeus" target="_blank"> Click <a href="@Model.QRCodeLink" target="_blank">here</a> to open the configuration file.
<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>
</div> </div>
} }
<div class="form-group">
<h5>QR Code connection</h5> <h4 class="mt-5 mb-3">More details</h4>
<p> <p>Alternatively, you can see the settings by clicking <a href="#details" data-toggle="collapse">here</a>.</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> <div id="details" class="collapse">
</p> @if (Model.Uri == null)
</div>
<div class="form-group">
@if (Model.QRCode == null)
{ {
<div class="form-group"> <div class="form-group">
<form method="post"> <label asp-for="Host"></label>
<button type="submit" class="btn btn-primary">Show QR Code</button> <input asp-for="Host" readonly class="form-control"/>
</form> </div>
<div class="form-group">
<label asp-for="SSL"></label>
<input asp-for="SSL" disabled type="checkbox" class="form-check-inline"/>
</div> </div>
} }
else else
{ {
<div class="form-group"> <div class="form-group">
<div id="qrCode"></div> <label asp-for="Uri"></label>
<div id="qrCodeData" data-url="@Model.QRCode"></div> <input asp-for="Uri" readonly class="form-control"/>
</div> </div>
<p>See QR Code information by clicking <a href="#detailsQR" data-toggle="collapse">here</a></p> }
<div id="detailsQR" class="collapse"> @if (Model.Macaroon != null)
<div class="form-group"> {
<label>QR Code data</label> <div class="form-group">
<input asp-for="QRCode" readonly class="form-control" /> <label asp-for="Macaroon"></label>
</div> <input asp-for="Macaroon" readonly class="form-control"/>
<div class="form-group"> </div>
Click <a href="@Model.QRCodeLink" target="_blank">here</a> to open the configuration file. }
</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 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> </div>
</div> </div>
@section Scripts { @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" src="~/js/qrcode.js" asp-append-version="true"></script>
<script type="text/javascript"> <script type="text/javascript">
new QRCode(document.getElementById("qrCode"), new QRCode(document.getElementById("qrCode"), {
{
text: @Safe.Json(Model.QRCode), text: @Safe.Json(Model.QRCode),
width: 200, width: 200,
height: 200, height: 200,

View File

@@ -1,9 +1,9 @@
@model BTCPayServer.Models.ServerViewModels.LogsViewModel @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"> <ul class="list-unstyled">
@foreach (var file in Model.LogFiles) @foreach (var file in Model.LogFiles)
@@ -41,5 +41,5 @@
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
} }

View File

@@ -1,17 +1,15 @@
@model BTCPayServer.Models.ServerViewModels.MaintenanceViewModel @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"> <form method="post">
<div class="row mb-5"> <div class="row mb-5">
<div class="col-lg-9 col-xl-8"> <div class="col-lg-9 col-xl-8">
<div class="form-group"> <h4 class="mb-3">Change domain name</h4>
<h5>Change domain name</h5> <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>
<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>
<div class="form-group"> <div class="form-group">
<div class="form-inline"> <div class="form-inline">
@@ -22,28 +20,25 @@
</div> </div>
<span asp-validation-for="DNSDomain" class="text-danger"></span> <span asp-validation-for="DNSDomain" class="text-danger"></span>
</div> </div>
</div>
</div> <h4 class="mt-5 mb-3">Update</h4>
<div class="row mb-5"> <p class="text-secondary">Update to the latest version of BTCPay server.</p>
<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>
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
<button name="command" type="submit" class="btn btn-primary" value="update" disabled="@(Model.CanUseSSH ? null : "disabled")">Update</button> <button name="command" type="submit" class="btn btn-primary" value="update" disabled="@(Model.CanUseSSH ? null : "disabled")">Update</button>
</div> </div>
</div> </div>
<h5 class="mt-5">Restart</h5> <h4 class="mt-5 mb-3">Restart</h4>
<p class="text-secondary mb-2">Restart BTCPay server and related services.</p> <p class="text-secondary">Restart BTCPay server and related services.</p>
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
<button name="command" type="submit" class="btn btn-primary" value="restart" disabled="@(Model.CanUseSSH ? null : "disabled")">Restart</button> <button name="command" type="submit" class="btn btn-primary" value="restart" disabled="@(Model.CanUseSSH ? null : "disabled")">Restart</button>
</div> </div>
</div> </div>
<h5 class="mt-5">Clean</h5> <h4 class="mt-5 mb-3">Clean</h4>
<p class="text-secondary mb-2">Delete unused docker images present on your system.</p> <p class="text-secondary">Delete unused docker images present on your system.</p>
<div class="form-group"> <div class="form-group">
<div class="input-group"> <div class="input-group">
<button name="command" type="submit" class="btn btn-secondary" value="clean" disabled="@(Model.CanUseSSH ? null : "disabled")">Clean</button> <button name="command" type="submit" class="btn btn-secondary" value="clean" disabled="@(Model.CanUseSSH ? null : "disabled")">Clean</button>
@@ -54,5 +49,5 @@
</form> </form>
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
} }

View File

@@ -1,11 +1,9 @@
@model LightningWalletServices @model LightningWalletServices
@{ @{
ViewData.SetActivePageAndTitle(ServerNavPages.Services); ViewData.SetActivePageAndTitle(ServerNavPages.Services, Model.WalletName);
} }
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<h4>@Model.WalletName</h4>
<partial name="_StatusMessage" />
@if (Model.ShowQR) @if (Model.ShowQR)
{ {
@@ -18,49 +16,31 @@
</div> </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="row">
<div class="col-md-8"> <div class="col-md-8">
<div class="form-group"> @if (!ViewContext.ModelState.IsValid)
<h5>Full node connection</h5> {
<p> <div asp-validation-summary="All" class="text-danger"></div>
<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">
</div> <h4 class="mb-3">Full node connection</h4>
<div class="col-lg-3 mr-auto text-center"> <p>This page exposes information to connect remotely to your full node via the P2P protocol.</p>
</div> <h4 class="mb-3">Compatible wallets</h4>
</div> <div>
<div class="form-group"> <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">
<h5>QR Code connection</h5> <img src="~/img/GreenWallet.png" width="100" height="100" asp-append-version="true" alt="Blockstream Green" />
<p> <div class="mt-2">Blockstream Green</div>
<span>You can use QR Code to connect to @Model.WalletName with compatible wallets.<br /></span> </a>
</p> <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> </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"> <div class="form-group">
@if (!Model.ShowQR) @if (!Model.ShowQR)
{ {
@@ -90,7 +70,7 @@
</div> </div>
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
@if (Model.ShowQR) @if (Model.ShowQR)
{ {

View File

@@ -6,7 +6,7 @@
ViewData.SetActivePageAndTitle(ServerNavPages.Policies); ViewData.SetActivePageAndTitle(ServerNavPages.Policies);
} }
<partial name="_StatusMessage"/> <h2 class="mb-4">@ViewData["Title"]</h2>
@if (!ViewContext.ModelState.IsValid) @if (!ViewContext.ModelState.IsValid)
{ {
@@ -14,18 +14,22 @@
} }
<form method="post"> <form method="post">
<div class="form-group mb-4"> <div class="form-group mb-5">
<h5>Existing User Settings</h5> <h4 class="mb-3">Existing User Settings</h4>
<div class="form-check my-1"> <div class="form-check my-1">
<input asp-for="AllowLightningInternalNodeForAll" type="checkbox" class="form-check-input"/> <input asp-for="AllowLightningInternalNodeForAll" type="checkbox" class="form-check-input"/>
<label asp-for="AllowLightningInternalNodeForAll" class="form-check-label"></label> <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> <span asp-validation-for="AllowLightningInternalNodeForAll" class="text-danger"></span>
</div> </div>
<div class="form-check my-1"> <div class="form-check my-1">
<input asp-for="AllowHotWalletForAll" type="checkbox" class="form-check-input"/> <input asp-for="AllowHotWalletForAll" type="checkbox" class="form-check-input"/>
<label asp-for="AllowHotWalletForAll" class="form-check-label"></label> <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> <span asp-validation-for="AllowHotWalletForAll" class="text-danger"></span>
</div> </div>
<div class="form-check my-1"> <div class="form-check my-1">
@@ -35,8 +39,8 @@
</div> </div>
</div> </div>
<div class="form-group mb-4"> <div class="form-group mb-5">
<h5>New User Settings</h5> <h4 class="mb-3">New User Settings</h4>
<div class="form-check my-1"> <div class="form-check my-1">
@{ @{
var emailSettings = (await _SettingsRepository.GetSettingAsync<EmailSettings>()) ?? new EmailSettings(); 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")"/> <input asp-for="RequiresConfirmedEmail" type="checkbox" class="form-check-input" disabled="@(isEmailConfigured ? null : "disabled")"/>
<label asp-for="RequiresConfirmedEmail" class="form-check-label"></label> <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> <span asp-validation-for="RequiresConfirmedEmail" class="text-danger"></span>
@if (!isEmailConfigured) @if (!isEmailConfigured)
{ {
@@ -68,24 +74,28 @@
</div> </div>
</div> </div>
<div class="form-group mb-4"> <div class="form-group mb-5">
<h5>Notification Settings</h5> <h4 class="mb-3">Notification Settings</h4>
<div class="form-check my-1"> <div class="form-check my-1">
<input asp-for="DisableInstantNotifications" type="checkbox" class="form-check-input"/> <input asp-for="DisableInstantNotifications" type="checkbox" class="form-check-input"/>
<label asp-for="DisableInstantNotifications" class="form-check-label"></label> <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> <span asp-validation-for="DisableInstantNotifications" class="text-danger"></span>
</div> </div>
<div class="form-check my-1"> <div class="form-check my-1">
<input asp-for="DisableStoresToUseServerEmailSettings" type="checkbox" class="form-check-input"/> <input asp-for="DisableStoresToUseServerEmailSettings" type="checkbox" class="form-check-input"/>
<label asp-for="DisableStoresToUseServerEmailSettings" class="form-check-label"></label> <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> <span asp-validation-for="DisableStoresToUseServerEmailSettings" class="text-danger"></span>
</div> </div>
</div> </div>
<div class="form-group mb-4"> <div class="form-group mb-5">
<h5>Maintenance Settings</h5> <h4 class="mb-3">Maintenance Settings</h4>
@if (ViewBag.UpdateUrlPresent) @if (ViewBag.UpdateUrlPresent)
{ {
<div class="form-check my-1"> <div class="form-check my-1">
@@ -97,12 +107,14 @@
<div class="form-check my-1"> <div class="form-check my-1">
<input asp-for="DiscourageSearchEngines" type="checkbox" class="form-check-input"/> <input asp-for="DiscourageSearchEngines" type="checkbox" class="form-check-input"/>
<label asp-for="DiscourageSearchEngines" class="form-check-label"></label> <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> <span asp-validation-for="DiscourageSearchEngines" class="text-danger"></span>
</div> </div>
</div> </div>
<h5>Customization Settings</h5> <h4 class="mb-3">Customization Settings</h4>
<div class="form-group"> <div class="form-group">
<label asp-for="RootAppId"></label> <label asp-for="RootAppId"></label>

View File

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

View File

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

View File

@@ -1,20 +1,13 @@
@model BTCPayServer.Models.ServerViewModels.ServicesViewModel @model BTCPayServer.Models.ServerViewModels.ServicesViewModel
@{ @{
ViewData.SetActivePageAndTitle(ServerNavPages.Services); ViewData.SetActivePageAndTitle(ServerNavPages.Services, "Services");
} }
<h2 class="mb-4">@ViewData["PageTitle"]</h2>
<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>
<div class="row mb-5"> <div class="row mb-5">
<div class="col-lg-9 col-xl-8"> <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"> <table class="table table-sm mt-2">
<thead> <thead>
<tr> <tr>
@@ -50,7 +43,7 @@
{ {
<div class="row mb-5"> <div class="row mb-5">
<div class="col-lg-9 col-xl-8"> <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"> <table class="table table-sm mt-2">
<thead> <thead>
@@ -88,7 +81,7 @@
{ {
<div class="row mb-5"> <div class="row mb-5">
<div class="col-lg-9 col-xl-8"> <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"> <table class="table table-sm mt-2">
<thead> <thead>
@@ -117,7 +110,7 @@
{ {
<div class="row mb-5"> <div class="row mb-5">
<div class="col-lg-9 col-xl-8"> <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"> <table class="table table-sm mt-2">
<thead> <thead>
@@ -143,7 +136,7 @@
} }
<div class="row mb-5"> <div class="row mb-5">
<div class="col-lg-9 col-xl-8"> <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> <p class="text-secondary mb-0">Integrated storage providers to store file uploads from BTCPay Server.</p>
<table class="table table-sm mt-2"> <table class="table table-sm mt-2">
@@ -169,5 +162,5 @@
</div> </div>
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
} }

View File

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

View File

@@ -1,20 +1,19 @@
@model BTCPayServer.Services.ThemeSettings @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="row">
<div class="col-lg-6"> <div class="col-lg-6">
<form method="post"> <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> <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"> <div class="form-group">
<label asp-for="ThemeCssUri"></label> <label asp-for="ThemeCssUri"></label>
<select asp-for="ThemeCssUri" class="form-control"> <select asp-for="ThemeCssUri" class="form-control">
@@ -27,14 +26,19 @@
</div> </div>
<div class="form-group mb-5"> <div class="form-group mb-5">
<label asp-for="CustomThemeCssUri"></label> <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" /> <input asp-for="CustomThemeCssUri" class="form-control" />
<span asp-validation-for="CustomThemeCssUri" class="text-danger"></span> <span asp-validation-for="CustomThemeCssUri" class="text-danger"></span>
</div> </div>
<h4>Bootstrap theme</h4>
<h4 class="mb-3">Bootstrap theme</h4>
<div class="form-group"> <div class="form-group">
<label asp-for="BootstrapCssUri"></label> <label asp-for="BootstrapCssUri"></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" /> <input asp-for="BootstrapCssUri" class="form-control" />
<span asp-validation-for="BootstrapCssUri" class="text-danger"></span> <span asp-validation-for="BootstrapCssUri" class="text-danger"></span>
<p class="form-text text-muted"> <p class="form-text text-muted">
@@ -51,11 +55,12 @@
is used on top of Bootstrap is used on top of Bootstrap
</p> </p>
</div> </div>
<button type="submit" class="btn btn-primary" name="command" value="Save">Save</button> <button type="submit" class="btn btn-primary" name="command" value="Save">Save</button>
</form> </form>
</div> </div>
</div> </div>
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
} }

View File

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

View File

@@ -1,6 +1,6 @@
@using BTCPayServer.Configuration @using BTCPayServer.Configuration
@inject BTCPayServerOptions BTCPayServerOptions @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.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.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> <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 @using BTCPayServer.Views.Server
@{ @{
Layout = "../Shared/_NavLayout.cshtml"; Layout = "../Shared/_NavLayout.cshtml";
ViewBag.MainTitle = "Server settings"; ViewBag.CategoryTitle = "Server settings";
ViewData.SetActiveCategory(typeof(ServerNavPages)); ViewData.SetActiveCategory(typeof(ServerNavPages));
} }

View File

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

View File

@@ -1,35 +1,118 @@
@model BTCPayServer.Models.ServerViewModels.EmailsViewModel @model BTCPayServer.Models.ServerViewModels.EmailsViewModel
<partial name="_StatusMessage" /> <partial name="_StatusMessage" />
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-lg-6">
<div asp-validation-summary="All" class="text-danger"></div> <div class="d-flex align-items-center justify-content-between mb-4">
</div> <h2 class="mb-0">@ViewData["Title"]</h2>
</div> <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">
<div class="row row-quick-fill" style="display: none"> Quick fill settings for...
<div class="col-sm-6"> </button>
<div class="dropdown quick-fill"> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <a class="dropdown-item" href="" data-Server="smtp.gmail.com" data-Port="587" data-EnableSSL="true">Gmail.com</a>
Quick fill settings for... <a class="dropdown-item" href="" data-Server="mail.yahoo.com" data-Port="587" data-EnableSSL="true">Yahoo.com</a>
</button> <a class="dropdown-item" href="" data-Server="smtp.mailgun.org" data-Port="587" data-EnableSSL="true">Mailgun</a>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> <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.gmail.com" data-Port="587" data-EnableSSL="true">Gmail.com</a> <a class="dropdown-item" href="" data-Server="smtp.sendgrid.net" data-Port="587" data-EnableSSL="true">SendGrid</a>
<a class="dropdown-item" href="" data-Server="mail.yahoo.com" data-Port="587" data-EnableSSL="true">Yahoo.com</a> </div>
<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> </div>
<p></p>
</div> </div>
</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> <script>
$(document).ready(function () { $(document).ready(function () {
$('.row-quick-fill').show(); $('.dropdown.quick-fill').show();
$('.dropdown.quick-fill a').click(function (e) { $('.dropdown.quick-fill a').click(function (e) {
e.preventDefault(); e.preventDefault();
@@ -55,94 +138,5 @@
} }
} }
}); });
}); });
</script> </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"/> <input type="hidden" name="@o.Key" value="@o.Value"/>
} }
<noscript> <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-content">
<div class="modal-body text-center my-3"> <div class="modal-body text-center my-3">
<p> <p>

View File

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

View File

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

View File

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

View File

@@ -1,12 +1,12 @@
@model LightningNodeViewModel @model LightningNodeViewModel
@{ @{
Layout = "../Shared/_NavLayout.cshtml"; 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"> <p class="mb-0">
Please understand that the Lightning Network is still under active development and considered experimental. 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. Before you proceed, take time to familiarize yourself with the risks.
@@ -122,5 +122,5 @@
</form> </form>
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
} }

View File

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

View File

@@ -1,14 +1,14 @@
@model CreateTokenViewModel @model CreateTokenViewModel
@{ @{
Layout = "../Shared/_NavLayout.cshtml"; 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.HidePublicKey = ViewBag.HidePublicKey ?? false;
ViewBag.ShowStores = ViewBag.ShowStores ?? false; ViewBag.ShowStores = ViewBag.ShowStores ?? false;
} }
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-lg-6">
<h4 class="mb-4">@ViewData["PageTitle"]</h4>
<form method="post"> <form method="post">
<div class="form-group"> <div class="form-group">
<label asp-for="Label"></label> <label asp-for="Label"></label>

View File

@@ -1,8 +1,11 @@
@model BTCPayServer.Models.ServerViewModels.EmailsViewModel @model BTCPayServer.Models.ServerViewModels.EmailsViewModel
@{ @{
Layout = "../Shared/_NavLayout.cshtml"; 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 isHotWallet = Model.Method == WalletSetupMethod.HotWallet;
var type = isHotWallet ? "Hot" : "Watch-Only"; var type = isHotWallet ? "Hot" : "Watch-Only";
Layout = "_LayoutWalletSetup"; 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.CanUseHotWallet), Model.CanUseHotWallet);
ViewData.Add(nameof(Model.CanUseRPCImport), Model.CanUseRPCImport); ViewData.Add(nameof(Model.CanUseRPCImport), Model.CanUseRPCImport);
ViewData.Add(nameof(Model.Method), Model.Method); ViewData.Add(nameof(Model.Method), Model.Method);
@@ -18,9 +18,8 @@
<h1 class="text-center">@ViewData["Title"]</h1> <h1 class="text-center">@ViewData["Title"]</h1>
<br> <br>
<partial name="_GenerateWalletForm" model="Model.SetupRequest" />
@await Html.PartialAsync("_GenerateWalletForm", Model.SetupRequest)
@section Scripts { @section Scripts {
@await Html.PartialAsync("_ValidationScriptsPartial") <partial name="_ValidationScriptsPartial" />
} }

View File

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

View File

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

View File

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

View File

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