diff options
Diffstat (limited to 'ui-shared.c')
-rw-r--r-- | ui-shared.c | 260 |
1 files changed, 193 insertions, 67 deletions
diff --git a/ui-shared.c b/ui-shared.c index 8a7cc32..c398d7a 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
@@ -27,7 +27,7 @@ static char *http_date(time_t t) | |||
27 | tm->tm_hour, tm->tm_min, tm->tm_sec); | 27 | tm->tm_hour, tm->tm_min, tm->tm_sec); |
28 | } | 28 | } |
29 | 29 | ||
30 | void cgit_print_error(char *msg) | 30 | void cgit_print_error(const char *msg) |
31 | { | 31 | { |
32 | html("<div class='error'>"); | 32 | html("<div class='error'>"); |
33 | html_txt(msg); | 33 | html_txt(msg); |
@@ -133,7 +133,7 @@ char *cgit_currurl() | |||
133 | return fmt("%s/", ctx.cfg.virtual_root); | 133 | return fmt("%s/", ctx.cfg.virtual_root); |
134 | } | 134 | } |
135 | 135 | ||
136 | static void site_url(char *page, char *search, int ofs) | 136 | static void site_url(const char *page, const char *search, int ofs) |
137 | { | 137 | { |
138 | char *delim = "?"; | 138 | char *delim = "?"; |
139 | 139 | ||
@@ -160,8 +160,8 @@ static void site_url(char *page, char *search, int ofs) | |||
160 | } | 160 | } |
161 | } | 161 | } |
162 | 162 | ||
163 | static void site_link(char *page, char *name, char *title, char *class, | 163 | static void site_link(const char *page, const char *name, const char *title, |
164 | char *search, int ofs) | 164 | const char *class, const char *search, int ofs) |
165 | { | 165 | { |
166 | html("<a"); | 166 | html("<a"); |
167 | if (title) { | 167 | if (title) { |
@@ -181,14 +181,14 @@ static void site_link(char *page, char *name, char *title, char *class, | |||
181 | html("</a>"); | 181 | html("</a>"); |
182 | } | 182 | } |
183 | 183 | ||
184 | void cgit_index_link(char *name, char *title, char *class, char *pattern, | 184 | void cgit_index_link(const char *name, const char *title, const char *class, |
185 | int ofs) | 185 | const char *pattern, int ofs) |
186 | { | 186 | { |
187 | site_link(NULL, name, title, class, pattern, ofs); | 187 | site_link(NULL, name, title, class, pattern, ofs); |
188 | } | 188 | } |
189 | 189 | ||
190 | static char *repolink(char *title, char *class, char *page, char *head, | 190 | static char *repolink(const char *title, const char *class, const char *page, |
191 | char *path) | 191 | const char *head, const char *path) |
192 | { | 192 | { |
193 | char *delim = "?"; | 193 | char *delim = "?"; |
194 | 194 | ||
@@ -240,8 +240,9 @@ static char *repolink(char *title, char *class, char *page, char *head, | |||
240 | return fmt("%s", delim); | 240 | return fmt("%s", delim); |
241 | } | 241 | } |
242 | 242 | ||
243 | static void reporevlink(char *page, char *name, char *title, char *class, | 243 | static void reporevlink(const char *page, const char *name, const char *title, |
244 | char *head, char *rev, char *path) | 244 | const char *class, const char *head, const char *rev, |
245 | const char *path) | ||
245 | { | 246 | { |
246 | char *delim; | 247 | char *delim; |
247 | 248 | ||
@@ -256,32 +257,33 @@ static void reporevlink(char *page, char *name, char *title, char *class, | |||
256 | html("</a>"); | 257 | html("</a>"); |
257 | } | 258 | } |
258 | 259 | ||
259 | void cgit_summary_link(char *name, char *title, char *class, char *head) | 260 | void cgit_summary_link(const char *name, const char *title, const char *class, |
261 | const char *head) | ||
260 | { | 262 | { |
261 | reporevlink(NULL, name, title, class, head, NULL, NULL); | 263 | reporevlink(NULL, name, title, class, head, NULL, NULL); |
262 | } | 264 | } |
263 | 265 | ||
264 | void cgit_tag_link(char *name, char *title, char *class, char *head, | 266 | void cgit_tag_link(const char *name, const char *title, const char *class, |
265 | char *rev) | 267 | const char *head, const char *rev) |
266 | { | 268 | { |
267 | reporevlink("tag", name, title, class, head, rev, NULL); | 269 | reporevlink("tag", name, title, class, head, rev, NULL); |
268 | } | 270 | } |
269 | 271 | ||
270 | void cgit_tree_link(char *name, char *title, char *class, char *head, | 272 | void cgit_tree_link(const char *name, const char *title, const char *class, |
271 | char *rev, char *path) | 273 | const char *head, const char *rev, const char *path) |
272 | { | 274 | { |
273 | reporevlink("tree", name, title, class, head, rev, path); | 275 | reporevlink("tree", name, title, class, head, rev, path); |
274 | } | 276 | } |
275 | 277 | ||
276 | void cgit_plain_link(char *name, char *title, char *class, char *head, | 278 | void cgit_plain_link(const char *name, const char *title, const char *class, |
277 | char *rev, char *path) | 279 | const char *head, const char *rev, const char *path) |
278 | { | 280 | { |
279 | reporevlink("plain", name, title, class, head, rev, path); | 281 | reporevlink("plain", name, title, class, head, rev, path); |
280 | } | 282 | } |
281 | 283 | ||
282 | void cgit_log_link(char *name, char *title, char *class, char *head, | 284 | void cgit_log_link(const char *name, const char *title, const char *class, |
283 | char *rev, char *path, int ofs, char *grep, char *pattern, | 285 | const char *head, const char *rev, const char *path, |
284 | int showmsg) | 286 | int ofs, const char *grep, const char *pattern, int showmsg) |
285 | { | 287 | { |
286 | char *delim; | 288 | char *delim; |
287 | 289 | ||
@@ -316,8 +318,9 @@ void cgit_log_link(char *name, char *title, char *class, char *head, | |||
316 | html("</a>"); | 318 | html("</a>"); |
317 | } | 319 | } |
318 | 320 | ||
319 | void cgit_commit_link(char *name, char *title, char *class, char *head, | 321 | void cgit_commit_link(char *name, const char *title, const char *class, |
320 | char *rev) | 322 | const char *head, const char *rev, const char *path, |
323 | int toggle_ssdiff) | ||
321 | { | 324 | { |
322 | if (strlen(name) > ctx.cfg.max_msg_len && ctx.cfg.max_msg_len >= 15) { | 325 | if (strlen(name) > ctx.cfg.max_msg_len && ctx.cfg.max_msg_len >= 15) { |
323 | name[ctx.cfg.max_msg_len] = '\0'; | 326 | name[ctx.cfg.max_msg_len] = '\0'; |
@@ -325,23 +328,48 @@ void cgit_commit_link(char *name, char *title, char *class, char *head, | |||
325 | name[ctx.cfg.max_msg_len - 2] = '.'; | 328 | name[ctx.cfg.max_msg_len - 2] = '.'; |
326 | name[ctx.cfg.max_msg_len - 3] = '.'; | 329 | name[ctx.cfg.max_msg_len - 3] = '.'; |
327 | } | 330 | } |
328 | reporevlink("commit", name, title, class, head, rev, NULL); | 331 | |
332 | char *delim; | ||
333 | |||
334 | delim = repolink(title, class, "commit", head, path); | ||
335 | if (rev && strcmp(rev, ctx.qry.head)) { | ||
336 | html(delim); | ||
337 | html("id="); | ||
338 | html_url_arg(rev); | ||
339 | delim = "&"; | ||
340 | } | ||
341 | if ((ctx.qry.ssdiff && !toggle_ssdiff) || (!ctx.qry.ssdiff && toggle_ssdiff)) { | ||
342 | html(delim); | ||
343 | html("ss=1"); | ||
344 | delim = "&"; | ||
345 | } | ||
346 | if (ctx.qry.context > 0 && ctx.qry.context != 3) { | ||
347 | html(delim); | ||
348 | html("context="); | ||
349 | htmlf("%d", ctx.qry.context); | ||
350 | delim = "&"; | ||
351 | } | ||
352 | html("'>"); | ||
353 | html_txt(name); | ||
354 | html("</a>"); | ||
329 | } | 355 | } |
330 | 356 | ||
331 | void cgit_refs_link(char *name, char *title, char *class, char *head, | 357 | void cgit_refs_link(const char *name, const char *title, const char *class, |
332 | char *rev, char *path) | 358 | const char *head, const char *rev, const char *path) |
333 | { | 359 | { |
334 | reporevlink("refs", name, title, class, head, rev, path); | 360 | reporevlink("refs", name, title, class, head, rev, path); |
335 | } | 361 | } |
336 | 362 | ||
337 | void cgit_snapshot_link(char *name, char *title, char *class, char *head, | 363 | void cgit_snapshot_link(const char *name, const char *title, const char *class, |
338 | char *rev, char *archivename) | 364 | const char *head, const char *rev, |
365 | const char *archivename) | ||
339 | { | 366 | { |
340 | reporevlink("snapshot", name, title, class, head, rev, archivename); | 367 | reporevlink("snapshot", name, title, class, head, rev, archivename); |
341 | } | 368 | } |
342 | 369 | ||
343 | void cgit_diff_link(char *name, char *title, char *class, char *head, | 370 | void cgit_diff_link(const char *name, const char *title, const char *class, |
344 | char *new_rev, char *old_rev, char *path) | 371 | const char *head, const char *new_rev, const char *old_rev, |
372 | const char *path, int toggle_ssdiff) | ||
345 | { | 373 | { |
346 | char *delim; | 374 | char *delim; |
347 | 375 | ||
@@ -356,24 +384,94 @@ void cgit_diff_link(char *name, char *title, char *class, char *head, | |||
356 | html(delim); | 384 | html(delim); |
357 | html("id2="); | 385 | html("id2="); |
358 | html_url_arg(old_rev); | 386 | html_url_arg(old_rev); |
387 | delim = "&"; | ||
388 | } | ||
389 | if ((ctx.qry.ssdiff && !toggle_ssdiff) || (!ctx.qry.ssdiff && toggle_ssdiff)) { | ||
390 | html(delim); | ||
391 | html("ss=1"); | ||
392 | delim = "&"; | ||
393 | } | ||
394 | if (ctx.qry.context > 0 && ctx.qry.context != 3) { | ||
395 | html(delim); | ||
396 | html("context="); | ||
397 | htmlf("%d", ctx.qry.context); | ||
398 | delim = "&"; | ||
359 | } | 399 | } |
360 | html("'>"); | 400 | html("'>"); |
361 | html_txt(name); | 401 | html_txt(name); |
362 | html("</a>"); | 402 | html("</a>"); |
363 | } | 403 | } |
364 | 404 | ||
365 | void cgit_patch_link(char *name, char *title, char *class, char *head, | 405 | void cgit_patch_link(const char *name, const char *title, const char *class, |
366 | char *rev) | 406 | const char *head, const char *rev, const char *path) |
367 | { | 407 | { |
368 | reporevlink("patch", name, title, class, head, rev, NULL); | 408 | reporevlink("patch", name, title, class, head, rev, path); |
369 | } | 409 | } |
370 | 410 | ||
371 | void cgit_stats_link(char *name, char *title, char *class, char *head, | 411 | void cgit_stats_link(const char *name, const char *title, const char *class, |
372 | char *path) | 412 | const char *head, const char *path) |
373 | { | 413 | { |
374 | reporevlink("stats", name, title, class, head, NULL, path); | 414 | reporevlink("stats", name, title, class, head, NULL, path); |
375 | } | 415 | } |
376 | 416 | ||
417 | void cgit_self_link(char *name, const char *title, const char *class, | ||
418 | struct cgit_context *ctx) | ||
419 | { | ||
420 | if (!strcmp(ctx->qry.page, "repolist")) | ||
421 | return cgit_index_link(name, title, class, ctx->qry.search, | ||
422 | ctx->qry.ofs); | ||
423 | else if (!strcmp(ctx->qry.page, "summary")) | ||
424 | return cgit_summary_link(name, title, class, ctx->qry.head); | ||
425 | else if (!strcmp(ctx->qry.page, "tag")) | ||
426 | return cgit_tag_link(name, title, class, ctx->qry.head, | ||
427 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL); | ||
428 | else if (!strcmp(ctx->qry.page, "tree")) | ||
429 | return cgit_tree_link(name, title, class, ctx->qry.head, | ||
430 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, | ||
431 | ctx->qry.path); | ||
432 | else if (!strcmp(ctx->qry.page, "plain")) | ||
433 | return cgit_plain_link(name, title, class, ctx->qry.head, | ||
434 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, | ||
435 | ctx->qry.path); | ||
436 | else if (!strcmp(ctx->qry.page, "log")) | ||
437 | return cgit_log_link(name, title, class, ctx->qry.head, | ||
438 | ctx->qry.has_sha1 ? ctx->qry.sha1 : NULL, | ||
439 | ctx->qry.path, ctx->qry.ofs, | ||