summaryrefslogtreecommitdiffabout
path: root/ui-shared.c
Unidiff
Diffstat (limited to 'ui-shared.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-shared.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/ui-shared.c b/ui-shared.c
index 3d5030b..bc14e70 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -632,166 +632,172 @@ void cgit_add_hidden_formfields(int incl_head, int incl_search,
632 632
633 if (ctx.qry.sha1) 633 if (ctx.qry.sha1)
634 html_hidden("id", ctx.qry.sha1); 634 html_hidden("id", ctx.qry.sha1);
635 if (ctx.qry.sha2) 635 if (ctx.qry.sha2)
636 html_hidden("id2", ctx.qry.sha2); 636 html_hidden("id2", ctx.qry.sha2);
637 if (ctx.qry.showmsg) 637 if (ctx.qry.showmsg)
638 html_hidden("showmsg", "1"); 638 html_hidden("showmsg", "1");
639 639
640 if (incl_search) { 640 if (incl_search) {
641 if (ctx.qry.grep) 641 if (ctx.qry.grep)
642 html_hidden("qt", ctx.qry.grep); 642 html_hidden("qt", ctx.qry.grep);
643 if (ctx.qry.search) 643 if (ctx.qry.search)
644 html_hidden("q", ctx.qry.search); 644 html_hidden("q", ctx.qry.search);
645 } 645 }
646} 646}
647 647
648static const char *hc(struct cgit_context *ctx, const char *page) 648static const char *hc(struct cgit_context *ctx, const char *page)
649{ 649{
650 return strcmp(ctx->qry.page, page) ? NULL : "active"; 650 return strcmp(ctx->qry.page, page) ? NULL : "active";
651} 651}
652 652
653static void print_header(struct cgit_context *ctx) 653static void print_header(struct cgit_context *ctx)
654{ 654{
655 html("<table id='header'>\n"); 655 html("<table id='header'>\n");
656 html("<tr>\n"); 656 html("<tr>\n");
657 657
658 if (ctx->cfg.logo && ctx->cfg.logo[0] != 0) { 658 if (ctx->cfg.logo && ctx->cfg.logo[0] != 0) {
659 html("<td class='logo' rowspan='2'><a href='"); 659 html("<td class='logo' rowspan='2'><a href='");
660 if (ctx->cfg.logo_link) 660 if (ctx->cfg.logo_link)
661 html_attr(ctx->cfg.logo_link); 661 html_attr(ctx->cfg.logo_link);
662 else 662 else
663 html_attr(cgit_rooturl()); 663 html_attr(cgit_rooturl());
664 html("'><img src='"); 664 html("'><img src='");
665 html_attr(ctx->cfg.logo); 665 html_attr(ctx->cfg.logo);
666 html("' alt='cgit logo'/></a></td>\n"); 666 html("' alt='cgit logo'/></a></td>\n");
667 } 667 }
668 668
669 html("<td class='main'>"); 669 html("<td class='main'>");
670 if (ctx->repo) { 670 if (ctx->repo) {
671 cgit_index_link("index", NULL, NULL, NULL, 0); 671 cgit_index_link("index", NULL, NULL, NULL, 0);
672 html(" : "); 672 html(" : ");
673 cgit_summary_link(ctx->repo->name, ctx->repo->name, NULL, NULL); 673 cgit_summary_link(ctx->repo->name, ctx->repo->name, NULL, NULL);
674 html("</td><td class='form'>"); 674 html("</td><td class='form'>");
675 html("<form method='get' action=''>\n"); 675 html("<form method='get' action=''>\n");
676 cgit_add_hidden_formfields(0, 1, ctx->qry.page); 676 cgit_add_hidden_formfields(0, 1, ctx->qry.page);
677 html("<select name='h' onchange='this.form.submit();'>\n"); 677 html("<select name='h' onchange='this.form.submit();'>\n");
678 for_each_branch_ref(print_branch_option, ctx->qry.head); 678 for_each_branch_ref(print_branch_option, ctx->qry.head);
679 html("</select> "); 679 html("</select> ");
680 html("<input type='submit' name='' value='switch'/>"); 680 html("<input type='submit' name='' value='switch'/>");
681 html("</form>"); 681 html("</form>");
682 } else 682 } else
683 html_txt(ctx->cfg.root_title); 683 html_txt(ctx->cfg.root_title);
684 html("</td></tr>\n"); 684 html("</td></tr>\n");
685 685
686 html("<tr><td class='sub'>"); 686 html("<tr><td class='sub'>");
687 if (ctx->repo) { 687 if (ctx->repo) {
688 html_txt(ctx->repo->desc); 688 html_txt(ctx->repo->desc);
689 html("</td><td class='sub right'>"); 689 html("</td><td class='sub right'>");
690 html_txt(ctx->repo->owner); 690 html_txt(ctx->repo->owner);
691 } else { 691 } else {
692 if (ctx->cfg.root_desc) 692 if (ctx->cfg.root_desc)
693 html_txt(ctx->cfg.root_desc); 693 html_txt(ctx->cfg.root_desc);
694 else if (ctx->cfg.index_info) 694 else if (ctx->cfg.index_info)
695 html_include(ctx->cfg.index_info); 695 html_include(ctx->cfg.index_info);
696 } 696 }
697 html("</td></tr></table>\n"); 697 html("</td></tr></table>\n");
698} 698}
699 699
700void cgit_print_pageheader(struct cgit_context *ctx) 700void cgit_print_pageheader(struct cgit_context *ctx)
701{ 701{
702 html("<div id='cgit'>"); 702 html("<div id='cgit'>");
703 if (!ctx->cfg.noheader) 703 if (!ctx->cfg.noheader)
704 print_header(ctx); 704 print_header(ctx);
705 705
706 html("<table class='tabs'><tr><td>\n"); 706 html("<table class='tabs'><tr><td>\n");
707 if (ctx->repo) { 707 if (ctx->repo) {
708 cgit_summary_link("summary", NULL, hc(ctx, "summary"), 708 cgit_summary_link("summary", NULL, hc(ctx, "summary"),
709 ctx->qry.head); 709 ctx->qry.head);
710 cgit_refs_link("refs", NULL, hc(ctx, "refs"), ctx->qry.head, 710 cgit_refs_link("refs", NULL, hc(ctx, "refs"), ctx->qry.head,
711 ctx->qry.sha1, NULL); 711 ctx->qry.sha1, NULL);
712 cgit_log_link("log", NULL, hc(ctx, "log"), ctx->qry.head, 712 cgit_log_link("log", NULL, hc(ctx, "log"), ctx->qry.head,
713 NULL, NULL, 0, NULL, NULL, ctx->qry.showmsg); 713 NULL, NULL, 0, NULL, NULL, ctx->qry.showmsg);
714 cgit_tree_link("tree", NULL, hc(ctx, "tree"), ctx->qry.head, 714 cgit_tree_link("tree", NULL, hc(ctx, "tree"), ctx->qry.head,
715 ctx->qry.sha1, NULL); 715 ctx->qry.sha1, NULL);
716 cgit_commit_link("commit", NULL, hc(ctx, "commit"), 716 cgit_commit_link("commit", NULL, hc(ctx, "commit"),
717 ctx->qry.head, ctx->qry.sha1, 0); 717 ctx->qry.head, ctx->qry.sha1, 0);
718 cgit_diff_link("diff", NULL, hc(ctx, "diff"), ctx->qry.head, 718 cgit_diff_link("diff", NULL, hc(ctx, "diff"), ctx->qry.head,
719 ctx->qry.sha1, ctx->qry.sha2, NULL, 0); 719 ctx->qry.sha1, ctx->qry.sha2, NULL, 0);
720 if (ctx->repo->max_stats) 720 if (ctx->repo->max_stats)
721 cgit_stats_link("stats", NULL, hc(ctx, "stats"), 721 cgit_stats_link("stats", NULL, hc(ctx, "stats"),
722 ctx->qry.head, NULL); 722 ctx->qry.head, NULL);
723 if (ctx->repo->readme) 723 if (ctx->repo->readme)
724 reporevlink("about", "about", NULL, 724 reporevlink("about", "about", NULL,
725 hc(ctx, "about"), ctx->qry.head, NULL, 725 hc(ctx, "about"), ctx->qry.head, NULL,
726 NULL); 726 NULL);
727 html("</td><td class='form'>"); 727 html("</td><td class='form'>");
728 html("<form class='right' method='get' action='"); 728 html("<form class='right' method='get' action='");
729 if (ctx->cfg.virtual_root) 729 if (ctx->cfg.virtual_root)
730 html_url_path(cgit_fileurl(ctx->qry.repo, "log", 730 html_url_path(cgit_fileurl(ctx->qry.repo, "log",
731 ctx->qry.vpath, NULL)); 731 ctx->qry.vpath, NULL));
732 html("'>\n"); 732 html("'>\n");
733 cgit_add_hidden_formfields(1, 0, "log"); 733 cgit_add_hidden_formfields(1, 0, "log");
734 html("<select name='qt'>\n"); 734 html("<select name='qt'>\n");
735 html_option("grep", "log msg", ctx->qry.grep); 735 html_option("grep", "log msg", ctx->qry.grep);
736 html_option("author", "author", ctx->qry.grep); 736 html_option("author", "author", ctx->qry.grep);
737 html_option("committer", "committer", ctx->qry.grep); 737 html_option("committer", "committer", ctx->qry.grep);
738 html("</select>\n"); 738 html("</select>\n");
739 html("<input class='txt' type='text' size='10' name='q' value='"); 739 html("<input class='txt' type='text' size='10' name='q' value='");
740 html_attr(ctx->qry.search); 740 html_attr(ctx->qry.search);
741 html("'/>\n"); 741 html("'/>\n");
742 html("<input type='submit' value='search'/>\n"); 742 html("<input type='submit' value='search'/>\n");
743 html("</form>\n"); 743 html("</form>\n");
744 } else { 744 } else {
745 site_link(NULL, "index", NULL, hc(ctx, "repolist"), NULL, 0); 745 site_link(NULL, "index", NULL, hc(ctx, "repolist"), NULL, 0);
746 if (ctx->cfg.root_readme) 746 if (ctx->cfg.root_readme)
747 site_link("about", "about", NULL, hc(ctx, "about"), 747 site_link("about", "about", NULL, hc(ctx, "about"),
748 NULL, 0); 748 NULL, 0);
749 html("</td><td class='form'>"); 749 html("</td><td class='form'>");
750 html("<form method='get' action='"); 750 html("<form method='get' action='");
751 html_attr(cgit_rooturl()); 751 html_attr(cgit_rooturl());
752 html("'>\n"); 752 html("'>\n");
753 html("<input type='text' name='q' size='10' value='"); 753 html("<input type='text' name='q' size='10' value='");
754 html_attr(ctx->qry.search); 754 html_attr(ctx->qry.search);
755 html("'/>\n"); 755 html("'/>\n");
756 html("<input type='submit' value='search'/>\n"); 756 html("<input type='submit' value='search'/>\n");
757 html("</form>"); 757 html("</form>");
758 } 758 }
759 html("</td></tr></table>\n"); 759 html("</td></tr></table>\n");
760 if (ctx->qry.vpath) {
761 html("<div class='path'>");
762 html("path: ");
763 html_txt(ctx->qry.vpath);
764 html("</div>");
765 }
760 html("<div class='content'>"); 766 html("<div class='content'>");
761} 767}
762 768
763void cgit_print_filemode(unsigned short mode) 769void cgit_print_filemode(unsigned short mode)
764{ 770{
765 if (S_ISDIR(mode)) 771 if (S_ISDIR(mode))
766 html("d"); 772 html("d");
767 else if (S_ISLNK(mode)) 773 else if (S_ISLNK(mode))
768 html("l"); 774 html("l");
769 else if (S_ISGITLINK(mode)) 775 else if (S_ISGITLINK(mode))
770 html("m"); 776 html("m");
771 else 777 else
772 html("-"); 778 html("-");
773 html_fileperm(mode >> 6); 779 html_fileperm(mode >> 6);
774 html_fileperm(mode >> 3); 780 html_fileperm(mode >> 3);
775 html_fileperm(mode); 781 html_fileperm(mode);
776} 782}
777 783
778void cgit_print_snapshot_links(const char *repo, const char *head, 784void cgit_print_snapshot_links(const char *repo, const char *head,
779 const char *hex, int snapshots) 785 const char *hex, int snapshots)
780{ 786{
781 const struct cgit_snapshot_format* f; 787 const struct cgit_snapshot_format* f;
782 char *prefix; 788 char *prefix;
783 char *filename; 789 char *filename;
784 unsigned char sha1[20]; 790 unsigned char sha1[20];
785 791
786 if (get_sha1(fmt("refs/tags/%s", hex), sha1) == 0 && 792 if (get_sha1(fmt("refs/tags/%s", hex), sha1) == 0 &&
787 (hex[0] == 'v' || hex[0] == 'V') && isdigit(hex[1])) 793 (hex[0] == 'v' || hex[0] == 'V') && isdigit(hex[1]))
788 hex++; 794 hex++;
789 prefix = xstrdup(fmt("%s-%s", cgit_repobasename(repo), hex)); 795 prefix = xstrdup(fmt("%s-%s", cgit_repobasename(repo), hex));
790 for (f = cgit_snapshot_formats; f->suffix; f++) { 796 for (f = cgit_snapshot_formats; f->suffix; f++) {
791 if (!(snapshots & f->bit)) 797 if (!(snapshots & f->bit))
792 continue; 798 continue;
793 filename = fmt("%s%s", prefix, f->suffix); 799 filename = fmt("%s%s", prefix, f->suffix);
794 cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename); 800 cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename);
795 html("<br/>"); 801 html("<br/>");
796 } 802 }
797} 803}