-rw-r--r-- | ui-shared.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/ui-shared.c b/ui-shared.c index ae29615..7efae7a 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
@@ -695,139 +695,149 @@ int print_archive_ref(const char *refname, const unsigned char *sha1, | |||
695 | html_txt(strlpart(buf, 20)); | 695 | html_txt(strlpart(buf, 20)); |
696 | html_link_close(); | 696 | html_link_close(); |
697 | return 0; | 697 | return 0; |
698 | } | 698 | } |
699 | 699 | ||
700 | void cgit_add_hidden_formfields(int incl_head, int incl_search, | 700 | void cgit_add_hidden_formfields(int incl_head, int incl_search, |
701 | const char *page) | 701 | const char *page) |
702 | { | 702 | { |
703 | char *url; | 703 | char *url; |
704 | 704 | ||
705 | if (!ctx.cfg.virtual_root) { | 705 | if (!ctx.cfg.virtual_root) { |
706 | url = fmt("%s/%s", ctx.qry.repo, page); | 706 | url = fmt("%s/%s", ctx.qry.repo, page); |
707 | if (ctx.qry.vpath) | 707 | if (ctx.qry.vpath) |
708 | url = fmt("%s/%s", url, ctx.qry.vpath); | 708 | url = fmt("%s/%s", url, ctx.qry.vpath); |
709 | html_hidden("url", url); | 709 | html_hidden("url", url); |
710 | } | 710 | } |
711 | 711 | ||
712 | if (incl_head && ctx.qry.head && ctx.repo->defbranch && | 712 | if (incl_head && ctx.qry.head && ctx.repo->defbranch && |
713 | strcmp(ctx.qry.head, ctx.repo->defbranch)) | 713 | strcmp(ctx.qry.head, ctx.repo->defbranch)) |
714 | html_hidden("h", ctx.qry.head); | 714 | html_hidden("h", ctx.qry.head); |
715 | 715 | ||
716 | if (ctx.qry.sha1) | 716 | if (ctx.qry.sha1) |
717 | html_hidden("id", ctx.qry.sha1); | 717 | html_hidden("id", ctx.qry.sha1); |
718 | if (ctx.qry.sha2) | 718 | if (ctx.qry.sha2) |
719 | html_hidden("id2", ctx.qry.sha2); | 719 | html_hidden("id2", ctx.qry.sha2); |
720 | if (ctx.qry.showmsg) | 720 | if (ctx.qry.showmsg) |
721 | html_hidden("showmsg", "1"); | 721 | html_hidden("showmsg", "1"); |
722 | 722 | ||
723 | if (incl_search) { | 723 | if (incl_search) { |
724 | if (ctx.qry.grep) | 724 | if (ctx.qry.grep) |
725 | html_hidden("qt", ctx.qry.grep); | 725 | html_hidden("qt", ctx.qry.grep); |
726 | if (ctx.qry.search) | 726 | if (ctx.qry.search) |
727 | html_hidden("q", ctx.qry.search); | 727 | html_hidden("q", ctx.qry.search); |
728 | } | 728 | } |
729 | } | 729 | } |
730 | 730 | ||
731 | static const char *hc(struct cgit_context *ctx, const char *page) | 731 | static const char *hc(struct cgit_context *ctx, const char *page) |
732 | { | 732 | { |
733 | return strcmp(ctx->qry.page, page) ? NULL : "active"; | 733 | return strcmp(ctx->qry.page, page) ? NULL : "active"; |
734 | } | 734 | } |
735 | 735 | ||
736 | static void cgit_print_path_crumbs(struct cgit_context *ctx, char *path) | 736 | static void cgit_print_path_crumbs(struct cgit_context *ctx, char *path) |
737 | { | 737 | { |
738 | char *old_path = ctx->qry.path; | 738 | char *old_path = ctx->qry.path; |
739 | char *p = path, *q, *end = path + strlen(path); | 739 | char *p = path, *q, *end = path + strlen(path); |
740 | 740 | ||
741 | ctx->qry.path = NULL; | 741 | ctx->qry.path = NULL; |
742 | cgit_self_link("root", NULL, NULL, ctx); | 742 | cgit_self_link("root", NULL, NULL, ctx); |
743 | ctx->qry.path = p = path; | 743 | ctx->qry.path = p = path; |
744 | while (p < end) { | 744 | while (p < end) { |
745 | if (!(q = strchr(p, '/'))) | 745 | if (!(q = strchr(p, '/'))) |
746 | q = end; | 746 | q = end; |
747 | *q = '\0'; | 747 | *q = '\0'; |
748 | html_txt("/"); | 748 | html_txt("/"); |
749 | cgit_self_link(p, NULL, NULL, ctx); | 749 | cgit_self_link(p, NULL, NULL, ctx); |
750 | if (q < end) | 750 | if (q < end) |
751 | *q = '/'; | 751 | *q = '/'; |
752 | p = q + 1; | 752 | p = q + 1; |
753 | } | 753 | } |
754 | ctx->qry.path = old_path; | 754 | ctx->qry.path = old_path; |
755 | } | 755 | } |
756 | 756 | ||
757 | static void print_header(struct cgit_context *ctx) | 757 | static void print_header(struct cgit_context *ctx) |
758 | { | 758 | { |
759 | char *logo = NULL, *logo_link = NULL; | ||
760 | |||
759 | html("<table id='header'>\n"); | 761 | html("<table id='header'>\n"); |
760 | html("<tr>\n"); | 762 | html("<tr>\n"); |
761 | 763 | ||
762 | if (ctx->cfg.logo && ctx->cfg.logo[0] != 0) { | 764 | if (ctx->repo && ctx->repo->logo && *ctx->repo->logo) |
765 | logo = ctx->repo->logo; | ||
766 | else | ||
767 | logo = ctx->cfg.logo; | ||
768 | if (ctx->repo && ctx->repo->logo_link && *ctx->repo->logo_link) | ||
769 | logo_link = ctx->repo->logo_link; | ||
770 | else | ||
771 | logo_link = ctx->cfg.logo_link; | ||
772 | if (logo && *logo) { | ||
763 | html("<td class='logo' rowspan='2'><a href='"); | 773 | html("<td class='logo' rowspan='2'><a href='"); |
764 | if (ctx->cfg.logo_link) | 774 | if (logo_link && *logo_link) |
765 | html_attr(ctx->cfg.logo_link); | 775 | html_attr(logo_link); |
766 | else | 776 | else |
767 | html_attr(cgit_rooturl()); | 777 | html_attr(cgit_rooturl()); |
768 | html("'><img src='"); | 778 | html("'><img src='"); |
769 | html_attr(ctx->cfg.logo); | 779 | html_attr(logo); |
770 | html("' alt='cgit logo'/></a></td>\n"); | 780 | html("' alt='cgit logo'/></a></td>\n"); |
771 | } | 781 | } |
772 | 782 | ||
773 | html("<td class='main'>"); | 783 | html("<td class='main'>"); |
774 | if (ctx->repo) { | 784 | if (ctx->repo) { |
775 | cgit_index_link("index", NULL, NULL, NULL, 0); | 785 | cgit_index_link("index", NULL, NULL, NULL, 0); |
776 | html(" : "); | 786 | html(" : "); |
777 | cgit_summary_link(ctx->repo->name, ctx->repo->name, NULL, NULL); | 787 | cgit_summary_link(ctx->repo->name, ctx->repo->name, NULL, NULL); |
778 | html("</td><td class='form'>"); | 788 | html("</td><td class='form'>"); |
779 | html("<form method='get' action=''>\n"); | 789 | html("<form method='get' action=''>\n"); |
780 | cgit_add_hidden_formfields(0, 1, ctx->qry.page); | 790 | cgit_add_hidden_formfields(0, 1, ctx->qry.page); |
781 | html("<select name='h' onchange='this.form.submit();'>\n"); | 791 | html("<select name='h' onchange='this.form.submit();'>\n"); |
782 | for_each_branch_ref(print_branch_option, ctx->qry.head); | 792 | for_each_branch_ref(print_branch_option, ctx->qry.head); |
783 | html("</select> "); | 793 | html("</select> "); |
784 | html("<input type='submit' name='' value='switch'/>"); | 794 | html("<input type='submit' name='' value='switch'/>"); |
785 | html("</form>"); | 795 | html("</form>"); |
786 | } else | 796 | } else |
787 | html_txt(ctx->cfg.root_title); | 797 | html_txt(ctx->cfg.root_title); |
788 | html("</td></tr>\n"); | 798 | html("</td></tr>\n"); |
789 | 799 | ||
790 | html("<tr><td class='sub'>"); | 800 | html("<tr><td class='sub'>"); |
791 | if (ctx->repo) { | 801 | if (ctx->repo) { |
792 | html_txt(ctx->repo->desc); | 802 | html_txt(ctx->repo->desc); |
793 | html("</td><td class='sub right'>"); | 803 | html("</td><td class='sub right'>"); |
794 | html_txt(ctx->repo->owner); | 804 | html_txt(ctx->repo->owner); |
795 | } else { | 805 | } else { |
796 | if (ctx->cfg.root_desc) | 806 | if (ctx->cfg.root_desc) |
797 | html_txt(ctx->cfg.root_desc); | 807 | html_txt(ctx->cfg.root_desc); |
798 | else if (ctx->cfg.index_info) | 808 | else if (ctx->cfg.index_info) |
799 | html_include(ctx->cfg.index_info); | 809 | html_include(ctx->cfg.index_info); |
800 | } | 810 | } |
801 | html("</td></tr></table>\n"); | 811 | html("</td></tr></table>\n"); |
802 | } | 812 | } |
803 | 813 | ||
804 | void cgit_print_pageheader(struct cgit_context *ctx) | 814 | void cgit_print_pageheader(struct cgit_context *ctx) |
805 | { | 815 | { |
806 | html("<div id='cgit'>"); | 816 | html("<div id='cgit'>"); |
807 | if (!ctx->cfg.noheader) | 817 | if (!ctx->cfg.noheader) |
808 | print_header(ctx); | 818 | print_header(ctx); |
809 | 819 | ||
810 | html("<table class='tabs'><tr><td>\n"); | 820 | html("<table class='tabs'><tr><td>\n"); |
811 | if (ctx->repo) { | 821 | if (ctx->repo) { |
812 | cgit_summary_link("summary", NULL, hc(ctx, "summary"), | 822 | cgit_summary_link("summary", NULL, hc(ctx, "summary"), |
813 | ctx->qry.head); | 823 | ctx->qry.head); |
814 | cgit_refs_link("refs", NULL, hc(ctx, "refs"), ctx->qry.head, | 824 | cgit_refs_link("refs", NULL, hc(ctx, "refs"), ctx->qry.head, |
815 | ctx->qry.sha1, NULL); | 825 | ctx->qry.sha1, NULL); |
816 | cgit_log_link("log", NULL, hc(ctx, "log"), ctx->qry.head, | 826 | cgit_log_link("log", NULL, hc(ctx, "log"), ctx->qry.head, |
817 | NULL, ctx->qry.vpath, 0, NULL, NULL, | 827 | NULL, ctx->qry.vpath, 0, NULL, NULL, |
818 | ctx->qry.showmsg); | 828 | ctx->qry.showmsg); |
819 | cgit_tree_link("tree", NULL, hc(ctx, "tree"), ctx->qry.head, | 829 | cgit_tree_link("tree", NULL, hc(ctx, "tree"), ctx->qry.head, |
820 | ctx->qry.sha1, ctx->qry.vpath); | 830 | ctx->qry.sha1, ctx->qry.vpath); |
821 | cgit_commit_link("commit", NULL, hc(ctx, "commit"), | 831 | cgit_commit_link("commit", NULL, hc(ctx, "commit"), |
822 | ctx->qry.head, ctx->qry.sha1, ctx->qry.vpath, 0); | 832 | ctx->qry.head, ctx->qry.sha1, ctx->qry.vpath, 0); |
823 | cgit_diff_link("diff", NULL, hc(ctx, "diff"), ctx->qry.head, | 833 | cgit_diff_link("diff", NULL, hc(ctx, "diff"), ctx->qry.head, |
824 | ctx->qry.sha1, ctx->qry.sha2, ctx->qry.vpath, 0); | 834 | ctx->qry.sha1, ctx->qry.sha2, ctx->qry.vpath, 0); |
825 | if (ctx->repo->max_stats) | 835 | if (ctx->repo->max_stats) |
826 | cgit_stats_link("stats", NULL, hc(ctx, "stats"), | 836 | cgit_stats_link("stats", NULL, hc(ctx, "stats"), |
827 | ctx->qry.head, ctx->qry.vpath); | 837 | ctx->qry.head, ctx->qry.vpath); |
828 | if (ctx->repo->readme) | 838 | if (ctx->repo->readme) |
829 | reporevlink("about", "about", NULL, | 839 | reporevlink("about", "about", NULL, |
830 | hc(ctx, "about"), ctx->qry.head, NULL, | 840 | hc(ctx, "about"), ctx->qry.head, NULL, |
831 | NULL); | 841 | NULL); |
832 | html("</td><td class='form'>"); | 842 | html("</td><td class='form'>"); |
833 | html("<form class='right' method='get' action='"); | 843 | html("<form class='right' method='get' action='"); |