summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2007-06-26 15:32:03 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2007-06-26 15:32:08 (UTC)
commit42e459bb1f209df8278f4f4f0ee3f4bcfae80da8 (patch) (unidiff)
tree1f5acb9111aef704d2d62009bd2f2dac416d84d3
parent0d05bca502f4a5347fa629045aca97ba9b404acc (diff)
downloadcgit-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>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ui-shared.c2
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
@@ -52,303 +52,303 @@ 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
60char *cgit_pageurl(const char *reponame, const char *pagename, 60char *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&amp;p=%s&amp;%s", reponame, pagename, query); 72 return fmt("?r=%s&amp;p=%s&amp;%s", reponame, pagename, query);
73 else 73 else
74 return fmt("?r=%s&amp;p=%s", reponame, pagename); 74 return fmt("?r=%s&amp;p=%s", reponame, pagename);
75 } 75 }
76} 76}
77 77
78char *cgit_currurl() 78char *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
90static char *repolink(char *title, char *class, char *page, char *head, 90static 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 = "&amp;"; 132 delim = "&amp;";
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 = "&amp;"; 138 delim = "&amp;";
139 } 139 }
140 return fmt("%s", delim); 140 return fmt("%s", delim);
141} 141}
142 142
143static void reporevlink(char *page, char *name, char *title, char *class, 143static 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
159void cgit_tree_link(char *name, char *title, char *class, char *head, 159void 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
165void cgit_log_link(char *name, char *title, char *class, char *head, 165void 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
171void cgit_commit_link(char *name, char *title, char *class, char *head, 171void 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
183void cgit_diff_link(char *name, char *title, char *class, char *head, 183void 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 = "&amp;"; 193 delim = "&amp;";
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
205void cgit_print_date(time_t secs, char *format) 205void 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
215void cgit_print_age(time_t t, time_t max_relative, char *format) 215void 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
256void cgit_print_docstart(char *title, struct cacheitem *item) 256void 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
277void cgit_print_docend() 277void 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
283void cgit_print_pageheader(char *title, int show_search) 283void 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(") : &nbsp;"); 300 html(") : &nbsp;");
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
345void cgit_print_snapshot_start(const char *mimetype, const char *filename, 345void 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}