summaryrefslogtreecommitdiffabout
path: root/ui-shared.c
authorJohan Herland <johan@herland.net>2010-06-09 23:09:28 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2010-06-19 08:40:22 (UTC)
commitc93ef96aaf77437abeb552bd9e30973f90365f3a (patch) (unidiff)
treedec445607efb7a9996d008330517730fc0482de3 /ui-shared.c
parentc8e3295469bd3b8e38a9ea4478d517d3861e6c93 (diff)
downloadcgit-c93ef96aaf77437abeb552bd9e30973f90365f3a.zip
cgit-c93ef96aaf77437abeb552bd9e30973f90365f3a.tar.gz
cgit-c93ef96aaf77437abeb552bd9e30973f90365f3a.tar.bz2
ui-shared: Display path limit directly beneath tab bar in relevant pages
Design-wise, the path is shown by "expanding" the grey border between the tab bar and the content area of the page to house the current path limit. This is only displayed on pages where the path limit is relevant, and only when a path limit is in effect. Signed-off-by: Johan Herland <johan@herland.net> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
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}