summaryrefslogtreecommitdiffstatshomepage
path: root/ui-repolist.c
blob: 2018dabbeca245192fc022caec4509fcf0ee166a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/* ui-repolist.c: functions for generating the repolist page
 *
 * Copyright (C) 2006 Lars Hjemli
 *
 * Licensed under GNU General Public License v2
 *   (see COPYING for full license text)
 */

#include "cgit.h"
#include <time.h>


time_t read_agefile(char *path)
{
	FILE *f;
	static char buf[64], buf2[64];

	if (!(f = fopen(path, "r")))
		return -1;
	fgets(buf, sizeof(buf), f);
	fclose(f);
	if (parse_date(buf, buf2, sizeof(buf2)))
		return strtoul(buf2, NULL, 10);
	else
		return 0;
}

static void print_modtime(struct repoinfo *repo)
{
	char *path;
	struct stat s;

	path = fmt("%s/%s", repo->path, cgit_agefile);
	if (stat(path, &s) == 0) {
		cgit_print_age(read_agefile(path), -1, NULL);
		return;
	}

	path = fmt("%s/refs/heads/%s", repo->path, repo->defbranch);
	if (stat(path, &s) != 0)
		return;
	cgit_print_age(s.st_mtime, -1, NULL);
}

void cgit_print_repolist(struct cacheitem *item)
{
	int i;
	char *last_group = NULL;

	cgit_print_docstart(cgit_root_title, item);
	cgit_print_pageheader(cgit_root_title, 0);

	html("<table class='list nowrap'>");
	if (cgit_index_header) {
		html("<tr class='nohover'><td colspan='5' class='include-block'>");
		html_include(cgit_index_header);
		html("</td></tr>");
	}
	html("<tr class='nohover'>"
	     "<th class='left'>Name</th>"
	     "<th class='left'>Description</th>"
	     "<th class='left'>Owner</th>"
	     "<th class='left'>Idle</th>"
	     "<th>Links</th></tr>\n");

	for (i=0; i<cgit_repolist.count; i++) {
		cgit_repo = &cgit_repolist.repos[i];
		if ((last_group == NULL && cgit_repo->group != NULL) ||
		    (last_group != NULL && cgit_repo->group == NULL) ||
		    (last_group != NULL && cgit_repo->group != NULL &&
		     strcmp(cgit_repo->group, last_group))) {
			html("<tr class='nohover'><td colspan='4' class='repogroup'>");
			html_txt(cgit_repo->group);
			html("</td></tr>");
			last_group = cgit_repo->group;
		}
		htmlf("<tr><td class='%s'>",
		      cgit_repo->group ? "sublevel-repo" : "toplevel-repo");
		html_link_open(cgit_repourl(cgit_repo->url), NULL, NULL);
		html_txt(cgit_repo->name);
		html_link_close();
		html("</td><td>");
		html_ntxt(cgit_max_repodesc_len, cgit_repo->desc);
		html("</td><td>");
		html_txt(cgit_repo->owner);
		html("</td><td>");
		print_modtime(cgit_repo);
		html("</td><td>");
		html_link_open(cgit_repourl(cgit_repo->url),
			       "Summary", "button");
		html("S</a>");
		cgit_log_link("L", "Log", "button", NULL, NULL, NULL);
		cgit_tree_link("F", "Files", "button", NULL, NULL, NULL);
		html("</td></tr>\n");
	}
	html("</table>");
	cgit_print_docend();
}
n800'>800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886
div#cgit {
	padding: 0em;
	margin: 0em;
	font-family: sans-serif;
	font-size: 10pt;
	color: #333;
	background: white;
	padding: 4px;
}

div#cgit a {
	color: blue;
	text-decoration: none;
}

div#cgit a:hover {
	text-decoration: underline;
}

div#cgit table {
	border-collapse: collapse;
}

div#cgit table#header {
	width: 100%;
	margin-bottom: 1em;
}

div#cgit table#header td.logo {
	width: 96px;
	vertical-align: top;
}

div#cgit table#header td.main {
	font-size: 250%;
	padding-left: 10px;
	white-space: nowrap;
}

div#cgit table#header td.main a {
	color: #000;
}

div#cgit table#header td.form {
	text-align: right;
	vertical-align: bottom;
	padding-right: 1em;
	padding-bottom: 2px;
	white-space: nowrap;
}

