summaryrefslogtreecommitdiffabout
path: root/ui-shared.c
Unidiff
Diffstat (limited to 'ui-shared.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-shared.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/ui-shared.c b/ui-shared.c
index 209af6e..4280a70 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -457,129 +457,130 @@ void cgit_print_docend()
457 htmlf(" by cgit %s", cgit_version); 457 htmlf(" by cgit %s", cgit_version);
458 html("</div>\n"); 458 html("</div>\n");
459 } 459 }
460 html("</body>\n</html>\n"); 460 html("</body>\n</html>\n");
461} 461}
462 462
463int print_branch_option(const char *refname, const unsigned char *sha1, 463int print_branch_option(const char *refname, const unsigned char *sha1,
464 int flags, void *cb_data) 464 int flags, void *cb_data)
465{ 465{
466 char *name = (char *)refname; 466 char *name = (char *)refname;
467 html_option(name, name, ctx.qry.head); 467 html_option(name, name, ctx.qry.head);
468 return 0; 468 return 0;
469} 469}
470 470
471int print_archive_ref(const char *refname, const unsigned char *sha1, 471int print_archive_ref(const char *refname, const unsigned char *sha1,
472 int flags, void *cb_data) 472 int flags, void *cb_data)
473{ 473{
474 struct tag *tag; 474 struct tag *tag;
475 struct taginfo *info; 475 struct taginfo *info;
476 struct object *obj; 476 struct object *obj;
477 char buf[256], *url; 477 char buf[256], *url;
478 unsigned char fileid[20]; 478 unsigned char fileid[20];
479 int *header = (int *)cb_data; 479 int *header = (int *)cb_data;
480 480
481 if (prefixcmp(refname, "refs/archives")) 481 if (prefixcmp(refname, "refs/archives"))
482 return 0; 482 return 0;
483 strncpy(buf, refname+14, sizeof(buf)); 483 strncpy(buf, refname+14, sizeof(buf));
484 obj = parse_object(sha1); 484 obj = parse_object(sha1);
485 if (!obj) 485 if (!obj)
486 return 1; 486 return 1;
487 if (obj->type == OBJ_TAG) { 487 if (obj->type == OBJ_TAG) {
488 tag = lookup_tag(sha1); 488 tag = lookup_tag(sha1);
489 if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) 489 if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag)))
490 return 0; 490 return 0;
491 hashcpy(fileid, tag->tagged->sha1); 491 hashcpy(fileid, tag->tagged->sha1);
492 } else if (obj->type != OBJ_BLOB) { 492 } else if (obj->type != OBJ_BLOB) {
493 return 0; 493 return 0;
494 } else { 494 } else {
495 hashcpy(fileid, sha1); 495 hashcpy(fileid, sha1);
496 } 496 }
497 if (!*header) { 497 if (!*header) {
498 html("<h1>download</h1>\n"); 498 html("<h1>download</h1>\n");
499 *header = 1; 499 *header = 1;
500 } 500 }
501 url = cgit_pageurl(ctx.qry.repo, "blob", 501 url = cgit_pageurl(ctx.qry.repo, "blob",
502 fmt("id=%s&amp;path=%s", sha1_to_hex(fileid), 502 fmt("id=%s&amp;path=%s", sha1_to_hex(fileid),
503 buf)); 503 buf));
504 html_link_open(url, NULL, "menu"); 504 html_link_open(url, NULL, "menu");
505 html_txt(strlpart(buf, 20)); 505 html_txt(strlpart(buf, 20));
506 html_link_close(); 506 html_link_close();
507 return 0; 507 return 0;
508} 508}
509 509
510void add_hidden_formfields(int incl_head, int incl_search, char *page) 510void add_hidden_formfields(int incl_head, int incl_search, char *page)
511{ 511{
512 char *url; 512 char *url;
513 513
514 if (!ctx.cfg.virtual_root) { 514 if (!ctx.cfg.virtual_root) {
515 url = fmt("%s/%s", ctx.qry.repo, page); 515 url = fmt("%s/%s", ctx.qry.repo, page);
516 if (ctx.qry.path) 516 if (ctx.qry.path)
517 url = fmt("%s/%s", url, ctx.qry.path); 517 url = fmt("%s/%s", url, ctx.qry.path);
518 html_hidden("url", url); 518 html_hidden("url", url);
519 } 519 }
520 520
521 if (incl_head && strcmp(ctx.qry.head, ctx.repo->defbranch)) 521 if (incl_head && ctx.qry.head && ctx.repo->defbranch &&
522 strcmp(ctx.qry.head, ctx.repo->defbranch))
522 html_hidden("h", ctx.qry.head); 523 html_hidden("h", ctx.qry.head);
523 524
524 if (ctx.qry.sha1) 525 if (ctx.qry.sha1)
525 html_hidden("id", ctx.qry.sha1); 526 html_hidden("id", ctx.qry.sha1);
526 if (ctx.qry.sha2) 527 if (ctx.qry.sha2)
527 html_hidden("id2", ctx.qry.sha2); 528 html_hidden("id2", ctx.qry.sha2);
528 529
529 if (incl_search) { 530 if (incl_search) {
530 if (ctx.qry.grep) 531 if (ctx.qry.grep)
531 html_hidden("qt", ctx.qry.grep); 532 html_hidden("qt", ctx.qry.grep);
532 if (ctx.qry.search) 533 if (ctx.qry.search)
533 html_hidden("q", ctx.qry.search); 534 html_hidden("q", ctx.qry.search);
534 } 535 }
535} 536}
536 537
537char *hc(struct cgit_cmd *cmd, const char *page) 538char *hc(struct cgit_cmd *cmd, const char *page)
538{ 539{
539 return (strcmp(cmd->name, page) ? NULL : "active"); 540 return (strcmp(cmd->name, page) ? NULL : "active");
540} 541}
541 542
542void cgit_print_pageheader(struct cgit_context *ctx) 543void cgit_print_pageheader(struct cgit_context *ctx)
543{ 544{
544 struct cgit_cmd *cmd = cgit_get_cmd(ctx); 545 struct cgit_cmd *cmd = cgit_get_cmd(ctx);
545 546
546 html("<table id='header'>\n"); 547 html("<table id='header'>\n");
547 html("<tr>\n"); 548 html("<tr>\n");
548 html("<td class='logo' rowspan='2'><a href='"); 549 html("<td class='logo' rowspan='2'><a href='");
549 if (ctx->cfg.logo_link) 550 if (ctx->cfg.logo_link)
550 html_attr(ctx->cfg.logo_link); 551 html_attr(ctx->cfg.logo_link);
551 else 552 else
552 html_attr(cgit_rooturl()); 553 html_attr(cgit_rooturl());
553 html("'><img src='"); 554 html("'><img src='");
554 html_attr(ctx->cfg.logo); 555 html_attr(ctx->cfg.logo);
555 html("' alt='cgit logo'/></a></td>\n"); 556 html("' alt='cgit logo'/></a></td>\n");
556 557
557 html("<td class='main'>"); 558 html("<td class='main'>");
558 if (ctx->repo) { 559 if (ctx->repo) {
559 cgit_index_link("index", NULL, NULL, NULL, 0); 560 cgit_index_link("index", NULL, NULL, NULL, 0);
560 html(" : "); 561 html(" : ");
561 reporevlink(NULL, ctx->repo->name, NULL, hc(cmd, "summary"), 562 reporevlink(NULL, ctx->repo->name, NULL, hc(cmd, "summary"),
562 ctx->qry.head, NULL, NULL); 563 ctx->qry.head, NULL, NULL);
563 html("</td><td class='form'>"); 564 html("</td><td class='form'>");
564 html("<form method='get' action=''>\n"); 565 html("<form method='get' action=''>\n");
565 add_hidden_formfields(0, 1, ctx->qry.page); 566 add_hidden_formfields(0, 1, ctx->qry.page);
566 html("<select name='h' onchange='this.form.submit();'>\n"); 567 html("<select name='h' onchange='this.form.submit();'>\n");
567 for_each_branch_ref(print_branch_option, ctx->qry.head); 568 for_each_branch_ref(print_branch_option, ctx->qry.head);
568 html("</select> "); 569 html("</select> ");
569 html("<input type='submit' name='' value='switch'/>"); 570 html("<input type='submit' name='' value='switch'/>");
570 html("</form>"); 571 html("</form>");
571 } else 572 } else
572 html_txt(ctx->cfg.root_title); 573 html_txt(ctx->cfg.root_title);
573 html("</td></tr>\n"); 574 html("</td></tr>\n");
574 575
575 html("<tr><td class='sub'>"); 576 html("<tr><td class='sub'>");
576 if (ctx->repo) { 577 if (ctx->repo) {
577 html_txt(ctx->repo->desc); 578 html_txt(ctx->repo->desc);
578 html("</td><td class='sub right'>"); 579 html("</td><td class='sub right'>");
579 html_txt(ctx->repo->owner); 580 html_txt(ctx->repo->owner);
580 } else { 581 } else {
581 if (ctx->cfg.root_desc) 582 if (ctx->cfg.root_desc)
582 html_txt(ctx->cfg.root_desc); 583 html_txt(ctx->cfg.root_desc);
583 else if (ctx->cfg.index_info) 584 else if (ctx->cfg.index_info)
584 html_include(ctx->cfg.index_info); 585 html_include(ctx->cfg.index_info);
585 } 586 }