-rw-r--r-- | cgit.c | 13 | ||||
-rw-r--r-- | cgit.css | 98 | ||||
-rw-r--r-- | ui-diff.c | 1 | ||||
-rw-r--r-- | ui-log.c | 1 | ||||
-rw-r--r-- | ui-repolist.c | 1 | ||||
-rw-r--r-- | ui-shared.c | 37 | ||||
-rw-r--r-- | ui-summary.c | 6 | ||||
-rw-r--r-- | ui-tree.c | 1 | ||||
-rw-r--r-- | ui-view.c | 1 |
9 files changed, 127 insertions, 32 deletions
@@ -83,21 +83,30 @@ static void cgit_print_repo_page(struct cacheitem *item) !strcmp(cgit_query_page, "snapshot")) { cgit_print_snapshot(item, cgit_query_sha1, "zip", cgit_repo->url, cgit_query_name); return; } if (cgit_query_page && !strcmp(cgit_query_page, "log")) show_search = 1; + cgit_print_docstart(title, item); - cgit_print_pageheader(title, show_search); + + if (!cgit_query_page) { + cgit_print_pageheader("summary", show_search); cgit_print_summary(); - } else if (!strcmp(cgit_query_page, "log")) { + cgit_print_docend(); + return; + } + + cgit_print_pageheader(cgit_query_page, show_search); + + if (!strcmp(cgit_query_page, "log")) { cgit_print_log(cgit_query_head, cgit_query_ofs, 100, cgit_query_search); } else if (!strcmp(cgit_query_page, "tree")) { cgit_print_tree(cgit_query_sha1, cgit_query_path); } else if (!strcmp(cgit_query_page, "commit")) { cgit_print_commit(cgit_query_sha1); } else if (!strcmp(cgit_query_page, "view")) { cgit_print_view(cgit_query_sha1); @@ -5,104 +5,163 @@ body { padding: 0em; margin: 0em; } h2 { font-size: 120%; font-weight: bold; - margin-bottom: 0.5em; + margin-bottom: 0.25em; +} + +h3 { + margin-top: 0em; + font-size: 100%; + font-weight: normal; } a { color: blue; text-decoration: none; } a:hover { text-decoration: underline; } table.list { border: none; border-collapse: collapse; } + table.list tr { background: white; } + table.list tr:hover { background: #eee; } + table.list tr.nohover:hover { background: white; } + table.list th { font-weight: normal; border-bottom: solid 1px #777; padding: 0.1em 0.5em 0.1em 0.5em; vertical-align: baseline; } + table.list td { border: none; padding: 0.1em 0.5em 0.1em 0.5em; } + img { border: none; } + table#layout { width: 100%; - border-collapse: collapse; + border-collapse: separate; + border-spacing: 0px; margin: 0px; } -td#header { + +td#header, td#logo { + color: #666; background-color: #ddd; - padding: 0.25em 0.25em 0.25em 0.5em; + border-bottom: solid 1px #000; +} + +td#header { font-size: 150%; font-weight: bold; - border-bottom: solid 1px #aaa; + padding: 0.2em 0.5em; + vertical-align: text-bottom; +} + +td#logo { + text-align: right; vertical-align: middle; + padding-right: 0.5em; +} + +td#crumb, td#search { + color: #ccc; + border-top: solid 3px #555; + background-color: #666; + border-bottom: solid 1px #333; + padding: 2px 1em; +} + +td#crumb { + font-weight: bold; +} + +td#crumb a { + color: #ccc; } -td#header img#logo { - float: right; + +td#crumb a:hover { + color: #eee; } -td#header input { - float: right; - margin: 0.25em 1em; +td#search { + text-align: right; + vertical-align: center; + padding-right: 0.5em; } -td#header a { - color: black; + +td#search form { + margin: 0px; + padding: 0px; +} + +td#search input { + font-size: 9pt; + padding: 0px; + width: 10em; + border: solid 1px #333; + color: #333; + background-color: #fff; } td#content { padding: 1em 0.5em; } div#blob { border: solid 1px black; } div.error { color: red; font-weight: bold; margin: 1em 2em; } + div.ls-blob, div.ls-dir { font-family: monospace; } + div.ls-dir a { font-weight: bold; } + th.filesize, td.filesize { text-align: right; } + td.filesize { font-family: monospace; } + td.filemode { font-family: monospace; } td.blob { white-space: pre; font-family: monospace; background-color: white; @@ -111,65 +170,76 @@ td.blob { table.nowrap td { white-space: nowrap; } table.commit-info { border-collapse: collapse; margin-top: 1.5em; } + table.commit-info th { text-align: left; font-weight: normal; padding: 0.1em 1em 0.1em 0.1em; } + table.commit-info td { font-weight: normal; padding: 0.1em 1em 0.1em 0.1em; } + div.commit-subject { font-weight: bold; font-size: 125%; margin: 1.5em 0em 0.5em 0em; padding: 0em; } + div.commit-msg { white-space: pre; font-family: monospace; } + table.diffstat { border-collapse: collapse; margin-top: 1.5em; } + table.diffstat th { font-weight: normal; text-align: left; text-decoration: underline; padding: 0.1em 1em 0.1em 0.1em; font-size: 100%; } + table.diffstat td { padding: 0.1em 1em 0.1em 0.1em; font-size: 100%; } + table.diffstat td span.modechange { padding-left: 1em; color: red; } + table.diffstat td.add a { color: green; } + table.diffstat td.del a { color: red; } + table.diffstat td.upd a { color: blue; } + table.diffstat td.summary { - /* border-top: solid 1px black; */ color: #888; padding-top: 0.5em; } table.diff td { border: solid 1px black; font-family: monospace; white-space: pre; @@ -186,14 +256,16 @@ table.diff td div.add { table.diff td div.del { color: red; } .sha1 { font-family: courier; font-size: 90%; } + .left { text-align: left; } + .right { text-align: right; } @@ -119,13 +119,12 @@ static void run_diff(const unsigned char *sha1, const unsigned char *sha2) void cgit_print_diff(const char *old_hex, const char *new_hex) { unsigned char sha1[20], sha2[20]; get_sha1(old_hex, sha1); get_sha1(new_hex, sha2); - html("<h2>diff</h2>\n"); html("<table class='diff'><tr><td>"); run_diff(sha1, sha2); html("</td></tr></table>"); } @@ -49,17 +49,16 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep) rev.show_root_diff = 0; setup_revisions(argc, argv, &rev, NULL); if (rev.grep_filter) { rev.grep_filter->regflags |= REG_ICASE; compile_grep_patterns(rev.grep_filter); } prepare_revision_walk(&rev); - html("<h2>Log</h2>"); html("<table class='list nowrap'>"); html("<tr class='nohover'><th class='left'>Date</th>" "<th class='left'>Message</th>" "<th class='left'>Author</th></tr>\n"); if (ofs<0) ofs = 0; diff --git a/ui-repolist.c b/ui-repolist.c index 011ec95..2ce0d6a 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -11,17 +11,16 @@ void cgit_print_repolist(struct cacheitem *item) { struct repoinfo *repo; int i; cgit_print_docstart(cgit_root_title, item); cgit_print_pageheader(cgit_root_title, 0); - html("<h2>Repositories</h2>\n"); html("<table class='list nowrap'>"); html("<tr class='nohover'>" "<th class='left'>Name</th>" "<th class='left'>Description</th>" "<th class='left'>Owner</th></tr>\n"); for (i=0; i<cgit_repolist.count; i++) { repo = &cgit_repolist.repos[i]; diff --git a/ui-shared.c b/ui-shared.c index 172499c..bca50aa 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -35,16 +35,24 @@ static long ttl_seconds(long ttl) void cgit_print_error(char *msg) { html("<div class='error'>"); html_txt(msg); html("</div>\n"); } +char *cgit_rooturl() +{ + if (cgit_virtual_root) + return fmt("%s/", cgit_virtual_root); + else + return "./cgit.cgi"; +} + char *cgit_repourl(const char *reponame) { if (cgit_virtual_root) { return fmt("%s/%s/", cgit_virtual_root, reponame); } else { return fmt("?r=%s", reponame); } } @@ -108,20 +116,33 @@ void cgit_print_docstart(char *title, struct cacheitem *item) void cgit_print_docend() { html("</td></tr></table>"); html("</body>\n</html>\n"); } void cgit_print_pageheader(char *title, int show_search) { - html("<table id='layout'><tr><td id='header'>"); - htmlf("<a href='%s'>", cgit_logo_link); - htmlf("<img id='logo' src='%s'/>\n", cgit_logo); - htmlf("</a>"); + html("<table id='layout'>"); + html("<tr><td id='header'>"); + html(cgit_root_title); + html("</td><td id='logo'>"); + html("<a href='"); + html_attr(cgit_logo_link); + htmlf("'><img src='%s'/></a>", cgit_logo); + html("</td></tr>"); + html("<tr><td id='crumb'>"); + htmlf("<a href='%s'>root</a>", cgit_rooturl()); + if (cgit_query_repo) { + htmlf(" : <a href='%s'>", cgit_repourl(cgit_repo->url)); + html_txt(cgit_repo->name); + htmlf("</a> : %s", title); + } + html("</td>"); + html("<td id='search'>"); if (show_search) { html("<form method='get' href='"); html_attr(cgit_currurl()); html("'>"); if (!cgit_virtual_root) { if (cgit_query_repo) html_hidden("r", cgit_query_repo); if (cgit_query_page) @@ -132,22 +153,18 @@ void cgit_print_pageheader(char *title, int show_search) if (cgit_query_sha1) html_hidden("id", cgit_query_sha1); if (cgit_query_sha2) html_hidden("id2", cgit_query_sha2); html("<input type='text' name='q' value='"); html_attr(cgit_query_search); html("'/></form>"); } - if (cgit_query_repo) - htmlf("<a href='%s'>", cgit_repourl(cgit_query_repo)); - html_txt(title); - if (cgit_query_repo) - html("</a>"); - html("</td></tr><tr><td id='content'>"); + html("</td></tr>"); + html("<tr><td id='content' colspan='2'>"); } void cgit_print_snapshot_start(const char *mimetype, const char *filename, struct cacheitem *item) { htmlf("Content-Type: %s\n", mimetype); htmlf("Content-Disposition: inline; filename=\"%s\"\n", filename); htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); diff --git a/ui-summary.c b/ui-summary.c index ff3ed4d..42f4300 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -124,16 +124,18 @@ static void cgit_print_tags() "<th class='left'>Author</th>" "<th class='left'>Reference</th></tr>\n"); for_each_tag_ref(cgit_print_tag_cb, NULL); } void cgit_print_summary() { html("<h2>"); - html_txt("Repo summary page"); - html("</h2>"); + html(cgit_repo->name); + html("</h2><h3>"); + html(cgit_repo->desc); + html("</h3>"); html("<table class='list nowrap'>"); cgit_print_branches(); html("<tr class='nohover'><td colspan='4'> </td></tr>"); cgit_print_tags(); html("</table>"); } @@ -61,17 +61,16 @@ void cgit_print_tree(const char *hex, char *path) return; } tree = parse_tree_indirect(sha1); if (!tree) { cgit_print_error(fmt("Not a tree object: %s", hex)); return; } - html("<h2>Tree content</h2>\n"); html_txt(path); html("<table class='list'>\n"); html("<tr class='nohover'>"); html("<th class='left'>Mode</th>"); html("<th class='left'>Name</th>"); html("<th class='right'>Size</th>"); html("</tr>\n"); read_tree_recursive(tree, "", 0, 1, NULL, print_entry); @@ -27,16 +27,15 @@ void cgit_print_view(const char *hex) buf = read_sha1_file(sha1, type, &size); if (!buf) { cgit_print_error("Error reading object"); return; } buf[size] = '\0'; - html("<h2>Object content</h2>\n"); html("<table class='list'>\n"); htmlf("<tr class='nohover'><th class='left'>%s %s, %li bytes</th></tr>\n", type, hex, size); html("<tr><td class='blob'>\n"); html_txt(buf); html("\n</td></tr>\n"); html("</table>\n"); } |