div#cgit table#header td.form form,
div#cgit table#header td.form input,
div#cgit table#header td.form select {
	font-size: 90%;
}

div#cgit table#header td.sub {
	color: #777;
	border-top: solid 1px #ccc;
	padding-left: 10px;
}

div#cgit table.tabs {
	border-bottom: solid 3px #ccc;
	border-collapse: collapse;
	margin-top: 2em;
	margin-bottom: 0px;
	width: 100%;
}

div#cgit table.tabs td {
	padding: 0px 1em;
	vertical-align: bottom;
}

div#cgit table.tabs td a {
	padding: 2px 0.75em;
	color: #777;
	font-size: 110%;
}

div#cgit table.tabs td a.active {
	color: #000;
	background-color: #ccc;
}

div#cgit table.tabs a[href^="http://"]:after, div#cgit table.tabs a[href^="https://"]:after {
	content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAQAAAAnOwc2AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfgAhcJDQY+gm2TAAAAHWlUWHRDb21tZW50AAAAAABDcmVhdGVkIHdpdGggR0lNUGQuZQcAAABbSURBVAhbY2BABs4MU4CwhYHBh2Erww4wrGFQZHjI8B8IgUIscJWyDHcggltQhI4zGDCcRwhChPggHIggP1QoAVmQkSETrGoHsiAEsACtBYN0oDAMbgU6EBcAAL2eHUt4XUU4AAAAAElFTkSuQmCC);
	opacity: 0.5;
	margin: 0 0 0 5px;
}

div#cgit table.tabs td.form {
	text-align: right;
}

div#cgit table.tabs td.form form {
	padding-bottom: 2px;
	font-size: 90%;
	white-space: nowrap;
}

div#cgit table.tabs td.form input,
div#cgit table.tabs td.form select {
	font-size: 90%;
}

div#cgit div.path {
	margin: 0px;
	padding: 5px 2em 2px 2em;
	color: #000;
	background-color: #eee;
}

div#cgit div.content {
	margin: 0px;
	padding: 2em;
	border-bottom: solid 3px #ccc;
}


div#cgit table.list {
	width: 100%;
	border: none;
	border-collapse: collapse;
}

div#cgit table.list tr {
	background: white;
}

div#cgit table.list tr.logheader {
	background: #eee;
}

div#cgit table.list tr:nth-child(even) {
	background: #f7f7f7;
}

div#cgit table.list tr:nth-child(odd) {
	background: white;
}

div#cgit table.list tr:hover {
	background: #eee;
}

div#cgit table.list tr.nohover {
	background: white;
}

div#cgit table.list tr.nohover:hover {
	background: white;
}

div#cgit table.list tr.nohover-highlight:hover:nth-child(even) {
	background: #f7f7f7;
}

div#cgit table.list tr.nohover-highlight:hover:nth-child(odd) {
	background: white;
}

div#cgit table.list th {
	font-weight: bold;
	/* color: #888;
	border-top: dashed 1px #888;
	border-bottom: dashed 1px #888;
	*/
	padding: 0.1em 0.5em 0.05em 0.5em;
	vertical-align: baseline;
}

div#cgit table.list td {
	border: none;
	padding: 0.1em 0.5em 0.1em 0.5em;
}

div#cgit table.list td.commitgraph {
	font-family: monospace;
	white-space: pre;
}

div#cgit table.list td.commitgraph .column1 {
	color: #a00;
}

div#cgit table.list td.commitgraph .column2 {
	color: #0a0;
}

div#cgit table.list td.commitgraph .column3 {
	color: #aa0;
}

div#cgit table.list td.commitgraph .column4 {
	color: #00a;
}

div#cgit table.list td.commitgraph .column5 {
	color: #a0a;
}

div#cgit table.list td.commitgraph .column6 {
	color: #0aa;
}

div#cgit table.list td.logsubject {
	font-family: monospace;
	font-weight: bold;
}

div#cgit table.list td.logmsg {
	font-family: monospace;
	white-space: pre;
	padding: 0 0.5em;
}

div#cgit table.list td a {
	color: black;
}

div#cgit table.list td a.ls-dir {
	font-weight: bold;
	color: #00f;
}

div#cgit table.list td a:hover {
	color: #00f;
}

div#cgit img {
	border: none;
}

