135 lines
4.2 KiB
C#
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"); }
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
}
|