diff options
| -rw-r--r-- | ui-shared.c | 81 | ||||
| -rw-r--r-- | ui-shared.h | 2 |
2 files changed, 82 insertions, 1 deletions
diff --git a/ui-shared.c b/ui-shared.c index bc14e70..4fa506f 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
| @@ -399,6 +399,64 @@ void cgit_stats_link(const char *name, const char *title, const char *class, | |||
| 399 | reporevlink("stats", name, title, class, head, NULL, path); | 399 | reporevlink("stats", name, title, class, head, NULL, path); |
| 400 | } | 400 | } |
| 401 | 401 | ||
| 402 | void cgit_self_link(char *name, const char *title, const char *class, | ||
| 403 | struct cgit_context *ctx) | ||
| 404 | { | ||
| 405 | if (!strcmp(ctx->qry.page, "repolist")) | ||
| 406 | return cgit_index_link(name, title, class, ctx->qry.search, | ||
| 407 | ctx->qry.ofs); | ||
| 408 | else if (!strcmp(ctx->qry.page, "summary")) | ||
| 409 | return cgit_summary_link(name, title, class, ctx->qry.head); | ||
| 410 | else if (!strcmp(ctx->qry.page, "tag")) | ||
| 411 | return cgit_tag_link(name, title, class, ctx->qry.head, | ||
| 412 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL); | ||
| 413 | else if (!strcmp(ctx->qry.page, "tree")) | ||
| 414 | return cgit_tree_link(name, title, class, ctx->qry.head, | ||
| 415 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, | ||
| 416 | ctx->qry.path); | ||
| 417 | else if (!strcmp(ctx->qry.page, "plain")) | ||
| 418 | return cgit_plain_link(name, title, class, ctx->qry.head, | ||
| 419 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, | ||
| 420 | ctx->qry.path); | ||
| 421 | else if (!strcmp(ctx->qry.page, "log")) | ||
| 422 | return cgit_log_link(name, title, class, ctx->qry.head, | ||
| 423 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, | ||
| 424 | ctx->qry.path, ctx->qry.ofs, | ||
| 425 | ctx->qry.grep, ctx->qry.search, | ||
| 426 | ctx->qry.showmsg); | ||
| 427 | else if (!strcmp(ctx->qry.page, "commit")) | ||
| 428 | return cgit_commit_link(name, title, class, ctx->qry.head, | ||
| 429 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, | ||
| 430 | ctx->qry.path, 0); | ||
| 431 | else if (!strcmp(ctx->qry.page, "patch")) | ||
| 432 | return cgit_patch_link(name, title, class, ctx->qry.head, | ||
| 433 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, | ||
| 434 | ctx->qry.path); | ||
| 435 | else if (!strcmp(ctx->qry.page, "refs")) | ||
| 436 | return cgit_refs_link(name, title, class, ctx->qry.head, | ||
| 437 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, | ||
| 438 | ctx->qry.path); | ||
| 439 | else if (!strcmp(ctx->qry.page, "snapshot")) | ||
| 440 | return cgit_snapshot_link(name, title, class, ctx->qry.head, | ||
| 441 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, | ||
| 442 | ctx->qry.path); | ||
| 443 | else if (!strcmp(ctx->qry.page, "diff")) | ||
| 444 | return cgit_diff_link(name, title, class, ctx->qry.head, | ||
| 445 | ctx->qry.sha1, ctx->qry.sha2, | ||
| 446 | ctx->qry.path, 0); | ||
| 447 | else if (!strcmp(ctx->qry.page, "stats")) | ||
| 448 | return cgit_stats_link(name, title, class, ctx->qry.head, | ||
| 449 | ctx->qry.path); | ||
| 450 | |||
| 451 | /* Don't known how to make link for this page */ | ||
| 452 | repolink(title, class, ctx->qry.page, ctx->qry.head, ctx->qry.path); | ||
| 453 | html("><!-- cgit_self_link() doesn't know how to make link for page '"); | ||
| 454 | html_txt(ctx->qry.page); | ||
| 455 | html("' -->"); | ||
| 456 | html_txt(name); | ||
| 457 | html("</a>"); | ||
| 458 | } | ||
| 459 | |||
| 402 | void cgit_object_link(struct object *obj) | 460 | void cgit_object_link(struct object *obj) |
| 403 | { | 461 | { |
| 404 | char *page, *shortrev, *fullrev, *name; | 462 | char *page, *shortrev, *fullrev, *name; |
| @@ -650,6 +708,27 @@ static const char *hc(struct cgit_context *ctx, const char *page) | |||
| 650 | return strcmp(ctx->qry.page, page) ? NULL : "active"; | 708 | return strcmp(ctx->qry.page, page) ? NULL : "active"; |
| 651 | } | 709 | } |
| 652 | 710 | ||
| 711 | static void cgit_print_path_crumbs(struct cgit_context *ctx, char *path) | ||
| 712 | { | ||
| 713 | char *old_path = ctx->qry.path; | ||
| 714 | char *p = path, *q, *end = path + strlen(path); | ||
| 715 | |||
| 716 | ctx->qry.path = NULL; | ||
| 717 | cgit_self_link("root", NULL, NULL, ctx); | ||
| 718 | ctx->qry.path = p = path; | ||
| 719 | while (p < end) { | ||
| 720 | if (!(q = strchr(p, '/'))) | ||
| 721 | q = end; | ||
| 722 | *q = '\0'; | ||
| 723 | html_txt("/"); | ||
| 724 | cgit_self_link(p, NULL, NULL, ctx); | ||
| 725 | if (q < end) | ||
| 726 | *q = '/'; | ||
| 727 | p = q + 1; | ||
| 728 | } | ||
| 729 | ctx->qry.path = old_path; | ||
| 730 | } | ||
| 731 | |||
| 653 | static void print_header(struct cgit_context *ctx) | 732 | static void print_header(struct cgit_context *ctx) |
| 654 | { | 733 | { |
| 655 | html("<table id='header'>\n"); | 734 | html("<table id='header'>\n"); |
| @@ -760,7 +839,7 @@ void cgit_print_pageheader(struct cgit_context *ctx) | |||
| 760 | if (ctx->qry.vpath) { | 839 | if (ctx->qry.vpath) { |
| 761 | html("<div class='path'>"); | 840 | html("<div class='path'>"); |
| 762 | html("path: "); | 841 | html("path: "); |
| 763 | html_txt(ctx->qry.vpath); | 842 | cgit_print_path_crumbs(ctx, ctx->qry.vpath); |
| 764 | html("</div>"); | 843 | html("</div>"); |
| 765 | } | 844 | } |
| 766 | html("<div class='content'>"); | 845 | html("<div class='content'>"); |
diff --git a/ui-shared.h b/ui-shared.h index 308c982..3df5464 100644 --- a/ui-shared.h +++ b/ui-shared.h | |||
| @@ -46,6 +46,8 @@ extern void cgit_diff_link(const char *name, const char *title, | |||
| 46 | extern void cgit_stats_link(const char *name, const char *title, | 46 | extern void cgit_stats_link(const char *name, const char *title, |
| 47 | const char *class, const char *head, | 47 | const char *class, const char *head, |
| 48 | const char *path); | 48 | const char *path); |
| 49 | extern void cgit_self_link(char *name, const char *title, | ||
| 50 | const char *class, struct cgit_context *ctx); | ||
| 49 | extern void cgit_object_link(struct object *obj); | 51 | extern void cgit_object_link(struct object *obj); |
| 50 | 52 | ||
| 51 | extern void cgit_print_error(const char *msg); | 53 | extern void cgit_print_error(const char *msg); |
