Merge branch 'lh/about'
* lh/about: Add 'about site' and 'about repo' pages Prepare for 'about site' page / add 'root-readme' option to cgitrc Make it possible for a single cmd to work both with and without a repo Re-enable 'index-info' and add support for 'root-desc' in cgitrc Move included header-file out of repolist table Prepare for 'about repo' page
This commit is contained in:
		
							
								
								
									
										16
									
								
								cgit.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								cgit.c
									
									
									
									
									
								
							| @@ -19,6 +19,10 @@ void config_cb(const char *name, const char *value) | ||||
| { | ||||
| 	if (!strcmp(name, "root-title")) | ||||
| 		ctx.cfg.root_title = xstrdup(value); | ||||
| 	else if (!strcmp(name, "root-desc")) | ||||
| 		ctx.cfg.root_desc = xstrdup(value); | ||||
| 	else if (!strcmp(name, "root-readme")) | ||||
| 		ctx.cfg.root_readme = xstrdup(value); | ||||
| 	else if (!strcmp(name, "css")) | ||||
| 		ctx.cfg.css = xstrdup(value); | ||||
| 	else if (!strcmp(name, "logo")) | ||||
| @@ -159,6 +163,7 @@ static void prepare_context(struct cgit_context *ctx) | ||||
| 	ctx->cfg.renamelimit = -1; | ||||
| 	ctx->cfg.robots = "index, nofollow"; | ||||
| 	ctx->cfg.root_title = "Git repository browser"; | ||||
| 	ctx->cfg.root_desc = "a fast webinterface for the git dscm"; | ||||
| 	ctx->cfg.script_name = CGIT_SCRIPT_NAME; | ||||
| 	ctx->page.mimetype = "text/html"; | ||||
| 	ctx->page.charset = PAGE_ENCODING; | ||||
| @@ -304,7 +309,16 @@ static void process_request(struct cgit_context *ctx) | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	if (cmd->want_repo && prepare_repo_cmd(ctx)) | ||||
| 	if (cmd->want_repo && !ctx->repo) { | ||||
| 		cgit_print_http_headers(ctx); | ||||
| 		cgit_print_docstart(ctx); | ||||
| 		cgit_print_pageheader(ctx); | ||||
| 		cgit_print_error(fmt("No repository selected")); | ||||
| 		cgit_print_docend(); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	if (ctx->repo && prepare_repo_cmd(ctx)) | ||||
| 		return; | ||||
|  | ||||
| 	if (cmd->want_layout) { | ||||
|   | ||||
							
								
								
									
										2
									
								
								cgit.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								cgit.h
									
									
									
									
									
								
							| @@ -132,6 +132,8 @@ struct cgit_config { | ||||
| 	char *repo_group; | ||||
| 	char *robots; | ||||
| 	char *root_title; | ||||
| 	char *root_desc; | ||||
| 	char *root_readme; | ||||
| 	char *script_name; | ||||
| 	char *virtual_root; | ||||
| 	int cache_dynamic_ttl; | ||||
|   | ||||
							
								
								
									
										9
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								cmd.c
									
									
									
									
									
								
							| @@ -20,6 +20,14 @@ | ||||
| #include "ui-tag.h" | ||||
| #include "ui-tree.h" | ||||
|  | ||||
| static void about_fn(struct cgit_context *ctx) | ||||
| { | ||||
| 	if (ctx->repo) | ||||
| 		cgit_print_repo_readme(); | ||||
| 	else | ||||
| 		cgit_print_site_readme(); | ||||
| } | ||||
|  | ||||
| static void blob_fn(struct cgit_context *ctx) | ||||
| { | ||||
| 	cgit_print_blob(ctx->qry.sha1, ctx->qry.path); | ||||
| @@ -84,6 +92,7 @@ static void tree_fn(struct cgit_context *ctx) | ||||
| struct cgit_cmd *cgit_get_cmd(struct cgit_context *ctx) | ||||
| { | ||||
| 	static struct cgit_cmd cmds[] = { | ||||
| 		def_cmd(about, 0, 1), | ||||
| 		def_cmd(blob, 1, 0), | ||||
| 		def_cmd(commit, 1, 1), | ||||
| 		def_cmd(diff, 1, 1), | ||||
|   | ||||
| @@ -61,12 +61,6 @@ int is_match(struct cgit_repo *repo) | ||||
|  | ||||
| void print_header(int columns) | ||||
| { | ||||
| 	if (ctx.cfg.index_header) { | ||||
| 		htmlf("<tr class='nohover'><td colspan='%d' class='include-block'>", | ||||
| 		      columns); | ||||
| 		html_include(ctx.cfg.index_header); | ||||
| 		html("</td></tr>"); | ||||
| 	} | ||||
| 	html("<tr class='nohover'>" | ||||
| 	     "<th class='left'>Name</th>" | ||||
| 	     "<th class='left'>Description</th>" | ||||
| @@ -90,6 +84,9 @@ void cgit_print_repolist() | ||||
| 	cgit_print_docstart(&ctx); | ||||
| 	cgit_print_pageheader(&ctx); | ||||
|  | ||||
| 	if (ctx.cfg.index_header) | ||||
| 		html_include(ctx.cfg.index_header); | ||||
|  | ||||
| 	html("<table summary='repository list' class='list nowrap'>"); | ||||
| 	for (i=0; i<cgit_repolist.count; i++) { | ||||
| 		ctx.repo = &cgit_repolist.repos[i]; | ||||
| @@ -139,3 +136,9 @@ void cgit_print_repolist() | ||||
| 		cgit_print_error("No repositories found"); | ||||
| 	cgit_print_docend(); | ||||
| } | ||||
|  | ||||
| void cgit_print_site_readme() | ||||
| { | ||||
| 	if (ctx.cfg.root_readme) | ||||
| 		html_include(ctx.cfg.root_readme); | ||||
| } | ||||
|   | ||||
| @@ -2,5 +2,6 @@ | ||||
| #define UI_REPOLIST_H | ||||
|  | ||||
| extern void cgit_print_repolist(); | ||||
| extern void cgit_print_site_readme(); | ||||
|  | ||||
| #endif /* UI_REPOLIST_H */ | ||||
|   | ||||
							
								
								
									
										58
									
								
								ui-shared.c
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								ui-shared.c
									
									
									
									
									
								
							| @@ -114,6 +114,49 @@ char *cgit_currurl() | ||||
| 		return fmt("%s/", ctx.cfg.virtual_root); | ||||
| } | ||||
|  | ||||
| static void site_url(char *page, char *search) | ||||
| { | ||||
| 	char *delim = "?"; | ||||
|  | ||||
| 	if (ctx.cfg.virtual_root) { | ||||
| 		html_attr(ctx.cfg.virtual_root); | ||||
| 		if (ctx.cfg.virtual_root[strlen(ctx.cfg.virtual_root) - 1] != '/') | ||||
| 			html("/"); | ||||
| 	} else | ||||
| 		html(ctx.cfg.script_name); | ||||
|  | ||||
| 	if (page) { | ||||
| 		htmlf("?p=%s", page); | ||||
| 		delim = "&"; | ||||
| 	} | ||||
| 	if (search) { | ||||
| 		html(delim); | ||||
| 		html("q="); | ||||
| 		html_attr(search); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static void site_link(char *page, char *name, char *title, char *class, | ||||
| 		       char *search) | ||||
| { | ||||
| 	html("<a"); | ||||
| 	if (title) { | ||||
| 		html(" title='"); | ||||
| 		html_attr(title); | ||||
| 		html("'"); | ||||
| 	} | ||||
| 	if (class) { | ||||
| 		html(" class='"); | ||||
| 		html_attr(class); | ||||
| 		html("'"); | ||||
| 	} | ||||
| 	html(" href='"); | ||||
| 	site_url(page, search); | ||||
| 	html("'>"); | ||||
| 	html_txt(name); | ||||
| 	html("</a>"); | ||||
| } | ||||
|  | ||||
| static char *repolink(char *title, char *class, char *page, char *head, | ||||
| 		      char *path) | ||||
| { | ||||
| @@ -510,7 +553,10 @@ void cgit_print_pageheader(struct cgit_context *ctx) | ||||
| 		html_txt(ctx->repo->desc); | ||||
| 	} else { | ||||
| 		html(">"); | ||||
| 		html_txt("a fast webinterface for the git dscm"); | ||||
| 		if (ctx->cfg.root_desc) | ||||
| 			html_txt(ctx->cfg.root_desc); | ||||
| 		else if (ctx->cfg.index_info) | ||||
| 			html_include(ctx->cfg.index_info); | ||||
| 	} | ||||
| 	html("</td></tr></table>\n"); | ||||
|  | ||||
| @@ -528,6 +574,10 @@ void cgit_print_pageheader(struct cgit_context *ctx) | ||||
| 				 ctx->qry.head, ctx->qry.sha1); | ||||
| 		cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head, | ||||
| 			       ctx->qry.sha1, ctx->qry.sha2, NULL); | ||||
| 		if (ctx->repo->readme) | ||||
| 			reporevlink("about", "about", NULL, | ||||
| 				    hc(cmd, "about"), ctx->qry.head, NULL, | ||||
| 				    NULL); | ||||
| 		html("</td><td class='form'>"); | ||||
| 		html("<form class='right' method='get' action='"); | ||||
| 		if (ctx->cfg.virtual_root) | ||||
| @@ -546,9 +596,9 @@ void cgit_print_pageheader(struct cgit_context *ctx) | ||||
| 		html("<input type='submit' value='search'/>\n"); | ||||
| 		html("</form>\n"); | ||||
| 	} else { | ||||
| 		html("<a class='active' href='"); | ||||
| 		html_attr(cgit_rooturl()); | ||||
| 		html("'>index</a>\n"); | ||||
| 		site_link(NULL, "index", NULL, hc(cmd, "repolist"), NULL); | ||||
| 		if (ctx->cfg.root_readme) | ||||
| 			site_link("about", "about", NULL, hc(cmd, "about"), NULL); | ||||
| 		html("</td><td class='form'>"); | ||||
| 		html("<form method='get' action='"); | ||||
| 		html_attr(cgit_rooturl()); | ||||
|   | ||||
							
								
								
									
										14
									
								
								ui-summary.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								ui-summary.c
									
									
									
									
									
								
							| @@ -13,11 +13,6 @@ | ||||
|  | ||||
| void cgit_print_summary() | ||||
| { | ||||
| 	if (ctx.repo->readme) { | ||||
| 		html("<div id='summary'>"); | ||||
| 		html_include(ctx.repo->readme); | ||||
| 		html("</div>"); | ||||
| 	} | ||||
| 	html("<table summary='repository info' class='list nowrap'>"); | ||||
| 	cgit_print_branches(ctx.cfg.summary_branches); | ||||
| 	html("<tr class='nohover'><td colspan='4'> </td></tr>"); | ||||
| @@ -29,3 +24,12 @@ void cgit_print_summary() | ||||
| 	} | ||||
| 	html("</table>"); | ||||
| } | ||||
|  | ||||
| void cgit_print_repo_readme() | ||||
| { | ||||
| 	if (ctx.repo->readme) { | ||||
| 		html("<div id='summary'>"); | ||||
| 		html_include(ctx.repo->readme); | ||||
| 		html("</div>"); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -2,5 +2,6 @@ | ||||
| #define UI_SUMMARY_H | ||||
|  | ||||
| extern void cgit_print_summary(); | ||||
| extern void cgit_print_repo_readme(); | ||||
|  | ||||
| #endif /* UI_SUMMARY_H */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Lars Hjemli
					Lars Hjemli