author | Lars Hjemli <hjemli@gmail.com> | 2008-05-03 09:07:41 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2008-05-03 09:07:41 (UTC) |
commit | aa3c4486b41b8b13d0f52477f033837fc8bb9524 (patch) (unidiff) | |
tree | 9ab3b6b2b3b27ce4d3d5bdb7bd42c870aec8ed54 /ui-shared.c | |
parent | c6078b8b006bcb0671a3c1bc21dd1a2c01035a2e (diff) | |
download | cgit-aa3c4486b41b8b13d0f52477f033837fc8bb9524.zip cgit-aa3c4486b41b8b13d0f52477f033837fc8bb9524.tar.gz cgit-aa3c4486b41b8b13d0f52477f033837fc8bb9524.tar.bz2 |
Add footer with page creation time and cgit version on all pages
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | ui-shared.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/ui-shared.c b/ui-shared.c index f366354..44269a7 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
@@ -398,96 +398,99 @@ void cgit_print_age(time_t t, time_t max_relative, char *format) | |||
398 | htmlf("<span class='age-weeks'>%.0f weeks</span>", | 398 | htmlf("<span class='age-weeks'>%.0f weeks</span>", |
399 | secs * 1.0 / TM_WEEK); | 399 | secs * 1.0 / TM_WEEK); |
400 | return; | 400 | return; |
401 | } | 401 | } |
402 | if (secs < TM_YEAR * 2) { | 402 | if (secs < TM_YEAR * 2) { |
403 | htmlf("<span class='age-months'>%.0f months</span>", | 403 | htmlf("<span class='age-months'>%.0f months</span>", |
404 | secs * 1.0 / TM_MONTH); | 404 | secs * 1.0 / TM_MONTH); |
405 | return; | 405 | return; |
406 | } | 406 | } |
407 | htmlf("<span class='age-years'>%.0f years</span>", | 407 | htmlf("<span class='age-years'>%.0f years</span>", |
408 | secs * 1.0 / TM_YEAR); | 408 | secs * 1.0 / TM_YEAR); |
409 | } | 409 | } |
410 | 410 | ||
411 | void cgit_print_http_headers(struct cgit_context *ctx) | 411 | void cgit_print_http_headers(struct cgit_context *ctx) |
412 | { | 412 | { |
413 | if (ctx->page.mimetype && ctx->page.charset) | 413 | if (ctx->page.mimetype && ctx->page.charset) |
414 | htmlf("Content-Type: %s; charset=%s\n", ctx->page.mimetype, | 414 | htmlf("Content-Type: %s; charset=%s\n", ctx->page.mimetype, |
415 | ctx->page.charset); | 415 | ctx->page.charset); |
416 | else if (ctx->page.mimetype) | 416 | else if (ctx->page.mimetype) |
417 | htmlf("Content-Type: %s\n", ctx->page.mimetype); | 417 | htmlf("Content-Type: %s\n", ctx->page.mimetype); |
418 | if (ctx->page.filename) | 418 | if (ctx->page.filename) |
419 | htmlf("Content-Disposition: inline; filename=\"%s\"\n", | 419 | htmlf("Content-Disposition: inline; filename=\"%s\"\n", |
420 | ctx->page.filename); | 420 | ctx->page.filename); |
421 | htmlf("Last-Modified: %s\n", http_date(ctx->page.modified)); | 421 | htmlf("Last-Modified: %s\n", http_date(ctx->page.modified)); |
422 | htmlf("Expires: %s\n", http_date(ctx->page.expires)); | 422 | htmlf("Expires: %s\n", http_date(ctx->page.expires)); |
423 | html("\n"); | 423 | html("\n"); |
424 | } | 424 | } |
425 | 425 | ||
426 | void cgit_print_docstart(struct cgit_context *ctx) | 426 | void cgit_print_docstart(struct cgit_context *ctx) |
427 | { | 427 | { |
428 | html(cgit_doctype); | 428 | html(cgit_doctype); |
429 | html("<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>\n"); | 429 | html("<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>\n"); |
430 | html("<head>\n"); | 430 | html("<head>\n"); |
431 | html("<title>"); | 431 | html("<title>"); |
432 | html_txt(ctx->page.title); | 432 | html_txt(ctx->page.title); |
433 | html("</title>\n"); | 433 | html("</title>\n"); |
434 | htmlf("<meta name='generator' content='cgit %s'/>\n", cgit_version); | 434 | htmlf("<meta name='generator' content='cgit %s'/>\n", cgit_version); |
435 | if (ctx->cfg.robots && *ctx->cfg.robots) | 435 | if (ctx->cfg.robots && *ctx->cfg.robots) |
436 | htmlf("<meta name='robots' content='%s'/>\n", ctx->cfg.robots); | 436 | htmlf("<meta name='robots' content='%s'/>\n", ctx->cfg.robots); |
437 | html("<link rel='stylesheet' type='text/css' href='"); | 437 | html("<link rel='stylesheet' type='text/css' href='"); |
438 | html_attr(ctx->cfg.css); | 438 | html_attr(ctx->cfg.css); |
439 | html("'/>\n"); | 439 | html("'/>\n"); |
440 | html("</head>\n"); | 440 | html("</head>\n"); |
441 | html("<body>\n"); | 441 | html("<body>\n"); |
442 | } | 442 | } |
443 | 443 | ||
444 | void cgit_print_docend() | 444 | void cgit_print_docend() |
445 | { | 445 | { |
446 | html("</div><div class='footer'>generated "); | ||
447 | cgit_print_date(time(NULL), FMT_LONGDATE); | ||
448 | htmlf(" by cgit %s", cgit_version); | ||
446 | html("</div>\n</body>\n</html>\n"); | 449 | html("</div>\n</body>\n</html>\n"); |
447 | } | 450 | } |
448 | 451 | ||
449 | int print_branch_option(const char *refname, const unsigned char *sha1, | 452 | int print_branch_option(const char *refname, const unsigned char *sha1, |
450 | int flags, void *cb_data) | 453 | int flags, void *cb_data) |
451 | { | 454 | { |
452 | char *name = (char *)refname; | 455 | char *name = (char *)refname; |
453 | html_option(name, name, ctx.qry.head); | 456 | html_option(name, name, ctx.qry.head); |
454 | return 0; | 457 | return 0; |
455 | } | 458 | } |
456 | 459 | ||
457 | int print_archive_ref(const char *refname, const unsigned char *sha1, | 460 | int print_archive_ref(const char *refname, const unsigned char *sha1, |
458 | int flags, void *cb_data) | 461 | int flags, void *cb_data) |
459 | { | 462 | { |
460 | struct tag *tag; | 463 | struct tag *tag; |
461 | struct taginfo *info; | 464 | struct taginfo *info; |
462 | struct object *obj; | 465 | struct object *obj; |
463 | char buf[256], *url; | 466 | char buf[256], *url; |
464 | unsigned char fileid[20]; | 467 | unsigned char fileid[20]; |
465 | int *header = (int *)cb_data; | 468 | int *header = (int *)cb_data; |
466 | 469 | ||
467 | if (prefixcmp(refname, "refs/archives")) | 470 | if (prefixcmp(refname, "refs/archives")) |
468 | return 0; | 471 | return 0; |
469 | strncpy(buf, refname+14, sizeof(buf)); | 472 | strncpy(buf, refname+14, sizeof(buf)); |
470 | obj = parse_object(sha1); | 473 | obj = parse_object(sha1); |
471 | if (!obj) | 474 | if (!obj) |
472 | return 1; | 475 | return 1; |
473 | if (obj->type == OBJ_TAG) { | 476 | if (obj->type == OBJ_TAG) { |
474 | tag = lookup_tag(sha1); | 477 | tag = lookup_tag(sha1); |
475 | if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) | 478 | if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) |
476 | return 0; | 479 | return 0; |
477 | hashcpy(fileid, tag->tagged->sha1); | 480 | hashcpy(fileid, tag->tagged->sha1); |
478 | } else if (obj->type != OBJ_BLOB) { | 481 | } else if (obj->type != OBJ_BLOB) { |
479 | return 0; | 482 | return 0; |
480 | } else { | 483 | } else { |
481 | hashcpy(fileid, sha1); | 484 | hashcpy(fileid, sha1); |
482 | } | 485 | } |
483 | if (!*header) { | 486 | if (!*header) { |
484 | html("<h1>download</h1>\n"); | 487 | html("<h1>download</h1>\n"); |
485 | *header = 1; | 488 | *header = 1; |
486 | } | 489 | } |
487 | url = cgit_pageurl(ctx.qry.repo, "blob", | 490 | url = cgit_pageurl(ctx.qry.repo, "blob", |
488 | fmt("id=%s&path=%s", sha1_to_hex(fileid), | 491 | fmt("id=%s&path=%s", sha1_to_hex(fileid), |
489 | buf)); | 492 | buf)); |
490 | html_link_open(url, NULL, "menu"); | 493 | html_link_open(url, NULL, "menu"); |
491 | html_txt(strlpart(buf, 20)); | 494 | html_txt(strlpart(buf, 20)); |
492 | html_link_close(); | 495 | html_link_close(); |
493 | return 0; | 496 | return 0; |