Merge branch 'lh/layout'
* lh/layout: Make repository search case insensitive Remove 'patch' link from tab, add to commit view Implement minimal freetext search in the repolist More layout fixes Minor fixup in tree-view css Reintroduce the branch switcher Add fixed link to index page from repo header Include diff in commit view Replace sidebar/logo
Tá an tiomantas seo le fáil i:
		
							
								
								
									
										218
									
								
								cgit.css
									
									
									
									
									
								
							
							
						
						
									
										218
									
								
								cgit.css
									
									
									
									
									
								
							| @@ -11,41 +11,104 @@ body { | ||||
| 	padding: 4px; | ||||
| } | ||||
|  | ||||
| table { | ||||
|       border-collapse: collapse; | ||||
| } | ||||
|  | ||||
| h2 { | ||||
| 	font-size: 120%; | ||||
| 	font-weight: bold; | ||||
| 	margin-top: 0em; | ||||
| 	margin-bottom: 0.25em; | ||||
| } | ||||
|  | ||||
| h3 { | ||||
| 	margin-top: 0em; | ||||
| 	font-size: 100%; | ||||
| 	font-weight: normal; | ||||
| } | ||||
|  | ||||
| h4 { | ||||
| 	margin-top: 1.5em; | ||||
| 	margin-bottom: 0.1em; | ||||
| 	font-size: 100%; | ||||
| 	font-weight: bold; | ||||
| } | ||||
|  | ||||
| a { | ||||
| 	color: #600; | ||||
| 	color: blue; | ||||
| 	text-decoration: none; | ||||
| } | ||||
|  | ||||
| a:hover { | ||||
| 	background-color: #ddd; | ||||
| 	text-decoration: none; | ||||
| 	text-decoration: underline; | ||||
| } | ||||
|  | ||||
| table { | ||||
|       border-collapse: collapse; | ||||
| } | ||||
|  | ||||
| table#header { | ||||
| 	width: 100%; | ||||
| 	margin-bottom: 1em; | ||||
| } | ||||
|  | ||||
| table#header td.logo { | ||||
| 	width: 96px; | ||||
| } | ||||
|  | ||||
| table#header td.main { | ||||
| 	font-size: 250%; | ||||
| 	padding-left: 10px; | ||||
| } | ||||
|  | ||||
| table#header td.main a { | ||||
| 	color: #000; | ||||
| } | ||||
|  | ||||
| table#header td.form { | ||||
| 	text-align: right; | ||||
| 	vertical-align: bottom; | ||||
| 	padding-right: 1em; | ||||
| 	padding-bottom: 2px; | ||||
| } | ||||
|  | ||||
| table#header td.form form, | ||||
| table#header td.form input, | ||||
| table#header td.form select { | ||||
| 	font-size: 90%; | ||||
| } | ||||
|  | ||||
| table#header td.sub { | ||||
| 	color: #777; | ||||
| 	border-top: solid 1px #ccc; | ||||
| 	padding-left: 10px; | ||||
| } | ||||
|  | ||||
| table.tabs { | ||||
| 	/* border-bottom: solid 2px #ccc; */ | ||||
| 	border-collapse: collapse; | ||||
| 	margin-top: 2em; | ||||
| 	margin-bottom: 0px; | ||||
| 	width: 100%; | ||||
| } | ||||
|  | ||||
| table.tabs td { | ||||
| 	padding: 0px 1em; | ||||
| 	vertical-align: bottom; | ||||
| } | ||||
|  | ||||
| table.tabs td a { | ||||
| 	padding: 2px 0.75em; | ||||
| 	color: #777; | ||||
| 	font-size: 110%; | ||||
| } | ||||
|  | ||||
| table.tabs td a.active { | ||||
| 	color: #000; | ||||
| 	background-color: #ccc; | ||||
| } | ||||
|  | ||||
| table.tabs td.form { | ||||
| 	text-align: right; | ||||
| } | ||||
|  | ||||
| table.tabs td.form form { | ||||
| 	padding-bottom: 2px; | ||||
| 	font-size: 90%; | ||||
| } | ||||
|  | ||||
| table.tabs td.form input, | ||||
| table.tabs td.form select { | ||||
| 	font-size: 90%; | ||||
| } | ||||
|  | ||||
| div.content { | ||||
| 	margin: 0px; | ||||
| 	padding: 2em; | ||||
| 	border-top: solid 3px #ccc; | ||||
| 	border-bottom: solid 3px #ccc; | ||||
| } | ||||
|  | ||||
|  | ||||
| table.list { | ||||
| 	width: 100%; | ||||
| 	border: none; | ||||
| 	border-collapse: collapse; | ||||
| } | ||||
| @@ -55,7 +118,7 @@ table.list tr { | ||||
| } | ||||
|  | ||||
| table.list tr:hover { | ||||
| 	background: #f8f8f8; | ||||
| 	background: #eee; | ||||
| } | ||||
|  | ||||
| table.list tr.nohover:hover { | ||||
| @@ -64,8 +127,11 @@ table.list tr.nohover:hover { | ||||
|  | ||||
| table.list th { | ||||
| 	font-weight: bold; | ||||
| 	border-bottom: solid 1px #777; | ||||
| 	padding: 0.1em 0.5em 0.1em 0.5em; | ||||
| 	/* color: #888; | ||||
| 	border-top: dashed 1px #888; | ||||
| 	border-bottom: dashed 1px #888; | ||||
| 	*/ | ||||
| 	padding: 0.1em 0.5em 0.05em 0.5em; | ||||
| 	vertical-align: baseline; | ||||
| } | ||||
|  | ||||
| @@ -74,81 +140,14 @@ table.list td { | ||||
| 	padding: 0.1em 0.5em 0.1em 0.5em; | ||||
| } | ||||
|  | ||||
| table.list td a { | ||||
| 	color: black; | ||||
| } | ||||
|  | ||||
| img { | ||||
| 	border: none; | ||||
| } | ||||
|  | ||||
| table#layout { | ||||
| 	border-collapse: collapse; | ||||
| 	border: none; | ||||
| 	margin: 0px; | ||||
| } | ||||
|  | ||||
| td#sidebar { | ||||
| 	vertical-align: top; | ||||
| 	width: 162px; | ||||
| 	padding: 0px 0px 0px 0px; | ||||
| 	margin: 0px; | ||||
| } | ||||
|  | ||||
| td#sidebar table { | ||||
| 	border-collapse: separate; | ||||
| 	border-spacing: 0px; | ||||
| 	margin: 0px; | ||||
| 	padding: 0px; | ||||
| 	background-color: #ccc; | ||||
| } | ||||
|  | ||||
| td#sidebar table.sidebar td.sidebar { | ||||
| 	padding: 4px; | ||||
| 	border-top: solid 1px #eee; | ||||
| 	border-left: solid 1px #eee; | ||||
| 	border-right: solid 1px #aaa; | ||||
| 	border-bottom: solid 1px #aaa; | ||||
| } | ||||
|  | ||||
| div#logo { | ||||
| 	margin: 0px; | ||||
| 	padding: 4px 0px 4px 0px; | ||||
| 	text-align: center; | ||||
| 	background-color: #ccc; | ||||
| 	border-top: solid 1px #eee; | ||||
| 	border-left: solid 1px #eee; | ||||
| 	border-right: solid 1px #aaa; | ||||
| 	border-bottom: solid 1px #aaa; | ||||
| } | ||||
|  | ||||
| td#sidebar h1 { | ||||
| 	font-size: 10pt; | ||||
| 	font-weight: bold; | ||||
| 	margin: 8px 0px 0px 0px; | ||||
| } | ||||
|  | ||||
| td#sidebar h1.first { | ||||
| 	margin-top: 0px; | ||||
| } | ||||
|  | ||||
| td#sidebar a.menu { | ||||
| 	display: block; | ||||
| 	background-color: #ccc; | ||||
| 	padding: 0.1em 0.5em; | ||||
| 	text-decoration: none; | ||||
| } | ||||
|  | ||||
| td#sidebar a.menu:hover { | ||||
| 	background-color: #bbb; | ||||
| 	text-decoration: none; | ||||
| } | ||||
|  | ||||
| td#sidebar select { | ||||
| 	width: 100%; | ||||
| 	margin: 2px 0px 0px 0px; | ||||
| } | ||||
|  | ||||
| td#sidebar form { | ||||
| 	text-align: right; | ||||
| } | ||||
|  | ||||
| input#switch-btn { | ||||
| 	margin: 2px 0px 0px 0px; | ||||
| } | ||||
| @@ -201,14 +200,13 @@ a.ls-blob, a.ls-dir, a.ls-mod { | ||||
|  | ||||
| td.ls-size { | ||||
| 	text-align: right; | ||||
| } | ||||
|  | ||||
| td.ls-size { | ||||
| 	font-family: monospace; | ||||
| 	width: 10em; | ||||
| } | ||||
|  | ||||
| td.ls-mode { | ||||
| 	font-family: monospace; | ||||
| 	width: 10em; | ||||
| } | ||||
|  | ||||
| table.blob { | ||||
| @@ -357,7 +355,7 @@ table.diff td { | ||||
| table.diff td div.head { | ||||
| 	font-weight: bold; | ||||
| 	margin-top: 1em; | ||||
| 	background-color: #eee; | ||||
| 	color: black; | ||||
| } | ||||
|  | ||||
| table.diff td div.hunk { | ||||
| @@ -392,17 +390,17 @@ table.list td.repogroup { | ||||
|  | ||||
| a.button { | ||||
| 	font-size: 80%; | ||||
| 	color: #aaa; | ||||
| 	color: #33c; | ||||
| /* | ||||
| 	background-color: #eee; | ||||
| 	border: solid 1px #aaa; | ||||
| 	padding: 0em 0.5em; | ||||
| 	margin: 0.1em 0.25em; | ||||
| */ | ||||
| 	padding: 0em 0.5em; | ||||
| } | ||||
|  | ||||
| a.button:hover { | ||||
| 	text-decoration: none; | ||||
| 	color: #333; | ||||
| 	background-color: #ccc; | ||||
| 	text-decoration: underline; | ||||
| } | ||||
|  | ||||
| a.primary { | ||||
|   | ||||
							
								
								
									
										7
									
								
								cgit.h
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								cgit.h
									
									
									
									
									
								
							| @@ -221,4 +221,11 @@ extern const char *cgit_repobasename(const char *reponame); | ||||
|  | ||||
| extern int cgit_parse_snapshots_mask(const char *str); | ||||
|  | ||||
| /* libgit.a either links against or compiles its own implementation of | ||||
|  * strcasestr(), and we'd like to reuse it. Simply re-declaring it | ||||
|  * seems to do the trick. | ||||
|  */ | ||||
| extern char *strcasestr(const char *haystack, const char *needle); | ||||
|  | ||||
|  | ||||
| #endif /* CGIT_H */ | ||||
|   | ||||
							
								
								
									
										
											BRUSCAIR
										
									
								
								cgit.png
									
									
									
									
									
								
							
							
						
						
									
										
											BRUSCAIR
										
									
								
								cgit.png
									
									
									
									
									
								
							
										
											Ní thaispeántar comhad dénártha.
										
									
								
							| Roimhe Leithead: | Airde: | Méid: 5.3 KiB Tar éis Leithead: | Airde: | Méid: 1.8 KiB | 
							
								
								
									
										14
									
								
								ui-commit.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								ui-commit.c
									
									
									
									
									
								
							| @@ -9,6 +9,7 @@ | ||||
| #include "cgit.h" | ||||
| #include "html.h" | ||||
| #include "ui-shared.h" | ||||
| #include "ui-diff.h" | ||||
|  | ||||
| static int files, slots; | ||||
| static int total_adds, total_rems, max_changes; | ||||
| @@ -174,6 +175,12 @@ void cgit_print_commit(char *hex) | ||||
| 	html("</td><td class='right'>"); | ||||
| 	cgit_print_date(info->committer_date, FMT_LONGDATE); | ||||
| 	html("</td></tr>\n"); | ||||
| 	html("<tr><th>commit</th><td colspan='2' class='sha1'>"); | ||||
| 	tmp = sha1_to_hex(commit->object.sha1); | ||||
| 	cgit_commit_link(tmp, NULL, NULL, ctx.qry.head, tmp); | ||||
| 	html(" ("); | ||||
| 	cgit_patch_link("patch", NULL, NULL, NULL, tmp); | ||||
| 	html(")</td></tr>\n"); | ||||
| 	html("<tr><th>tree</th><td colspan='2' class='sha1'>"); | ||||
| 	tmp = xstrdup(hex); | ||||
| 	cgit_tree_link(sha1_to_hex(commit->tree->object.sha1), NULL, NULL, | ||||
| @@ -218,10 +225,11 @@ void cgit_print_commit(char *hex) | ||||
| 			print_fileinfo(&items[i]); | ||||
| 		html("</table>"); | ||||
| 		html("<div class='diffstat-summary'>"); | ||||
| 		htmlf("%d files changed, %d insertions, %d deletions (", | ||||
| 		htmlf("%d files changed, %d insertions, %d deletions", | ||||
| 		      files, total_adds, total_rems); | ||||
| 		cgit_diff_link("show diff", NULL, NULL, ctx.qry.head, hex, | ||||
| 			       NULL, NULL); | ||||
| 		cgit_print_diff(ctx.qry.sha1, | ||||
| 				sha1_to_hex(commit->parents->item->object.sha1), | ||||
| 				NULL); | ||||
| 		html(")</div>"); | ||||
| 	} | ||||
| 	cgit_free_commitinfo(info); | ||||
|   | ||||
| @@ -44,20 +44,23 @@ static void print_modtime(struct cgit_repo *repo) | ||||
| 	cgit_print_age(s.st_mtime, -1, NULL); | ||||
| } | ||||
|  | ||||
| void cgit_print_repolist() | ||||
| int is_match(struct cgit_repo *repo) | ||||
| { | ||||
| 	int i, columns = 4; | ||||
| 	char *last_group = NULL; | ||||
| 	if (!ctx.qry.search) | ||||
| 		return 1; | ||||
| 	if (repo->url && strcasestr(repo->url, ctx.qry.search)) | ||||
| 		return 1; | ||||
| 	if (repo->name && strcasestr(repo->name, ctx.qry.search)) | ||||
| 		return 1; | ||||
| 	if (repo->desc && strcasestr(repo->desc, ctx.qry.search)) | ||||
| 		return 1; | ||||
| 	if (repo->owner && strcasestr(repo->owner, ctx.qry.search)) | ||||
| 		return 1; | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| 	if (ctx.cfg.enable_index_links) | ||||
| 		columns++; | ||||
|  | ||||
| 	ctx.page.title = ctx.cfg.root_title; | ||||
| 	cgit_print_http_headers(&ctx); | ||||
| 	cgit_print_docstart(&ctx); | ||||
| 	cgit_print_pageheader(&ctx); | ||||
|  | ||||
| 	html("<table summary='repository list' class='list nowrap'>"); | ||||
| void print_header(int columns) | ||||
| { | ||||
| 	if (ctx.cfg.index_header) { | ||||
| 		htmlf("<tr class='nohover'><td colspan='%d' class='include-block'>", | ||||
| 		      columns); | ||||
| @@ -70,11 +73,31 @@ void cgit_print_repolist() | ||||
| 	     "<th class='left'>Owner</th>" | ||||
| 	     "<th class='left'>Idle</th>"); | ||||
| 	if (ctx.cfg.enable_index_links) | ||||
| 		html("<th>Links</th>"); | ||||
| 		html("<th class='left'>Links</th>"); | ||||
| 	html("</tr>\n"); | ||||
| } | ||||
|  | ||||
| void cgit_print_repolist() | ||||
| { | ||||
| 	int i, columns = 4, hits = 0, header = 0; | ||||
| 	char *last_group = NULL; | ||||
|  | ||||
| 	if (ctx.cfg.enable_index_links) | ||||
| 		columns++; | ||||
|  | ||||
| 	ctx.page.title = ctx.cfg.root_title; | ||||
| 	cgit_print_http_headers(&ctx); | ||||
| 	cgit_print_docstart(&ctx); | ||||
| 	cgit_print_pageheader(&ctx); | ||||
|  | ||||
| 	html("<table summary='repository list' class='list nowrap'>"); | ||||
| 	for (i=0; i<cgit_repolist.count; i++) { | ||||
| 		ctx.repo = &cgit_repolist.repos[i]; | ||||
| 		if (!is_match(ctx.repo)) | ||||
| 			continue; | ||||
| 		if (!header++) | ||||
| 			print_header(columns); | ||||
| 		hits++; | ||||
| 		if ((last_group == NULL && ctx.repo->group != NULL) || | ||||
| 		    (last_group != NULL && ctx.repo->group == NULL) || | ||||
| 		    (last_group != NULL && ctx.repo->group != NULL && | ||||
| @@ -110,5 +133,7 @@ void cgit_print_repolist() | ||||
| 		html("</tr>\n"); | ||||
| 	} | ||||
| 	html("</table>"); | ||||
| 	if (!hits) | ||||
| 		cgit_print_error("No repositories found"); | ||||
| 	cgit_print_docend(); | ||||
| } | ||||
|   | ||||
							
								
								
									
										154
									
								
								ui-shared.c
									
									
									
									
									
								
							
							
						
						
									
										154
									
								
								ui-shared.c
									
									
									
									
									
								
							| @@ -7,6 +7,7 @@ | ||||
|  */ | ||||
|  | ||||
| #include "cgit.h" | ||||
| #include "cmd.h" | ||||
| #include "html.h" | ||||
|  | ||||
| const char cgit_doctype[] = | ||||
| @@ -388,7 +389,7 @@ void cgit_print_docstart(struct cgit_context *ctx) | ||||
|  | ||||
| void cgit_print_docend() | ||||
| { | ||||
| 	html("</td>\n</tr>\n</table>\n</body>\n</html>\n"); | ||||
| 	html("</div>\n</body>\n</html>\n"); | ||||
| } | ||||
|  | ||||
| int print_branch_option(const char *refname, const unsigned char *sha1, | ||||
| @@ -465,75 +466,83 @@ void add_hidden_formfields(int incl_head, int incl_search, char *page) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| char *hc(struct cgit_cmd *cmd, const char *page) | ||||
| { | ||||
| 	return (strcmp(cmd->name, page) ? NULL : "active"); | ||||
| } | ||||
|  | ||||
| void cgit_print_pageheader(struct cgit_context *ctx) | ||||
| { | ||||
| 	static const char *default_info = "This is cgit, a fast webinterface for git repositories"; | ||||
| 	int header = 0; | ||||
| 	char *url; | ||||
| 	struct cgit_cmd *cmd = cgit_get_cmd(ctx); | ||||
|  | ||||
| 	html("<table id='layout' summary=''>\n"); | ||||
| 	html("<tr><td id='sidebar'>\n"); | ||||
| 	html("<table class='sidebar' cellspacing='0' summary=''>\n"); | ||||
| 	html("<tr><td class='sidebar'>\n<a href='"); | ||||
| 	html_attr(cgit_rooturl()); | ||||
| 	htmlf("'><img src='%s' alt='cgit'/></a>\n", | ||||
| 	      ctx->cfg.logo); | ||||
| 	html("</td></tr>\n<tr><td class='sidebar'>\n"); | ||||
| 	html("<table id='header'>\n"); | ||||
| 	html("<tr>\n"); | ||||
| 	html("<td class='logo' rowspan='2'><a href='"); | ||||
| 	if (ctx->cfg.logo_link) | ||||
| 		html_attr(ctx->cfg.logo_link); | ||||
| 	else | ||||
| 		html_attr(cgit_rooturl()); | ||||
| 	html("'><img src='"); | ||||
| 	html_attr(ctx->cfg.logo); | ||||
| 	html("'/></a></td>\n"); | ||||
|  | ||||
| 	html("<td class='main'>"); | ||||
| 	if (ctx->repo) { | ||||
| 		html("<h1 class='first'>"); | ||||
| 		html_txt(strrpart(ctx->repo->name, 20)); | ||||
| 		html("</h1>\n"); | ||||
| 		html_txt(ctx->repo->desc); | ||||
| 		if (ctx->repo->owner) { | ||||
| 			html("<h1>owner</h1>\n"); | ||||
| 			html_txt(ctx->repo->owner); | ||||
| 		} | ||||
| 		html("<h1>navigate</h1>\n"); | ||||
| 		reporevlink(NULL, "summary", NULL, "menu", ctx->qry.head, | ||||
| 			    NULL, NULL); | ||||
| 		cgit_log_link("log", NULL, "menu", ctx->qry.head, NULL, NULL, | ||||
| 			      0, NULL, NULL); | ||||
| 		cgit_tree_link("tree", NULL, "menu", ctx->qry.head, | ||||
| 			       ctx->qry.sha1, NULL); | ||||
| 		cgit_commit_link("commit", NULL, "menu", ctx->qry.head, | ||||
| 			      ctx->qry.sha1); | ||||
| 		cgit_diff_link("diff", NULL, "menu", ctx->qry.head, | ||||
| 			       ctx->qry.sha1, ctx->qry.sha2, NULL); | ||||
| 		cgit_patch_link("patch", NULL, "menu", ctx->qry.head, | ||||
| 				ctx->qry.sha1); | ||||
|  | ||||
| 		for_each_ref(print_archive_ref, &header); | ||||
|  | ||||
| 		if (ctx->repo->clone_url || ctx->cfg.clone_prefix) { | ||||
| 			html("<h1>clone</h1>\n"); | ||||
| 			if (ctx->repo->clone_url) | ||||
| 				url = ctx->repo->clone_url; | ||||
| 			else | ||||
| 				url = fmt("%s%s", ctx->cfg.clone_prefix, | ||||
| 					  ctx->repo->url); | ||||
| 			html("<a class='menu' href='"); | ||||
| 			html_attr(url); | ||||
| 			html("' title='"); | ||||
| 			html_attr(url); | ||||
| 			html("'>\n"); | ||||
| 			html_txt(strrpart(url, 20)); | ||||
| 			html("</a>\n"); | ||||
| 		} | ||||
|  | ||||
| 		html("<h1>branch</h1>\n"); | ||||
| /* | ||||
| 		html("<a href='"); | ||||
| 		html_attr(cgit_rooturl()); | ||||
| 		html("'>index</a> : "); | ||||
| */ | ||||
| 		reporevlink(NULL, ctx->repo->name, NULL, hc(cmd, "summary"), | ||||
| 			    ctx->qry.head, NULL, NULL); | ||||
| 		html(" : "); | ||||
| 		html_txt(ctx->qry.page); | ||||
| 		html("</td><td class='form'>"); | ||||
| 		html("<form method='get' action=''>\n"); | ||||
| 		add_hidden_formfields(0, 1, ctx->qry.page); | ||||
| //		html("<table summary='branch selector' class='grid'><tr><td id='branch-dropdown-cell'>"); | ||||
| 		html("<select name='h' onchange='this.form.submit();'>\n"); | ||||
| 		for_each_branch_ref(print_branch_option, ctx->qry.head); | ||||
| 		html("</select>\n"); | ||||
| //		html("</td><td>"); | ||||
| 		html("<noscript><input type='submit' id='switch-btn' value='switch'/></noscript>\n"); | ||||
| //		html("</td></tr></table>"); | ||||
| 		html("</form>\n"); | ||||
| 		html("</select> "); | ||||
| 		html("<input type='submit' name='' value='switch'/>"); | ||||
| 		html("</form>"); | ||||
| 	} else | ||||
| 		html_txt(ctx->cfg.root_title); | ||||
| 	html("</td>\n"); | ||||
|  | ||||
| 		html("<h1>search</h1>\n"); | ||||
| 		html("<form method='get' action='"); | ||||
| 	html("<tr><td class='sub'"); | ||||
| 	if (ctx->repo) { | ||||
| 		html(" colspan='2'>"); | ||||
| 		html_txt(ctx->repo->desc); | ||||
| 	} | ||||
| /* | ||||
| 	else if (ctx->cfg.root_subtitle) | ||||
| 		html_txt(ctx->cfg.root_subtitle); | ||||
| */ | ||||
| 	else { | ||||
| 		html(">"); | ||||
| 		html_txt("a fast webinterface for the git dscm"); | ||||
| 	} | ||||
| 	html("</td></tr>\n"); | ||||
|  | ||||
| 	html("</tr>\n"); | ||||
| 	html("</table>\n"); | ||||
|  | ||||
| 	html("<table class='tabs'><tr><td>\n"); | ||||
| 	if (ctx->repo) { | ||||
| 		reporevlink(NULL, "summary", NULL, hc(cmd, "summary"), | ||||
| 			    ctx->qry.head, NULL, NULL); | ||||
| 		cgit_refs_link("refs", NULL, hc(cmd, "refs"), ctx->qry.head, | ||||
| 			       ctx->qry.sha1, NULL); | ||||
| 		cgit_log_link("log", NULL, hc(cmd, "log"), ctx->qry.head, | ||||
| 			      NULL, NULL, 0, NULL, NULL); | ||||
| 		cgit_tree_link("tree", NULL, hc(cmd, "tree"), ctx->qry.head, | ||||
| 			       ctx->qry.sha1, NULL); | ||||
| 		cgit_commit_link("commit", NULL, hc(cmd, "commit"), | ||||
| 				 ctx->qry.head, ctx->qry.sha1); | ||||
| 		cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head, | ||||
| 			       ctx->qry.sha1, ctx->qry.sha2, NULL); | ||||
| 		html("</td><td class='form'>"); | ||||
| 		html("<form class='right' method='get' action='"); | ||||
| 		if (ctx->cfg.virtual_root) | ||||
| 			html_attr(cgit_fileurl(ctx->qry.repo, "log", | ||||
| 					       ctx->qry.path, NULL)); | ||||
| @@ -544,18 +553,27 @@ void cgit_print_pageheader(struct cgit_context *ctx) | ||||
| 		html_option("author", "author", ctx->qry.grep); | ||||
| 		html_option("committer", "committer", ctx->qry.grep); | ||||
| 		html("</select>\n"); | ||||
| 		html("<input class='txt' type='text' name='q' value='"); | ||||
| 		html("<input class='txt' type='text' size='10' name='q' value='"); | ||||
| 		html_attr(ctx->qry.search); | ||||
| 		html("'/>\n"); | ||||
| 		html("<input type='submit' value='search'/>\n"); | ||||
| 		html("</form>\n"); | ||||
| 	} else { | ||||
| 		if (!ctx->cfg.index_info || html_include(ctx->cfg.index_info)) | ||||
| 			html(default_info); | ||||
| 		html("<a class='active' href='"); | ||||
| 		html_attr(cgit_rooturl()); | ||||
| 		html("'>index</a>\n"); | ||||
| 		html("</td><td class='form'>"); | ||||
| 		html("<form method='get' action='"); | ||||
| 		html_attr(cgit_rooturl()); | ||||
| 		html("'>\n"); | ||||
| 		html("<input type='text' name='q' size='10' value='"); | ||||
| 		html_attr(ctx->qry.search); | ||||
| 		html("'/>\n"); | ||||
| 		html("<input type='submit' value='search'/>\n"); | ||||
| 		html("</form>"); | ||||
| 	} | ||||
|  | ||||
| 	html("</td></tr></table></td>\n"); | ||||
|  | ||||
| 	html("<td id='content'>\n"); | ||||
| 	html("</td></tr></table>\n"); | ||||
| 	html("<div class='content'>"); | ||||
| } | ||||
|  | ||||
| void cgit_print_filemode(unsigned short mode) | ||||
|   | ||||
| @@ -14,6 +14,8 @@ extern void cgit_log_link(char *name, char *title, char *class, char *head, | ||||
| 			  char *pattern); | ||||
| extern void cgit_commit_link(char *name, char *title, char *class, char *head, | ||||
| 			     char *rev); | ||||
| extern void cgit_patch_link(char *name, char *title, char *class, char *head, | ||||
| 			    char *rev); | ||||
| extern void cgit_refs_link(char *name, char *title, char *class, char *head, | ||||
| 			   char *rev, char *path); | ||||
| extern void cgit_snapshot_link(char *name, char *title, char *class, | ||||
|   | ||||
		Tagairt in Eagrán Nua
	
	Cuir bac ar úsáideoir
	 Lars Hjemli
					Lars Hjemli