-rw-r--r-- | cgit.css | 66 | ||||
-rw-r--r-- | ui-diff.c | 21 | ||||
-rw-r--r-- | ui-ssdiff.c | 20 | ||||
-rw-r--r-- | ui-ssdiff.h | 3 |
4 files changed, 88 insertions, 22 deletions
@@ -599,40 +599,94 @@ table.hgraph td { table.hgraph div.bar { background-color: #eee; 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; } @@ -243,14 +243,12 @@ static void header(unsigned char *sha1, char *path1, int mode1, cgit_tree_link(path2, NULL, NULL, ctx.qry.head, sha1_to_hex(new_rev_sha1), path2); else html_txt(path2); } html("</div>"); - if (use_ssdiff) - cgit_ssdiff_header(); } static void print_ssdiff_link() { if (!strcmp(ctx.qry.page, "diff")) { if (use_ssdiff) @@ -267,30 +265,32 @@ static void filepair_cb(struct diff_filepair *pair) { unsigned long old_size = 0; unsigned long new_size = 0; 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(); } void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefix) { @@ -331,12 +331,17 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefi if ((ctx.qry.ssdiff && !ctx.cfg.ssdiff) || (!ctx.qry.ssdiff && ctx.cfg.ssdiff)) use_ssdiff = 1; print_ssdiff_link(); cgit_print_diffstat(old_rev_sha1, new_rev_sha1); + if (use_ssdiff) { + html("<table summary='ssdiff' class='ssdiff'>"); + } else { html("<table summary='diff' class='diff'>"); html("<tr><td>"); + } cgit_diff_tree(old_rev_sha1, new_rev_sha1, filepair_cb, prefix); + if (!use_ssdiff) html("</td></tr>"); html("</table>"); } diff --git a/ui-ssdiff.c b/ui-ssdiff.c index 3591ab4..8215051 100644 --- a/ui-ssdiff.c +++ b/ui-ssdiff.c @@ -103,30 +103,30 @@ static void deferred_new_add(char *line, int line_no) static void print_ssdiff_line(char *class, int old_line_no, char *old_line, int new_line_no, char *new_line) { html("<tr>"); if (old_line_no > 0) - htmlf("<td class='%s'>%d </td><td class='%s'>", class, + htmlf("<td class='lineno'>%d</td><td class='%s'>", old_line_no, class); else - htmlf("<td class='%s_dark'> </td><td class='%s_dark'>", class, class); + htmlf("<td class='lineno'></td><td class='%s_dark'>", class); if (old_line) { old_line = replace_tabs(old_line + 1); html_txt(old_line); free(old_line); } html(" </td>"); if (new_line_no > 0) - htmlf("<td class='%s'> %d </td><td class='%s'>", class, + htmlf("<td class='lineno'>%d</td><td class='%s'>", new_line_no, class); else - htmlf("<td class='%s_dark'> </td><td class='%s_dark'>", class, class); + htmlf("<td class='lineno'></td><td class='%s_dark'>", class); if (new_line) { new_line = replace_tabs(new_line + 1); html_txt(new_line); free(new_line); } @@ -246,19 +246,25 @@ void cgit_ssdiff_line_cb(char *line, int len) html_txt(line); html("</td></tr>"); } line[len - 1] = c; } -void cgit_ssdiff_header() +void cgit_ssdiff_header_begin() { current_old_line = 0; current_new_line = 0; - html("<table class='ssdiff'>"); + html("<tr><td class='space' colspan='4'><div></div></td></tr>"); + html("<tr><td class='head' colspan='4'>"); +} + +void cgit_ssdiff_header_end() +{ + html("</td><tr>"); } void cgit_ssdiff_footer() { if (deferred_old || deferred_new) cgit_ssdiff_print_deferred_lines(); - html("</table>"); + html("<tr><td class='foot' colspan='4'></td></tr>"); } diff --git a/ui-ssdiff.h b/ui-ssdiff.h index a0b1efe..64b4b12 100644 --- a/ui-ssdiff.h +++ b/ui-ssdiff.h @@ -2,11 +2,12 @@ #define UI_SSDIFF_H 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(); #endif /* UI_SSDIFF_H */ |