diff options
Diffstat (limited to '')
| -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 {  h2 {  	font-size: 120%;  	font-weight: bold; +	margin-top: 0em;  	margin-bottom: 0.25em;  } @@ -127,6 +128,25 @@ td#search input {  	background-color: #fff;  } +td#summary { +	vertical-align: top; +	padding-bottom: 1em; +} + +td#archivelist { +	padding-bottom: 1em; +} + +td#archivelist table { +	float: right; +	border-collapse: collapse; +	border: solid 1px #777; +} + +td#archivelist table th { +	background-color: #ccc; +} +  td#content {  	padding: 1em 0.5em;  } 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 @@  #include "cgit.h" +int items = 0; +  static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1,  				int flags, void *cb_data)  { @@ -83,6 +85,13 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1,  		tag = lookup_tag(sha1);  		if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag)))  			return 2; +		if (!items) { +			html("<tr class='nohover'><th class='left'>Tag</th>" +			     "<th class='left'>Created</th>" +			     "<th class='left'>Author</th>" +			     "<th class='left'>Reference</th></tr>\n"); +		} +		items++;  		html("<tr><td>");  		url = cgit_pageurl(cgit_query_repo, "view",   				   fmt("id=%s", sha1_to_hex(sha1))); @@ -108,6 +117,44 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1,  	return 0;  } +static int cgit_print_archive_cb(const char *refname, const unsigned char *sha1, +				 int flags, void *cb_data) +{ +	struct tag *tag; +	struct taginfo *info; +	struct object *obj; +	char buf[256], *url; + +	if (prefixcmp(refname, "refs/archives")) +		return 0; +	strncpy(buf, refname+14, sizeof(buf)); +	obj = parse_object(sha1); +	if (!obj) +		return 1; +	if (obj->type == OBJ_TAG) { +		tag = lookup_tag(sha1); +		if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) +			return 0; +		hashcpy(sha1, tag->tagged->sha1); +	} else if (obj->type != OBJ_BLOB) { +		return 0; +	} +	if (!items) { +		html("<table>"); +		html("<tr><th>Downloads</th></tr>"); +	} +	items++; +	html("<tr><td>"); +	url = cgit_pageurl(cgit_query_repo, "blob", +			   fmt("id=%s&path=%s", sha1_to_hex(sha1), +			       buf)); +	html_link_open(url, NULL, NULL); +	html_txt(buf); +	html_link_close(); +	html("</td><tr>"); +	return 0; +} +  static void cgit_print_branches()  {  	html("<tr class='nohover'><th class='left'>Branch</th>" @@ -119,21 +166,30 @@ static void cgit_print_branches()  static void cgit_print_tags()  { -	html("<tr class='nohover'><th class='left'>Tag</th>" -	     "<th class='left'>Created</th>" -	     "<th class='left'>Author</th>" -	     "<th class='left'>Reference</th></tr>\n"); +	items = 0;  	for_each_tag_ref(cgit_print_tag_cb, NULL);  } +static void cgit_print_archives() +{ +	items = 0; +	for_each_ref(cgit_print_archive_cb, NULL); +	if (items) +		html("</table>"); +} +  void cgit_print_summary()  { -	html("<h2>"); -	html(cgit_repo->name); -	html("</h2><h3>"); -	html(cgit_repo->desc); -	html("</h3>");  	html("<table class='list nowrap'>"); +	html("<tr class='nohover'><td id='summary' colspan='3'>"); +	html("<h2>"); +	html_txt(cgit_repo->name); +	html(" - "); +	html_txt(cgit_repo->desc); +	html("</h2>"); +	html("</td><td id='archivelist'>"); +	cgit_print_archives(); +	html("</td></tr>");  	cgit_print_branches();  	html("<tr class='nohover'><td colspan='4'> </td></tr>");  	cgit_print_tags(); | 
