| -rw-r--r-- | cgit.css | 13 | ||||
| -rwxr-xr-x | tests/t0106-diff.sh | 26 | ||||
| -rw-r--r-- | ui-diff.c | 26 |
3 files changed, 60 insertions, 5 deletions
@@ -478,6 +478,14 @@ div#cgit div.cgit-panel { margin-top: 1.5em; } +div#cgit form.diff-ctrls div.cgit-panel { + float: none; +} + +div#cgit form.diff-ctrls { + float: right; +} + div#cgit div.cgit-panel table { border-collapse: collapse; border: solid 1px var(--border-mid); @@ -666,6 +674,11 @@ div#cgit a.button { padding: 0em 0.5em; } +div#cgit form.diff-ctrls div.cgit-panel a.button { + border: solid 1px var(--border-mid); + background-color: var(--bg-hl); +} + div#cgit a.primary { font-size: 100%; } diff --git a/tests/t0106-diff.sh b/tests/t0106-diff.sh index 0c167d4..1100596 100755 --- a/tests/t0106-diff.sh +++ b/tests/t0106-diff.sh @@ -32,6 +32,11 @@ test_expect_success 'ref picker: to: label present' ' grep "to:" tmp ' +test_expect_success 'ref pickers live in a separate refs panel' ' + grep "<b>diff refs</b>" tmp && + grep "<b>diff options</b>" tmp +' + test_expect_success 'ref picker: master branch listed' ' grep "master" tmp ' @@ -40,6 +45,15 @@ test_expect_success 'ref picker: auto-submit on change' ' grep "onchange=.this.form.submit()." tmp ' +test_expect_success 'flip link present' ' + grep "<a title=.swap from and to. class=.button. href=./foo/diff/?" tmp +' + +test_expect_success 'flip link swaps the default refs' ' + old=$(git --git-dir="$PWD/repos/foo/.git" rev-parse master~1) && + grep "/foo/diff/?id=$old&id2=master" tmp +' + test_expect_success 'compare two refs: foo/diff?id=master&id2=HEAD' ' cgit_query "url=foo/diff&id=master&id2=HEAD" >tmp ' @@ -72,4 +86,16 @@ test_expect_success 'diff with HEAD and root shows content' ' grep "diffstat" tmp ' +test_expect_success 'flip link swaps explicit refs' ' + cgit_query "url=foo/diff&id=master&id2=HEAD" >tmp && + new=$(git --git-dir="$PWD/repos/foo/.git" rev-parse HEAD) && + grep "/foo/diff/?id=$new&id2=master" tmp +' + +test_expect_success 'flip link omits id for a diff against a root commit' ' + root=$(git --git-dir="$PWD/repos/foo/.git" rev-list --max-parents=0 HEAD) && + cgit_query "url=foo/diff&id=$root" >tmp && + grep "href=./foo/diff/?id2=$root." tmp +' + test_done @@ -370,12 +370,11 @@ void cgit_print_diff_ctrls(void) { int i, curr; - html("<div class='cgit-panel'>"); - html("<b>diff options</b>"); - html("<form method='get'>"); + html("<form class='diff-ctrls' method='get'>"); /* * Emit the same hidden fields as cgit_add_hidden_formfields(), except - * id/id2, which are carried by the ref-picker selects below. + * id/id2, which are carried by the ref-picker selects below. One + * form wraps both panels so any submission carries all controls. */ if (!ctx.cfg.virtual_root) { struct strbuf url = STRBUF_INIT; @@ -391,6 +390,8 @@ void cgit_print_diff_ctrls(void) if (ctx.qry.showmsg) html_hidden("showmsg", "1"); + html("<div class='cgit-panel'>"); + html("<b>diff refs</b>"); html("<table>"); html("<tr><td colspan='2'/></tr>"); @@ -408,7 +409,22 @@ void cgit_print_diff_ctrls(void) html("<td class='ctrl'>"); cgit_print_ref_select("id", new_ref); html("</td></tr>"); + + html("<tr><td/><td class='ctrl'>"); + cgit_diff_link("flip", "swap from and to", "button", + ctx.qry.head, + is_null_oid(old_rev_oid) ? NULL : + oid_to_hex(old_rev_oid), + new_ref, ctx.qry.path); + html("</td></tr>"); } + html("</table>"); + html("</div>"); + + html("<div class='cgit-panel'>"); + html("<b>diff options</b>"); + html("<table>"); + html("<tr><td colspan='2'/></tr>"); html("<tr>"); html("<td class='label'>context:</td>"); @@ -443,8 +459,8 @@ void cgit_print_diff_ctrls(void) html("<tr><td/><td class='ctrl'>"); html("<noscript><input type='submit' value='reload'/></noscript>"); html("</td></tr></table>"); - html("</form>"); html("</div>"); + html("</form>"); } void cgit_print_diff(const char *new_rev, const char *old_rev, |