author | Lars Hjemli <hjemli@gmail.com> | 2007-06-26 15:32:03 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-06-26 15:32:08 (UTC) |
commit | 42e459bb1f209df8278f4f4f0ee3f4bcfae80da8 (patch) (unidiff) | |
tree | 1f5acb9111aef704d2d62009bd2f2dac416d84d3 | |
parent | 0d05bca502f4a5347fa629045aca97ba9b404acc (diff) | |
download | cgit-42e459bb1f209df8278f4f4f0ee3f4bcfae80da8.zip cgit-42e459bb1f209df8278f4f4f0ee3f4bcfae80da8.tar.gz cgit-42e459bb1f209df8278f4f4f0ee3f4bcfae80da8.tar.bz2 |
Do not include current path in the "tree" menu link
When generating the menu links on repo pages the tree link included the
current path. This made the link pretty useless whenever the current path
was set so this commit just passes NULL instead.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | ui-shared.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/ui-shared.c b/ui-shared.c index a198cf2..64c237f 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
@@ -1,354 +1,354 @@ | |||
1 | /* ui-shared.c: common web output functions | 1 | /* ui-shared.c: common web output functions |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | 10 | ||
11 | const char cgit_doctype[] = | 11 | const char cgit_doctype[] = |
12 | "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" | 12 | "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" |
13 | " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; | 13 | " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; |
14 | 14 | ||
15 | static char *http_date(time_t t) | 15 | static char *http_date(time_t t) |
16 | { | 16 | { |
17 | static char day[][4] = | 17 | static char day[][4] = |
18 | {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; | 18 | {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; |
19 | static char month[][4] = | 19 | static char month[][4] = |
20 | {"Jan", "Feb", "Mar", "Apr", "May", "Jun", | 20 | {"Jan", "Feb", "Mar", "Apr", "May", "Jun", |
21 | "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; | 21 | "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; |
22 | struct tm *tm = gmtime(&t); | 22 | struct tm *tm = gmtime(&t); |
23 | return fmt("%s, %02d %s %04d %02d:%02d:%02d GMT", day[tm->tm_wday], | 23 | return fmt("%s, %02d %s %04d %02d:%02d:%02d GMT", day[tm->tm_wday], |
24 | tm->tm_mday, month[tm->tm_mon], 1900+tm->tm_year, | 24 | tm->tm_mday, month[tm->tm_mon], 1900+tm->tm_year, |
25 | tm->tm_hour, tm->tm_min, tm->tm_sec); | 25 | tm->tm_hour, tm->tm_min, tm->tm_sec); |
26 | } | 26 | } |
27 | 27 | ||
28 | static long ttl_seconds(long ttl) | 28 | static long ttl_seconds(long ttl) |
29 | { | 29 | { |
30 | if (ttl<0) | 30 | if (ttl<0) |
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 | ||
36 | void cgit_print_error(char *msg) | 36 | void 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 | ||
43 | char *cgit_rooturl() | 43 | char *cgit_rooturl() |
44 | { | 44 | { |
45 | if (cgit_virtual_root) | 45 | if (cgit_virtual_root) |
46 | return fmt("%s/", cgit_virtual_root); | 46 | return fmt("%s/", cgit_virtual_root); |
47 | else | 47 | else |
48 | return cgit_script_name; | 48 | return cgit_script_name; |
49 | } | 49 | } |
50 | 50 | ||
51 | char *cgit_repourl(const char *reponame) | 51 | char *cgit_repourl(const char *reponame) |
52 | { | 52 | { |
53 | if (cgit_virtual_root) { | 53 | if (cgit_virtual_root) { |
54 | return fmt("%s/%s/", cgit_virtual_root, reponame); | 54 | return fmt("%s/%s/", cgit_virtual_root, reponame); |
55 | } else { | 55 | } else { |
56 | return fmt("?r=%s", reponame); | 56 | return fmt("?r=%s", reponame); |
57 | } | 57 | } |
58 | } | 58 | } |
59 | 59 | ||
60 | char *cgit_pageurl(const char *reponame, const char *pagename, | 60 | char *cgit_pageurl(const char *reponame, const char *pagename, |
61 | const char *query) | 61 | const char *query) |
62 | { | 62 | { |
63 | if (cgit_virtual_root) { | 63 | if (cgit_virtual_root) { |
64 | if (query) | 64 | if (query) |
65 | return fmt("%s/%s/%s/?%s", cgit_virtual_root, reponame, | 65 | return fmt("%s/%s/%s/?%s", cgit_virtual_root, reponame, |
66 | pagename, query); | 66 | pagename, query); |
67 | else | 67 | else |
68 | return fmt("%s/%s/%s/", cgit_virtual_root, reponame, | 68 | return fmt("%s/%s/%s/", cgit_virtual_root, reponame, |
69 | pagename); | 69 | pagename); |
70 | } else { | 70 | } else { |
71 | if (query) | 71 | if (query) |
72 | return fmt("?r=%s&p=%s&%s", reponame, pagename, query); | 72 | return fmt("?r=%s&p=%s&%s", reponame, pagename, query); |
73 | else | 73 | else |
74 | return fmt("?r=%s&p=%s", reponame, pagename); | 74 | return fmt("?r=%s&p=%s", reponame, pagename); |
75 | } | 75 | } |
76 | } | 76 | } |
77 | 77 | ||
78 | char *cgit_currurl() | 78 | char *cgit_currurl() |
79 | { | 79 | { |
80 | if (!cgit_virtual_root) | 80 | if (!cgit_virtual_root) |
81 | return cgit_script_name; | 81 | return cgit_script_name; |
82 | else if (cgit_query_page) | 82 | else if (cgit_query_page) |
83 | return fmt("%s/%s/%s/", cgit_virtual_root, cgit_query_repo, cgit_query_page); | 83 | return fmt("%s/%s/%s/", cgit_virtual_root, cgit_query_repo, cgit_query_page); |
84 | else if (cgit_query_repo) | 84 | else if (cgit_query_repo) |
85 | return fmt("%s/%s/", cgit_virtual_root, cgit_query_repo); | 85 | return fmt("%s/%s/", cgit_virtual_root, cgit_query_repo); |
86 | else | 86 | else |
87 | return fmt("%s/", cgit_virtual_root); | 87 | return fmt("%s/", cgit_virtual_root); |
88 | } | 88 | } |
89 | 89 | ||
90 | static char *repolink(char *title, char *class, char *page, char *head, | 90 | static char *repolink(char *title, char *class, char *page, char *head, |
91 | char *path) | 91 | char *path) |
92 | { | 92 | { |
93 | char *delim = "?"; | 93 | char *delim = "?"; |
94 | 94 | ||
95 | html("<a"); | 95 | html("<a"); |
96 | if (title) { | 96 | if (title) { |
97 | html(" title='"); | 97 | html(" title='"); |
98 | html_attr(title); | 98 | html_attr(title); |
99 | html("'"); | 99 | html("'"); |
100 | } | 100 | } |
101 | if (class) { | 101 | if (class) { |
102 | html(" class='"); | 102 | html(" class='"); |
103 | html_attr(class); | 103 | html_attr(class); |
104 | html("'"); | 104 | html("'"); |
105 | } | 105 | } |
106 | html(" href='"); | 106 | html(" href='"); |
107 | if (cgit_virtual_root) { | 107 | if (cgit_virtual_root) { |
108 | html_attr(cgit_virtual_root); | 108 | html_attr(cgit_virtual_root); |
109 | if (cgit_virtual_root[strlen(cgit_virtual_root) - 1] != '/') | 109 | if (cgit_virtual_root[strlen(cgit_virtual_root) - 1] != '/') |
110 | html("/"); | 110 | html("/"); |
111 | html_attr(cgit_repo->url); | 111 | html_attr(cgit_repo->url); |
112 | if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') | 112 | if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') |
113 | html("/"); | 113 | html("/"); |
114 | if (page) { | 114 | if (page) { |
115 | html(page); | 115 | html(page); |
116 | html("/"); | 116 | html("/"); |
117 | if (path) | 117 | if (path) |
118 | html_attr(path); | 118 | html_attr(path); |
119 | } | 119 | } |
120 | } else { | 120 | } else { |
121 | html(cgit_script_name); | 121 | html(cgit_script_name); |
122 | html("?url="); | 122 | html("?url="); |
123 | html_attr(cgit_repo->url); | 123 | html_attr(cgit_repo->url); |
124 | if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') | 124 | if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') |
125 | html("/"); | 125 | html("/"); |
126 | if (page) { | 126 | if (page) { |
127 | html(page); | 127 | html(page); |
128 | html("/"); | 128 | html("/"); |
129 | if (path) | 129 | if (path) |
130 | html_attr(path); | 130 | html_attr(path); |
131 | } | 131 | } |
132 | delim = "&"; | 132 | delim = "&"; |
133 | } | 133 | } |
134 | if (head && strcmp(head, cgit_repo->defbranch)) { | 134 | if (head && strcmp(head, cgit_repo->defbranch)) { |
135 | html(delim); | 135 | html(delim); |
136 | html("h="); | 136 | html("h="); |
137 | html_attr(head); | 137 | html_attr(head); |
138 | delim = "&"; | 138 | delim = "&"; |
139 | } | 139 | } |
140 | return fmt("%s", delim); | 140 | return fmt("%s", delim); |
141 | } | 141 | } |
142 | 142 | ||
143 | static void reporevlink(char *page, char *name, char *title, char *class, | 143 | static void reporevlink(char *page, char *name, char *title, char *class, |
144 | char *head, char *rev, char *path) | 144 | char *head, char *rev, char *path) |
145 | { | 145 | { |
146 | char *delim; | 146 | char *delim; |
147 | 147 | ||
148 | delim = repolink(title, class, page, head, path); | 148 | delim = repolink(title, class, page, head, path); |
149 | if (rev && strcmp(rev, cgit_query_head)) { | 149 | if (rev && strcmp(rev, cgit_query_head)) { |
150 | html(delim); | 150 | html(delim); |
151 | html("id="); | 151 | html("id="); |
152 | html_attr(rev); | 152 | html_attr(rev); |
153 | } | 153 | } |
154 | html("'>"); | 154 | html("'>"); |
155 | html_txt(name); | 155 | html_txt(name); |
156 | html("</a>"); | 156 | html("</a>"); |
157 | } | 157 | } |
158 | 158 | ||
159 | void cgit_tree_link(char *name, char *title, char *class, char *head, | 159 | void cgit_tree_link(char *name, char *title, char *class, char *head, |
160 | char *rev, char *path) | 160 | char *rev, char *path) |
161 | { | 161 | { |
162 | reporevlink("tree", name, title, class, head, rev, path); | 162 | reporevlink("tree", name, title, class, head, rev, path); |
163 | } | 163 | } |
164 | 164 | ||
165 | void cgit_log_link(char *name, char *title, char *class, char *head, | 165 | void cgit_log_link(char *name, char *title, char *class, char *head, |
166 | char *rev, char *path) | 166 | char *rev, char *path) |
167 | { | 167 | { |
168 | reporevlink("log", name, title, class, head, rev, path); | 168 | reporevlink("log", name, title, class, head, rev, path); |
169 | } | 169 | } |
170 | 170 | ||
171 | void cgit_commit_link(char *name, char *title, char *class, char *head, | 171 | void cgit_commit_link(char *name, char *title, char *class, char *head, |
172 | char *rev) | 172 | char *rev) |
173 | { | 173 | { |
174 | if (strlen(name) > cgit_max_msg_len && cgit_max_msg_len >= 15) { | 174 | if (strlen(name) > cgit_max_msg_len && cgit_max_msg_len >= 15) { |
175 | name[cgit_max_msg_len] = '\0'; | 175 | name[cgit_max_msg_len] = '\0'; |
176 | name[cgit_max_msg_len - 1] = '.'; | 176 | name[cgit_max_msg_len - 1] = '.'; |
177 | name[cgit_max_msg_len - 2] = '.'; | 177 | name[cgit_max_msg_len - 2] = '.'; |
178 | name[cgit_max_msg_len - 3] = '.'; | 178 | name[cgit_max_msg_len - 3] = '.'; |
179 | } | 179 | } |
180 | reporevlink("commit", name, title, class, head, rev, NULL); | 180 | reporevlink("commit", name, title, class, head, rev, NULL); |
181 | } | 181 | } |
182 | 182 | ||
183 | void cgit_diff_link(char *name, char *title, char *class, char *head, | 183 | void cgit_diff_link(char *name, char *title, char *class, char *head, |
184 | char *new_rev, char *old_rev, char *path) | 184 | char *new_rev, char *old_rev, char *path) |
185 | { | 185 | { |
186 | char *delim; | 186 | char *delim; |
187 | 187 | ||
188 | delim = repolink(title, class, "diff", head, path); | 188 | delim = repolink(title, class, "diff", head, path); |
189 | if (new_rev && strcmp(new_rev, cgit_query_head)) { | 189 | if (new_rev && strcmp(new_rev, cgit_query_head)) { |
190 | html(delim); | 190 | html(delim); |
191 | html("id="); | 191 | html("id="); |
192 | html_attr(new_rev); | 192 | html_attr(new_rev); |
193 | delim = "&"; | 193 | delim = "&"; |
194 | } | 194 | } |
195 | if (old_rev) { | 195 | if (old_rev) { |
196 | html(delim); | 196 | html(delim); |
197 | html("id2="); | 197 | html("id2="); |
198 | html_attr(old_rev); | 198 | html_attr(old_rev); |
199 | } | 199 | } |
200 | html("'>"); | 200 | html("'>"); |
201 | html_txt(name); | 201 | html_txt(name); |
202 | html("</a>"); | 202 | html("</a>"); |
203 | } | 203 | } |
204 | 204 | ||
205 | void cgit_print_date(time_t secs, char *format) | 205 | void cgit_print_date(time_t secs, char *format) |
206 | { | 206 | { |
207 | char buf[64]; | 207 | char buf[64]; |
208 | struct tm *time; | 208 | struct tm *time; |
209 | 209 | ||
210 | time = gmtime(&secs); | 210 | time = gmtime(&secs); |
211 | strftime(buf, sizeof(buf)-1, format, time); | 211 | strftime(buf, sizeof(buf)-1, format, time); |
212 | html_txt(buf); | 212 | html_txt(buf); |
213 | } | 213 | } |
214 | 214 | ||
215 | void cgit_print_age(time_t t, time_t max_relative, char *format) | 215 | void cgit_print_age(time_t t, time_t max_relative, char *format) |
216 | { | 216 | { |
217 | time_t now, secs; | 217 | time_t now, secs; |
218 | 218 | ||
219 | time(&now); | 219 | time(&now); |
220 | secs = now - t; | 220 | secs = now - t; |
221 | 221 | ||
222 | if (secs > max_relative && max_relative >= 0) { | 222 | if (secs > max_relative && max_relative >= 0) { |
223 | cgit_print_date(t, format); | 223 | cgit_print_date(t, format); |
224 | return; | 224 | return; |
225 | } | 225 | } |
226 | 226 | ||
227 | if (secs < TM_HOUR * 2) { | 227 | if (secs < TM_HOUR * 2) { |
228 | htmlf("<span class='age-mins'>%.0f min.</span>", | 228 | htmlf("<span class='age-mins'>%.0f min.</span>", |
229 | secs * 1.0 / TM_MIN); | 229 | secs * 1.0 / TM_MIN); |
230 | return; | 230 | return; |
231 | } | 231 | } |
232 | if (secs < TM_DAY * 2) { | 232 | if (secs < TM_DAY * 2) { |
233 | htmlf("<span class='age-hours'>%.0f hours</span>", | 233 | htmlf("<span class='age-hours'>%.0f hours</span>", |
234 | secs * 1.0 / TM_HOUR); | 234 | secs * 1.0 / TM_HOUR); |
235 | return; | 235 | return; |
236 | } | 236 | } |
237 | if (secs < TM_WEEK * 2) { | 237 | if (secs < TM_WEEK * 2) { |
238 | htmlf("<span class='age-days'>%.0f days</span>", | 238 | htmlf("<span class='age-days'>%.0f days</span>", |
239 | secs * 1.0 / TM_DAY); | 239 | secs * 1.0 / TM_DAY); |
240 | return; | 240 | return; |
241 | } | 241 | } |
242 | if (secs < TM_MONTH * 2) { | 242 | if (secs < TM_MONTH * 2) { |
243 | htmlf("<span class='age-weeks'>%.0f weeks</span>", | 243 | htmlf("<span class='age-weeks'>%.0f weeks</span>", |
244 | secs * 1.0 / TM_WEEK); | 244 | secs * 1.0 / TM_WEEK); |
245 | return; | 245 | return; |
246 | } | 246 | } |
247 | if (secs < TM_YEAR * 2) { | 247 | if (secs < TM_YEAR * 2) { |
248 | htmlf("<span class='age-months'>%.0f months</span>", | 248 | htmlf("<span class='age-months'>%.0f months</span>", |
249 | secs * 1.0 / TM_MONTH); | 249 | secs * 1.0 / TM_MONTH); |
250 | return; | 250 | return; |
251 | } | 251 | } |
252 | htmlf("<span class='age-years'>%.0f years</span>", | 252 | htmlf("<span class='age-years'>%.0f years</span>", |
253 | secs * 1.0 / TM_YEAR); | 253 | secs * 1.0 / TM_YEAR); |
254 | } | 254 | } |
255 | 255 | ||
256 | void cgit_print_docstart(char *title, struct cacheitem *item) | 256 | void cgit_print_docstart(char *title, struct cacheitem *item) |
257 | { | 257 | { |
258 | html("Content-Type: text/html; charset=utf-8\n"); | 258 | html("Content-Type: text/html; charset=utf-8\n"); |
259 | htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); | 259 | htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); |
260 | htmlf("Expires: %s\n", http_date(item->st.st_mtime + | 260 | htmlf("Expires: %s\n", http_date(item->st.st_mtime + |
261 | ttl_seconds(item->ttl))); | 261 | ttl_seconds(item->ttl))); |
262 | html("\n"); | 262 | html("\n"); |
263 | html(cgit_doctype); | 263 | html(cgit_doctype); |
264 | html("<html>\n"); | 264 | html("<html>\n"); |
265 | html("<head>\n"); | 265 | html("<head>\n"); |
266 | html("<title>"); | 266 | html("<title>"); |
267 | html_txt(title); | 267 | html_txt(title); |
268 | html("</title>\n"); | 268 | html("</title>\n"); |
269 | htmlf("<meta name='generator' content='cgit v%s'/>\n", cgit_version); | 269 | htmlf("<meta name='generator' content='cgit v%s'/>\n", cgit_version); |
270 | html("<link rel='stylesheet' type='text/css' href='"); | 270 | html("<link rel='stylesheet' type='text/css' href='"); |
271 | html_attr(cgit_css); | 271 | html_attr(cgit_css); |
272 | html("'/>\n"); | 272 | html("'/>\n"); |
273 | html("</head>\n"); | 273 | html("</head>\n"); |
274 | html("<body>\n"); | 274 | html("<body>\n"); |
275 | } | 275 | } |
276 | 276 | ||
277 | void cgit_print_docend() | 277 | void cgit_print_docend() |
278 | { | 278 | { |
279 | html("</td></tr></table>"); | 279 | html("</td></tr></table>"); |
280 | html("</body>\n</html>\n"); | 280 | html("</body>\n</html>\n"); |
281 | } | 281 | } |
282 | 282 | ||
283 | void cgit_print_pageheader(char *title, int show_search) | 283 | void cgit_print_pageheader(char *title, int show_search) |
284 | { | 284 | { |
285 | html("<table id='layout'>"); | 285 | html("<table id='layout'>"); |
286 | html("<tr><td id='header'><a href='"); | 286 | html("<tr><td id='header'><a href='"); |
287 | html_attr(cgit_rooturl()); | 287 | html_attr(cgit_rooturl()); |
288 | html("'>"); | 288 | html("'>"); |
289 | html_txt(cgit_root_title); | 289 | html_txt(cgit_root_title); |
290 | html("</a></td><td id='logo'>"); | 290 | html("</a></td><td id='logo'>"); |
291 | html("<a href='"); | 291 | html("<a href='"); |
292 | html_attr(cgit_logo_link); | 292 | html_attr(cgit_logo_link); |
293 | htmlf("'><img src='%s' alt='logo'/></a>", cgit_logo); | 293 | htmlf("'><img src='%s' alt='logo'/></a>", cgit_logo); |
294 | html("</td></tr>"); | 294 | html("</td></tr>"); |
295 | html("<tr><td id='crumb'>"); | 295 | html("<tr><td id='crumb'>"); |
296 | if (cgit_query_repo) { | 296 | if (cgit_query_repo) { |
297 | html_txt(cgit_repo->name); | 297 | html_txt(cgit_repo->name); |
298 | html(" ("); | 298 | html(" ("); |
299 | html_txt(cgit_query_head); | 299 | html_txt(cgit_query_head); |
300 | html(") : "); | 300 | html(") : "); |
301 | reporevlink(NULL, "summary", NULL, NULL, cgit_query_head, | 301 | reporevlink(NULL, "summary", NULL, NULL, cgit_query_head, |
302 | NULL, NULL); | 302 | NULL, NULL); |
303 | html(" "); | 303 | html(" "); |
304 | cgit_log_link("log", NULL, NULL, cgit_query_head, | 304 | cgit_log_link("log", NULL, NULL, cgit_query_head, |
305 | cgit_query_sha1, cgit_query_path); | 305 | cgit_query_sha1, cgit_query_path); |
306 | html(" "); | 306 | html(" "); |
307 | cgit_tree_link("tree", NULL, NULL, cgit_query_head, | 307 | cgit_tree_link("tree", NULL, NULL, cgit_query_head, |
308 | cgit_query_sha1, cgit_query_path); | 308 | cgit_query_sha1, NULL); |
309 | html(" "); | 309 | html(" "); |
310 | cgit_commit_link("commit", NULL, NULL, cgit_query_head, | 310 | cgit_commit_link("commit", NULL, NULL, cgit_query_head, |
311 | cgit_query_sha1); | 311 | cgit_query_sha1); |
312 | html(" "); | 312 | html(" "); |
313 | cgit_diff_link("diff", NULL, NULL, cgit_query_head, | 313 | cgit_diff_link("diff", NULL, NULL, cgit_query_head, |
314 | cgit_query_sha1, cgit_query_sha2, | 314 | cgit_query_sha1, cgit_query_sha2, |
315 | cgit_query_path); | 315 | cgit_query_path); |
316 | } else { | 316 | } else { |
317 | html_txt("Index of repositories"); | 317 | html_txt("Index of repositories"); |
318 | } | 318 | } |
319 | html("</td>"); | 319 | html("</td>"); |
320 | html("<td id='search'>"); | 320 | html("<td id='search'>"); |
321 | if (show_search) { | 321 | if (show_search) { |
322 | html("<form method='get' action='"); | 322 | html("<form method='get' action='"); |
323 | html_attr(cgit_currurl()); | 323 | html_attr(cgit_currurl()); |
324 | html("'>"); | 324 | html("'>"); |
325 | if (!cgit_virtual_root) { | 325 | if (!cgit_virtual_root) { |
326 | if (cgit_query_repo) | 326 | if (cgit_query_repo) |
327 | html_hidden("r", cgit_query_repo); | 327 | html_hidden("r", cgit_query_repo); |
328 | if (cgit_query_page) | 328 | if (cgit_query_page) |
329 | html_hidden("p", cgit_query_page); | 329 | html_hidden("p", cgit_query_page); |
330 | } | 330 | } |
331 | if (cgit_query_head) | 331 | if (cgit_query_head) |
332 | html_hidden("h", cgit_query_head); | 332 | html_hidden("h", cgit_query_head); |
333 | if (cgit_query_sha1) | 333 | if (cgit_query_sha1) |
334 | html_hidden("id", cgit_query_sha1); | 334 | html_hidden("id", cgit_query_sha1); |
335 | if (cgit_query_sha2) | 335 | if (cgit_query_sha2) |
336 | html_hidden("id2", cgit_query_sha2); | 336 | html_hidden("id2", cgit_query_sha2); |
337 | html("<input type='text' name='q' value='"); | 337 | html("<input type='text' name='q' value='"); |
338 | html_attr(cgit_query_search); | 338 | html_attr(cgit_query_search); |
339 | html("'/></form>"); | 339 | html("'/></form>"); |
340 | } | 340 | } |
341 | html("</td></tr>"); | 341 | html("</td></tr>"); |
342 | html("<tr><td id='content' colspan='2'>"); | 342 | html("<tr><td id='content' colspan='2'>"); |
343 | } | 343 | } |
344 | 344 | ||
345 | void cgit_print_snapshot_start(const char *mimetype, const char *filename, | 345 | void cgit_print_snapshot_start(const char *mimetype, const char *filename, |
346 | struct cacheitem *item) | 346 | struct cacheitem *item) |
347 | { | 347 | { |
348 | htmlf("Content-Type: %s\n", mimetype); | 348 | htmlf("Content-Type: %s\n", mimetype); |
349 | htmlf("Content-Disposition: inline; filename=\"%s\"\n", filename); | 349 | htmlf("Content-Disposition: inline; filename=\"%s\"\n", filename); |
350 | htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); | 350 | htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); |
351 | htmlf("Expires: %s\n", http_date(item->st.st_mtime + | 351 | htmlf("Expires: %s\n", http_date(item->st.st_mtime + |
352 | ttl_seconds(item->ttl))); | 352 | ttl_seconds(item->ttl))); |
353 | html("\n"); | 353 | html("\n"); |
354 | } | 354 | } |