div#cgit input#switch-btn {
	margin: 2px 0px 0px 0px;
}

div#cgit td#sidebar input.txt {
	width: 100%;
	margin: 2px 0px 0px 0px;
}

div#cgit table#grid {
	margin: 0px;
}

div#cgit td#content {
	vertical-align: top;
	padding: 1em 2em 1em 1em;
	border: none;
}

div#cgit div#summary {
	vertical-align: top;
	margin-bottom: 1em;
}

div#cgit table#downloads {
	float: right;
	border-collapse: collapse;
	border: solid 1px #777;
	margin-left: 0.5em;
	margin-bottom: 0.5em;
}

div#cgit table#downloads th {
	background-color: #ccc;
}

div#cgit div#blob {
	border: solid 1px black;
}

div#cgit div.error {
	color: red;
	font-weight: bold;
	margin: 1em 2em;
}

div#cgit a.ls-blob, div#cgit a.ls-dir, div#cgit .ls-mod {
	font-family: monospace;
}

div#cgit td.ls-size {
	text-align: right;
	font-family: monospace;
	width: 10em;
}

div#cgit td.ls-mode {
	font-family: monospace;
	width: 10em;
}

div#cgit table.blob {
	margin-top: 0.5em;
	border-top: solid 1px black;
}

div#cgit table.blob td.hashes,
div#cgit table.blob td.lines {
	margin: 0; padding: 0 0 0 0.5em;
	vertical-align: top;
	color: black;
}

div#cgit table.blob td.linenumbers {
	margin: 0; padding: 0 0.5em 0 0.5em;
	vertical-align: top;
	text-align: right;
	border-right: 1px solid gray;
}

div#cgit table.blob pre {
	padding: 0; margin: 0;
}

div#cgit table.blob td.linenumbers a,
div#cgit table.ssdiff td.lineno a {
	color: gray;
	text-align: right;
	text-decoration: none;
}

div#cgit table.blob td.linenumbers a:hover,
div#cgit table.ssdiff td.lineno a:hover {
	color: black;
}

div#cgit table.blame td.hashes,
div#cgit table.blame td.lines,
div#cgit table.blame td.linenumbers {
	padding: 0;
}

div#cgit table.blame td.hashes div.alt,
div#cgit table.blame td.lines div.alt {
	padding: 0 0.5em 0 0.5em;
}

div#cgit table.blame td.linenumbers div.alt {
	padding: 0 0.5em 0 0;
}

div#cgit table.blame div.alt:nth-child(even) {
	background: #eee;
}

div#cgit table.blame div.alt:nth-child(odd) {
	background: white;
}

div#cgit table.blame td.lines > div {
	position: relative;
}

div#cgit table.blame td.lines > div > pre {
	padding: 0 0 0 0.5em;
	position: absolute;
	top: 0;
}

div#cgit table.bin-blob {
	margin-top: 0.5em;
	border: solid 1px black;
}

div#cgit table.bin-blob th {
	font-family: monospace;
	white-space: pre;
	border: solid 1px #777;
	padding: 0.5em 1em;
}

div#cgit table.bin-blob td {
	font-family: monospace;
	white-space: pre;
	border-left: solid 1px #777;
	padding: 0em 1em;
}

div#cgit table.nowrap td {
	white-space: nowrap;
}

div#cgit table.commit-info {
	border-collapse: collapse;
	margin-top: 1.5em;
}

div#cgit div.cgit-panel {
	float: right;
	margin-top: 1.5em;
}

div#cgit div.cgit-panel table {
	border-collapse: collapse;
	border: solid 1px #aaa;
	background-color: #eee;
}

div#cgit div.cgit-panel th {
	text-align: center;
}

div#cgit div.cgit-panel td {
	padding: 0.25em 0.5em;
}

div#cgit div.cgit-panel td.label {
	padding-right: 0.5em;
}

div#cgit div.cgit-panel td.ctrl {
	padding-left: 0.5em;
}

div#cgit table.commit-info th {
	text-align: left;
	font-weight: normal;
	padding: 0.1em 1em 0.1em 0.1em;
	vertical-align: top;
}

div#cgit table.commit-info td {
	font-weight: normal;
	padding: 0.1em 1em 0.1em 0.1em;
}

div#cgit div.commit-subject {
	font-weight: bold;
	font-size: 125%;
	margin: 1.5em 0em 0.5em 0em;
	padding: 0em;
}

