Merge branch 'lh/layout' * lh/layout: Make repository search case insensitive Remove 'patch' link from tab, add to commit view Implement minimal freetext search in the repolist More layout fixes Minor fixup in tree-view css Reintroduce the branch switcher Add fixed link to index page from repo header Include diff in commit view Replace sidebar/logo
Lars Hjemli hjemli@gmail.com
Sun, 13 Apr 2008 12:48:44 +0200
7 files changed,
238 insertions(+),
180 deletions(-)
M
cgit.css
→
cgit.css
@@ -11,142 +11,141 @@ background: white;
padding: 4px; } +a { + color: blue; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + table { border-collapse: collapse; } -h2 { - font-size: 120%; - font-weight: bold; - margin-top: 0em; - margin-bottom: 0.25em; +table#header { + width: 100%; + margin-bottom: 1em; } -h3 { - margin-top: 0em; - font-size: 100%; - font-weight: normal; +table#header td.logo { + width: 96px; } -h4 { - margin-top: 1.5em; - margin-bottom: 0.1em; - font-size: 100%; - font-weight: bold; +table#header td.main { + font-size: 250%; + padding-left: 10px; } -a { - color: #600; - text-decoration: none; +table#header td.main a { + color: #000; } -a:hover { - background-color: #ddd; - text-decoration: none; +table#header td.form { + text-align: right; + vertical-align: bottom; + padding-right: 1em; + padding-bottom: 2px; } -table.list { - border: none; - border-collapse: collapse; +table#header td.form form, +table#header td.form input, +table#header td.form select { + font-size: 90%; } -table.list tr { - background: white; +table#header td.sub { + color: #777; + border-top: solid 1px #ccc; + padding-left: 10px; } -table.list tr:hover { - background: #f8f8f8; +table.tabs { + /* border-bottom: solid 2px #ccc; */ + border-collapse: collapse; + margin-top: 2em; + margin-bottom: 0px; + width: 100%; } -table.list tr.nohover:hover { - background: white; +table.tabs td { + padding: 0px 1em; + vertical-align: bottom; } -table.list th { - font-weight: bold; - border-bottom: solid 1px #777; - padding: 0.1em 0.5em 0.1em 0.5em; - vertical-align: baseline; +table.tabs td a { + padding: 2px 0.75em; + color: #777; + font-size: 110%; } -table.list td { - border: none; - padding: 0.1em 0.5em 0.1em 0.5em; +table.tabs td a.active { + color: #000; + background-color: #ccc; } -img { - border: none; +table.tabs td.form { + text-align: right; } -table#layout { - border-collapse: collapse; - border: none; - margin: 0px; +table.tabs td.form form { + padding-bottom: 2px; + font-size: 90%; } -td#sidebar { - vertical-align: top; - width: 162px; - padding: 0px 0px 0px 0px; - margin: 0px; +table.tabs td.form input, +table.tabs td.form select { + font-size: 90%; } -td#sidebar table { - border-collapse: separate; - border-spacing: 0px; +div.content { margin: 0px; - padding: 0px; - background-color: #ccc; + padding: 2em; + border-top: solid 3px #ccc; + border-bottom: solid 3px #ccc; } -td#sidebar table.sidebar td.sidebar { - padding: 4px; - border-top: solid 1px #eee; - border-left: solid 1px #eee; - border-right: solid 1px #aaa; - border-bottom: solid 1px #aaa; + +table.list { + width: 100%; + border: none; + border-collapse: collapse; } -div#logo { - margin: 0px; - padding: 4px 0px 4px 0px; - text-align: center; - background-color: #ccc; - border-top: solid 1px #eee; - border-left: solid 1px #eee; - border-right: solid 1px #aaa; - border-bottom: solid 1px #aaa; +table.list tr { + background: white; } -td#sidebar h1 { - font-size: 10pt; - font-weight: bold; - margin: 8px 0px 0px 0px; +table.list tr:hover { + background: #eee; } -td#sidebar h1.first { - margin-top: 0px; +table.list tr.nohover:hover { + background: white; } -td#sidebar a.menu { - display: block; - background-color: #ccc; - padding: 0.1em 0.5em; - text-decoration: none; +table.list th { + font-weight: bold; + /* color: #888; + border-top: dashed 1px #888; + border-bottom: dashed 1px #888; + */ + padding: 0.1em 0.5em 0.05em 0.5em; + vertical-align: baseline; } -td#sidebar a.menu:hover { - background-color: #bbb; - text-decoration: none; +table.list td { + border: none; + padding: 0.1em 0.5em 0.1em 0.5em; } -td#sidebar select { - width: 100%; - margin: 2px 0px 0px 0px; +table.list td a { + color: black; } -td#sidebar form { - text-align: right; +img { + border: none; } input#switch-btn {@@ -201,14 +200,13 @@ }
td.ls-size { text-align: right; -} - -td.ls-size { font-family: monospace; + width: 10em; } td.ls-mode { font-family: monospace; + width: 10em; } table.blob {@@ -357,7 +355,7 @@
table.diff td div.head { font-weight: bold; margin-top: 1em; - background-color: #eee; + color: black; } table.diff td div.hunk {@@ -392,17 +390,17 @@ }
a.button { font-size: 80%; - color: #aaa; + color: #33c; +/* background-color: #eee; border: solid 1px #aaa; - padding: 0em 0.5em; margin: 0.1em 0.25em; +*/ + padding: 0em 0.5em; } a.button:hover { - text-decoration: none; - color: #333; - background-color: #ccc; + text-decoration: underline; } a.primary {
M
cgit.h
→
cgit.h
@@ -221,4 +221,11 @@ extern const char *cgit_repobasename(const char *reponame);
extern int cgit_parse_snapshots_mask(const char *str); +/* libgit.a either links against or compiles its own implementation of + * strcasestr(), and we'd like to reuse it. Simply re-declaring it + * seems to do the trick. + */ +extern char *strcasestr(const char *haystack, const char *needle); + + #endif /* CGIT_H */
M
ui-commit.c
→
ui-commit.c
@@ -9,6 +9,7 @@
#include "cgit.h" #include "html.h" #include "ui-shared.h" +#include "ui-diff.h" static int files, slots; static int total_adds, total_rems, max_changes;@@ -174,6 +175,12 @@ html_txt(info->committer_email);
html("</td><td class='right'>"); cgit_print_date(info->committer_date, FMT_LONGDATE); html("</td></tr>\n"); + html("<tr><th>commit</th><td colspan='2' class='sha1'>"); + tmp = sha1_to_hex(commit->object.sha1); + cgit_commit_link(tmp, NULL, NULL, ctx.qry.head, tmp); + html(" ("); + cgit_patch_link("patch", NULL, NULL, NULL, tmp); + html(")</td></tr>\n"); html("<tr><th>tree</th><td colspan='2' class='sha1'>"); tmp = xstrdup(hex); cgit_tree_link(sha1_to_hex(commit->tree->object.sha1), NULL, NULL,@@ -218,10 +225,11 @@ for(i = 0; i<files; i++)
print_fileinfo(&items[i]); html("</table>"); html("<div class='diffstat-summary'>"); - htmlf("%d files changed, %d insertions, %d deletions (", + htmlf("%d files changed, %d insertions, %d deletions", files, total_adds, total_rems); - cgit_diff_link("show diff", NULL, NULL, ctx.qry.head, hex, - NULL, NULL); + cgit_print_diff(ctx.qry.sha1, + sha1_to_hex(commit->parents->item->object.sha1), + NULL); html(")</div>"); } cgit_free_commitinfo(info);
M
ui-repolist.c
→
ui-repolist.c
@@ -44,20 +44,23 @@ return;
cgit_print_age(s.st_mtime, -1, NULL); } -void cgit_print_repolist() +int is_match(struct cgit_repo *repo) { - int i, columns = 4; - char *last_group = NULL; - - if (ctx.cfg.enable_index_links) - columns++; - - ctx.page.title = ctx.cfg.root_title; - cgit_print_http_headers(&ctx); - cgit_print_docstart(&ctx); - cgit_print_pageheader(&ctx); + if (!ctx.qry.search) + return 1; + if (repo->url && strcasestr(repo->url, ctx.qry.search)) + return 1; + if (repo->name && strcasestr(repo->name, ctx.qry.search)) + return 1; + if (repo->desc && strcasestr(repo->desc, ctx.qry.search)) + return 1; + if (repo->owner && strcasestr(repo->owner, ctx.qry.search)) + return 1; + return 0; +} - html("<table summary='repository list' class='list nowrap'>"); +void print_header(int columns) +{ if (ctx.cfg.index_header) { htmlf("<tr class='nohover'><td colspan='%d' class='include-block'>", columns);@@ -70,11 +73,31 @@ "<th class='left'>Description</th>"
"<th class='left'>Owner</th>" "<th class='left'>Idle</th>"); if (ctx.cfg.enable_index_links) - html("<th>Links</th>"); + html("<th class='left'>Links</th>"); html("</tr>\n"); +} +void cgit_print_repolist() +{ + int i, columns = 4, hits = 0, header = 0; + char *last_group = NULL; + + if (ctx.cfg.enable_index_links) + columns++; + + ctx.page.title = ctx.cfg.root_title; + cgit_print_http_headers(&ctx); + cgit_print_docstart(&ctx); + cgit_print_pageheader(&ctx); + + html("<table summary='repository list' class='list nowrap'>"); for (i=0; i<cgit_repolist.count; i++) { ctx.repo = &cgit_repolist.repos[i]; + if (!is_match(ctx.repo)) + continue; + if (!header++) + print_header(columns); + hits++; if ((last_group == NULL && ctx.repo->group != NULL) || (last_group != NULL && ctx.repo->group == NULL) || (last_group != NULL && ctx.repo->group != NULL &&@@ -110,5 +133,7 @@ }
html("</tr>\n"); } html("</table>"); + if (!hits) + cgit_print_error("No repositories found"); cgit_print_docend(); }