Diffstat (limited to 'ui-shared.c')
| -rw-r--r-- | ui-shared.c | 234 |
1 files changed, 11 insertions, 223 deletions
diff --git a/ui-shared.c b/ui-shared.c index 5c5bcf3..aba93e8 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -57,13 +57,13 @@ char *cgit_repourl(const char *reponame) } } -char *cgit_fileurl(const char *reponame, const char *pagename, - const char *filename, const char *query) +char *cgit_pageurl(const char *reponame, const char *pagename, + const char *query) { if (cgit_virtual_root) { if (query) - return fmt("%s/%s/%s/%s?%s", cgit_virtual_root, reponame, - pagename, filename?filename:"", query); + return fmt("%s/%s/%s/?%s", cgit_virtual_root, reponame, + pagename, query); else return fmt("%s/%s/%s/", cgit_virtual_root, reponame, pagename); @@ -75,37 +75,6 @@ char *cgit_fileurl(const char *reponame, const char *pagename, } } -char *cgit_pageurl(const char *reponame, const char *pagename, - const char *query) -{ - return cgit_fileurl(reponame,pagename,0,query); -} - -const char *cgit_repobasename(const char *reponame) -{ - /* I assume we don't need to store more than one repo basename */ - static char rvbuf[1024]; - int p; - const char *rv; - strncpy(rvbuf,reponame,sizeof(rvbuf)); - if(rvbuf[sizeof(rvbuf)-1]) - die("cgit_repobasename: truncated repository name '%s'", reponame); - p = strlen(rvbuf)-1; - /* strip trailing slashes */ - while(p && rvbuf[p]=='/') rvbuf[p--]=0; - /* strip trailing .git */ - if(p>=3 && !strncmp(&rvbuf[p-3],".git",4)) { - p -= 3; rvbuf[p--] = 0; - } - /* strip more trailing slashes if any */ - while( p && rvbuf[p]=='/') rvbuf[p--]=0; - /* find last slash in the remaining string */ - rv = strrchr(rvbuf,'/'); - if(rv) - return ++rv; - return rvbuf; -} - char *cgit_currurl() { if (!cgit_virtual_root) @@ -118,166 +87,6 @@ char *cgit_currurl() return fmt("%s/", cgit_virtual_root); } -static char *repolink(char *title, char *class, char *page, char *head, - char *path) -{ - char *delim = "?"; - - html("<a"); - if (title) { - html(" title='"); - html_attr(title); - html("'"); - } - if (class) { - html(" class='"); - html_attr(class); - html("'"); - } - html(" href='"); - if (cgit_virtual_root) { - html_attr(cgit_virtual_root); - if (cgit_virtual_root[strlen(cgit_virtual_root) - 1] != '/') - html("/"); - html_attr(cgit_repo->url); - 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); - html("?url="); - html_attr(cgit_repo->url); - if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') - html("/"); - if (page) { - html(page); - html("/"); - if (path) - html_attr(path); - } - delim = "&"; - } - if (head && strcmp(head, cgit_repo->defbranch)) { - html(delim); - html("h="); - html_attr(head); - delim = "&"; - } - return fmt("%s", delim); -} - -static void reporevlink(char *page, char *name, char *title, char *class, - char *head, char *rev, char *path) -{ - char *delim; - - delim = repolink(title, class, page, head, path); - if (rev && strcmp(rev, cgit_query_head)) { - html(delim); - html("id="); - html_attr(rev); - } - html("'>"); - html_txt(name); - html("</a>"); -} - -void cgit_tree_link(char *name, char *title, char *class, char *head, - char *rev, char *path) -{ - reporevlink("tree", name, title, class, head, rev, path); -} - -void cgit_log_link(char *name, char *title, char *class, char *head, - char *rev, char *path, int ofs) -{ - 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>"); -} - -void cgit_commit_link(char *name, char *title, char *class, char *head, - char *rev) -{ - if (strlen(name) > cgit_max_msg_len && cgit_max_msg_len >= 15) { - name[cgit_max_msg_len] = '\0'; - name[cgit_max_msg_len - 1] = '.'; - name[cgit_max_msg_len - 2] = '.'; - name[cgit_max_msg_len - 3] = '.'; - } - reporevlink("commit", name, title, class, head, rev, NULL); -} - -void cgit_snapshot_link(char *name, char *title, char *class, char *head, - char *rev, char *archivename) -{ - reporevlink("snapshot", name, title, class, head, rev, archivename); -} - -void cgit_diff_link(char *name, char *title, char *class, char *head, - char *new_rev, char *old_rev, char *path) -{ - char *delim; - - delim = repolink(title, class, "diff", head, path); - if (new_rev && strcmp(new_rev, cgit_query_head)) { - html(delim); - html("id="); - html_attr(new_rev); - delim = "&"; - } - if (old_rev) { - html(delim); - html("id2="); - html_attr(old_rev); - } - html("'>"); - html_txt(name); - html("</a>"); -} - -void cgit_object_link(struct object *obj) -{ - char *page, *arg, *url; - - if (obj->type == OBJ_COMMIT) { - cgit_commit_link(fmt("commit %s", sha1_to_hex(obj->sha1)), NULL, NULL, - cgit_query_head, sha1_to_hex(obj->sha1)); - return; - } else if (obj->type == OBJ_TREE) { - page = "tree"; - arg = "id"; - } else { - page = "blob"; - arg = "id"; - } - - url = cgit_pageurl(cgit_query_repo, page, - fmt("%s=%s", arg, sha1_to_hex(obj->sha1))); - html_link_open(url, NULL, NULL); - htmlf("%s %s", typename(obj->type), - sha1_to_hex(obj->sha1)); - html_link_close(); -} void cgit_print_date(time_t secs, char *format) { @@ -343,7 +152,7 @@ void cgit_print_docstart(char *title, struct cacheitem *item) html("<title>"); html_txt(title); html("</title>\n"); - htmlf("<meta name='generator' content='cgit %s'/>\n", cgit_version); + htmlf("<meta name='generator' content='cgit v%s'/>\n", cgit_version); html("<link rel='stylesheet' type='text/css' href='"); html_attr(cgit_css); html("'/>\n"); @@ -360,38 +169,19 @@ void cgit_print_docend() void cgit_print_pageheader(char *title, int show_search) { html("<table id='layout'>"); - html("<tr><td id='header'><a href='"); - html_attr(cgit_rooturl()); - html("'>"); - html_txt(cgit_root_title); - html("</a></td><td id='logo'>"); + 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' alt='logo'/></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); - 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"); + htmlf("</a> : %s", title); } html("</td>"); html("<td id='search'>"); @@ -429,5 +219,3 @@ void cgit_print_snapshot_start(const char *mimetype, const char *filename, ttl_seconds(item->ttl))); html("\n"); } - -/* vim:set sw=8: */ |