NoteMAUI/NoteContent/NoteDetailPage.xaml.cs

135 lines
4.2 KiB
C#

using Markdig.Syntax.Inlines;
using Markdig;
using System.Text.RegularExpressions;
using Markdig.Renderers.Html;
using Markdig.Syntax;
using System.Collections.ObjectModel;
using NotesDataAnalyst.NoteContent;
namespace NotesDataAnalyst;
public partial class NoteDetailPage : ContentPage
{
private readonly Note _note;
public NoteDetailPage(Note note)
{
InitializeComponent();
_note = note;
// Óñòàíàâëèâàåì äàííûå çàìåòêè â ýëåìåíòû óïðàâëåíèÿ
titleLabel.Text = _note.Title;
//textLabel.Text = _note.Text;
BindingContext = _note;
if (!string.IsNullOrEmpty(_note.Image))
{
imageView.Source = _note.Image;
imageView.IsVisible = true;
}
ApplyThemeToHtml(); // Ïðèìåíÿåì òåìó ê HTML-êîíòåíòó WebView
}
/// //////////////////////////////////// Ðàáîòàåì ñ òåìîé Webwiev
private void ApplyThemeToHtml()
{
bool isDarkTheme = Application.Current.RequestedTheme == AppTheme.Dark;
string backgroundColor = isDarkTheme ? "#212121" : "#FFFFFF";
string textColor = isDarkTheme ? "#FFFFFF" : "#000000";
// Ôîðìèðóåì HTML-êîíòåíò ñ CSS-ñòèëÿìè
string htmlContent = $@"
<html>
<head>
<style>
body {{
background-color: {backgroundColor};
color: {textColor};
font-family: Arial, sans-serif;
margin: 0;
padding: 10px;
}}
</style>
</head>
<body>
{_note.FormattedText}
</body>
</html>";
contentWebView.Source = new HtmlWebViewSource { Html = htmlContent };
}
protected override void OnAppearing()
{
base.OnAppearing();
Application.Current.RequestedThemeChanged += OnRequestedThemeChanged;
}
protected override void OnDisappearing()
{
base.OnDisappearing();
Application.Current.RequestedThemeChanged -= OnRequestedThemeChanged;
}
private void OnRequestedThemeChanged(object sender, AppThemeChangedEventArgs e)
{
ApplyThemeToHtml(); // Ïåðåçàãðóæàåì HTML ñ íîâîé òåìîé
}
/// //////////////////////////////////////////////////////////
// Îáðàáîò÷èê íàâèãàöèè WebView äëÿ ïåðåõâàòà ññûëîê
private async void OnWebViewNavigating(object sender, WebNavigatingEventArgs e)
{
if (e.Url.StartsWith("note:"))
{
e.Cancel = true; // Îòìåíÿåì ïåðåõîä
// Èçâëåêàåì Id çàìåòêè èç ññûëêè
string noteId = e.Url.Replace("note:", "");
await NoteLinkManager.NavigateToNoteByIdAsync(noteId, Navigation);
}
}
// Îáðàáîò÷èê êíîïêè "Ðåäàêòèðîâàòü"
private async void OnEditButtonClicked(object sender, EventArgs e)
{
// Âìåñòî ïåðåäà÷è _note.FilePath ïåðåäàåì ñàì îáúåêò _note
await Navigation.PushAsync(new EditorPage(_note));
}
// Îáðàáîò÷èê êíîïêè "Óäàëèòü"
private async void OnDeleteButtonClicked(object sender, EventArgs e)
{
bool confirm = await DisplayAlert("Ïîäòâåðæäåíèå", "Âû óâåðåíû, ÷òî õîòèòå óäàëèòü ýòó çàìåòêó?", "Óäàëèòü", "Îòìåíà");
if (confirm)
{
// Óäàëÿåì ôàéë çàìåòêè
// if (File.Exists(_note.FilePath))
// { //Óäàëåíèå èç ÁÄ ïîêà íå ðàáîòàåò
// await Task.Run (() => App.DbContext.DeleteNote(_note));
// File.Delete(_note.FilePath);
// Óäàëÿåì çàìåòêó èç áàçû äàííûõ
App.Database.DeleteNote(_note);
await DisplayAlert("Îïîâåùåíèå", "Ôàéë óäàëåí", "Ok");
// Îòïðàâëÿåì ñîîáùåíèå äëÿ îáíîâëåíèÿ ñïèñêà çàìåòîê
MessagingCenter.Send(this, "NoteDeleted", _note);
// Âîçâðàùàåìñÿ íà ãëàâíóþ ñòðàíèöó è îáíîâëÿåì ñïèñîê
await Navigation.PushAsync(new MainPage());
// }
// else { await DisplayAlert("Îøèáêà", "Çàïèñü íå ìîæåò áûòü óäàëåíà, òàê êàê ôàéë íå íàéäåí", "Ok"); }
}
}
}