diff --git a/CHANGELOG.md b/CHANGELOG.md index bb078c37c..68f0bc6b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,16 +20,6 @@ * L'administration est maintenant restreinte aux emails configurés dans les paramétres applicatifs de Yavsc.Org (`appsettings-org.json`) -### Fixed - -* [PostIt] Correction du rendu des images incorporées dans les billets : - le résolveur fournit désormais un flux mémoire repositionnable, à son - début, pour éviter l'échec du décodage des images issues d'un flux HTTP. -* [PostIt] Suppression des erreurs de binding au démarrage du lecteur - lorsqu'aucun billet n'est sélectionné ; la commande des liens est - raccordée lors du changement de contexte. Les échecs HTTP des images - sont désormais journalisés avec leur URL dans la catégorie `BlogImages`. - ## [1.0.8-rc25] - unstable ### Added diff --git a/contrib/blog-edit.png b/contrib/blog-edit.png new file mode 100644 index 000000000..4175f5153 Binary files /dev/null and b/contrib/blog-edit.png differ diff --git a/contrib/blog-view.png b/contrib/blog-view.png new file mode 100644 index 000000000..04625dbc9 Binary files /dev/null and b/contrib/blog-view.png differ diff --git a/src/PostIt/PostIt.Desktop/PostIt.Desktop.csproj b/src/PostIt/PostIt.Desktop/PostIt.Desktop.csproj index 46df5025f..1d429de95 100644 --- a/src/PostIt/PostIt.Desktop/PostIt.Desktop.csproj +++ b/src/PostIt/PostIt.Desktop/PostIt.Desktop.csproj @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/src/PostIt/PostIt.Tests/BlogReaderTests.cs b/src/PostIt/PostIt.Tests/BlogReaderTests.cs index d80557895..b56e88ccf 100644 --- a/src/PostIt/PostIt.Tests/BlogReaderTests.cs +++ b/src/PostIt/PostIt.Tests/BlogReaderTests.cs @@ -130,7 +130,8 @@ public class BlogReaderTests var page = new BlogsPage(); var reader = page.FindControl("ArticleReader")!; var engine = Assert.IsAssignableFrom(reader.Engine); - Assert.Null(engine.HyperlinkCommand); + Assert.NotNull(engine.HyperlinkCommand); + Assert.False(engine.HyperlinkCommand.CanExecute("https://example.test/")); page.DataContext = vm; var nav = new NavigationPage(); await nav.PushAsync(page); @@ -152,7 +153,8 @@ public class BlogReaderTests Dispatcher.UIThread.RunJobs(); Assert.Empty(vm.ReaderTitle); Assert.Null(vm.ReaderDateModified); - Assert.Null(engine.HyperlinkCommand); + Assert.NotNull(engine.HyperlinkCommand); + Assert.False(engine.HyperlinkCommand.CanExecute("https://example.test/")); Assert.DoesNotContain(sink.Entries, entry => entry.Area == LogArea.Binding); } finally diff --git a/src/PostIt/PostIt/Views/Blogs/BlogsPage.axaml.cs b/src/PostIt/PostIt/Views/Blogs/BlogsPage.axaml.cs index aebaa35f7..fec5da5bf 100644 --- a/src/PostIt/PostIt/Views/Blogs/BlogsPage.axaml.cs +++ b/src/PostIt/PostIt/Views/Blogs/BlogsPage.axaml.cs @@ -4,20 +4,32 @@ using Avalonia.Controls; using Avalonia.Platform.Storage; using Avalonia.Controls.Primitives; using Avalonia.Interactivity; +using CommunityToolkit.Mvvm.Input; using Markdown.Avalonia; namespace PostIt.Views.Blogs; public partial class BlogsPage : ContentPage { + private static readonly RelayCommand DisabledLinkCommand = + new(static _ => { }, static _ => false); + public BlogsPage() { InitializeComponent(); - DataContextChanged += (_, _) => + DataContextChanged += (_, _) => UpdateHyperlinkCommand(); + UpdateHyperlinkCommand(); + } + + private void UpdateHyperlinkCommand() + { + if (ArticleReader.Engine is IMarkdownEngine2 engine) { - if (ArticleReader.Engine is IMarkdownEngine2 engine) - engine.HyperlinkCommand = (DataContext as ViewModels.BlogsViewModel)?.OpenResourceCommand; - }; + if (DataContext is ViewModels.BlogsViewModel vm) + engine.HyperlinkCommand = vm.OpenResourceCommand; + else + engine.HyperlinkCommand = DisabledLinkCommand; + } } protected override async void OnApplyTemplate(TemplateAppliedEventArgs e)