X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/c8e3295469bd3b8e38a9ea4478d517d3861e6c93..f50be7fda0a7ab57009169dd5905fcbab8eb5166:/ui-shared.c diff --git a/ui-shared.c b/ui-shared.c index 3d5030b..d7d75bf 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -133,7 +133,7 @@ char *cgit_currurl() return fmt("%s/", ctx.cfg.virtual_root); } -static void site_url(const char *page, const char *search, int ofs) +static void site_url(const char *page, const char *search, const char *sort, int ofs) { char *delim = "?"; @@ -154,6 +154,12 @@ static void site_url(const char *page, const char *search, int ofs) html_attr(search); delim = "&"; } + if (sort) { + html(delim); + html("s="); + html_attr(sort); + delim = "&"; + } if (ofs) { html(delim); htmlf("ofs=%d", ofs); @@ -161,7 +167,7 @@ static void site_url(const char *page, const char *search, int ofs) } static void site_link(const char *page, const char *name, const char *title, - const char *class, const char *search, int ofs) + const char *class, const char *search, const char *sort, int ofs) { html(""); html_txt(name); html(""); } void cgit_index_link(const char *name, const char *title, const char *class, - const char *pattern, int ofs) + const char *pattern, const char *sort, int ofs) { - site_link(NULL, name, title, class, pattern, ofs); + site_link(NULL, name, title, class, pattern, sort, ofs); } static char *repolink(const char *title, const char *class, const char *page, @@ -288,7 +294,7 @@ void cgit_log_link(const char *name, const char *title, const char *class, char *delim; delim = repolink(title, class, "log", head, path); - if (rev && strcmp(rev, ctx.qry.head)) { + if (rev && ctx.qry.head && strcmp(rev, ctx.qry.head)) { html(delim); html("id="); html_url_arg(rev); @@ -319,7 +325,8 @@ void cgit_log_link(const char *name, const char *title, const char *class, } void cgit_commit_link(char *name, const char *title, const char *class, - const char *head, const char *rev, int toggle_ssdiff) + const char *head, const char *rev, const char *path, + int toggle_ssdiff) { if (strlen(name) > ctx.cfg.max_msg_len && ctx.cfg.max_msg_len >= 15) { name[ctx.cfg.max_msg_len] = '\0'; @@ -330,8 +337,8 @@ void cgit_commit_link(char *name, const char *title, const char *class, char *delim; - delim = repolink(title, class, "commit", head, NULL); - if (rev && strcmp(rev, ctx.qry.head)) { + delim = repolink(title, class, "commit", head, path); + if (rev && ctx.qry.head && strcmp(rev, ctx.qry.head)) { html(delim); html("id="); html_url_arg(rev); @@ -340,6 +347,18 @@ void cgit_commit_link(char *name, const char *title, const char *class, if ((ctx.qry.ssdiff && !toggle_ssdiff) || (!ctx.qry.ssdiff && toggle_ssdiff)) { html(delim); html("ss=1"); + delim = "&"; + } + if (ctx.qry.context > 0 && ctx.qry.context != 3) { + html(delim); + html("context="); + htmlf("%d", ctx.qry.context); + delim = "&"; + } + if (ctx.qry.ignorews) { + html(delim); + html("ignorews=1"); + delim = "&"; } html("'>"); html_txt(name); @@ -381,6 +400,18 @@ void cgit_diff_link(const char *name, const char *title, const char *class, if ((ctx.qry.ssdiff && !toggle_ssdiff) || (!ctx.qry.ssdiff && toggle_ssdiff)) { html(delim); html("ss=1"); + delim = "&"; + } + if (ctx.qry.context > 0 && ctx.qry.context != 3) { + html(delim); + html("context="); + htmlf("%d", ctx.qry.context); + delim = "&"; + } + if (ctx.qry.ignorews) { + html(delim); + html("ignorews=1"); + delim = "&"; } html("'>"); html_txt(name); @@ -388,9 +419,9 @@ void cgit_diff_link(const char *name, const char *title, const char *class, } void cgit_patch_link(const char *name, const char *title, const char *class, - const char *head, const char *rev) + const char *head, const char *rev, const char *path) { - reporevlink("patch", name, title, class, head, rev, NULL); + reporevlink("patch", name, title, class, head, rev, path); } void cgit_stats_link(const char *name, const char *title, const char *class, @@ -399,6 +430,64 @@ void cgit_stats_link(const char *name, const char *title, const char *class, reporevlink("stats", name, title, class, head, NULL, path); } +void cgit_self_link(char *name, const char *title, const char *class, + struct cgit_context *ctx) +{ + if (!strcmp(ctx->qry.page, "repolist")) + return cgit_index_link(name, title, class, ctx->qry.search, ctx->qry.sort, + ctx->qry.ofs); + else if (!strcmp(ctx->qry.page, "summary")) + return cgit_summary_link(name, title, class, ctx->qry.head); + else if (!strcmp(ctx->qry.page, "tag")) + return cgit_tag_link(name, title, class, ctx->qry.head, + ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL); + else if (!strcmp(ctx->qry.page, "tree")) + return cgit_tree_link(name, title, class, ctx->qry.head, + ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, + ctx->qry.path); + else if (!strcmp(ctx->qry.page, "plain")) + return cgit_plain_link(name, title, class, ctx->qry.head, + ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, + ctx->qry.path); + else if (!strcmp(ctx->qry.page, "log")) + return cgit_log_link(name, title, class, ctx->qry.head, + ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, + ctx->qry.path, ctx->qry.ofs, + ctx->qry.grep, ctx->qry.search, + ctx->qry.showmsg); + else if (!strcmp(ctx->qry.page, "commit")) + return cgit_commit_link(name, title, class, ctx->qry.head, + ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, + ctx->qry.path, 0); + else if (!strcmp(ctx->qry.page, "patch")) + return cgit_patch_link(name, title, class, ctx->qry.head, + ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, + ctx->qry.path); + else if (!strcmp(ctx->qry.page, "refs")) + return cgit_refs_link(name, title, class, ctx->qry.head, + ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, + ctx->qry.path); + else if (!strcmp(ctx->qry.page, "snapshot")) + return cgit_snapshot_link(name, title, class, ctx->qry.head, + ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, + ctx->qry.path); + else if (!strcmp(ctx->qry.page, "diff")) + return cgit_diff_link(name, title, class, ctx->qry.head, + ctx->qry.sha1, ctx->qry.sha2, + ctx->qry.path, 0); + else if (!strcmp(ctx->qry.page, "stats")) + return cgit_stats_link(name, title, class, ctx->qry.head, + ctx->qry.path); + + /* Don't known how to make link for this page */ + repolink(title, class, ctx->qry.page, ctx->qry.head, ctx->qry.path); + html(">"); + html_txt(name); + html(""); +} + void cgit_object_link(struct object *obj) { char *page, *shortrev, *fullrev, *name; @@ -408,7 +497,7 @@ void cgit_object_link(struct object *obj) shortrev[10] = '\0'; if (obj->type == OBJ_COMMIT) { cgit_commit_link(fmt("commit %s...", shortrev), NULL, NULL, - ctx.qry.head, fullrev, 0); + ctx.qry.head, fullrev, NULL, 0); return; } else if (obj->type == OBJ_TREE) page = "tree"; @@ -491,7 +580,7 @@ void cgit_print_http_headers(struct cgit_context *ctx) else if (ctx->page.mimetype) htmlf("Content-Type: %s\n", ctx->page.mimetype); if (ctx->page.size) - htmlf("Content-Length: %ld\n", ctx->page.size); + htmlf("Content-Length: %zd\n", ctx->page.size); if (ctx->page.filename) htmlf("Content-Disposition: inline; filename=\"%s\"\n", ctx->page.filename); @@ -530,7 +619,7 @@ void cgit_print_docstart(struct cgit_context *ctx) html_attr(ctx->cfg.favicon); html("'/>\n"); } - if (host && ctx->repo) { + if (host && ctx->repo && ctx->qry.head) { html("qry.path = old_path; +} + static void print_header(struct cgit_context *ctx) { + char *logo = NULL, *logo_link = NULL; + html("