| -rw-r--r-- | cgit.css | 27 | ||||
| -rw-r--r-- | cmd.c | 2 | ||||
| -rw-r--r-- | ui-commit.c | 10 | ||||
| -rw-r--r-- | ui-diff.c | 83 | ||||
| -rw-r--r-- | ui-diff.h | 4 |
5 files changed, 38 insertions, 88 deletions
@@ -331,33 +331,6 @@ table.commit-info { margin-top: 1.5em; } -div.cgit-panel { - float: right; - margin-top: 1.5em; -} - -div.cgit-panel table { - border-collapse: collapse; - border: solid 1px #aaa; - background-color: #eee; -} - -div.cgit-panel th { - text-align: center; -} - -div.cgit-panel td { - padding: 0.25em 0.5em; -} - -div.cgit-panel td.label { - padding-right: 0.5em; -} - -div.cgit-panel td.ctrl { - padding-left: 0.5em; -} - table.commit-info th { text-align: left; font-weight: normal; @@ -56,7 +56,7 @@ static void commit_fn(struct cgit_context *ctx) static void diff_fn(struct cgit_context *ctx) { - cgit_print_diff(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path, 1); + cgit_print_diff(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path); } static void info_fn(struct cgit_context *ctx) diff --git a/ui-commit.c b/ui-commit.c index 536a8e8..2b4f677 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -39,8 +39,7 @@ void cgit_print_commit(char *hex, const char *prefix) format_note(NULL, sha1, ¬es, PAGE_ENCODING, 0); load_ref_decorations(DECORATE_FULL_REFS); - - cgit_print_diff_ctrls(); + html("<table summary='commit info' class='commit-info'>\n"); html("<tr><th>author</th><td>"); html_txt(info->author); @@ -65,6 +64,11 @@ void cgit_print_commit(char *hex, const char *prefix) cgit_commit_link(tmp, NULL, NULL, ctx.qry.head, tmp, prefix, 0); html(" ("); cgit_patch_link("patch", NULL, NULL, NULL, tmp, prefix); + html(") ("); + if ((ctx.qry.ssdiff && !ctx.cfg.ssdiff) || (!ctx.qry.ssdiff && ctx.cfg.ssdiff)) + cgit_commit_link("unidiff", NULL, NULL, ctx.qry.head, tmp, prefix, 1); + else + cgit_commit_link("side-by-side diff", NULL, NULL, ctx.qry.head, tmp, prefix, 1); html(")</td></tr>\n"); html("<tr><th>tree</th><td colspan='2' class='sha1'>"); tmp = xstrdup(hex); @@ -135,7 +139,7 @@ void cgit_print_commit(char *hex, const char *prefix) tmp = sha1_to_hex(commit->parents->item->object.sha1); else tmp = NULL; - cgit_print_diff(ctx.qry.sha1, tmp, prefix, 0); + cgit_print_diff(ctx.qry.sha1, tmp, prefix); } strbuf_release(¬es); cgit_free_commitinfo(info); @@ -167,7 +167,7 @@ static void inspect_filepair(struct diff_filepair *pair) void cgit_print_diffstat(const unsigned char *old_sha1, const unsigned char *new_sha1, const char *prefix) { - int i; + int i, save_context = ctx.qry.context; html("<div class='diffstat-header'>"); cgit_diff_link("Diffstat", NULL, NULL, ctx.qry.head, ctx.qry.sha1, @@ -177,6 +177,19 @@ void cgit_print_diffstat(const unsigned char *old_sha1, html_txt(prefix); html("')"); } + html(" ("); + ctx.qry.context = (save_context > 0 ? save_context : 3) << 1; + cgit_self_link("more", NULL, NULL, &ctx); + html("/"); + ctx.qry.context = (save_context > 3 ? save_context : 3) >> 1; + cgit_self_link("less", NULL, NULL, &ctx); + ctx.qry.context = save_context; + html(" context)"); + html(" ("); + ctx.qry.ignorews = (ctx.qry.ignorews + 1) % 2; + cgit_self_link(ctx.qry.ignorews ? "ignore" : "show", NULL, NULL, &ctx); + ctx.qry.ignorews = (ctx.qry.ignorews + 1) % 2; + html(" whitespace changes)"); html("</div>"); html("<table summary='diffstat' class='diffstat'>"); max_changes = 0; @@ -265,6 +278,19 @@ static void header(unsigned char *sha1, char *path1, int mode1, html("</div>"); } +static void print_ssdiff_link() +{ + if (!strcmp(ctx.qry.page, "diff")) { + if (use_ssdiff) + cgit_diff_link("Unidiff", NULL, NULL, ctx.qry.head, + ctx.qry.sha1, ctx.qry.sha2, ctx.qry.path, 1); + else + cgit_diff_link("Side-by-side diff", NULL, NULL, + ctx.qry.head, ctx.qry.sha1, + ctx.qry.sha2, ctx.qry.path, 1); + } +} + static void filepair_cb(struct diff_filepair *pair) { unsigned long old_size = 0; @@ -304,56 +330,7 @@ static void filepair_cb(struct diff_filepair *pair) cgit_ssdiff_footer(); } -void cgit_print_diff_ctrls() -{ - int i, curr; - - html("<div class='cgit-panel'>"); - html("<b>diff options</b>"); - html("<form method='get' action='.'>"); - cgit_add_hidden_formfields(1, 0, ctx.qry.page); - html("<table>"); - html("<tr><td colspan='2'/></tr>"); - html("<tr>"); - html("<td class='label'>context:</td>"); - html("<td class='ctrl'>"); - html("<select name='context' onchange='this.form.submit();'>"); - curr = ctx.qry.context; - if (!curr) - curr = 3; - for (i = 1; i <= 10; i++) - html_intoption(i, fmt("%d", i), curr); - for (i = 15; i <= 40; i += 5) - html_intoption(i, fmt("%d", i), curr); - html("</select>"); - html("</td>"); - html("</tr><tr>"); - html("<td class='label'>space:</td>"); - html("<td class='ctrl'>"); - html("<select name='ignorews' onchange='this.form.submit();'>"); - html_intoption(0, "include", ctx.qry.ignorews); - html_intoption(1, "ignore", ctx.qry.ignorews); - html("</select>"); - html("</td>"); - html("</tr><tr>"); - html("<td class='label'>mode:</td>"); - html("<td class='ctrl'>"); - html("<select name='ss' onchange='this.form.submit();'>"); - curr = ctx.qry.ssdiff; - if (!curr && ctx.cfg.ssdiff) - curr = 1; - html_intoption(0, "unified", curr); - html_intoption(1, "ssdiff", curr); - html("</select></td></tr>"); - html("<tr><td/><td class='ctrl'>"); - html("<noscript><input type='submit' value='reload'/></noscript>"); - html("</td></tr></table>"); - html("</form>"); - html("</div>"); -} - -void cgit_print_diff(const char *new_rev, const char *old_rev, - const char *prefix, int show_ctrls) +void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefix) { enum object_type type; unsigned long size; @@ -392,9 +369,7 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, if ((ctx.qry.ssdiff && !ctx.cfg.ssdiff) || (!ctx.qry.ssdiff && ctx.cfg.ssdiff)) use_ssdiff = 1; - if (show_ctrls) - cgit_print_diff_ctrls(); - + print_ssdiff_link(); cgit_print_diffstat(old_rev_sha1, new_rev_sha1, prefix); if (use_ssdiff) { @@ -1,13 +1,11 @@ #ifndef UI_DIFF_H #define UI_DIFF_H -extern void cgit_print_diff_ctrls(); - extern void cgit_print_diffstat(const unsigned char *old_sha1, const unsigned char *new_sha1); extern void cgit_print_diff(const char *new_hex, const char *old_hex, - const char *prefix, int show_ctrls); + const char *prefix); extern struct diff_filespec *cgit_get_current_old_file(void); extern struct diff_filespec *cgit_get_current_new_file(void); |