From 207cc34711039329b41345f716bf421a88a6fd0a Mon Sep 17 00:00:00 2001 From: Ragnar Ouchterlony Date: Tue, 15 Sep 2009 19:44:37 +0200 Subject: Polishing of how the side-by-side diff looks. Aligned all different files, so that all side-by-side tables look the same. Also made sure that the tables take up the whole browser width. Also various changes to the css to make things easier on the eye. Signed-off-by: Ragnar Ouchterlony Signed-off-by: Lars Hjemli --- cgit.css | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------ ui-diff.c | 27 ++++++++++++++----------- ui-ssdiff.c | 30 +++++++++++++++++----------- ui-ssdiff.h | 3 ++- 4 files changed, 96 insertions(+), 30 deletions(-) diff --git a/cgit.css b/cgit.css index bf58b8a..3f37165 100644 --- a/cgit.css +++ b/cgit.css @@ -602,37 +602,91 @@ table.hgraph div.bar { height: 1em; } +table.ssdiff { + width: 100%; +} + +table.ssdiff td { + font-size: 75%; + font-family: monospace; + white-space: pre; + padding: 1px 4px 1px 4px; + border-left: solid 1px #aaa; + border-right: solid 1px #aaa; +} + table.ssdiff td.add { color: black; - background: #afa; + background: #cfc; + min-width: 50%; } table.ssdiff td.add_dark { color: black; - background: #9c9; + background: #aca; + min-width: 50%; } table.ssdiff td.del { color: black; - background: #faa; + background: #fcc; + min-width: 50%; } table.ssdiff td.del_dark { color: black; - background: #c99; + background: #caa; + min-width: 50%; } table.ssdiff td.changed { color: black; - background: #ffa; + background: #ffc; + min-width: 50%; } table.ssdiff td.changed_dark { color: black; - background: #cc9; + background: #cca; + min-width: 50%; +} + +table.ssdiff td.lineno { + color: black; + background: #eee; + text-align: right; + width: 3em; + min-width: 3em; } table.ssdiff td.hunk { color: #black; background: #ccf; + border-top: solid 1px #aaa; + border-bottom: solid 1px #aaa; } + +table.ssdiff td.head { + border-top: solid 1px #aaa; + border-bottom: solid 1px #aaa; +} + +table.ssdiff td.head div.head { + font-weight: bold; + color: black; +} + +table.ssdiff td.foot { + border-top: solid 1px #aaa; + border-left: none; + border-right: none; + border-bottom: none; +} + +table.ssdiff td.space { + border: none; +} + +table.ssdiff td.space div { + min-height: 3em; +} \ No newline at end of file diff --git a/ui-diff.c b/ui-diff.c index 42e81ac..b21c2c1 100644 --- a/ui-diff.c +++ b/ui-diff.c @@ -246,8 +246,6 @@ static void header(unsigned char *sha1, char *path1, int mode1, html_txt(path2); } html(""); - if (use_ssdiff) - cgit_ssdiff_header(); } static void print_ssdiff_link() @@ -270,24 +268,26 @@ static void filepair_cb(struct diff_filepair *pair) int binary = 0; linediff_fn print_line_fn = print_line; - header(pair->one->sha1, pair->one->path, pair->one->mode, - pair->two->sha1, pair->two->path, pair->two->mode); if (use_ssdiff) { - cgit_ssdiff_header(); + cgit_ssdiff_header_begin(); print_line_fn = cgit_ssdiff_line_cb; } + header(pair->one->sha1, pair->one->path, pair->one->mode, + pair->two->sha1, pair->two->path, pair->two->mode); + if (use_ssdiff) + cgit_ssdiff_header_end(); if (S_ISGITLINK(pair->one->mode) || S_ISGITLINK(pair->two->mode)) { if (S_ISGITLINK(pair->one->mode)) - print_line(fmt("-Subproject %s", sha1_to_hex(pair->one->sha1)), 52); + print_line_fn(fmt("-Subproject %s", sha1_to_hex(pair->one->sha1)), 52); if (S_ISGITLINK(pair->two->mode)) - print_line(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52); + print_line_fn(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52); return; } if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size, &new_size, &binary, print_line_fn)) cgit_print_error("Error running diff"); if (binary) - html("Binary files differ"); + print_line_fn(" Binary files differ", 20); if (use_ssdiff) cgit_ssdiff_footer(); } @@ -334,9 +334,14 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefi print_ssdiff_link(); cgit_print_diffstat(old_rev_sha1, new_rev_sha1); - html(""); - html(""); if (old_line_no > 0) - htmlf(""); + html(""); if (new_line_no > 0) - htmlf(""); } diff --git a/ui-ssdiff.h b/ui-ssdiff.h index a0b1efe..64b4b12 100644 --- a/ui-ssdiff.h +++ b/ui-ssdiff.h @@ -5,7 +5,8 @@ extern void cgit_ssdiff_print_deferred_lines(); extern void cgit_ssdiff_line_cb(char *line, int len); -extern void cgit_ssdiff_header(); +extern void cgit_ssdiff_header_begin(); +extern void cgit_ssdiff_header_end(); extern void cgit_ssdiff_footer(); -- cgit
"); + if (use_ssdiff) { + html(""); + } else { + html("
"); + html(""); + if (!use_ssdiff) + html(""); html("
"); + } cgit_diff_tree(old_rev_sha1, new_rev_sha1, filepair_cb, prefix); - html("
"); } diff --git a/ui-ssdiff.c b/ui-ssdiff.c index 3591ab4..8215051 100644 --- a/ui-ssdiff.c +++ b/ui-ssdiff.c @@ -40,9 +40,9 @@ static char *replace_tabs(char *line) { char *prev_buf = line; char *cur_buf; - int linelen = strlen(line); + int linelen = strlen(line); int n_tabs = 0; - int i; + int i; char *result; char *spaces = " "; @@ -52,10 +52,10 @@ static char *replace_tabs(char *line) return result; } - for (i = 0; i < linelen; i++) + for (i = 0; i < linelen; i++) if (line[i] == '\t') n_tabs += 1; - result = xmalloc(linelen + n_tabs * 8 + 1); + result = xmalloc(linelen + n_tabs * 8 + 1); result[0] = '\0'; while (1) { @@ -106,10 +106,10 @@ static void print_ssdiff_line(char *class, int old_line_no, char *old_line, { html("
%d ", class, + htmlf("%d", old_line_no, class); else - htmlf(" ", class, class); + htmlf("", class); if (old_line) { old_line = replace_tabs(old_line + 1); @@ -117,13 +117,13 @@ static void print_ssdiff_line(char *class, int old_line_no, char *old_line, free(old_line); } - html(" %d ", class, + htmlf("%d", new_line_no, class); else - htmlf(" ", class, class); + htmlf("", class); if (new_line) { new_line = replace_tabs(new_line + 1); @@ -249,16 +249,22 @@ void cgit_ssdiff_line_cb(char *line, int len) line[len - 1] = c; } -void cgit_ssdiff_header() +void cgit_ssdiff_header_begin() { current_old_line = 0; current_new_line = 0; - html(""); + html(""); + html(""); } void cgit_ssdiff_footer() { if (deferred_old || deferred_new) cgit_ssdiff_print_deferred_lines(); - html("
"); +} + +void cgit_ssdiff_header_end() +{ + html("
"); + html("