diff --git a/Lantean.QBTMud/Components/FilesTab.razor b/Lantean.QBTMud/Components/FilesTab.razor
index d466cf2..e29fc65 100644
--- a/Lantean.QBTMud/Components/FilesTab.razor
+++ b/Lantean.QBTMud/Components/FilesTab.razor
@@ -1,6 +1,6 @@
-
+
Rename
-
+
diff --git a/Lantean.QBTMud/Components/FilesTab.razor.cs b/Lantean.QBTMud/Components/FilesTab.razor.cs
index f1702d1..c1c7347 100644
--- a/Lantean.QBTMud/Components/FilesTab.razor.cs
+++ b/Lantean.QBTMud/Components/FilesTab.razor.cs
@@ -69,7 +69,7 @@ namespace Lantean.QBTMud.Components
private DynamicTable? Table { get; set; }
- private ContextMenu? ContextMenu { get; set; }
+ private MudMenu? ContextMenu { get; set; }
public FilesTab()
{
diff --git a/Lantean.QBTMud/Components/FiltersNav.razor b/Lantean.QBTMud/Components/FiltersNav.razor
index 089bf24..9b26cbe 100644
--- a/Lantean.QBTMud/Components/FiltersNav.razor
+++ b/Lantean.QBTMud/Components/FiltersNav.razor
@@ -1,8 +1,8 @@
-
+
@TorrentControls(_statusType)
-
+
-
+
Add category
@if (IsCategoryTarget)
{
@@ -12,9 +12,9 @@
Remove unused categories
@TorrentControls(_categoryType)
-
+
-
+
Add tag
@if (IsTagTarget)
{
@@ -23,13 +23,13 @@
Remove unused tags
@TorrentControls(_tagType)
-
+
-
+
Remove tracker
@TorrentControls(_trackerType)
-
+
diff --git a/Lantean.QBTMud/Components/FiltersNav.razor.cs b/Lantean.QBTMud/Components/FiltersNav.razor.cs
index 090edc4..2637c14 100644
--- a/Lantean.QBTMud/Components/FiltersNav.razor.cs
+++ b/Lantean.QBTMud/Components/FiltersNav.razor.cs
@@ -69,13 +69,13 @@ namespace Lantean.QBTMud.Components
protected Dictionary Statuses => GetStatuses();
- protected ContextMenu? StatusContextMenu { get; set; }
+ protected MudMenu? StatusContextMenu { get; set; }
- protected ContextMenu? CategoryContextMenu { get; set; }
+ protected MudMenu? CategoryContextMenu { get; set; }
- protected ContextMenu? TagContextMenu { get; set; }
+ protected MudMenu? TagContextMenu { get; set; }
- protected ContextMenu? TrackerContextMenu { get; set; }
+ protected MudMenu? TrackerContextMenu { get; set; }
protected string? ContextMenuStatus { get; set; }
diff --git a/Lantean.QBTMud/Components/PeersTab.razor b/Lantean.QBTMud/Components/PeersTab.razor
index 9c93b51..faa0949 100644
--- a/Lantean.QBTMud/Components/PeersTab.razor
+++ b/Lantean.QBTMud/Components/PeersTab.razor
@@ -1,10 +1,10 @@
-
+
Add peer
@if (ContextMenuItem is not null)
{
Ban peer
}
-
+
Add peer
diff --git a/Lantean.QBTMud/Components/PeersTab.razor.cs b/Lantean.QBTMud/Components/PeersTab.razor.cs
index e6c7e01..e8d6733 100644
--- a/Lantean.QBTMud/Components/PeersTab.razor.cs
+++ b/Lantean.QBTMud/Components/PeersTab.razor.cs
@@ -52,7 +52,7 @@ namespace Lantean.QBTMud.Components
protected Peer? SelectedItem { get; set; }
- protected ContextMenu? ContextMenu { get; set; }
+ protected MudMenu? ContextMenu { get; set; }
protected DynamicTable? Table { get; set; }
@@ -153,7 +153,7 @@ namespace Lantean.QBTMud.Components
return;
}
- await ContextMenu.ToggleMenuAsync(eventArgs);
+ await ContextMenu.OpenMenuAsync(eventArgs);
}
protected void SelectedItemChanged(Peer peer)
diff --git a/Lantean.QBTMud/Components/TrackersTab.razor b/Lantean.QBTMud/Components/TrackersTab.razor
index bd74c77..26c23f5 100644
--- a/Lantean.QBTMud/Components/TrackersTab.razor
+++ b/Lantean.QBTMud/Components/TrackersTab.razor
@@ -1,4 +1,4 @@
-
+
Add trackers
@if (ContextMenuItem is not null)
{
@@ -6,7 +6,7 @@
Remove tracker
Copy tracker url
}
-
+
Add trackers
diff --git a/Lantean.QBTMud/Components/TrackersTab.razor.cs b/Lantean.QBTMud/Components/TrackersTab.razor.cs
index 599ca10..c9bf214 100644
--- a/Lantean.QBTMud/Components/TrackersTab.razor.cs
+++ b/Lantean.QBTMud/Components/TrackersTab.razor.cs
@@ -52,7 +52,7 @@ namespace Lantean.QBTMud.Components
protected TorrentTracker? SelectedItem { get; set; }
- protected ContextMenu? ContextMenu { get; set; }
+ protected MudMenu? ContextMenu { get; set; }
protected DynamicTable? Table { get; set; }
@@ -148,7 +148,7 @@ namespace Lantean.QBTMud.Components
return;
}
- await ContextMenu.ToggleMenuAsync(eventArgs);
+ await ContextMenu.OpenMenuAsync(eventArgs);
}
protected void SelectedItemChanged(TorrentTracker torrentTracker)
diff --git a/Lantean.QBTMud/Components/UI/ContextMenu.razor b/Lantean.QBTMud/Components/UI/ContextMenu.razor
deleted file mode 100644
index b278fbd..0000000
--- a/Lantean.QBTMud/Components/UI/ContextMenu.razor
+++ /dev/null
@@ -1,26 +0,0 @@
-@inherits MudComponentBase
-
-
-
-@* The portal has to include the cascading values inside, because it's not able to teletransport the cascade *@
-
-
- @if (_showChildren)
- {
-
- @ChildContent
-
- }
-
-
-
-
\ No newline at end of file
diff --git a/Lantean.QBTMud/Components/UI/ContextMenu.razor.cs b/Lantean.QBTMud/Components/UI/ContextMenu.razor.cs
deleted file mode 100644
index 2d4f592..0000000
--- a/Lantean.QBTMud/Components/UI/ContextMenu.razor.cs
+++ /dev/null
@@ -1,290 +0,0 @@
-using Lantean.QBTMud.Interop;
-using Microsoft.AspNetCore.Components;
-using Microsoft.AspNetCore.Components.Web;
-using Microsoft.JSInterop;
-using MudBlazor;
-using MudBlazor.Utilities;
-
-namespace Lantean.QBTMud.Components.UI
-{
- public partial class ContextMenu : MudComponentBase
- {
- private bool _open;
- private bool _showChildren;
- private string? _popoverStyle;
- private string? _id;
-
- private double _x;
- private double _y;
- private bool _isResized = false;
-
- private const double _diff = 64;
-
- private string Id
- {
- get
- {
- _id ??= Guid.NewGuid().ToString();
-
- return _id;
- }
- }
-
- [Inject]
- public IJSRuntime JSRuntime { get; set; } = default!;
-
- [Inject]
- public IPopoverService PopoverService { get; set; } = default!;
-
- ///
- /// If true, compact vertical padding will be applied to all menu items.
- ///
- [Parameter]
- [Category(CategoryTypes.Menu.PopupAppearance)]
- public bool Dense { get; set; }
-
- ///
- /// Set to true if you want to prevent page from scrolling when the menu is open
- ///
- [Parameter]
- [Category(CategoryTypes.Menu.PopupAppearance)]
- public bool LockScroll { get; set; }
-
- ///
- /// If true, the list menu will be same width as the parent.
- ///
- [Parameter]
- [Category(CategoryTypes.Menu.PopupAppearance)]
- public DropdownWidth RelativeWidth { get; set; }
-
- ///
- /// Sets the max height the menu can have when open.
- ///
- [Parameter]
- [Category(CategoryTypes.Menu.PopupAppearance)]
- public int? MaxHeight { get; set; }
-
- ///
- /// Set the anchor origin point to determine where the popover will open from.
- ///
- [Parameter]
- [Category(CategoryTypes.Menu.PopupAppearance)]
- public Origin AnchorOrigin { get; set; } = Origin.TopLeft;
-
- ///
- /// Sets the transform origin point for the popover.
- ///
- [Parameter]
- [Category(CategoryTypes.Menu.PopupAppearance)]
- public Origin TransformOrigin { get; set; } = Origin.TopLeft;
-
- ///
- /// If true, menu will be disabled.
- ///
- [Parameter]
- [Category(CategoryTypes.Menu.Behavior)]
- public bool Disabled { get; set; }
-
- ///
- /// Gets or sets whether to show a ripple effect when the user clicks the button. Default is true.
- ///
- [Parameter]
- [Category(CategoryTypes.Menu.Appearance)]
- public bool Ripple { get; set; } = true;
-
- ///
- /// Determines whether the component has a drop-shadow. Default is true
- ///
- [Parameter]
- [Category(CategoryTypes.Menu.Appearance)]
- public bool DropShadow { get; set; } = true;
-
- ///
- /// Add menu items here
- ///
- [Parameter]
- [Category(CategoryTypes.Menu.PopupBehavior)]
- public RenderFragment? ChildContent { get; set; }
-
- ///
- /// Fired when the menu property changes.
- ///
- [Parameter]
- [Category(CategoryTypes.Menu.PopupBehavior)]
- public EventCallback OpenChanged { get; set; }
-
- [Parameter]
- public int AdjustmentX { get; set; }
-
- [Parameter]
- public int AdjustmentY { get; set; }
-
- protected MudMenu? FakeMenu { get; set; }
-
- protected void FakeOpenChanged(bool value)
- {
- if (!value)
- {
- _open = false;
- }
-
- StateHasChanged();
- }
-
- ///
- /// Opens the menu.
- ///
- ///
- /// The arguments of the calling mouse/pointer event.
- ///
- public async Task OpenMenuAsync(EventArgs args)
- {
- if (Disabled)
- {
- return;
- }
-
- // long press on iOS triggers selection, so clear it
- await JSRuntime.ClearSelection();
-
- if (args is not LongPressEventArgs)
- {
- _showChildren = true;
- }
-
- _open = true;
- _isResized = false;
- StateHasChanged();
-
- var (x, y) = GetPositionFromArgs(args);
- _x = x;
- _y = y;
-
- SetPopoverStyle(x, y);
-
- StateHasChanged();
-
- await OpenChanged.InvokeAsync(_open);
-
- // long press on iOS triggers selection, so clear it
- await JSRuntime.ClearSelection();
-
- if (args is LongPressEventArgs)
- {
- await Task.Delay(1000);
- _showChildren = true;
- }
- }
-
- ///
- /// Closes the menu.
- ///
- public Task CloseMenuAsync()
- {
- _open = false;
- _popoverStyle = null;
- StateHasChanged();
-
- return OpenChanged.InvokeAsync(_open);
- }
-
- private void SetPopoverStyle(double x, double y)
- {
- _popoverStyle = $"margin-top: {y.ToPx()}; margin-left: {x.ToPx()};";
- }
-
- ///
- /// Toggle the visibility of the menu.
- ///
- public async Task ToggleMenuAsync(EventArgs args)
- {
- if (Disabled)
- {
- return;
- }
-
- if (_open)
- {
- await CloseMenuAsync();
- }
- else
- {
- await OpenMenuAsync(args);
- }
- }
-
- protected override Task OnAfterRenderAsync(bool firstRender)
- {
- if (!_isResized)
- {
- //await DeterminePosition();
- }
-
- return Task.CompletedTask;
- }
-
- //private async Task DeterminePosition()
- //{
- // var mainContentSize = await JSRuntime.GetInnerDimensions(".mud-main-content");
- // double? contextMenuHeight = null;
- // double? contextMenuWidth = null;
-
- // var popoverHolder = PopoverService.ActivePopovers.FirstOrDefault(p => p.UserAttributes.ContainsKey("tracker") && (string?)p.UserAttributes["tracker"] == Id);
-
- // var popoverSize = await JSRuntime.GetBoundingClientRect($"#popovercontent-{popoverHolder?.Id}");
- // if (popoverSize.Height > 0)
- // {
- // contextMenuHeight = popoverSize.Height;
- // contextMenuWidth = popoverSize.Width;
- // }
- // else
- // {
- // return;
- // }
-
- // // the bottom position of the popover will be rendered off screen
- // if (_y - _diff + contextMenuHeight.Value >= mainContentSize.Height)
- // {
- // // adjust the top of the context menu
- // var overshoot = Math.Abs(mainContentSize.Height - (_y - _diff + contextMenuHeight.Value));
- // _y -= overshoot;
-
- // if (_y - _diff + contextMenuHeight >= mainContentSize.Height)
- // {
- // MaxHeight = (int)(mainContentSize.Height - _y + _diff);
- // }
- // }
-
- // if (_x + contextMenuWidth.Value > mainContentSize.Width)
- // {
- // var overshoot = Math.Abs(mainContentSize.Width - (_x + contextMenuWidth.Value));
- // _x -= overshoot;
- // }
-
- // SetPopoverStyle(_x, _y);
- // _isResized = true;
- // await InvokeAsync(StateHasChanged);
- //}
-
- private (double x, double y) GetPositionFromArgs(EventArgs eventArgs)
- {
- double x, y;
- if (eventArgs is MouseEventArgs mouseEventArgs)
- {
- x = mouseEventArgs.ClientX;
- y = mouseEventArgs.ClientY;
- }
- else if (eventArgs is LongPressEventArgs longPressEventArgs)
- {
- x = longPressEventArgs.ClientX;
- y = longPressEventArgs.ClientY;
- }
- else
- {
- throw new NotSupportedException("Invalid eventArgs type.");
- }
-
- return (x + AdjustmentX, y + AdjustmentY);
- }
- }
-}
\ No newline at end of file
diff --git a/Lantean.QBTMud/Lantean.QBTMud.csproj b/Lantean.QBTMud/Lantean.QBTMud.csproj
index 4ea246c..070108c 100644
--- a/Lantean.QBTMud/Lantean.QBTMud.csproj
+++ b/Lantean.QBTMud/Lantean.QBTMud.csproj
@@ -12,10 +12,10 @@
-
-
-
-
+
+
+
+
diff --git a/Lantean.QBTMud/Pages/TorrentList.razor b/Lantean.QBTMud/Pages/TorrentList.razor
index 5913f47..47a2f43 100644
--- a/Lantean.QBTMud/Pages/TorrentList.razor
+++ b/Lantean.QBTMud/Pages/TorrentList.razor
@@ -1,11 +1,11 @@
@page "/"
@layout ListLayout
-
+
View torrent details
-
+
diff --git a/Lantean.QBTMud/Pages/TorrentList.razor.cs b/Lantean.QBTMud/Pages/TorrentList.razor.cs
index 56b998c..5496fe9 100644
--- a/Lantean.QBTMud/Pages/TorrentList.razor.cs
+++ b/Lantean.QBTMud/Pages/TorrentList.razor.cs
@@ -68,7 +68,7 @@ namespace Lantean.QBTMud.Pages
protected Torrent? ContextMenuItem { get; set; }
- protected ContextMenu? ContextMenu { get; set; }
+ protected MudMenu? ContextMenu { get; set; }
private object? _lastRenderedTorrents;
private QBitTorrentClient.Models.Preferences? _lastPreferences;
@@ -272,7 +272,7 @@ namespace Lantean.QBTMud.Pages
return;
}
- await ContextMenu.ToggleMenuAsync(eventArgs);
+ await ContextMenu.OpenMenuAsync(eventArgs);
}
protected IEnumerable> Columns => ColumnsDefinitions.Where(c => c.Id != "#" || Preferences?.QueueingEnabled == true);