diff --git a/src/Artemis.UI/ArtemisLinkCommand.cs b/src/Artemis.UI/ArtemisLinkCommand.cs
new file mode 100644
index 000000000..40adcec5b
--- /dev/null
+++ b/src/Artemis.UI/ArtemisLinkCommand.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Windows.Input;
+using Artemis.Core;
+using Artemis.UI.Shared.Routing;
+
+namespace Artemis.UI;
+
+public class ArtemisLinkCommand: ICommand
+{
+ public static IRouter? Router;
+
+ ///
+ public bool CanExecute(object? parameter) => true;
+
+ ///
+ public void Execute(object? parameter)
+ {
+ if (parameter is not string url || !Uri.TryCreate(url, UriKind.Absolute, out Uri? uri))
+ return;
+
+ if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)
+ Utilities.OpenUrl(url);
+ else if (uri.Scheme == "artemis")
+ Router?.Navigate(uri.Host + uri.LocalPath);
+ }
+
+ ///
+ public event EventHandler? CanExecuteChanged;
+
+}
\ No newline at end of file
diff --git a/src/Artemis.UI/Controls/SplitMarkdownEditor.axaml b/src/Artemis.UI/Controls/SplitMarkdownEditor.axaml
index f99eba062..50f2d0dc2 100644
--- a/src/Artemis.UI/Controls/SplitMarkdownEditor.axaml
+++ b/src/Artemis.UI/Controls/SplitMarkdownEditor.axaml
@@ -5,8 +5,13 @@
xmlns:avaloniaEdit="https://github.com/avaloniaui/avaloniaedit"
xmlns:mdxaml="https://github.com/whistyun/Markdown.Avalonia.Tight"
xmlns:fa="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
+ xmlns:input="clr-namespace:System.Windows.Input;assembly=System.ObjectModel"
+ xmlns:ui="clr-namespace:Artemis.UI"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.Controls.SplitMarkdownEditor">
+
+
+
@@ -41,6 +46,9 @@
Markdown="{CompiledBinding Document.Text, Mode=OneWay, ElementName=DescriptionEditor}"
MarkdownStyleName="FluentAvalonia"
SaveScrollValueWhenContentUpdated="True">
+
+
+
diff --git a/src/Artemis.UI/Screens/Root/RootViewModel.cs b/src/Artemis.UI/Screens/Root/RootViewModel.cs
index f005ce788..df894ec9b 100644
--- a/src/Artemis.UI/Screens/Root/RootViewModel.cs
+++ b/src/Artemis.UI/Screens/Root/RootViewModel.cs
@@ -65,7 +65,7 @@ public class RootViewModel : RoutableHostScreen, IMainWindowProv
router.SetRoot(this);
mainWindowService.ConfigureMainWindowProvider(this);
-
+
OpenScreen = ReactiveCommand.Create(ExecuteOpenScreen);
OpenDebugger = ReactiveCommand.CreateFromTask(ExecuteOpenDebugger);
Exit = ReactiveCommand.CreateFromTask(ExecuteExit);
@@ -107,6 +107,9 @@ public class RootViewModel : RoutableHostScreen, IMainWindowProv
_windowService.ShowExceptionDialog("Fatal error occured during initialization", e);
}
});
+
+ // This isn't pretty, but it's the most straightforward way to make sure the ArtemisLinkCommand has access to the router
+ ArtemisLinkCommand.Router = router;
}
public SidebarViewModel SidebarViewModel { get; }
diff --git a/src/Artemis.UI/Screens/Settings/Updating/ReleaseDetailsView.axaml b/src/Artemis.UI/Screens/Settings/Updating/ReleaseDetailsView.axaml
index be8207516..a68c7502a 100644
--- a/src/Artemis.UI/Screens/Settings/Updating/ReleaseDetailsView.axaml
+++ b/src/Artemis.UI/Screens/Settings/Updating/ReleaseDetailsView.axaml
@@ -7,6 +7,7 @@
xmlns:converters="clr-namespace:Artemis.UI.Converters"
xmlns:avalonia="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
xmlns:mdxaml="https://github.com/whistyun/Markdown.Avalonia.Tight"
+ xmlns:ui="clr-namespace:Artemis.UI"
mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="1400"
x:Class="Artemis.UI.Screens.Settings.Updating.ReleaseDetailsView"
x:DataType="updating:ReleaseDetailsViewModel">
@@ -14,6 +15,7 @@
+