div#cgit div.commit-msg {
	white-space: pre;
	font-family: monospace;
}

div#cgit div.notes-header {
	font-weight: bold;
	padding-top: 1.5em;
}

div#cgit div.notes {
	white-space: pre;
	font-family: monospace;
	border: solid 1px #ee9;
	background-color: #ffd;
	padding: 0.3em 2em 0.3em 1em;
	float: left;
}

div#cgit div.notes-footer {
	clear: left;
}

div#cgit div.diffstat-header {
	font-weight: bold;
	padding-top: 1.5em;
}

div#cgit table.diffstat {
	border-collapse: collapse;
	border: solid 1px #aaa;
	background-color: #eee;
}

div#cgit table.diffstat th {
	font-weight: normal;
	text-align: left;
	text-decoration: underline;
	padding: 0.1em 1em 0.1em 0.1em;
	font-size: 100%;
}

div#cgit table.diffstat td {
	padding: 0.2em 0.2em 0.1em 0.1em;
	font-size: 100%;
	border: none;
}

div#cgit table.diffstat td.mode {
	white-space: nowrap;
}

div#cgit table.diffstat td span.modechange {
	padding-left: 1em;
	color: red;
}

div#cgit table.diffstat td.add a {
	color: green;
}

div#cgit table.diffstat td.del a {
	color: red;
}

div#cgit table.diffstat td.upd a {
	color: blue;
}

div#cgit table.diffstat td.graph {
	width: 500px;
	vertical-align: middle;
}

div#cgit table.diffstat td.graph table {
	border: none;
}

div#cgit table.diffstat td.graph td {
	padding: 0px;
	border: 0px;
	height: 7pt;
}

div#cgit table.diffstat td.graph td.add {
	background-color: #5c5;
}

div#cgit table.diffstat td.graph td.rem {
	background-color: #c55;
}

div#cgit div.diffstat-summary {
	color: #888;
	padding-top: 0.5em;
}

div#cgit table.diff {
	width: 100%;
}

div#cgit table.diff td {
	font-family: monospace;
	white-space: pre;
}

div#cgit table.diff td div.head {
	font-weight: bold;
	margin-top: 1em;
	color: black;
}

div#cgit table.diff td div.hunk {
	color: #009;
}

div#cgit table.diff td div.add {
	color: green;
}

div#cgit table.diff td div.del {
	color: red;
}

div#cgit .sha1 {
	font-family: monospace;
	font-size: 90%;
}

div#cgit .left {
	text-align: left;
}

div#cgit .right {
	text-align: right;
}

div#cgit table.list td.reposection {
	font-style: italic;
	color: #888;
}

div#cgit a.button {
	font-size: 80%;
	padding: 0em 0.5em;
}

div#cgit a.primary {
	font-size: 100%;
}

div#cgit a.secondary {
	font-size: 90%;
}

div#cgit td.toplevel-repo {

}

div#cgit table.list td.sublevel-repo {
	padding-left: 1.5em;
}

div#cgit ul.pager {
	list-style-type: none;
	text-align: center;
	margin: 1em 0em 0em 0em;
	padding: 0;
}

div#cgit ul.pager li {
	display: inline-block;
	margin: 0.25em 0.5em;
}

div#cgit ul.pager a {
	color: #777;
}

div#cgit ul.pager .current {
	font-weight: bold;
}

div#cgit span.age-mins {
	font-weight: bold;
	color: #080;
}

div#cgit span.age-hours {
	color: #080;
}

div#cgit span.age-days {
	color: #040;
}

div#cgit span.age-weeks {
	color: #444;
}

div#cgit span.age-months {
	color: #888;
}

div#cgit span.age-years {
	color: #bbb;
}

div#cgit span.insertions {
	color: #080;
}

div#cgit span.deletions {
	color: #800;
}

div#cgit div.footer {
	margin-top: 0.5em;
	text-align: center;
	font-size: 80%;
	color: #ccc;
}

div#cgit div.footer a {
	color: #ccc;
	text-decoration: none;
}

div#cgit div.footer a:hover {
	text-decoration: underline;
}

div#cgit a.branch-deco {
	color: #000;
	margin: 0px 0.5em;
	padding: 0px 0.25em;
	background-color: #88ff88;
	border: solid 1px #007700;
}

