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); |