diff options
| -rw-r--r-- | cgit.css | 20 | ||||
| -rw-r--r-- | ui-summary.c | 74 |
2 files changed, 85 insertions, 9 deletions
| @@ -10,6 +10,7 @@ body { | |||
| 10 | h2 { | 10 | h2 { |
| 11 | font-size: 120%; | 11 | font-size: 120%; |
| 12 | font-weight: bold; | 12 | font-weight: bold; |
| 13 | margin-top: 0em; | ||
| 13 | margin-bottom: 0.25em; | 14 | margin-bottom: 0.25em; |
| 14 | } | 15 | } |
| 15 | 16 | ||
| @@ -127,6 +128,25 @@ td#search input { | |||
| 127 | background-color: #fff; | 128 | background-color: #fff; |
| 128 | } | 129 | } |
| 129 | 130 | ||
| 131 | td#summary { | ||
| 132 | vertical-align: top; | ||
| 133 | padding-bottom: 1em; | ||
| 134 | } | ||
| 135 | |||
| 136 | td#archivelist { | ||
| 137 | padding-bottom: 1em; | ||
| 138 | } | ||
| 139 | |||
| 140 | td#archivelist table { | ||
| 141 | float: right; | ||
| 142 | border-collapse: collapse; | ||
| 143 | border: solid 1px #777; | ||
| 144 | } | ||
| 145 | |||
| 146 | td#archivelist table th { | ||
| 147 | background-color: #ccc; | ||
| 148 | } | ||
| 149 | |||
| 130 | td#content { | 150 | td#content { |
| 131 | padding: 1em 0.5em; | 151 | padding: 1em 0.5em; |
| 132 | } | 152 | } |
diff --git a/ui-summary.c b/ui-summary.c index 0a7869b..9388f5f 100644 --- a/ui-summary.c +++ b/ui-summary.c | |||
| @@ -8,6 +8,8 @@ | |||
| 8 | 8 | ||
| 9 | #include "cgit.h" | 9 | #include "cgit.h" |
| 10 | 10 | ||
| 11 | int items = 0; | ||
| 12 | |||
| 11 | static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, | 13 | static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, |
| 12 | int flags, void *cb_data) | 14 | int flags, void *cb_data) |
| 13 | { | 15 | { |
| @@ -83,6 +85,13 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, | |||
| 83 | tag = lookup_tag(sha1); | 85 | tag = lookup_tag(sha1); |
| 84 | if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) | 86 | if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) |
| 85 | return 2; | 87 | return 2; |
| 88 | if (!items) { | ||
| 89 | html("<tr class='nohover'><th class='left'>Tag</th>" | ||
| 90 | "<th class='left'>Created</th>" | ||
| 91 | "<th class='left'>Author</th>" | ||
| 92 | "<th class='left'>Reference</th></tr>\n"); | ||
| 93 | } | ||
| 94 | items++; | ||
| 86 | html("<tr><td>"); | 95 | html("<tr><td>"); |
| 87 | url = cgit_pageurl(cgit_query_repo, "view", | 96 | url = cgit_pageurl(cgit_query_repo, "view", |
| 88 | fmt("id=%s", sha1_to_hex(sha1))); | 97 | fmt("id=%s", sha1_to_hex(sha1))); |
| @@ -108,6 +117,44 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, | |||
| 108 | return 0; | 117 | return 0; |
| 109 | } | 118 | } |
| 110 | 119 | ||
| 120 | static int cgit_print_archive_cb(const char *refname, const unsigned char *sha1, | ||
| 121 | int flags, void *cb_data) | ||
| 122 | { | ||
| 123 | struct tag *tag; | ||
| 124 | struct taginfo *info; | ||
| 125 | struct object *obj; | ||
| 126 | char buf[256], *url; | ||
| 127 | |||
| 128 | if (prefixcmp(refname, "refs/archives")) | ||
| 129 | return 0; | ||
| 130 | strncpy(buf, refname+14, sizeof(buf)); | ||
| 131 | obj = parse_object(sha1); | ||
| 132 | if (!obj) | ||
| 133 | return 1; | ||
| 134 | if (obj->type == OBJ_TAG) { | ||
| 135 | tag = lookup_tag(sha1); | ||
| 136 | if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) | ||
| 137 | return 0; | ||
| 138 | hashcpy(sha1, tag->tagged->sha1); | ||
| 139 | } else if (obj->type != OBJ_BLOB) { | ||
| 140 | return 0; | ||
| 141 | } | ||
| 142 | if (!items) { | ||
| 143 | html("<table>"); | ||
| 144 | html("<tr><th>Downloads</th></tr>"); | ||
| 145 | } | ||
| 146 | items++; | ||
| 147 | html("<tr><td>"); | ||
| 148 | url = cgit_pageurl(cgit_query_repo, "blob", | ||
| 149 | fmt("id=%s&path=%s", sha1_to_hex(sha1), | ||
| 150 | buf)); | ||
| 151 | html_link_open(url, NULL, NULL); | ||
| 152 | html_txt(buf); | ||
| 153 | html_link_close(); | ||
| 154 | html("</td><tr>"); | ||
| 155 | return 0; | ||
| 156 | } | ||
| 157 | |||
| 111 | static void cgit_print_branches() | 158 | static void cgit_print_branches() |
| 112 | { | 159 | { |
| 113 | html("<tr class='nohover'><th class='left'>Branch</th>" | 160 | html("<tr class='nohover'><th class='left'>Branch</th>" |
| @@ -119,21 +166,30 @@ static void cgit_print_branches() | |||
| 119 | 166 | ||
| 120 | static void cgit_print_tags() | 167 | static void cgit_print_tags() |
| 121 | { | 168 | { |
| 122 | html("<tr class='nohover'><th class='left'>Tag</th>" | 169 | items = 0; |
| 123 | "<th class='left'>Created</th>" | ||
| 124 | "<th class='left'>Author</th>" | ||
| 125 | "<th class='left'>Reference</th></tr>\n"); | ||
| 126 | for_each_tag_ref(cgit_print_tag_cb, NULL); | 170 | for_each_tag_ref(cgit_print_tag_cb, NULL); |
| 127 | } | 171 | } |
| 128 | 172 | ||
| 173 | static void cgit_print_archives() | ||
| 174 | { | ||
| 175 | items = 0; | ||
| 176 | for_each_ref(cgit_print_archive_cb, NULL); | ||
| 177 | if (items) | ||
| 178 | html("</table>"); | ||
| 179 | } | ||
| 180 | |||
| 129 | void cgit_print_summary() | 181 | void cgit_print_summary() |
| 130 | { | 182 | { |
| 131 | html("<h2>"); | ||
| 132 | html(cgit_repo->name); | ||
| 133 | html("</h2><h3>"); | ||
| 134 | html(cgit_repo->desc); | ||
| 135 | html("</h3>"); | ||
| 136 | html("<table class='list nowrap'>"); | 183 | html("<table class='list nowrap'>"); |
| 184 | html("<tr class='nohover'><td id='summary' colspan='3'>"); | ||
| 185 | html("<h2>"); | ||
| 186 | html_txt(cgit_repo->name); | ||
| 187 | html(" - "); | ||
| 188 | html_txt(cgit_repo->desc); | ||
| 189 | html("</h2>"); | ||
| 190 | html("</td><td id='archivelist'>"); | ||
| 191 | cgit_print_archives(); | ||
| 192 | html("</td></tr>"); | ||
| 137 | cgit_print_branches(); | 193 | cgit_print_branches(); |
| 138 | html("<tr class='nohover'><td colspan='4'> </td></tr>"); | 194 | html("<tr class='nohover'><td colspan='4'> </td></tr>"); |
| 139 | cgit_print_tags(); | 195 | cgit_print_tags(); |
