commit - aaed579298dbc6f4880b1fbb4e74641904aaec6a
commit + 9eed6f1081cf23a992545cf1fa832a0e8f2d0dfe
blob - d99338ac2d74b0dc069b9b59a789b06af43aecf2
blob + dd8d35ab41ec0d66aec6dcf0683a8cedfac9f562
--- gotweb/files/htdocs/gotweb/gotweb.css
+++ gotweb/files/htdocs/gotweb/gotweb.css
padding-bottom: 5px;
float: left;
width: 7.5em;
+ overflow: auto;
+}
+#heads_space {
+ padding-left: 10px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ float: left;
+ width: 8.5em;
overflow: auto;
}
#head {
blob - 69aa4cf436614a22a1b095740e698be9bc708f57
blob + fc80c9d852188d06338c26379e0a79f61b914738
--- gotweb/gotweb.c
+++ gotweb/gotweb.c
struct gw_header *);
static const struct got_error *gw_output_repo_tags(struct gw_trans *,
struct gw_header *, int, int);
-static const struct got_error *gw_get_repo_heads(char **, struct gw_trans *);
+static const struct got_error *gw_output_repo_heads(struct gw_trans *);
static const struct got_error *gw_get_clone_url(char **, struct gw_trans *,
char *);
static char *gw_get_site_link(struct gw_trans *);
goto done;
/* navs */
-
- /* XXX: create gen code for this */
- /* build diff nav */
if (asprintf(&href_diff, "?path=%s&action=diff&commit=%s",
gw_trans->repo_name, n_header->commit_id) == -1) {
error = got_error_from_errno("asprintf");
if (kerr != KCGI_OK)
goto done;
- /* XXX: create gen code for this */
- /* build tree nav */
if (asprintf(&href_blob, "?path=%s&action=tree&commit=%s",
gw_trans->repo_name, n_header->commit_id) == -1) {
error = got_error_from_errno("asprintf");
gw_summary(struct gw_trans *gw_trans)
{
const struct got_error *error = NULL;
- char *age = NULL, *tags = NULL, *heads = NULL;
+ char *age = NULL;
enum kcgi_err kerr = KCGI_OK;
if (pledge("stdio rpath proc exec sendfd unveil", NULL) == -1)
goto done;
/* heads */
- error = gw_get_repo_heads(&heads, gw_trans);
- if (error)
- goto done;
- if (heads != NULL && strcmp(heads, "") != 0) {
- kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV,
- KATTR_ID, "summary_heads_title_wrapper", KATTR__MAX);
- if (kerr != KCGI_OK)
- goto done;
- kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV,
- KATTR_ID, "summary_heads_title", KATTR__MAX);
- if (kerr != KCGI_OK)
- goto done;
- kerr = khtml_puts(gw_trans->gw_html_req, "Heads");
- if (kerr != KCGI_OK)
- goto done;
- kerr = khtml_closeelem(gw_trans->gw_html_req, 2);
- if (kerr != KCGI_OK)
- goto done;
- kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV,
- KATTR_ID, "summary_heads_content", KATTR__MAX);
- if (kerr != KCGI_OK)
- goto done;
- kerr = khttp_puts(gw_trans->gw_req, heads);
- if (kerr != KCGI_OK)
- goto done;
- kerr = khtml_closeelem(gw_trans->gw_html_req, 1);
- if (kerr != KCGI_OK)
- goto done;
- }
+ error = gw_output_repo_heads(gw_trans);
done:
free(age);
- free(tags);
- free(heads);
if (error == NULL && kerr != KCGI_OK)
error = gw_kcgi_error(kerr);
return error;
}
static const struct got_error *
-gw_get_repo_heads(char **head_html, struct gw_trans *gw_trans)
+gw_output_repo_heads(struct gw_trans *gw_trans)
{
const struct got_error *error = NULL;
struct got_repository *repo = NULL;
struct got_reflist_head refs;
struct got_reflist_entry *re;
- char *head_row = NULL, *head_navs_disp = NULL, *age = NULL;
- struct buf *diffbuf = NULL;
- size_t newsize;
-
- *head_html = NULL;
+ char *age = NULL, *href_summary = NULL, *href_briefs = NULL;
+ char *href_commits = NULL;
+ enum kcgi_err kerr = KCGI_OK;
SIMPLEQ_INIT(&refs);
-
- error = buf_alloc(&diffbuf, 0);
- if (error)
- return NULL;
error = got_repo_open(&repo, gw_trans->repo_path, NULL);
if (error)
if (error)
goto done;
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV,
+ KATTR_ID, "summary_heads_title_wrapper", KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV,
+ KATTR_ID, "summary_heads_title", KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_puts(gw_trans->gw_html_req, "Heads");
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_closeelem(gw_trans->gw_html_req, 2);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV,
+ KATTR_ID, "summary_heads_content", KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+
SIMPLEQ_FOREACH(re, &refs, entry) {
char *refname;
if (error)
goto done;
- if (asprintf(&head_navs_disp, heads_navs, gw_trans->repo_name,
- refname, gw_trans->repo_name, refname,
- gw_trans->repo_name, refname, gw_trans->repo_name,
- refname) == -1) {
+ if (strncmp(refname, "refs/heads/", 11) == 0)
+ refname += 11;
+
+
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV,
+ KATTR_ID, "heads_wrapper", KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV,
+ KATTR_ID, "heads_age", KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_puts(gw_trans->gw_html_req, age ? age : "");
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_closeelem(gw_trans->gw_html_req, 1);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV,
+ KATTR_ID, "heads_space", KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_entity(gw_trans->gw_html_req, KENTITY_nbsp);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_closeelem(gw_trans->gw_html_req, 1);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV,
+ KATTR_ID, "head", KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+ if (asprintf(&href_summary,
+ "?path=%s&action=summary&headref=%s",
+ gw_trans->repo_name, refname) == -1) {
error = got_error_from_errno("asprintf");
goto done;
}
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_A, KATTR_HREF,
+ href_summary, KATTR__MAX);
+ kerr = khtml_puts(gw_trans->gw_html_req, refname);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_closeelem(gw_trans->gw_html_req, 3);
+ if (kerr != KCGI_OK)
+ goto done;
- if (strncmp(refname, "refs/heads/", 11) == 0)
- refname += 11;
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV, KATTR_ID,
+ "navs_wrapper", KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV, KATTR_ID,
+ "navs", KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
- if (asprintf(&head_row, heads_row, age, refname,
- head_navs_disp) == -1) {
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_A, KATTR_HREF,
+ href_summary, KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_puts(gw_trans->gw_html_req, "summary");
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_closeelem(gw_trans->gw_html_req, 1);
+ if (kerr != KCGI_OK)
+ goto done;
+
+ kerr = khtml_puts(gw_trans->gw_html_req, " | ");
+ if (kerr != KCGI_OK)
+ goto done;
+ if (asprintf(&href_briefs, "?path=%s&action=briefs&headref=%s",
+ gw_trans->repo_name, refname) == -1) {
error = got_error_from_errno("asprintf");
goto done;
}
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_A, KATTR_HREF,
+ href_briefs, KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_puts(gw_trans->gw_html_req, "commit briefs");
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_closeelem(gw_trans->gw_html_req, 1);
+ if (kerr != KCGI_OK)
+ goto done;
- error = buf_puts(&newsize, diffbuf, head_row);
+ kerr = khtml_puts(gw_trans->gw_html_req, " | ");
+ if (kerr != KCGI_OK)
+ goto done;
- free(head_navs_disp);
- free(head_row);
- }
+ if (asprintf(&href_commits,
+ "?path=%s&action=commits&headref=%s",
+ gw_trans->repo_name, refname) == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
+ }
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_A, KATTR_HREF,
+ href_commits, KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_puts(gw_trans->gw_html_req, "commits");
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_closeelem(gw_trans->gw_html_req, 3);
+ if (kerr != KCGI_OK)
+ goto done;
- if (buf_len(diffbuf) > 0) {
- error = buf_putc(diffbuf, '\0');
- *head_html = strdup(buf_get(diffbuf));
- if (*head_html == NULL)
- error = got_error_from_errno("strdup");
+ kerr = khtml_attr(gw_trans->gw_html_req, KELEM_DIV, KATTR_ID,
+ "dotted_line", KATTR__MAX);
+ if (kerr != KCGI_OK)
+ goto done;
+ kerr = khtml_closeelem(gw_trans->gw_html_req, 2);
+ if (kerr != KCGI_OK)
+ goto done;
+ break;
+ free(href_summary);
+ href_summary = NULL;
+ free(href_briefs);
+ href_briefs = NULL;
+ free(href_commits);
+ href_commits = NULL;
}
done:
- buf_free(diffbuf);
got_ref_list_free(&refs);
+ free(href_summary);
+ free(href_briefs);
+ free(href_commits);
if (repo)
got_repo_close(repo);
return error;
blob - db3eb41d68a32c4fb7132f1103b9af4a3612e139
blob + 65fb5fc077a63345c4770d24f3b92f677023e54c
--- gotweb/gotweb_ui.h
+++ gotweb/gotweb_ui.h
char *nav_prev =
"<a href='?page=%d'>Previous<a/>";
-char *repo_owner =
- "<div id='repo_owner_title'>Owner: </div>" \
- "<div id='repo_owner'>%s</div>";
-
-char *heads_row =
- "<div id='heads_wrapper'>" \
- "<div id='heads_age'>%s</div>" \
- "<div id='head'>%s</div>" \
- "</div>" \
- "<div id='navs_wrapper'>" \
- "<div id='navs'>%s</div>" \
- "</div>" \
- "</div>" \
- "<div id='dotted_line'></div>";
-
-char *heads_navs =
- "<a href='?path=%s&action=summary&headref=%s'>summary</a> | " \
- "<a href='?path=%s&action=briefs&headref=%s'>commit briefs</a> | " \
- "<a href='?path=%s&action=commits&headref=%s'>commits</a>";
-
-/* headers */
-
-char *header_commit_html =
- "<div id='header_commit_title'>Commit:</div>" \
- "<div id='header_commit'>%s %s</div>";
-
-char *header_age_html =
- "<div id='header_age_title'>Date:</div>" \
- "<div id='header_age'>%s</div>";
-
-char *header_commit_msg_html =
- "<div id='header_commit_msg_title'>Message:</div>" \
- "<div id='header_commit_msg'>%s</div>";
-
/* index.tmpl */
char *index_projects_header =