add undecoded diff view, improve decoded view style
[?]
May 7, 2025, 7:50 AM
DCSUCH6RRRQU4TQYO3K3HRC7SXAIBYP5R3ZOWAWS2LOXWNHEJM6ACDependencies
- [2]
MJDGPSHGWIP contents diff - [3]
ZVI4AWERwoot contents_diff - [4]
QMAUTRB6refactor diff - [5]
NWJD6VM6mv libflowers libflorescence - [6]
WI2BVQ6Jrm client lib crate - [7]
VUIRSTKHfmt
Change contents
- replacement in crates/inflorescence/src/diff.rs at line 6
use iced::widget::{column, row, text};use iced::{Element, Font};use iced::widget::{column, container, row, text};use iced::{Background, Color, Element, Font, Length}; - replacement in crates/inflorescence/src/diff.rs at line 12
#[allow(dead_code)] // TODO rm once `view_decoded` is fully implemented// TODO: maybe use themeconst DELETED_BG_COLOR: Color = Color::from_rgba8(190, 37, 40, 0.15);const ADDED_BG_COLOR: Color = Color::from_rgba8(47, 148, 11, 0.15); - edit in crates/inflorescence/src/diff.rs at line 90
#[allow(dead_code)] // TODO rm once `view_undecodable` is implemented - edit in crates/inflorescence/src/diff.rs at line 119
#[allow(dead_code)] // TODO rm once `view_undecodable` is implemented - edit in crates/inflorescence/src/diff.rs at line 390
let DecodedFile {combined,diffs_without_contents,} = file;let line_num_digits = combined.max_line_num.to_string().len(); - replacement in crates/inflorescence/src/diff.rs at line 399
let line_num_digits = file.combined.max_line_num.to_string().len();let sections_view = file.combinedlet sections_view = combined - edit in crates/inflorescence/src/diff.rs at line 404
// TODO avoid collecting by placing these into `column` in here - replacement in crates/inflorescence/src/diff.rs at line 410
el(code(" ")),el(code(format!("{:width$} ",el(code_view(" ")),el(line_num_view( - replacement in crates/inflorescence/src/diff.rs at line 413
width = line_num_digits))),el(code(line.clone())),line_num_digits,)),el(code_view(line.clone()).width(Length::Fill)), - replacement in crates/inflorescence/src/diff.rs at line 428
el(row([el(code("- ")),el(code(format!("{:width$} ",el(container(row([el(code_view("- ")),el(line_num_view( - replacement in crates/inflorescence/src/diff.rs at line 432
width = line_num_digits))),el(code(line.clone())),line_num_digits,)),el(code_view(line.clone()).width(Length::Fill)), - edit in crates/inflorescence/src/diff.rs at line 436
.style(|_theme| {container::background(Background::from(DELETED_BG_COLOR,))})) - replacement in crates/inflorescence/src/diff.rs at line 443
el(row([el(code("+ ")),el(code(format!("{:width$} ",el(container(row([el(code_view("+ ")),el(line_num_view( - replacement in crates/inflorescence/src/diff.rs at line 447
width = line_num_digits))),el(code(line.clone())),line_num_digits,)),el(code_view(line.clone()).width(Length::Fill)), - edit in crates/inflorescence/src/diff.rs at line 451
.style(|_theme| {container::background(Background::from(ADDED_BG_COLOR,))})) - replacement in crates/inflorescence/src/diff.rs at line 464
el(column(sections_view))if diffs_without_contents.is_empty() {el(column(sections_view))} else {let diffs_without_contents_view = diffs_without_contents.iter().map(view_diff_without_contents);el(column([el(column(diffs_without_contents_view)),el(column(sections_view)),]).spacing(10))} - replacement in crates/inflorescence/src/diff.rs at line 484
// TODO implement proper viewel(code(format!("{file:#?}")))let UndecodableFile {diffs_with_contents,diffs_without_contents,} = file;let diffs = diffs_with_contents.iter().map(view_diff_with_contents).chain(diffs_without_contents.iter().map(view_diff_without_contents),);el(column(diffs))}/// View diffs without context (the file contents)fn view_diff_with_contents(diff: &DiffWithContents) -> Element<'_, Action> {match diff {DiffWithContents::Add => el(text("Added")),DiffWithContents::Edit {line,deleted,contents,} => {let line_num = *line;let lines = contents_to_lines(contents);let max_line_num = line_num + lines.len();let line_num_digits = max_line_num.to_string().len();let lines_view = lines.iter().enumerate().map(|(ix, line)| {el(row([el(code_view(if *deleted { "- " } else { "+ " })),el(line_num_view(line_num + ix, line_num_digits)),el(code_view(line.clone()).width(Length::Fill)),]))});el(column(lines_view))}DiffWithContents::Replacement {line,change_contents,replacement_contents,} => {let line_num = *line;let change_lines = contents_to_lines(change_contents);let replacement_lines = contents_to_lines(replacement_contents);let max_line_num = line_num+ cmp::max(change_lines.len(), replacement_lines.len());let line_num_digits = max_line_num.to_string().len();// TODO: re-use with `view_decoded`let lines_view = change_lines.iter().enumerate().map(|(ix, line)| {el(container(row([el(code_view("- ")),el(line_num_view(line_num + ix, line_num_digits)),el(code_view(line.clone()).width(Length::Fill)),])).style(|_theme| {container::background(Background::from(DELETED_BG_COLOR,))}))}).chain(replacement_lines.iter().enumerate().map(|(ix, line)| {el(container(row([el(code_view("+ ")),el(line_num_view(line_num + ix, line_num_digits)),el(code_view(line.clone()).width(Length::Fill)),])).style(|_theme| {container::background(Background::from(ADDED_BG_COLOR,))}))},));el(column(lines_view))}DiffWithContents::Del => el(text("Deleted")),DiffWithContents::Undel => el(text("Revived")),} - replacement in crates/inflorescence/src/diff.rs at line 573
fn code<'a>(txt: impl text::IntoFragment<'a>) -> iced::widget::Text<'a> {/// View diffs without context (the file contents)fn view_diff_without_contents(diff: &DiffWithoutContents,) -> Element<'_, Action> {match diff {DiffWithoutContents::Move => todo!(),DiffWithoutContents::SolveNameConflict => todo!(),DiffWithoutContents::UnsolveNameConflict => todo!(),DiffWithoutContents::SolveOrderConflict => todo!(),DiffWithoutContents::UnsolveOrderConflict => todo!(),DiffWithoutContents::ResurrectZombines => todo!(),DiffWithoutContents::AddRoot => todo!(),DiffWithoutContents::DelRoot => todo!(),DiffWithoutContents::Edit {line,deleted,contents,} => todo!(),DiffWithoutContents::Replacement {line,change_contents,replacement_contents,} => todo!(),}}fn code_view<'a>(txt: impl text::IntoFragment<'a>) -> iced::widget::Text<'a> { - edit in crates/inflorescence/src/diff.rs at line 602[2.13187]
fn line_num_view<'a>(num: usize, digits: usize) -> iced::widget::Text<'a> {// Fill the string to the number of digitslet txt = format!("{:width$} ", num, width = digits);code_view(txt).font(Font::MONOSPACE).style(move |theme| {let palette = theme.extended_palette();text::Style {color: Some(palette.background.base.text.scale_alpha(0.61)),}})}