div#cgit a.tag-deco {
	color: #000;
	margin: 0px 0.5em;
	padding: 0px 0.25em;
	background-color: #ffff88;
	border: solid 1px #777700;
}

div#cgit a.remote-deco {
	color: #000;
	margin: 0px 0.5em;
	padding: 0px 0.25em;
	background-color: #ccccff;
	border: solid 1px #000077;
}

div#cgit a.deco {
	color: #000;
	margin: 0px 0.5em;
	padding: 0px 0.25em;
	background-color: #ff8888;
	border: solid 1px #770000;
}

div#cgit div.commit-subject a.branch-deco,
div#cgit div.commit-subject a.tag-deco,
div#cgit div.commit-subject a.remote-deco,
div#cgit div.commit-subject a.deco {
	margin-left: 1em;
	font-size: 75%;
}

div#cgit table.stats {
	border: solid 1px black;
	border-collapse: collapse;
}

div#cgit table.stats th {
	text-align: left;
	padding: 1px 0.5em;
	background-color: #eee;
	border: solid 1px black;
}

div#cgit table.stats td {
	text-align: right;
	padding: 1px 0.5em;
	border: solid 1px black;
}

div#cgit table.stats td.total {
	font-weight: bold;
	text-align: left;
}

div#cgit table.stats td.sum {
	color: #c00;
	font-weight: bold;
/*	background-color: #eee; */
}

div#cgit table.stats td.left {
	text-align: left;
}

div#cgit table.vgraph {
	border-collapse: separate;
	border: solid 1px black;
	height: 200px;
}

div#cgit table.vgraph th {
	background-color: #eee;
	font-weight: bold;
	border: solid 1px white;
	padding: 1px 0.5em;
}

div#cgit table.vgraph td {
	vertical-align: bottom;
	padding: 0px 10px;
}

div#cgit table.vgraph div.bar {
	background-color: #eee;
}

div#cgit table.hgraph {
	border: solid 1px black;
	width: 800px;
}

div#cgit table.hgraph th {
	background-color: #eee;
	font-weight: bold;
	border: solid 1px black;
	padding: 1px 0.5em;
}

div#cgit table.hgraph td {
	vertical-align: middle;
	padding: 2px 2px;
}

div#cgit table.hgraph div.bar {
	background-color: #eee;
	height: 1em;
}

div#cgit table.ssdiff {
	width: 100%;
}

div#cgit table.ssdiff td {
	font-size: 75%;
	font-family: monospace;
	white-space: pre;
	padding: 1px 4px 1px 4px;
	border-left: solid 1px #aaa;
	border-right: solid 1px #aaa;
}

div#cgit table.ssdiff td.add {
	color: black;
	background: #cfc;
	min-width: 50%;
}

div#cgit table.ssdiff td.add_dark {
	color: black;
	background: #aca;
	min-width: 50%;
}

div#cgit table.ssdiff span.add {
	background: #cfc;
	font-weight: bold;
}

div#cgit table.ssdiff td.del {
	color: black;
	background: #fcc;
	min-width: 50%;
}

div#cgit table.ssdiff td.del_dark {
	color: black;
	background: #caa;
	min-width: 50%;
}

div#cgit table.ssdiff span.del {
	background: #fcc;
	font-weight: bold;
}

div#cgit table.ssdiff td.changed {
	color: black;
	background: #ffc;
	min-width: 50%;
}

div#cgit table.ssdiff td.changed_dark {
	color: black;
	background: #cca;
	min-width: 50%;
}

div#cgit table.ssdiff td.lineno {
	color: black;
	background: #eee;
	text-align: right;
	width: 3em;
	min-width: 3em;
}

div#cgit table.ssdiff td.hunk {
	color: black;
	background: #ccf;
	border-top: solid 1px #aaa;
	border-bottom: solid 1px #aaa;
}

div#cgit table.ssdiff td.head {
	border-top: solid 1px #aaa;
	border-bottom: solid 1px #aaa;
}

div#cgit table.ssdiff td.head div.head {
	font-weight: bold;
	color: black;
}

div#cgit table.ssdiff td.foot {
	border-top: solid 1px #aaa;
	border-left: none;
	border-right: none;
	border-bottom: none;
}

div#cgit table.ssdiff td.space {
	border: none;
}

div#cgit table.ssdiff td.space div {
	min-height: 3em;
}