X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/2159414a3945f059a7e52a4900ffcd1ca665e102..121e65391446069a538ae8d3f7938452178de7c6:/ui-shared.c diff --git a/ui-shared.c b/ui-shared.c index 32f23f9..ac5a287 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -11,7 +11,7 @@ #include "cmd.h" #include "html.h" -const char cgit_doctype[] = +static const char cgit_doctype[] = "\n"; @@ -46,7 +46,7 @@ void cgit_vprint_error(const char *fmt, va_list ap) html("\n"); } -const char *cgit_httpscheme() +const char *cgit_httpscheme(void) { if (ctx.env.https && !strcmp(ctx.env.https, "on")) return "https://"; @@ -54,7 +54,7 @@ const char *cgit_httpscheme() return "http://"; } -const char *cgit_hosturl() +const char *cgit_hosturl(void) { if (ctx.env.http_host) return ctx.env.http_host; @@ -65,7 +65,18 @@ const char *cgit_hosturl() return fmtalloc("%s:%s", ctx.env.server_name, ctx.env.server_port); } -const char *cgit_rooturl() +const char *cgit_currenturl(void) +{ + if (!ctx.qry.url) + return cgit_rooturl(); + const char *root = cgit_rooturl(); + size_t len = strlen(root); + if (len && root[len - 1] == '/') + return fmtalloc("%s%s", root, ctx.qry.url); + return fmtalloc("%s/%s", root, ctx.qry.url); +} + +const char *cgit_rooturl(void) { if (ctx.cfg.virtual_root) return ctx.cfg.virtual_root; @@ -73,9 +84,9 @@ const char *cgit_rooturl() return ctx.cfg.script_name; } -const char *cgit_loginurl() +const char *cgit_loginurl(void) { - static const char *login_url = 0; + static const char *login_url; if (!login_url) login_url = fmtalloc("%s?p=login", cgit_rooturl()); return login_url; @@ -112,7 +123,7 @@ 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); + return cgit_fileurl(reponame, pagename, NULL, query); } const char *cgit_repobasename(const char *reponame) @@ -140,14 +151,14 @@ const char *cgit_repobasename(const char *reponame) return rvbuf; } -static void site_url(const char *page, const char *search, const char *sort, int ofs) +static void site_url(const char *page, const char *search, const char *sort, int ofs, int always_root) { char *delim = "?"; - if (ctx.cfg.virtual_root) - html_attr(ctx.cfg.virtual_root); + if (always_root || page) + html_attr(cgit_rooturl()); else - html_url_path(ctx.cfg.script_name); + html_attr(cgit_currenturl()); if (page) { htmlf("?p=%s", page); @@ -172,7 +183,7 @@ static void site_url(const char *page, const char *search, const char *sort, int } static void site_link(const char *page, const char *name, const char *title, - const char *class, const char *search, const char *sort, int ofs) + const char *class, const char *search, const char *sort, int ofs, int always_root) { html(""); html_txt(name); html(""); } void cgit_index_link(const char *name, const char *title, const char *class, - const char *pattern, const char *sort, int ofs) + const char *pattern, const char *sort, int ofs, int always_root) { - site_link(NULL, name, title, class, pattern, sort, ofs); + site_link(NULL, name, title, class, pattern, sort, ofs, always_root); } static char *repolink(const char *title, const char *class, const char *page, @@ -273,9 +284,9 @@ void cgit_summary_link(const char *name, const char *title, const char *class, } void cgit_tag_link(const char *name, const char *title, const char *class, - const char *head, const char *rev) + const char *tag) { - reporevlink("tag", name, title, class, head, rev, NULL); + reporevlink("tag", name, title, class, tag, NULL, NULL); } void cgit_tree_link(const char *name, const char *title, const char *class, @@ -439,12 +450,12 @@ static void cgit_self_link(char *name, const char *title, const char *class) { if (!strcmp(ctx.qry.page, "repolist")) cgit_index_link(name, title, class, ctx.qry.search, ctx.qry.sort, - ctx.qry.ofs); + ctx.qry.ofs, 1); else if (!strcmp(ctx.qry.page, "summary")) cgit_summary_link(name, title, class, ctx.qry.head); else if (!strcmp(ctx.qry.page, "tag")) - cgit_tag_link(name, title, class, ctx.qry.head, - ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL); + cgit_tag_link(name, title, class, ctx.qry.has_sha1 ? + ctx.qry.sha1 : ctx.qry.head); else if (!strcmp(ctx.qry.page, "tree")) cgit_tree_link(name, title, class, ctx.qry.head, ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL, @@ -548,25 +559,32 @@ void cgit_submodule_link(const char *class, char *path, const char *rev) item = lookup_path(list, path); } } - html("module_link, dir, rev); + if (item || ctx.repo->module_link) { + html("module_link, dir, rev); + } + html("'>"); + html_txt(path); + html(""); } else { - html("#"); + html(""); + html_txt(path); + html(""); } - html("'>"); - html_txt(path); - html(""); html_txtf(" @ %.7s", rev); if (item && tail) path[len - 1] = tail; @@ -728,7 +746,7 @@ void cgit_print_docstart(void) html_include(ctx.cfg.header); } -void cgit_print_docend() +void cgit_print_docend(void) { html(" \n"); if (ctx.cfg.embedded) { @@ -751,31 +769,19 @@ void cgit_print_docend() static void add_clone_urls(void (*fn)(const char *), char *txt, char *suffix) { - struct strbuf buf = STRBUF_INIT; - char *h = txt, *t, c; + struct strbuf **url_list = strbuf_split_str(txt, ' ', 0); + int i; - while (h && *h) { - while (h && *h == ' ') - h++; - if (!*h) - break; - t = h; - while (t && *t && *t != ' ') - t++; - c = *t; - *t = 0; - - if (suffix && *suffix) { - strbuf_reset(&buf); - strbuf_addf(&buf, "%s/%s", h, suffix); - h = buf.buf; - } - fn(h); - *t = c; - h = t; + for (i = 0; url_list[i]; i++) { + strbuf_rtrim(url_list[i]); + if (url_list[i]->len == 0) + continue; + if (suffix && *suffix) + strbuf_addf(url_list[i], "/%s", suffix); + fn(url_list[i]->buf); } - strbuf_release(&buf); + strbuf_list_free(url_list); } void cgit_add_clone_urls(void (*fn)(const char *)) @@ -880,7 +886,7 @@ static void print_header(void) html(""); if (ctx.repo) { - cgit_index_link("index", NULL, NULL, NULL, NULL, 0); + cgit_index_link("index", NULL, NULL, NULL, NULL, 0, 1); html(" : "); cgit_summary_link(ctx.repo->name, ctx.repo->name, NULL, NULL); if (ctx.env.authenticated) { @@ -889,6 +895,8 @@ static void print_header(void) cgit_add_hidden_formfields(0, 1, ctx.qry.page); html(" "); html(""); html(""); @@ -958,13 +966,13 @@ void cgit_print_pageheader(void) html("\n"); html("\n"); } else if (ctx.env.authenticated) { - site_link(NULL, "index", NULL, hc("repolist"), NULL, NULL, 0); + site_link(NULL, "index", NULL, hc("repolist"), NULL, NULL, 0, 1); if (ctx.cfg.root_readme) site_link("about", "about", NULL, hc("about"), - NULL, NULL, 0); + NULL, NULL, 0, 1); html(""); html("
\n"); html("