author | Lars Hjemli <hjemli@gmail.com> | 2007-06-29 18:32:08 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-06-29 18:32:08 (UTC) |
commit | 16a3d2779ccd56bf7954d98da547247d8796544b (patch) (side-by-side diff) | |
tree | 86d2ed41adc3de842c7518d614ea49ca0200e4d2 | |
parent | f69250358a74efa5d7d9c562b2cdd80fad1430f1 (diff) | |
parent | 103940fe6b0914dc42b8b033d1d328f38135ca5f (diff) | |
download | cgit-16a3d2779ccd56bf7954d98da547247d8796544b.zip cgit-16a3d2779ccd56bf7954d98da547247d8796544b.tar.gz cgit-16a3d2779ccd56bf7954d98da547247d8796544b.tar.bz2 |
Merge branch 'lh/menu'
* lh/menu:
Add ofs argument to cgit_log_link and use it in ui-log.c
Add trim_end() and use it to remove trailing slashes from repo paths
Do not include current path in the "tree" menu link
Add setting to enable/disable extra links on index page
Change S/L/T to summary/log/tree
Change "files" to "tree"
Include querystring as part of cached filename for repo summary page
Add more menuitems on repo pages
-rw-r--r-- | cgit.c | 8 | ||||
-rw-r--r-- | cgit.css | 23 | ||||
-rw-r--r-- | cgit.h | 4 | ||||
-rw-r--r-- | cgitrc | 4 | ||||
-rw-r--r-- | parsing.c | 2 | ||||
-rw-r--r-- | shared.c | 27 | ||||
-rw-r--r-- | ui-log.c | 16 | ||||
-rw-r--r-- | ui-repolist.c | 33 | ||||
-rw-r--r-- | ui-shared.c | 55 | ||||
-rw-r--r-- | ui-summary.c | 2 | ||||
-rw-r--r-- | ui-tree.c | 4 |
11 files changed, 135 insertions, 43 deletions
@@ -27,10 +27,12 @@ static int cgit_prepare_cache(struct cacheitem *item) if (!cgit_cmd) { - item->name = xstrdup(fmt("%s/%s/index.html", cgit_cache_root, - cache_safe_filename(cgit_repo->url))); + item->name = xstrdup(fmt("%s/%s/index.%s.html", cgit_cache_root, + cache_safe_filename(cgit_repo->url), + cache_safe_filename(cgit_querystring))); item->ttl = cgit_cache_repo_ttl; } else { item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root, - cache_safe_filename(cgit_repo->url), cgit_query_page, + cache_safe_filename(cgit_repo->url), + cgit_query_page, cache_safe_filename(cgit_querystring))); if (cgit_query_has_symref) @@ -96,4 +96,12 @@ td#header { } +td#header a { + color: #666; +} + +td#header a:hoved { + text-decoration: underline; +} + td#logo { text-align: right; @@ -117,9 +125,11 @@ td#crumb a { color: #ccc; background-color: #666; + padding: 0em 0.5em 0em 0.5em; } td#crumb a:hover { - color: #eee; - background-color: #666; + color: #666; + background-color: #ccc; + text-decoration: none; } @@ -362,7 +372,7 @@ table.list td.repogroup { a.button { font-size: 80%; - color: #333; - background-color: #ccc; - border: solid 1px #999; + color: #aaa; + background-color: #eee; + border: solid 1px #aaa; padding: 0em 0.5em; margin: 0.1em 0.25em; @@ -371,5 +381,6 @@ a.button { a.button:hover { text-decoration: none; - background-color: #eee; + color: #333; + background-color: #ccc; } @@ -119,4 +119,5 @@ extern char *cgit_repo_group; extern int cgit_nocache; extern int cgit_snapshots; +extern int cgit_enable_index_links; extern int cgit_enable_log_filecount; extern int cgit_enable_log_linecount; @@ -159,4 +160,5 @@ extern int chk_positive(int result, char *msg); extern int hextoint(char c); +extern char *trim_end(const char *str, char c); extern void *cgit_free_commitinfo(struct commitinfo *info); @@ -205,5 +207,5 @@ extern void cgit_tree_link(char *name, char *title, char *class, char *head, char *rev, char *path); extern void cgit_log_link(char *name, char *title, char *class, char *head, - char *rev, char *path); + char *rev, char *path, int ofs); extern void cgit_commit_link(char *name, char *title, char *class, char *head, char *rev); @@ -13,4 +13,8 @@ +## Enable/disable extra links to summary/log/tree per repo on index page +#enable-index-links=0 + + ## Enable/disable display of 'number of files changed' in log view #enable-log-filecount=0 @@ -169,5 +169,5 @@ void cgit_parse_url(const char *url) p[0] = '\0'; if (p[1]) - cgit_query_path = xstrdup(p + 1); + cgit_query_path = trim_end(p + 1, '/'); } cgit_cmd = cgit_get_cmd_index(cmd + 1); @@ -29,4 +29,5 @@ char *cgit_repo_group = NULL; int cgit_nocache = 0; int cgit_snapshots = 0; +int cgit_enable_index_links = 0; int cgit_enable_log_filecount = 0; int cgit_enable_log_linecount = 0; @@ -149,4 +150,6 @@ void cgit_global_config_cb(const char *name, const char *value) else if (!strcmp(name, "snapshots")) cgit_snapshots = atoi(value); + else if (!strcmp(name, "enable-index-links")) + cgit_enable_index_links = atoi(value); else if (!strcmp(name, "enable-log-filecount")) cgit_enable_log_filecount = atoi(value); @@ -228,5 +231,5 @@ void cgit_querystring_cb(const char *name, const char *value) cgit_query_ofs = atoi(value); } else if (!strcmp(name, "path")) { - cgit_query_path = xstrdup(value); + cgit_query_path = trim_end(value, '/'); } else if (!strcmp(name, "name")) { cgit_query_name = xstrdup(value); @@ -257,4 +260,26 @@ int hextoint(char c) } +char *trim_end(const char *str, char c) +{ + int len; + char *s, *t; + + if (str == NULL) + return NULL; + t = (char *)str; + len = strlen(t); + while(len > 0 && t[len - 1] == c) + len--; + + if (len == 0) + return NULL; + + c = t[len]; + t[len] = '\0'; + s = xstrdup(t); + t[len] = c; + return s; +} + void cgit_diff_tree_cb(struct diff_queue_struct *q, struct diff_options *options, void *data) @@ -114,15 +114,13 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *path, i html("<div class='pager'>"); if (ofs > 0) { - html(" <a href='"); - html(cgit_pageurl(cgit_query_repo, cgit_query_page, - fmt("h=%s&ofs=%d", tip, ofs-cnt))); - html("'>[prev]</a> "); + cgit_log_link("[prev]", NULL, NULL, cgit_query_head, + cgit_query_sha1, cgit_query_path, + ofs - cnt); + html(" "); } - if ((commit = get_revision(&rev)) != NULL) { - html(" <a href='"); - html(cgit_pageurl(cgit_query_repo, "log", - fmt("h=%s&ofs=%d", tip, ofs+cnt))); - html("'>[next]</a> "); + cgit_log_link("[next]", NULL, NULL, cgit_query_head, + cgit_query_sha1, cgit_query_path, + ofs + cnt); } html("</div>"); diff --git a/ui-repolist.c b/ui-repolist.c index 2018dab..4c86543 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -45,7 +45,10 @@ static void print_modtime(struct repoinfo *repo) void cgit_print_repolist(struct cacheitem *item) { - int i; + int i, columns = 4; char *last_group = NULL; + if (cgit_enable_index_links) + columns++; + cgit_print_docstart(cgit_root_title, item); cgit_print_pageheader(cgit_root_title, 0); @@ -53,5 +56,6 @@ void cgit_print_repolist(struct cacheitem *item) html("<table class='list nowrap'>"); if (cgit_index_header) { - html("<tr class='nohover'><td colspan='5' class='include-block'>"); + htmlf("<tr class='nohover'><td colspan='%d' class='include-block'>", + columns); html_include(cgit_index_header); html("</td></tr>"); @@ -61,6 +65,8 @@ void cgit_print_repolist(struct cacheitem *item) "<th class='left'>Description</th>" "<th class='left'>Owner</th>" - "<th class='left'>Idle</th>" - "<th>Links</th></tr>\n"); + "<th class='left'>Idle</th>"); + if (cgit_enable_index_links) + html("<th>Links</th>"); + html("</tr>\n"); for (i=0; i<cgit_repolist.count; i++) { @@ -70,5 +76,6 @@ void cgit_print_repolist(struct cacheitem *item) (last_group != NULL && cgit_repo->group != NULL && strcmp(cgit_repo->group, last_group))) { - html("<tr class='nohover'><td colspan='4' class='repogroup'>"); + htmlf("<tr class='nohover'><td colspan='%d' class='repogroup'>", + columns); html_txt(cgit_repo->group); html("</td></tr>"); @@ -86,11 +93,15 @@ void cgit_print_repolist(struct cacheitem *item) html("</td><td>"); print_modtime(cgit_repo); - html("</td><td>"); + html("</td>"); + if (cgit_enable_index_links) { + html("<td>"); html_link_open(cgit_repourl(cgit_repo->url), - "Summary", "button"); - html("S</a>"); - cgit_log_link("L", "Log", "button", NULL, NULL, NULL); - cgit_tree_link("F", "Files", "button", NULL, NULL, NULL); - html("</td></tr>\n"); + NULL, "button"); + html("summary</a>"); + cgit_log_link("log", NULL, "button", NULL, NULL, NULL, 0); + cgit_tree_link("tree", NULL, "button", NULL, NULL, NULL); + html("</td>"); + } + html("</tr>\n"); } html("</table>"); diff --git a/ui-shared.c b/ui-shared.c index 110c696..d4376ce 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -112,8 +112,10 @@ static char *repolink(char *title, char *class, char *page, char *head, if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') html("/"); + if (page) { html(page); html("/"); if (path) html_attr(path); + } } else { html(cgit_script_name); @@ -122,8 +124,10 @@ static char *repolink(char *title, char *class, char *page, char *head, if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') html("/"); + if (page) { html(page); html("/"); if (path) html_attr(path); + } delim = "&"; } @@ -160,7 +164,23 @@ void cgit_tree_link(char *name, char *title, char *class, char *head, void cgit_log_link(char *name, char *title, char *class, char *head, - char *rev, char *path) + char *rev, char *path, int ofs) { - reporevlink("log", name, title, class, head, rev, path); + char *delim; + + delim = repolink(title, class, "log", head, path); + if (rev && strcmp(rev, cgit_query_head)) { + html(delim); + html("id="); + html_attr(rev); + delim = "&"; + } + if (ofs > 0) { + html(delim); + html("ofs="); + htmlf("%d", ofs); + } + html("'>"); + html_txt(name); + html("</a>"); } @@ -280,7 +300,9 @@ void cgit_print_pageheader(char *title, int show_search) { html("<table id='layout'>"); - html("<tr><td id='header'>"); - html(cgit_root_title); - html("</td><td id='logo'>"); + html("<tr><td id='header'><a href='"); + html_attr(cgit_rooturl()); + html("'>"); + html_txt(cgit_root_title); + html("</a></td><td id='logo'>"); html("<a href='"); html_attr(cgit_logo_link); @@ -288,9 +310,26 @@ void cgit_print_pageheader(char *title, int show_search) 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(" ("); + html_txt(cgit_query_head); + html(") : "); + reporevlink(NULL, "summary", NULL, NULL, cgit_query_head, + NULL, NULL); + html(" "); + cgit_log_link("log", NULL, NULL, cgit_query_head, + cgit_query_sha1, cgit_query_path, 0); + html(" "); + cgit_tree_link("tree", NULL, NULL, cgit_query_head, + cgit_query_sha1, NULL); + html(" "); + cgit_commit_link("commit", NULL, NULL, cgit_query_head, + cgit_query_sha1); + html(" "); + cgit_diff_link("diff", NULL, NULL, cgit_query_head, + cgit_query_sha1, cgit_query_sha2, + cgit_query_path); + } else { + html_txt("Index of repositories"); } html("</td>"); diff --git a/ui-summary.c b/ui-summary.c index 03dd078..b4bc6d8 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -28,5 +28,5 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, info = cgit_parse_commit(commit); html("<tr><td>"); - cgit_log_link(ref, NULL, NULL, ref, NULL, NULL); + cgit_log_link(ref, NULL, NULL, ref, NULL, NULL, 0); html("</td><td>"); cgit_print_age(commit->date, -1, NULL); @@ -93,6 +93,6 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, html("<td>"); - cgit_log_link("L", "Log", "button", cgit_query_head, curr_rev, - fullpath); + cgit_log_link("log", NULL, "button", cgit_query_head, curr_rev, + fullpath, 0); html("</td></tr>\n"); free(name); |