diff options
Diffstat (limited to 'ui_70-shared.c')
-rw-r--r-- | ui_70-shared.c | 215 |
1 files changed, 141 insertions, 74 deletions
diff --git a/ui_70-shared.c b/ui_70-shared.c index 30a1eaf..b5a6fa8 100644 --- a/ui_70-shared.c +++ b/ui_70-shared.c @@ -73,6 +73,28 @@ void gopher_vtxtf(const char *format, va_list ap) strbuf_release(&buf); } + +void gopherf(const char *format, ...) +{ + va_list args; + struct strbuf buf = STRBUF_INIT; + + va_start(args, format); + strbuf_vaddf(&buf, format, args); + va_end(args); + cgit_gopher_text(buf.buf); + strbuf_release(&buf); +} + + + +void gopher_fileperm(unsigned short mode) +{ + gopherf("%c%c%c", (mode & 4 ? 'r' : '-'), + (mode & 2 ? 'w' : '-'), (mode & 1 ? 'x' : '-')); +} + + void cgit_gopher_textf(const char *fmt, va_list ap){ va_list cp; @@ -320,7 +342,7 @@ static void site_url(const char *page, const char *search, const char *sort, int } if (page) { - cgit_gopher_textf("?p=%s", page); + gopherf("?p=%s", page); delim = "&"; } if (search) { @@ -337,7 +359,7 @@ static void site_url(const char *page, const char *search, const char *sort, int } if (ofs) { cgit_gopher_text(delim); - cgit_gopher_textf("ofs=%d", ofs); + gopherf("ofs=%d", ofs); } } @@ -477,9 +499,21 @@ void cgit_tag_link(const char *name, const char *title, const char *class, void cgit_tree_link(const char *name, const char *title, const char *class, const char *head, const char *rev, const char *path) { + reporevlink("tree", name, title, class, head, rev, path); } + +void cgit_gopher_tree_link(const char *name, const char *title, const char *class, + const char *head, const char *rev, const char *path) +{ + cgit_gopher_start_selector(GOPHER_MENU); + cgit_gopher_text(name); + cgit_gopher_tab(); + cgit_tree_link(name, title, class, head, rev, path); + cgit_gopher_end_selector(); +} + void cgit_plain_link(const char *name, const char *title, const char *class, const char *head, const char *rev, const char *path) { @@ -518,7 +552,7 @@ void cgit_log_link(const char *name, const char *title, const char *class, if (ofs > 0) { cgit_gopher_text(delim); cgit_gopher_text("ofs="); - cgit_gopher_textf("%d", ofs); + gopherf("%d", ofs); delim = "&"; } if (showmsg) { @@ -530,6 +564,21 @@ void cgit_log_link(const char *name, const char *title, const char *class, cgit_gopher_text(delim); cgit_gopher_text("follow=1"); } + cgit_gopher_tab(); +} + + +void cgit_gopher_log_link(const char *name, const char *title, const char *class, + const char *head, const char *rev, const char *path, + int ofs, const char *grep, const char *pattern, int showmsg, + int follow) +{ + cgit_gopher_start_selector(GOPHER_MENU); + cgit_gopher_text(name); + cgit_gopher_tab(); + cgit_log_link(name, title, class, head, rev, path, ofs, grep, pattern, showmsg, follow); + cgit_gopher_end_selector(); + } void cgit_commit_link(const char *name, const char *title, const char *class, @@ -539,50 +588,64 @@ void cgit_commit_link(const char *name, const char *title, const char *class, delim = repolink(title, class, "commit", head, path); if (rev && ctx.qry.head && strcmp(rev, ctx.qry.head)) { - html(delim); - html("id="); - html_url_arg(rev); - delim = "&"; + cgit_gopher_text(delim); + cgit_gopher_text("id="); + cgit_gopher_text(rev); + delim = "&"; } if (ctx.qry.difftype) { - html(delim); - htmlf("dt=%d", ctx.qry.difftype); - delim = "&"; + cgit_gopher_text(delim); + gopherf("dt=%d", ctx.qry.difftype); + delim = "&"; } if (ctx.qry.context > 0 && ctx.qry.context != 3) { - html(delim); - html("context="); - htmlf("%d", ctx.qry.context); - delim = "&"; + cgit_gopher_text(delim); + cgit_gopher_text("context="); + gopherf("%d", ctx.qry.context); + delim = "&"; } if (ctx.qry.ignorews) { - html(delim); - html("ignorews=1"); - delim = "&"; + cgit_gopher_text(delim); + cgit_gopher_text("ignorews=1"); + delim = "&"; } if (ctx.qry.follow) { - html(delim); - html("follow=1"); + cgit_gopher_text(delim); + cgit_gopher_text("follow=1"); } - html("'>"); if (name[0] != '\0') { - if (strlen(name) > ctx.cfg.max_msg_len && ctx.cfg.max_msg_len >= 15) { - html_ntxt(name, ctx.cfg.max_msg_len - 3); - html("..."); - } else - html_txt(name); + cgit_gopher_text(name); } else - html_txt("(no commit message)"); - html("</a>"); + cgit_gopher_text("(no commit message)"); + cgit_gopher_tab(); } + + +void cgit_gopher_commit_link(const char *name, const char *title, const char *class, + const char *head, const char *rev, const char *path) +{ + cgit_gopher_start_selector(GOPHER_MENU); + cgit_gopher_text(name); + cgit_gopher_tab(); + cgit_commit_link(name, title, class, head, rev, path); + cgit_gopher_end_selector(); +} + void cgit_refs_link(const char *name, const char *title, const char *class, const char *head, const char *rev, const char *path) { + reporevlink("refs", name, title, class, head, rev, path); +} + + +void cgit_gopher_refs_link(const char *name, const char *title, const char *class, + const char *head, const char *rev, const char *path) +{ cgit_gopher_start_selector(GOPHER_MENU); cgit_gopher_text(name); cgit_gopher_tab(); - reporevlink("refs", name, title, class, head, rev, path); + cgit_refs_link(name, title, class, head, rev, path); cgit_gopher_end_selector(); } @@ -601,40 +664,52 @@ void cgit_diff_link(const char *name, const char *title, const char *class, delim = repolink(title, class, "diff", head, path); if (new_rev && ctx.qry.head != NULL && strcmp(new_rev, ctx.qry.head)) { - html(delim); - html("id="); - html_url_arg(new_rev); - delim = "&"; + cgit_gopher_text(delim); + cgit_gopher_text("id="); + cgit_gopher_text(new_rev); + delim = "&"; } if (old_rev) { - html(delim); - html("id2="); - html_url_arg(old_rev); - delim = "&"; + cgit_gopher_text(delim); + cgit_gopher_text("id2="); + cgit_gopher_text(old_rev); + delim = "&"; } if (ctx.qry.difftype) { - html(delim); - htmlf("dt=%d", ctx.qry.difftype); - delim = "&"; + cgit_gopher_text(delim); + gopherf("dt=%d", ctx.qry.difftype); + delim = "&"; } if (ctx.qry.context > 0 && ctx.qry.context != 3) { - html(delim); - html("context="); - htmlf("%d", ctx.qry.context); - delim = "&"; + cgit_gopher_text(delim); + cgit_gopher_text("context="); + gopherf("%d", ctx.qry.context); + delim = "&"; } if (ctx.qry.ignorews) { - html(delim); - html("ignorews=1"); - delim = "&"; + cgit_gopher_text(delim); + cgit_gopher_text("ignorews=1"); + delim = "&"; } if (ctx.qry.follow) { - html(delim); - html("follow=1"); + cgit_gopher_text(delim); + cgit_gopher_text("follow=1"); } - html("'>"); - html_txt(name); - html("</a>"); + cgit_gopher_tab(); +} + + +void cgit_gopher_diff_link(const char *name, const char *title, const char *class, + const char *head, const char *new_rev, const char *old_rev, + const char *path) +{ + + cgit_gopher_start_selector(GOPHER_MENU); + cgit_gopher_text(name); + cgit_gopher_tab(); + cgit_diff_link(name, title, class, head, new_rev, old_rev, path); + cgit_gopher_end_selector(); + } void cgit_patch_link(const char *name, const char *title, const char *class, @@ -962,7 +1037,7 @@ void cgit_print_layout_start(void) void cgit_print_layout_end(void) { - cgit_print_docend(); + /*cgit_print_docend();*/ } static void add_clone_urls(void (*fn)(const char *), char *txt, char *suffix) @@ -1091,20 +1166,20 @@ void cgit_print_pageheader(void) NULL); cgit_summary_link("summary", NULL, hc("summary"), ctx.qry.head); - cgit_refs_link("refs", NULL, hc("refs"), ctx.qry.head, + cgit_gopher_refs_link("refs", NULL, hc("refs"), ctx.qry.head, ctx.qry.sha1, NULL); - cgit_log_link("log", NULL, hc("log"), ctx.qry.head, + cgit_gopher_log_link("log", NULL, hc("log"), ctx.qry.head, NULL, ctx.qry.vpath, 0, NULL, NULL, ctx.qry.showmsg, ctx.qry.follow); if (ctx.qry.page && !strcmp(ctx.qry.page, "blame")) cgit_blame_link("blame", NULL, hc("blame"), ctx.qry.head, ctx.qry.sha1, ctx.qry.vpath); else - cgit_tree_link("tree", NULL, hc("tree"), ctx.qry.head, + cgit_gopher_tree_link("tree", NULL, hc("tree"), ctx.qry.head, ctx.qry.sha1, ctx.qry.vpath); - cgit_commit_link("commit", NULL, hc("commit"), + cgit_gopher_commit_link("commit", NULL, hc("commit"), ctx.qry.head, ctx.qry.sha1, ctx.qry.vpath); - cgit_diff_link("diff", NULL, hc("diff"), ctx.qry.head, + cgit_gopher_diff_link("diff", NULL, hc("diff"), ctx.qry.head, ctx.qry.sha1, ctx.qry.sha2, ctx.qry.vpath); if (ctx.repo->max_stats) cgit_stats_link("stats", NULL, hc("stats"), @@ -1114,15 +1189,7 @@ void cgit_print_pageheader(void) html_attr(ctx.repo->homepage); html("'>homepage</a>"); } - html("</td><td class='form'>"); - html("<form class='right' method='get' action='"); - if (ctx.cfg.virtual_root) { - char *fileurl = cgit_fileurl(ctx.qry.repo, "log", - ctx.qry.vpath, NULL); - html_url_path(fileurl); - free(fileurl); - } - } else if (ctx.env.authenticated) { + } else { char *currenturl = cgit_currenturl(); site_link(NULL, "index", NULL, hc("repolist"), NULL, NULL, 0, 1); if (ctx.cfg.root_readme) @@ -1139,7 +1206,7 @@ void cgit_print_pageheader(void) html("</form>"); free(currenturl); } - if (ctx.env.authenticated && ctx.repo && ctx.qry.vpath) { + if (ctx.repo && ctx.qry.vpath) { html("<div class='path'>"); html("path: "); cgit_print_path_crumbs(ctx.qry.vpath); @@ -1158,16 +1225,16 @@ void cgit_print_pageheader(void) void cgit_print_filemode(unsigned short mode) { if (S_ISDIR(mode)) - html("d"); + cgit_gopher_text("d"); else if (S_ISLNK(mode)) - html("l"); + cgit_gopher_text("l"); else if (S_ISGITLINK(mode)) - html("m"); + cgit_gopher_text("m"); else - html("-"); - html_fileperm(mode >> 6); - html_fileperm(mode >> 3); - html_fileperm(mode); + cgit_gopher_text("-"); + gopher_fileperm(mode >> 6); + gopher_fileperm(mode >> 3); + gopher_fileperm(mode); } void cgit_compose_snapshot_prefix(struct strbuf *filename, const char *base, |