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
@@ -28,4 +28,5 @@ 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; @@ -33,3 +34,4 @@ static int cgit_prepare_cache(struct cacheitem *item) 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))); @@ -97,2 +97,10 @@ td#header { +td#header a { + color: #666; +} + +td#header a:hoved { + text-decoration: underline; +} + td#logo { @@ -118,2 +126,3 @@ td#crumb a { background-color: #666; + padding: 0em 0.5em 0em 0.5em; } @@ -121,4 +130,5 @@ td#crumb a { td#crumb a:hover { - color: #eee; - background-color: #666; + color: #666; + background-color: #ccc; + text-decoration: none; } @@ -363,5 +373,5 @@ 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; @@ -372,3 +382,4 @@ a.button:hover { text-decoration: none; - background-color: #eee; + color: #333; + background-color: #ccc; } @@ -120,2 +120,3 @@ extern int cgit_nocache; extern int cgit_snapshots; +extern int cgit_enable_index_links; extern int cgit_enable_log_filecount; @@ -160,2 +161,3 @@ extern int chk_positive(int result, char *msg); extern int hextoint(char c); +extern char *trim_end(const char *str, char c); @@ -206,3 +208,3 @@ extern void cgit_tree_link(char *name, char *title, char *class, char *head, 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, @@ -14,2 +14,6 @@ +## 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 @@ -170,3 +170,3 @@ void cgit_parse_url(const char *url) if (p[1]) - cgit_query_path = xstrdup(p + 1); + cgit_query_path = trim_end(p + 1, '/'); } @@ -30,2 +30,3 @@ int cgit_nocache = 0; int cgit_snapshots = 0; +int cgit_enable_index_links = 0; int cgit_enable_log_filecount = 0; @@ -150,2 +151,4 @@ void cgit_global_config_cb(const char *name, const char *value) cgit_snapshots = atoi(value); + else if (!strcmp(name, "enable-index-links")) + cgit_enable_index_links = atoi(value); else if (!strcmp(name, "enable-log-filecount")) @@ -229,3 +232,3 @@ void cgit_querystring_cb(const char *name, const char *value) } else if (!strcmp(name, "path")) { - cgit_query_path = xstrdup(value); + cgit_query_path = trim_end(value, '/'); } else if (!strcmp(name, "name")) { @@ -258,2 +261,24 @@ 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, @@ -115,13 +115,11 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *path, i 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); } diff --git a/ui-repolist.c b/ui-repolist.c index 2018dab..4c86543 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -46,5 +46,8 @@ 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); @@ -54,3 +57,4 @@ void cgit_print_repolist(struct cacheitem *item) 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); @@ -62,4 +66,6 @@ void cgit_print_repolist(struct cacheitem *item) "<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"); @@ -71,3 +77,4 @@ void cgit_print_repolist(struct cacheitem *item) 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); @@ -87,9 +94,13 @@ void cgit_print_repolist(struct cacheitem *item) 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"); } diff --git a/ui-shared.c b/ui-shared.c index 110c696..d4376ce 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -113,2 +113,3 @@ static char *repolink(char *title, char *class, char *page, char *head, html("/"); + if (page) { html(page); @@ -117,2 +118,3 @@ static char *repolink(char *title, char *class, char *page, char *head, html_attr(path); + } } else { @@ -123,2 +125,3 @@ static char *repolink(char *title, char *class, char *page, char *head, html("/"); + if (page) { html(page); @@ -127,2 +130,3 @@ static char *repolink(char *title, char *class, char *page, char *head, html_attr(path); + } delim = "&"; @@ -161,5 +165,21 @@ 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>"); } @@ -281,5 +301,7 @@ 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='"); @@ -289,7 +311,24 @@ void cgit_print_pageheader(char *title, int show_search) 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"); } diff --git a/ui-summary.c b/ui-summary.c index 03dd078..b4bc6d8 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -29,3 +29,3 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, 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>"); @@ -94,4 +94,4 @@ 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"); |