mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-03-10 09:19:24 +01:00
make sure link provider is per payment method of liquid assets. Also remove ETB as it has been unused. Also hide the send button as it is not supported thrrough BTCPay
424 lines
32 KiB
Text
424 lines
32 KiB
Text
@using BTCPayServer.Views.Server
|
|
@using BTCPayServer.Views.Stores
|
|
@using BTCPayServer.Views.Invoice
|
|
@using BTCPayServer.Views.Manage
|
|
@using BTCPayServer.Views.PaymentRequest
|
|
@using BTCPayServer.Views.Wallets
|
|
@using BTCPayServer.Client
|
|
@using BTCPayServer.Components.ThemeSwitch
|
|
@using BTCPayServer.Components.UIExtensionPoint
|
|
@using BTCPayServer.Plugins
|
|
@using BTCPayServer.Services
|
|
@using BTCPayServer.Views.Apps
|
|
@using BTCPayServer.Configuration
|
|
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContext;
|
|
@inject BTCPayServerOptions BtcPayServerOptions
|
|
@inject BTCPayServerEnvironment Env
|
|
@inject SignInManager<ApplicationUser> SignInManager
|
|
@inject PoliciesSettings PoliciesSettings
|
|
@inject ThemeSettings Theme
|
|
@inject PluginService PluginService
|
|
@inject PrettyNameProvider PrettyName
|
|
|
|
@model BTCPayServer.Components.MainNav.MainNavViewModel
|
|
|
|
<nav id="mainNav" class="d-flex flex-column justify-content-between">
|
|
<div class="accordion px-3 px-lg-4">
|
|
@if (SignInManager.IsSignedIn(User))
|
|
{
|
|
@if (Model.Store != null)
|
|
{
|
|
<div class="accordion-item" permission="@Policies.CanViewStoreSettings">
|
|
<div class="accordion-body">
|
|
<ul class="navbar-nav">
|
|
<li class="nav-item" permission="@Policies.CanModifyStoreSettings">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.Dashboard))" asp-area="" asp-controller="UIStores" asp-action="Dashboard" asp-route-storeId="@Model.Store.Id" class="nav-link @ViewData.ActivePageClass(StoreNavPages.Dashboard)">
|
|
<vc:icon symbol="nav-dashboard"/>
|
|
<span text-translate="true">Dashboard</span>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item" permission="@Policies.CanViewStoreSettings">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.General))" asp-area="" asp-controller="UIStores" asp-action="GeneralSettings" asp-route-storeId="@Model.Store.Id" class="nav-link @ViewData.ActivePageClass(StoreNavPages.General)">
|
|
<vc:icon symbol="nav-store-settings"/>
|
|
<span text-translate="true">Settings</span>
|
|
</a>
|
|
</li>
|
|
@if (ViewData.IsPageActive([StoreNavPages.General, StoreNavPages.Rates, StoreNavPages.CheckoutAppearance, StoreNavPages.Tokens, StoreNavPages.Users, StoreNavPages.Roles, StoreNavPages.Webhooks, StoreNavPages.PayoutProcessors, StoreNavPages.Emails, StoreNavPages.Forms]))
|
|
{
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyStoreSettings">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.Rates))" class="nav-link @ViewData.ActivePageClass(StoreNavPages.Rates)" asp-controller="UIStores" asp-action="Rates" asp-route-storeId="@Model.Store.Id" text-translate="true">Rates</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyStoreSettings">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.CheckoutAppearance))" class="nav-link @ViewData.ActivePageClass(StoreNavPages.CheckoutAppearance)" asp-controller="UIStores" asp-action="CheckoutAppearance" asp-route-storeId="@Model.Store.Id" text-translate="true">Checkout Appearance</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyStoreSettings">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.Tokens))" class="nav-link @ViewData.ActivePageClass(StoreNavPages.Tokens)" asp-controller="UIStores" asp-action="ListTokens" asp-route-storeId="@Model.Store.Id" text-translate="true">Access Tokens</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyStoreSettings">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.Users))" class="nav-link @ViewData.ActivePageClass(StoreNavPages.Users)" asp-controller="UIStores" asp-action="StoreUsers" asp-route-storeId="@Model.Store.Id" text-translate="true">Users</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyStoreSettings">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.Roles))" class="nav-link @ViewData.ActivePageClass(StoreNavPages.Roles)" asp-controller="UIStores" asp-action="ListRoles" asp-route-storeId="@Model.Store.Id" text-translate="true">Roles</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyStoreSettings">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.Webhooks))" class="nav-link @ViewData.ActivePageClass(StoreNavPages.Webhooks)" asp-controller="UIStores" asp-action="Webhooks" asp-route-storeId="@Model.Store.Id" text-translate="true">Webhooks</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyStoreSettings">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.PayoutProcessors))" class="nav-link @ViewData.ActivePageClass(StoreNavPages.PayoutProcessors)" asp-controller="UIPayoutProcessors" asp-action="ConfigureStorePayoutProcessors" asp-route-storeId="@Model.Store.Id" text-translate="true">Payout Processors</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyStoreSettings">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.Emails))" class="nav-link @ViewData.ActivePageClass(StoreNavPages.Emails)" asp-controller="UIStores" asp-action="StoreEmailSettings" asp-route-storeId="@Model.Store.Id" text-translate="true">Emails</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyStoreSettings">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.Forms))" class="nav-link @ViewData.ActivePageClass(StoreNavPages.Forms)" asp-controller="UIForms" asp-action="FormsList" asp-route-storeId="@Model.Store.Id" text-translate="true">Forms</a>
|
|
</li>
|
|
}
|
|
<vc:ui-extension-point location="store-nav" model="@Model"/>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="accordion-item">
|
|
<header class="accordion-header" id="Nav-Wallets-Header" permission="@Policies.CanModifyStoreSettings">
|
|
<div text-translate="true" class="accordion-button">Wallets</div>
|
|
</header>
|
|
<div id="Nav-Wallets" class="accordion-collapse" aria-labelledby="Nav-Wallets-Header" permission="@Policies.CanModifyStoreSettings">
|
|
<div class="accordion-body">
|
|
<ul class="navbar-nav">
|
|
@foreach (var scheme in Model.DerivationSchemes.OrderBy(scheme => scheme.Collapsed))
|
|
{
|
|
var isSetUp = !string.IsNullOrWhiteSpace(scheme.Value);
|
|
var categoryId = $"{Model.Store.Id}-{scheme.WalletId.CryptoCode}";
|
|
<li class="nav-item">
|
|
@if (isSetUp && scheme.WalletSupported)
|
|
{
|
|
<a asp-area="" asp-controller="UIWallets" asp-action="WalletTransactions" asp-route-walletId="@scheme.WalletId" class="nav-link @ViewData.ActivePageClass([WalletsNavPages.Transactions], scheme.WalletId.ToString())" id="@($"StoreNav-Wallet{scheme.Crypto}")">
|
|
<span class="me-2 btcpay-status btcpay-status--@(scheme.Enabled ? "enabled" : "pending")"></span>
|
|
<span>@PrettyName.PrettyName(scheme.PaymentMethodId)</span>
|
|
</a>
|
|
}
|
|
else
|
|
{
|
|
<a asp-area="" asp-controller="UIStores" asp-action="SetupWallet" asp-route-cryptoCode="@scheme.Crypto" asp-route-storeId="@Model.Store.Id" class="nav-link @ViewData.ActivePageClass(StoreNavPages.OnchainSettings)" id="@($"StoreNav-Wallet{scheme.Crypto}")">
|
|
<span class="me-2 btcpay-status btcpay-status--@(scheme.Enabled ? "enabled" : "pending")"></span>
|
|
<span>@PrettyName.PrettyName(scheme.PaymentMethodId)</span>
|
|
</a>
|
|
}
|
|
</li>
|
|
@if (ViewData.IsCategoryActive(typeof(WalletsNavPages), scheme.WalletId.ToString()) || ViewData.IsPageActive([WalletsNavPages.Settings], scheme.WalletId.ToString()) || ViewData.IsPageActive([StoreNavPages.OnchainSettings], categoryId))
|
|
{
|
|
@if (!scheme.ReadonlyWallet)
|
|
{
|
|
<li class="nav-item nav-item-sub">
|
|
<a id="WalletNav-Send" class="nav-link @ViewData.ActivePageClass([WalletsNavPages.Send, WalletsNavPages.PSBT], scheme.WalletId.ToString())" asp-area="" asp-controller="UIWallets" asp-action="WalletSend" asp-route-walletId="@scheme.WalletId" text-translate="true">Send</a>
|
|
</li>
|
|
}
|
|
|
|
|
|
<li class="nav-item nav-item-sub">
|
|
<a id="WalletNav-Receive" class="nav-link @ViewData.ActivePageClass(WalletsNavPages.Receive, scheme.WalletId.ToString())" asp-area="" asp-controller="UIWallets" asp-action="WalletReceive" asp-route-walletId="@scheme.WalletId" text-translate="true">Receive</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub">
|
|
<a id="WalletNav-Settings" class="nav-link @ViewData.ActivePageClass(WalletsNavPages.Settings, scheme.WalletId.ToString()) @ViewData.ActivePageClass(StoreNavPages.OnchainSettings, categoryId)" asp-area="" asp-controller="UIStores" asp-action="WalletSettings" asp-route-cryptoCode="@scheme.WalletId.CryptoCode" asp-route-storeId="@scheme.WalletId.StoreId" text-translate="true">Settings</a>
|
|
</li>
|
|
<vc:ui-extension-point location="wallet-nav" model="@Model" />
|
|
}
|
|
}
|
|
@foreach (var scheme in Model.LightningNodes)
|
|
{
|
|
var isSetUp = !string.IsNullOrWhiteSpace(scheme.Address);
|
|
<li class="nav-item">
|
|
@if (isSetUp)
|
|
{
|
|
var status = scheme.Enabled
|
|
? scheme.Available ? "enabled" : "disabled"
|
|
: "pending";
|
|
<a asp-area="" asp-controller="UIStores" asp-action="Lightning" asp-route-cryptoCode="@scheme.CryptoCode" asp-route-storeId="@Model.Store.Id" class="nav-link @ViewData.ActivePageClass(StoreNavPages.Lightning, $"{Model.Store.Id}-{scheme.CryptoCode}")" id="@($"StoreNav-Lightning{scheme.CryptoCode}")">
|
|
<span class="me-2 btcpay-status btcpay-status--@status"></span>
|
|
<span>@PrettyName.PrettyName(scheme.PaymentMethodId)</span>
|
|
</a>
|
|
}
|
|
else
|
|
{
|
|
<a asp-area="" asp-controller="UIStores" asp-action="SetupLightningNode" asp-route-cryptoCode="@scheme.CryptoCode" asp-route-storeId="@Model.Store.Id" class="nav-link @ViewData.ActivePageClass(StoreNavPages.LightningSettings, $"{Model.Store.Id}-{scheme.CryptoCode}")" id="@($"StoreNav-Lightning{scheme.CryptoCode}")">
|
|
<span class="me-2 btcpay-status btcpay-status--@(scheme.Enabled ? "enabled" : "pending")"></span>
|
|
<span>@PrettyName.PrettyName(scheme.PaymentMethodId)</span>
|
|
</a>
|
|
}
|
|
</li>
|
|
@if (ViewData.IsPageActive([StoreNavPages.Lightning, StoreNavPages.LightningSettings], $"{Model.Store.Id}-{scheme.CryptoCode}"))
|
|
{
|
|
<li class="nav-item nav-item-sub">
|
|
<a id="StoreNav-@(nameof(StoreNavPages.LightningSettings))" class="nav-link @ViewData.ActivePageClass(StoreNavPages.LightningSettings)" asp-controller="UIStores" asp-action="LightningSettings" asp-route-storeId="@Model.Store.Id" asp-route-cryptoCode="@scheme.CryptoCode" text-translate="true">Settings</a>
|
|
</li>
|
|
<vc:ui-extension-point location="lightning-nav" model="@Model"/>
|
|
}
|
|
}
|
|
<vc:ui-extension-point location="store-wallets-nav" model="@Model"/>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="accordion-item">
|
|
<header class="accordion-header" id="Nav-Payments-Header">
|
|
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#Nav-Payments" aria-expanded="true" aria-controls="Nav-Payments">
|
|
<span text-translate="true">Payments</span>
|
|
<vc:icon symbol="caret-down"/>
|
|
</button>
|
|
</header>
|
|
<div id="Nav-Payments" class="accordion-collapse collapse show" aria-labelledby="Nav-Payments-Header">
|
|
<div class="accordion-body">
|
|
<ul class="navbar-nav">
|
|
<li class="nav-item" permission="@Policies.CanViewInvoices">
|
|
<a asp-area="" asp-controller="UIInvoice" asp-action="ListInvoices" asp-route-storeId="@Model.Store.Id" class="nav-link @ViewData.ActiveCategoryClass(typeof(InvoiceNavPages))" id="StoreNav-Invoices">
|
|
<vc:icon symbol="nav-invoices"/>
|
|
<span text-translate="true">Invoices</span>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item" permission="@Policies.CanViewReports">
|
|
<a asp-area="" asp-controller="UIReports" asp-action="StoreReports" asp-route-storeId="@Model.Store.Id" class="nav-link @ViewData.ActivePageClass(StoreNavPages.Reporting)" id="SectionNav-Reporting">
|
|
<vc:icon symbol="nav-reporting" />
|
|
<span text-translate="true">Reporting</span>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item" permission="@Policies.CanViewPaymentRequests">
|
|
<a asp-area="" asp-controller="UIPaymentRequest" asp-action="GetPaymentRequests" asp-route-storeId="@Model.Store.Id" class="nav-link @ViewData.ActiveCategoryClass(typeof(PaymentRequestsNavPages))" id="StoreNav-PaymentRequests">
|
|
<vc:icon symbol="nav-payment-requests"/>
|
|
<span text-translate="true">Requests</span>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item" permission="@Policies.CanViewPullPayments">
|
|
<a asp-area="" asp-controller="UIStorePullPayments" asp-action="PullPayments" asp-route-storeId="@Model.Store.Id" class="nav-link @ViewData.ActivePageClass(StoreNavPages.PullPayments)" id="StoreNav-PullPayments">
|
|
<vc:icon symbol="nav-pull-payments"/>
|
|
<span text-translate="true">Pull Payments</span>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item" permission="@Policies.CanViewPayouts">
|
|
<a asp-area=""
|
|
asp-controller="UIStorePullPayments" asp-action="Payouts"
|
|
asp-route-pullPaymentId=""
|
|
asp-route-storeId="@Model.Store.Id" class="nav-link @ViewData.ActivePageClass(StoreNavPages.Payouts)" id="StoreNav-Payouts">
|
|
<vc:icon symbol="nav-payouts"/>
|
|
<span text-translate="true">Payouts</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
<div class="accordion-item">
|
|
<header class="accordion-header" id="Nav-Plugins-Header">
|
|
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#Nav-Plugins" aria-expanded="true" aria-controls="Nav-Plugins">
|
|
<span text-translate="true">Plugins</span>
|
|
<vc:icon symbol="caret-down"/>
|
|
</button>
|
|
</header>
|
|
<div id="Nav-Plugins" class="accordion-collapse collapse show" aria-labelledby="Nav-Plugins-Header">
|
|
<div class="accordion-body">
|
|
<ul class="navbar-nav">
|
|
<vc:ui-extension-point location="header-nav" model="@Model"/>
|
|
@if (Model.Store != null)
|
|
{
|
|
<vc:ui-extension-point location="store-integrations-nav" model="@Model"/>
|
|
}
|
|
</ul>
|
|
<ul class="navbar-nav">
|
|
<li class="nav-item" permission="@Policies.CanModifyServerSettings">
|
|
<a asp-area="" asp-controller="UIServer" asp-action="ListPlugins" class="nav-link @ViewData.ActivePageClass(ServerNavPages.Plugins)" id="Nav-ManagePlugins">
|
|
@if (PluginService.GetDisabledPlugins().Any())
|
|
{
|
|
<span class="me-2 btcpay-status btcpay-status--disabled"></span>
|
|
}
|
|
else
|
|
{
|
|
<vc:icon symbol="nav-plugins-manage" />
|
|
}
|
|
<span text-translate="true">Manage Plugins</span>
|
|
</a>
|
|
</li>
|
|
@if (Model.Store != null && Model.ArchivedAppsCount > 0)
|
|
{
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyStoreSettings">
|
|
<a asp-area="" asp-controller="UIApps" asp-action="ListApps" asp-route-storeId="@Model.Store.Id" asp-route-archived="true" class="nav-link @ViewData.ActivePageClass(AppsNavPages.Index)" id="Nav-ArchivedApps">
|
|
@Model.ArchivedAppsCount Archived App@(Model.ArchivedAppsCount == 1 ? "" : "s")
|
|
</a>
|
|
</li>
|
|
}
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
(() => {
|
|
// apply collapse settings
|
|
const navCollapsed = window.localStorage.getItem('btcpay-nav-collapsed')
|
|
const collapsed = navCollapsed ? JSON.parse(navCollapsed) : []
|
|
collapsed.forEach(id => {
|
|
const el = document.getElementById(id)
|
|
const btn = el && el.previousElementSibling.querySelector(`[aria-controls="${id}"]`)
|
|
if (el && btn) {
|
|
el.classList.remove('show')
|
|
btn.classList.add('collapsed')
|
|
btn.setAttribute('aria-expanded', 'false')
|
|
}
|
|
})
|
|
// hide empty plugins drawer
|
|
const pluginsItem = document.getElementById('Nav-Plugins').closest('.accordion-item')
|
|
const pluginsContent = pluginsItem.querySelector('.navbar-nav').innerHTML.trim()
|
|
if (pluginsContent === '') {
|
|
pluginsItem.setAttribute('hidden', true)
|
|
}
|
|
})()
|
|
</script>
|
|
}
|
|
else if (Env.IsSecure(HttpContext.HttpContext))
|
|
{
|
|
<ul class="navbar-nav">
|
|
@if (!PoliciesSettings.LockSubscription)
|
|
{
|
|
<li class="nav-item">
|
|
<a asp-area="" asp-controller="UIAccount" asp-action="Register" class="nav-link" id="Nav-Register" text-translate="true">Register</a>
|
|
</li>
|
|
}
|
|
<li class="nav-item">
|
|
<a asp-area="" asp-controller="UIAccount" asp-action="Login" class="nav-link" id="Nav-Login" text-translate="true">Log in</a>
|
|
</li>
|
|
</ul>
|
|
}
|
|
</div>
|
|
@if (SignInManager.IsSignedIn(User))
|
|
{
|
|
<ul id="mainNavSettings" class="navbar-nav border-top p-3 px-lg-4">
|
|
<li class="nav-item" permission="@Policies.CanModifyServerSettings">
|
|
<a asp-area="" asp-controller="UIServer" asp-action="Policies" class="nav-link @ViewData.ActivePageClass(ServerNavPages.Policies)" id="Nav-ServerSettings">
|
|
<vc:icon symbol="nav-server-settings"/>
|
|
<span text-translate="true">Server Settings</span>
|
|
</a>
|
|
</li>
|
|
@if (ViewData.IsCategoryActive(typeof(ServerNavPages)) && !ViewData.IsPageActive([ServerNavPages.Plugins]))
|
|
{
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyServerSettings">
|
|
<a asp-controller="UIServer" id="SectionNav-@ServerNavPages.Users" class="nav-link @ViewData.ActivePageClass(ServerNavPages.Users)" asp-action="ListUsers" text-translate="true">Users</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyServerSettings">
|
|
<a asp-controller="UIServer" id="SectionNav-@ServerNavPages.Roles" class="nav-link @ViewData.ActivePageClass(ServerNavPages.Roles)" asp-action="ListRoles" text-translate="true">Roles</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyServerSettings">
|
|
<a asp-controller="UIServer" id="SectionNav-@ServerNavPages.Emails" class="nav-link @ViewData.ActivePageClass(ServerNavPages.Emails)" asp-action="Emails" text-translate="true">Email</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyServerSettings">
|
|
<a asp-controller="UIServer" id="SectionNav-@ServerNavPages.Services" class="nav-link @ViewData.ActivePageClass(ServerNavPages.Services)" asp-action="Services" text-translate="true">Services</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyServerSettings">
|
|
<a asp-controller="UIServer" id="SectionNav-@ServerNavPages.Branding" class="nav-link @ViewData.ActivePageClass(ServerNavPages.Branding)" asp-action="Branding" text-translate="true">Branding</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyServerSettings">
|
|
<a asp-controller="UIServer" id="SectionNav-@ServerNavPages.Translations" class="nav-link @ViewData.ActivePageClass(ServerNavPages.Translations)" asp-action="ListDictionaries" text-translate="true">Translations</a>
|
|
</li>
|
|
@if (BtcPayServerOptions.DockerDeployment)
|
|
{
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyServerSettings">
|
|
<a asp-controller="UIServer" id="SectionNav-@ServerNavPages.Maintenance" class="nav-link @ViewData.ActivePageClass(ServerNavPages.Maintenance)" asp-action="Maintenance" text-translate="true">Maintenance</a>
|
|
</li>
|
|
}
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyServerSettings">
|
|
<a asp-controller="UIServer" id="SectionNav-@ServerNavPages.Logs" class="nav-link @ViewData.ActivePageClass(ServerNavPages.Logs)" asp-action="LogsView" text-translate="true">Logs</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub" permission="@Policies.CanModifyServerSettings">
|
|
<a asp-controller="UIServer" id="SectionNav-@ServerNavPages.Files" class="nav-link @ViewData.ActivePageClass(ServerNavPages.Files)" asp-action="Files" text-translate="true">Files</a>
|
|
</li>
|
|
|
|
<vc:ui-extension-point location="server-nav" model="@Model"/>
|
|
}
|
|
<li class="nav-item dropup">
|
|
<a class="nav-link @ViewData.ActivePageClass(ManageNavPages.Index)" role="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false" id="Nav-Account">
|
|
<vc:icon symbol="nav-account"/>
|
|
<span text-translate="true">Account</span>
|
|
</a>
|
|
<ul class="dropdown-menu py-0 w-100" aria-labelledby="Nav-Account">
|
|
<li class="p-3 border-bottom d-flex align-items-center gap-2">
|
|
@if (!string.IsNullOrEmpty(Model.UserImageUrl))
|
|
{
|
|
<img src="@Model.UserImageUrl" alt="Profile picture" class="profile-picture"/>
|
|
}
|
|
<div>
|
|
<strong class="d-block text-truncate" style="max-width:@(string.IsNullOrEmpty(Model.UserImageUrl) ? "195px" : "160px")">
|
|
@if (string.IsNullOrEmpty(Model.UserName))
|
|
{
|
|
@(User.Identity.Name)
|
|
}
|
|
else
|
|
{
|
|
@($"{Model.UserName} ({User.Identity.Name})")
|
|
}
|
|
</strong>
|
|
@if (User.IsInRole(Roles.ServerAdmin))
|
|
{
|
|
<div class="text-secondary" text-translate="true">Administrator</div>
|
|
}
|
|
</div>
|
|
</li>
|
|
@if (!Theme.CustomTheme)
|
|
{
|
|
<li class="py-1 px-3">
|
|
<vc:theme-switch css-class="w-100 pt-2"/>
|
|
</li>
|
|
}
|
|
<li class="py-1 px-3">
|
|
<label class="d-flex align-items-center justify-content-between gap-3 nav-link">
|
|
<span class="fw-semibold" text-translate="true">Hide Sensitive Info</span>
|
|
<input id="HideSensitiveInfo" name="HideSensitiveInfo" type="checkbox" class="btcpay-toggle" />
|
|
</label>
|
|
<script>
|
|
document.getElementById('HideSensitiveInfo').checked = window.localStorage.getItem('btcpay-hide-sensitive-info') === 'true';
|
|
</script>
|
|
</li>
|
|
<li class="border-top py-1 px-3">
|
|
<a asp-area="" asp-controller="UIManage" asp-action="Index" class="nav-link" id="Nav-ManageAccount">
|
|
<span text-translate="true">Manage Account</span>
|
|
</a>
|
|
</li>
|
|
<li class="border-top py-1 px-3">
|
|
<a asp-area="" asp-controller="UIAccount" asp-action="Logout" class="nav-link text-danger" id="Nav-Logout">
|
|
<span text-translate="true">Logout</span>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
@if (ViewData.IsCategoryActive(typeof(ManageNavPages)) || ViewData.IsPageActive([ManageNavPages.ChangePassword]))
|
|
{
|
|
<li class="nav-item nav-item-sub">
|
|
<a id="SectionNav-@ManageNavPages.ChangePassword.ToString()" class="nav-link @ViewData.ActivePageClass(ManageNavPages.ChangePassword)" asp-controller="UIManage" asp-action="ChangePassword" text-translate="true">Password</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub">
|
|
<a id="SectionNav-@ManageNavPages.TwoFactorAuthentication.ToString()" class="nav-link @ViewData.ActivePageClass(ManageNavPages.TwoFactorAuthentication)" asp-controller="UIManage" asp-action="TwoFactorAuthentication" text-translate="true">Two-Factor Authentication</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub">
|
|
<a id="SectionNav-@ManageNavPages.APIKeys.ToString()" class="nav-link @ViewData.ActivePageClass(ManageNavPages.APIKeys)" asp-controller="UIManage" asp-action="APIKeys" text-translate="true">API Keys</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub">
|
|
<a id="SectionNav-@ManageNavPages.Notifications.ToString()" class="nav-link @ViewData.ActivePageClass(ManageNavPages.Notifications)" asp-controller="UIManage" asp-action="NotificationSettings" text-translate="true">Notifications</a>
|
|
</li>
|
|
<li class="nav-item nav-item-sub">
|
|
<a id="SectionNav-@ManageNavPages.LoginCodes.ToString()" class="nav-link @ViewData.ActivePageClass(ManageNavPages.LoginCodes)" asp-controller="UIManage" asp-action="LoginCodes" text-translate="true">Login Codes</a>
|
|
</li>
|
|
<vc:ui-extension-point location="user-nav" model="@Model" />
|
|
}
|
|
@if (!string.IsNullOrWhiteSpace(Model.ContactUrl))
|
|
{
|
|
<li class="nav-item">
|
|
<a href="@Model.ContactUrl" class="nav-link" id="Nav-ContactUs">
|
|
<vc:icon symbol="nav-contact"/>
|
|
<span text-translate="true">Contact Us</span>
|
|
</a>
|
|
</li>
|
|
}
|
|
</ul>
|
|
}
|
|
</nav>
|
|
<script>
|
|
(function () {
|
|
const activeEl = document.querySelector('#mainNav .nav-link.active')
|
|
if (activeEl) activeEl.scrollIntoView({ block: 'center', inline: 'center' })
|
|
})()
|
|
</script>
|