2026-01-24 19:53:46 -06:00
|
|
|
use iced::{
|
2026-01-24 21:24:32 -06:00
|
|
|
Element, Length, Theme, highlighter,
|
|
|
|
|
widget::{container, markdown, row, text_editor},
|
2026-01-24 19:53:46 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
use crate::{constants, file::File, message::Message, state::Mode};
|
|
|
|
|
|
|
|
|
|
pub fn view<'a>(file: &'a File, mode: Mode, font_size: u32) -> Element<'a, Message> {
|
2026-01-24 21:24:32 -06:00
|
|
|
match mode {
|
|
|
|
|
Mode::Edit => {
|
|
|
|
|
let editor = text_editor(file.content())
|
|
|
|
|
.highlight(file.extension().unwrap_or("txt"), highlighter::Theme::Base16Ocean)
|
|
|
|
|
.size(font_size)
|
|
|
|
|
.height(Length::Fill)
|
|
|
|
|
.on_action(Message::Edit);
|
2026-01-24 19:53:46 -06:00
|
|
|
|
2026-01-24 21:24:32 -06:00
|
|
|
container(row![editor]).height(Length::Fill).into()
|
2026-01-24 19:53:46 -06:00
|
|
|
}
|
2026-01-24 21:24:32 -06:00
|
|
|
Mode::Preview => {
|
|
|
|
|
let mut style: markdown::Style = Theme::Dark.into();
|
|
|
|
|
style.font = constants::CUSTOM_FONT;
|
|
|
|
|
|
|
|
|
|
let settings = markdown::Settings::with_text_size(font_size, style);
|
|
|
|
|
|
|
|
|
|
let markdown_preview = markdown::view(file.markdown(), settings).map(Message::LinkClicked);
|
|
|
|
|
|
|
|
|
|
container(row![markdown_preview])
|
|
|
|
|
.height(Length::Fill)
|
|
|
|
|
.into()
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-01-24 19:53:46 -06:00
|
|
|
}
|