summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--cgit.c13
-rw-r--r--cgit.css98
-rw-r--r--ui-diff.c1
-rw-r--r--ui-log.c1
-rw-r--r--ui-repolist.c1
-rw-r--r--ui-shared.c37
-rw-r--r--ui-summary.c6
-rw-r--r--ui-tree.c1
-rw-r--r--ui-view.c1
9 files changed, 127 insertions, 32 deletions
diff --git a/cgit.c b/cgit.c
index 7b7afba..fedf355 100644
--- a/cgit.c
+++ b/cgit.c
@@ -79,29 +79,38 @@ static void cgit_print_repo_page(struct cacheitem *item)
79 show_search = 0; 79 show_search = 0;
80 setenv("GIT_DIR", cgit_repo->path, 1); 80 setenv("GIT_DIR", cgit_repo->path, 1);
81 81
82 if (cgit_repo->snapshots && cgit_query_page && 82 if (cgit_repo->snapshots && cgit_query_page &&
83 !strcmp(cgit_query_page, "snapshot")) { 83 !strcmp(cgit_query_page, "snapshot")) {
84 cgit_print_snapshot(item, cgit_query_sha1, "zip", 84 cgit_print_snapshot(item, cgit_query_sha1, "zip",
85 cgit_repo->url, cgit_query_name); 85 cgit_repo->url, cgit_query_name);
86 return; 86 return;
87 } 87 }
88 88
89 if (cgit_query_page && !strcmp(cgit_query_page, "log")) 89 if (cgit_query_page && !strcmp(cgit_query_page, "log"))
90 show_search = 1; 90 show_search = 1;
91
91 cgit_print_docstart(title, item); 92 cgit_print_docstart(title, item);
92 cgit_print_pageheader(title, show_search); 93
94
93 if (!cgit_query_page) { 95 if (!cgit_query_page) {
96 cgit_print_pageheader("summary", show_search);
94 cgit_print_summary(); 97 cgit_print_summary();
95 } else if (!strcmp(cgit_query_page, "log")) { 98 cgit_print_docend();
99 return;
100 }
101
102 cgit_print_pageheader(cgit_query_page, show_search);
103
104 if (!strcmp(cgit_query_page, "log")) {
96 cgit_print_log(cgit_query_head, cgit_query_ofs, 100, 105 cgit_print_log(cgit_query_head, cgit_query_ofs, 100,
97 cgit_query_search); 106 cgit_query_search);
98 } else if (!strcmp(cgit_query_page, "tree")) { 107 } else if (!strcmp(cgit_query_page, "tree")) {
99 cgit_print_tree(cgit_query_sha1, cgit_query_path); 108 cgit_print_tree(cgit_query_sha1, cgit_query_path);
100 } else if (!strcmp(cgit_query_page, "commit")) { 109 } else if (!strcmp(cgit_query_page, "commit")) {
101 cgit_print_commit(cgit_query_sha1); 110 cgit_print_commit(cgit_query_sha1);
102 } else if (!strcmp(cgit_query_page, "view")) { 111 } else if (!strcmp(cgit_query_page, "view")) {
103 cgit_print_view(cgit_query_sha1); 112 cgit_print_view(cgit_query_sha1);
104 } else if (!strcmp(cgit_query_page, "diff")) { 113 } else if (!strcmp(cgit_query_page, "diff")) {
105 cgit_print_diff(cgit_query_sha1, cgit_query_sha2); 114 cgit_print_diff(cgit_query_sha1, cgit_query_sha2);
106 } else { 115 } else {
107 cgit_print_error("Invalid request"); 116 cgit_print_error("Invalid request");
diff --git a/cgit.css b/cgit.css
index 5c4b15b..640bbc9 100644
--- a/cgit.css
+++ b/cgit.css
@@ -1,179 +1,249 @@
1body { 1body {
2 font-family: arial; 2 font-family: arial;
3 font-size: 11pt; 3 font-size: 11pt;
4 background: white; 4 background: white;
5 padding: 0em; 5 padding: 0em;
6 margin: 0em; 6 margin: 0em;
7} 7}
8 8
9 9
10h2 { 10h2 {
11 font-size: 120%; 11 font-size: 120%;
12 font-weight: bold; 12 font-weight: bold;
13 margin-bottom: 0.5em; 13 margin-bottom: 0.25em;
14}
15
16h3 {
17 margin-top: 0em;
18 font-size: 100%;
19 font-weight: normal;
14} 20}
15 21
16a { 22a {
17 color: blue; 23 color: blue;
18 text-decoration: none; 24 text-decoration: none;
19} 25}
20 26
21a:hover { 27a:hover {
22 text-decoration: underline; 28 text-decoration: underline;
23} 29}
24 30
25table.list { 31table.list {
26 border: none; 32 border: none;
27 border-collapse: collapse; 33 border-collapse: collapse;
28} 34}
35
29table.list tr { 36table.list tr {
30 background: white; 37 background: white;
31} 38}
39
32table.list tr:hover { 40table.list tr:hover {
33 background: #eee; 41 background: #eee;
34} 42}
43
35table.list tr.nohover:hover { 44table.list tr.nohover:hover {
36 background: white; 45 background: white;
37} 46}
47
38table.list th { 48table.list th {
39 font-weight: normal; 49 font-weight: normal;
40 border-bottom: solid 1px #777; 50 border-bottom: solid 1px #777;
41 padding: 0.1em 0.5em 0.1em 0.5em; 51 padding: 0.1em 0.5em 0.1em 0.5em;
42 vertical-align: baseline; 52 vertical-align: baseline;
43} 53}
54
44table.list td { 55table.list td {
45 border: none; 56 border: none;
46 padding: 0.1em 0.5em 0.1em 0.5em; 57 padding: 0.1em 0.5em 0.1em 0.5em;
47} 58}
59
48img { 60img {
49 border: none; 61 border: none;
50} 62}
63
51table#layout { 64table#layout {
52 width: 100%; 65 width: 100%;
53 border-collapse: collapse; 66 border-collapse: separate;
67 border-spacing: 0px;
54 margin: 0px; 68 margin: 0px;
55} 69}
56td#header { 70
71td#header, td#logo {
72 color: #666;
57 background-color: #ddd; 73 background-color: #ddd;
58 padding: 0.25em 0.25em 0.25em 0.5em; 74 border-bottom: solid 1px #000;
75}
76
77td#header {
59 font-size: 150%; 78 font-size: 150%;
60 font-weight: bold; 79 font-weight: bold;
61 border-bottom: solid 1px #aaa; 80 padding: 0.2em 0.5em;
81 vertical-align: text-bottom;
82}
83
84td#logo {
85 text-align: right;
62 vertical-align: middle; 86 vertical-align: middle;
87 padding-right: 0.5em;
88}
89
90td#crumb, td#search {
91 color: #ccc;
92 border-top: solid 3px #555;
93 background-color: #666;
94 border-bottom: solid 1px #333;
95 padding: 2px 1em;
96}
97
98td#crumb {
99 font-weight: bold;
100}
101
102td#crumb a {
103 color: #ccc;
63} 104}
64td#header img#logo { 105
65 float: right; 106td#crumb a:hover {
107 color: #eee;
66} 108}
67 109
68td#header input { 110td#search {
69 float: right; 111 text-align: right;
70 margin: 0.25em 1em; 112 vertical-align: center;
113 padding-right: 0.5em;
71} 114}
72td#header a { 115
73 color: black; 116td#search form {
117 margin: 0px;
118 padding: 0px;
119}
120
121td#search input {
122 font-size: 9pt;
123 padding: 0px;
124 width: 10em;
125 border: solid 1px #333;
126 color: #333;
127 background-color: #fff;
74} 128}
75 129
76td#content { 130td#content {
77 padding: 1em 0.5em; 131 padding: 1em 0.5em;
78} 132}
79 133
80div#blob { 134div#blob {
81 border: solid 1px black; 135 border: solid 1px black;
82} 136}
83 137
84div.error { 138div.error {
85 color: red; 139 color: red;
86 font-weight: bold; 140 font-weight: bold;
87 margin: 1em 2em; 141 margin: 1em 2em;
88} 142}
143
89div.ls-blob, div.ls-dir { 144div.ls-blob, div.ls-dir {
90 font-family: monospace; 145 font-family: monospace;
91} 146}
147
92div.ls-dir a { 148div.ls-dir a {
93 font-weight: bold; 149 font-weight: bold;
94} 150}
151
95th.filesize, td.filesize { 152th.filesize, td.filesize {
96 text-align: right; 153 text-align: right;
97} 154}
155
98td.filesize { 156td.filesize {
99 font-family: monospace; 157 font-family: monospace;
100} 158}
159
101td.filemode { 160td.filemode {
102 font-family: monospace; 161 font-family: monospace;
103} 162}
104 163
105td.blob { 164td.blob {
106 white-space: pre; 165 white-space: pre;
107 font-family: monospace; 166 font-family: monospace;
108 background-color: white; 167 background-color: white;
109} 168}
110 169
111table.nowrap td { 170table.nowrap td {
112 white-space: nowrap; 171 white-space: nowrap;
113} 172}
114 173
115table.commit-info { 174table.commit-info {
116 border-collapse: collapse; 175 border-collapse: collapse;
117 margin-top: 1.5em; 176 margin-top: 1.5em;
118} 177}
178
119table.commit-info th { 179table.commit-info th {
120 text-align: left; 180 text-align: left;
121 font-weight: normal; 181 font-weight: normal;
122 padding: 0.1em 1em 0.1em 0.1em; 182 padding: 0.1em 1em 0.1em 0.1em;
123} 183}
184
124table.commit-info td { 185table.commit-info td {
125 font-weight: normal; 186 font-weight: normal;
126 padding: 0.1em 1em 0.1em 0.1em; 187 padding: 0.1em 1em 0.1em 0.1em;
127} 188}
189
128div.commit-subject { 190div.commit-subject {
129 font-weight: bold; 191 font-weight: bold;
130 font-size: 125%; 192 font-size: 125%;
131 margin: 1.5em 0em 0.5em 0em; 193 margin: 1.5em 0em 0.5em 0em;
132 padding: 0em; 194 padding: 0em;
133} 195}
196
134div.commit-msg { 197div.commit-msg {
135 white-space: pre; 198 white-space: pre;
136 font-family: monospace; 199 font-family: monospace;
137} 200}
201
138table.diffstat { 202table.diffstat {
139 border-collapse: collapse; 203 border-collapse: collapse;
140 margin-top: 1.5em; 204 margin-top: 1.5em;
141} 205}
206
142table.diffstat th { 207table.diffstat th {
143 font-weight: normal; 208 font-weight: normal;
144 text-align: left; 209 text-align: left;
145 text-decoration: underline; 210 text-decoration: underline;
146 padding: 0.1em 1em 0.1em 0.1em; 211 padding: 0.1em 1em 0.1em 0.1em;
147 font-size: 100%; 212 font-size: 100%;
148} 213}
214
149table.diffstat td { 215table.diffstat td {
150 padding: 0.1em 1em 0.1em 0.1em; 216 padding: 0.1em 1em 0.1em 0.1em;
151 font-size: 100%; 217 font-size: 100%;
152} 218}
219
153table.diffstat td span.modechange { 220table.diffstat td span.modechange {
154 padding-left: 1em; 221 padding-left: 1em;
155 color: red; 222 color: red;
156} 223}
224
157table.diffstat td.add a { 225table.diffstat td.add a {
158 color: green; 226 color: green;
159} 227}
228
160table.diffstat td.del a { 229table.diffstat td.del a {
161 color: red; 230 color: red;
162} 231}
232
163table.diffstat td.upd a { 233table.diffstat td.upd a {
164 color: blue; 234 color: blue;
165} 235}
236
166table.diffstat td.summary { 237table.diffstat td.summary {
167 /* border-top: solid 1px black; */
168 color: #888; 238 color: #888;
169 padding-top: 0.5em; 239 padding-top: 0.5em;
170} 240}
171 241
172table.diff td { 242table.diff td {
173 border: solid 1px black; 243 border: solid 1px black;
174 font-family: monospace; 244 font-family: monospace;
175 white-space: pre; 245 white-space: pre;
176} 246}
177 247
178table.diff td div.hunk { 248table.diff td div.hunk {
179 background: #ccc; 249 background: #ccc;
@@ -182,18 +252,20 @@ table.diff td div.hunk {
182table.diff td div.add { 252table.diff td div.add {
183 color: green; 253 color: green;
184} 254}
185 255
186table.diff td div.del { 256table.diff td div.del {
187 color: red; 257 color: red;
188} 258}
189 259
190.sha1 { 260.sha1 {
191 font-family: courier; 261 font-family: courier;
192 font-size: 90%; 262 font-size: 90%;
193} 263}
264
194.left { 265.left {
195 text-align: left; 266 text-align: left;
196} 267}
268
197.right { 269.right {
198 text-align: right; 270 text-align: right;
199} 271}
diff --git a/ui-diff.c b/ui-diff.c
index 0bd9ade..b6486f1 100644
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -115,17 +115,16 @@ static void run_diff(const unsigned char *sha1, const unsigned char *sha2)
115 xdl_diff(&file1, &file2, &diff_params, &emit_params, &emit_cb); 115 xdl_diff(&file1, &file2, &diff_params, &emit_params, &emit_cb);
116} 116}
117 117
118 118
119 119
120void cgit_print_diff(const char *old_hex, const char *new_hex) 120void cgit_print_diff(const char *old_hex, const char *new_hex)
121{ 121{
122 unsigned char sha1[20], sha2[20]; 122 unsigned char sha1[20], sha2[20];
123 123
124 get_sha1(old_hex, sha1); 124 get_sha1(old_hex, sha1);
125 get_sha1(new_hex, sha2); 125 get_sha1(new_hex, sha2);
126 126
127 html("<h2>diff</h2>\n");
128 html("<table class='diff'><tr><td>"); 127 html("<table class='diff'><tr><td>");
129 run_diff(sha1, sha2); 128 run_diff(sha1, sha2);
130 html("</td></tr></table>"); 129 html("</td></tr></table>");
131} 130}
diff --git a/ui-log.c b/ui-log.c
index 24d571d..159393a 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -45,25 +45,24 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep)
45 init_revisions(&rev, NULL); 45 init_revisions(&rev, NULL);
46 rev.abbrev = DEFAULT_ABBREV; 46 rev.abbrev = DEFAULT_ABBREV;
47 rev.commit_format = CMIT_FMT_DEFAULT; 47 rev.commit_format = CMIT_FMT_DEFAULT;
48 rev.verbose_header = 1; 48 rev.verbose_header = 1;
49 rev.show_root_diff = 0; 49 rev.show_root_diff = 0;
50 setup_revisions(argc, argv, &rev, NULL); 50 setup_revisions(argc, argv, &rev, NULL);
51 if (rev.grep_filter) { 51 if (rev.grep_filter) {
52 rev.grep_filter->regflags |= REG_ICASE; 52 rev.grep_filter->regflags |= REG_ICASE;
53 compile_grep_patterns(rev.grep_filter); 53 compile_grep_patterns(rev.grep_filter);
54 } 54 }
55 prepare_revision_walk(&rev); 55 prepare_revision_walk(&rev);
56 56
57 html("<h2>Log</h2>");
58 html("<table class='list nowrap'>"); 57 html("<table class='list nowrap'>");
59 html("<tr class='nohover'><th class='left'>Date</th>" 58 html("<tr class='nohover'><th class='left'>Date</th>"
60 "<th class='left'>Message</th>" 59 "<th class='left'>Message</th>"
61 "<th class='left'>Author</th></tr>\n"); 60 "<th class='left'>Author</th></tr>\n");
62 61
63 if (ofs<0) 62 if (ofs<0)
64 ofs = 0; 63 ofs = 0;
65 64
66 for (i = 0; i < ofs && (commit = get_revision(&rev)) != NULL; i++) { 65 for (i = 0; i < ofs && (commit = get_revision(&rev)) != NULL; i++) {
67 free(commit->buffer); 66 free(commit->buffer);
68 commit->buffer = NULL; 67 commit->buffer = NULL;
69 free_commit_list(commit->parents); 68 free_commit_list(commit->parents);
diff --git a/ui-repolist.c b/ui-repolist.c
index 011ec95..2ce0d6a 100644
--- a/ui-repolist.c
+++ b/ui-repolist.c
@@ -7,25 +7,24 @@
7 */ 7 */
8 8
9#include "cgit.h" 9#include "cgit.h"
10 10
11void cgit_print_repolist(struct cacheitem *item) 11void cgit_print_repolist(struct cacheitem *item)
12{ 12{
13 struct repoinfo *repo; 13 struct repoinfo *repo;
14 int i; 14 int i;
15 15
16 cgit_print_docstart(cgit_root_title, item); 16 cgit_print_docstart(cgit_root_title, item);
17 cgit_print_pageheader(cgit_root_title, 0); 17 cgit_print_pageheader(cgit_root_title, 0);
18 18
19 html("<h2>Repositories</h2>\n");
20 html("<table class='list nowrap'>"); 19 html("<table class='list nowrap'>");
21 html("<tr class='nohover'>" 20 html("<tr class='nohover'>"
22 "<th class='left'>Name</th>" 21 "<th class='left'>Name</th>"
23 "<th class='left'>Description</th>" 22 "<th class='left'>Description</th>"
24 "<th class='left'>Owner</th></tr>\n"); 23 "<th class='left'>Owner</th></tr>\n");
25 24
26 for (i=0; i<cgit_repolist.count; i++) { 25 for (i=0; i<cgit_repolist.count; i++) {
27 repo = &cgit_repolist.repos[i]; 26 repo = &cgit_repolist.repos[i];
28 html("<tr><td>"); 27 html("<tr><td>");
29 html_link_open(cgit_repourl(repo->url), NULL, NULL); 28 html_link_open(cgit_repourl(repo->url), NULL, NULL);
30 html_txt(repo->name); 29 html_txt(repo->name);
31 html_link_close(); 30 html_link_close();
diff --git a/ui-shared.c b/ui-shared.c
index 172499c..bca50aa 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -31,24 +31,32 @@ static long ttl_seconds(long ttl)
31 return 60 * 60 * 24 * 365; 31 return 60 * 60 * 24 * 365;
32 else 32 else
33 return ttl * 60; 33 return ttl * 60;
34} 34}
35 35
36void cgit_print_error(char *msg) 36void cgit_print_error(char *msg)
37{ 37{
38 html("<div class='error'>"); 38 html("<div class='error'>");
39 html_txt(msg); 39 html_txt(msg);
40 html("</div>\n"); 40 html("</div>\n");
41} 41}
42 42
43char *cgit_rooturl()
44{
45 if (cgit_virtual_root)
46 return fmt("%s/", cgit_virtual_root);
47 else
48 return "./cgit.cgi";
49}
50
43char *cgit_repourl(const char *reponame) 51char *cgit_repourl(const char *reponame)
44{ 52{
45 if (cgit_virtual_root) { 53 if (cgit_virtual_root) {
46 return fmt("%s/%s/", cgit_virtual_root, reponame); 54 return fmt("%s/%s/", cgit_virtual_root, reponame);
47 } else { 55 } else {
48 return fmt("?r=%s", reponame); 56 return fmt("?r=%s", reponame);
49 } 57 }
50} 58}
51 59
52char *cgit_pageurl(const char *reponame, const char *pagename, 60char *cgit_pageurl(const char *reponame, const char *pagename,
53 const char *query) 61 const char *query)
54{ 62{
@@ -104,54 +112,63 @@ void cgit_print_docstart(char *title, struct cacheitem *item)
104 html("</head>\n"); 112 html("</head>\n");
105 html("<body>\n"); 113 html("<body>\n");
106} 114}
107 115
108void cgit_print_docend() 116void cgit_print_docend()
109{ 117{
110 html("</td></tr></table>"); 118 html("</td></tr></table>");
111 html("</body>\n</html>\n"); 119 html("</body>\n</html>\n");
112} 120}
113 121
114void cgit_print_pageheader(char *title, int show_search) 122void cgit_print_pageheader(char *title, int show_search)
115{ 123{
116 html("<table id='layout'><tr><td id='header'>"); 124 html("<table id='layout'>");
117 htmlf("<a href='%s'>", cgit_logo_link); 125 html("<tr><td id='header'>");
118 htmlf("<img id='logo' src='%s'/>\n", cgit_logo); 126 html(cgit_root_title);
119 htmlf("</a>"); 127 html("</td><td id='logo'>");
128 html("<a href='");
129 html_attr(cgit_logo_link);
130 htmlf("'><img src='%s'/></a>", cgit_logo);
131 html("</td></tr>");
132 html("<tr><td id='crumb'>");
133 htmlf("<a href='%s'>root</a>", cgit_rooturl());
134 if (cgit_query_repo) {
135 htmlf(" : <a href='%s'>", cgit_repourl(cgit_repo->url));
136 html_txt(cgit_repo->name);
137 htmlf("</a> : %s", title);
138 }
139 html("</td>");
140 html("<td id='search'>");
120 if (show_search) { 141 if (show_search) {
121 html("<form method='get' href='"); 142 html("<form method='get' href='");
122 html_attr(cgit_currurl()); 143 html_attr(cgit_currurl());
123 html("'>"); 144 html("'>");
124 if (!cgit_virtual_root) { 145 if (!cgit_virtual_root) {
125 if (cgit_query_repo) 146 if (cgit_query_repo)
126 html_hidden("r", cgit_query_repo); 147 html_hidden("r", cgit_query_repo);
127 if (cgit_query_page) 148 if (cgit_query_page)
128 html_hidden("p", cgit_query_page); 149 html_hidden("p", cgit_query_page);
129 } 150 }
130 if (cgit_query_head) 151 if (cgit_query_head)
131 html_hidden("h", cgit_query_head); 152 html_hidden("h", cgit_query_head);
132 if (cgit_query_sha1) 153 if (cgit_query_sha1)
133 html_hidden("id", cgit_query_sha1); 154 html_hidden("id", cgit_query_sha1);
134 if (cgit_query_sha2) 155 if (cgit_query_sha2)
135 html_hidden("id2", cgit_query_sha2); 156 html_hidden("id2", cgit_query_sha2);
136 html("<input type='text' name='q' value='"); 157 html("<input type='text' name='q' value='");
137 html_attr(cgit_query_search); 158 html_attr(cgit_query_search);
138 html("'/></form>"); 159 html("'/></form>");
139 } 160 }
140 if (cgit_query_repo) 161 html("</td></tr>");
141 htmlf("<a href='%s'>", cgit_repourl(cgit_query_repo)); 162 html("<tr><td id='content' colspan='2'>");
142 html_txt(title);
143 if (cgit_query_repo)
144 html("</a>");
145 html("</td></tr><tr><td id='content'>");
146} 163}
147 164
148void cgit_print_snapshot_start(const char *mimetype, const char *filename, 165void cgit_print_snapshot_start(const char *mimetype, const char *filename,
149 struct cacheitem *item) 166 struct cacheitem *item)
150{ 167{
151 htmlf("Content-Type: %s\n", mimetype); 168 htmlf("Content-Type: %s\n", mimetype);
152 htmlf("Content-Disposition: inline; filename=\"%s\"\n", filename); 169 htmlf("Content-Disposition: inline; filename=\"%s\"\n", filename);
153 htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); 170 htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime));
154 htmlf("Expires: %s\n", http_date(item->st.st_mtime + 171 htmlf("Expires: %s\n", http_date(item->st.st_mtime +
155 ttl_seconds(item->ttl))); 172 ttl_seconds(item->ttl)));
156 html("\n"); 173 html("\n");
157} 174}
diff --git a/ui-summary.c b/ui-summary.c
index ff3ed4d..42f4300 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -120,20 +120,22 @@ static void cgit_print_branches()
120static void cgit_print_tags() 120static void cgit_print_tags()
121{ 121{
122 html("<tr class='nohover'><th class='left'>Tag</th>" 122 html("<tr class='nohover'><th class='left'>Tag</th>"
123 "<th class='left'>Created</th>" 123 "<th class='left'>Created</th>"
124 "<th class='left'>Author</th>" 124 "<th class='left'>Author</th>"
125 "<th class='left'>Reference</th></tr>\n"); 125 "<th class='left'>Reference</th></tr>\n");
126 for_each_tag_ref(cgit_print_tag_cb, NULL); 126 for_each_tag_ref(cgit_print_tag_cb, NULL);
127} 127}
128 128
129void cgit_print_summary() 129void cgit_print_summary()
130{ 130{
131 html("<h2>"); 131 html("<h2>");
132 html_txt("Repo summary page"); 132 html(cgit_repo->name);
133 html("</h2>"); 133 html("</h2><h3>");
134 html(cgit_repo->desc);
135 html("</h3>");
134 html("<table class='list nowrap'>"); 136 html("<table class='list nowrap'>");
135 cgit_print_branches(); 137 cgit_print_branches();
136 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>"); 138 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
137 cgit_print_tags(); 139 cgit_print_tags();
138 html("</table>"); 140 html("</table>");
139} 141}
diff --git a/ui-tree.c b/ui-tree.c
index 1d07e70..b00670e 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -57,23 +57,22 @@ void cgit_print_tree(const char *hex, char *path)
57 unsigned char sha1[20]; 57 unsigned char sha1[20];
58 58
59 if (get_sha1_hex(hex, sha1)) { 59 if (get_sha1_hex(hex, sha1)) {
60 cgit_print_error(fmt("Invalid object id: %s", hex)); 60 cgit_print_error(fmt("Invalid object id: %s", hex));
61 return; 61 return;
62 } 62 }
63 tree = parse_tree_indirect(sha1); 63 tree = parse_tree_indirect(sha1);
64 if (!tree) { 64 if (!tree) {
65 cgit_print_error(fmt("Not a tree object: %s", hex)); 65 cgit_print_error(fmt("Not a tree object: %s", hex));
66 return; 66 return;
67 } 67 }
68 68
69 html("<h2>Tree content</h2>\n");
70 html_txt(path); 69 html_txt(path);
71 html("<table class='list'>\n"); 70 html("<table class='list'>\n");
72 html("<tr class='nohover'>"); 71 html("<tr class='nohover'>");
73 html("<th class='left'>Mode</th>"); 72 html("<th class='left'>Mode</th>");
74 html("<th class='left'>Name</th>"); 73 html("<th class='left'>Name</th>");
75 html("<th class='right'>Size</th>"); 74 html("<th class='right'>Size</th>");
76 html("</tr>\n"); 75 html("</tr>\n");
77 read_tree_recursive(tree, "", 0, 1, NULL, print_entry); 76 read_tree_recursive(tree, "", 0, 1, NULL, print_entry);
78 html("</table>\n"); 77 html("</table>\n");
79} 78}
diff --git a/ui-view.c b/ui-view.c
index 07cd8be..85e223c 100644
--- a/ui-view.c
+++ b/ui-view.c
@@ -23,20 +23,19 @@ void cgit_print_view(const char *hex)
23 if (sha1_object_info(sha1, type, &size)){ 23 if (sha1_object_info(sha1, type, &size)){
24 cgit_print_error("Bad object name"); 24 cgit_print_error("Bad object name");
25 return; 25 return;
26 } 26 }
27 27
28 buf = read_sha1_file(sha1, type, &size); 28 buf = read_sha1_file(sha1, type, &size);
29 if (!buf) { 29 if (!buf) {
30 cgit_print_error("Error reading object"); 30 cgit_print_error("Error reading object");
31 return; 31 return;
32 } 32 }
33 33
34 buf[size] = '\0'; 34 buf[size] = '\0';
35 html("<h2>Object content</h2>\n");
36 html("<table class='list'>\n"); 35 html("<table class='list'>\n");
37 htmlf("<tr class='nohover'><th class='left'>%s %s, %li bytes</th></tr>\n", type, hex, size); 36 htmlf("<tr class='nohover'><th class='left'>%s %s, %li bytes</th></tr>\n", type, hex, size);
38 html("<tr><td class='blob'>\n"); 37 html("<tr><td class='blob'>\n");
39 html_txt(buf); 38 html_txt(buf);
40 html("\n</td></tr>\n"); 39 html("\n</td></tr>\n");
41 html("</table>\n"); 40 html("</table>\n");
42} 41}