Download raw body.
templateify gotweb_render_navs
This turns gotweb_render_navs into gotweb_get_navs that returns only
the prev/next url. In doing so I've also merged the two switches.
diff ed619ca07e51b9c984c8404ca2b1153efdb14d1e cd42567e3c1e8890bce34df42b603f1a6675a110
commit - ed619ca07e51b9c984c8404ca2b1153efdb14d1e
commit + cd42567e3c1e8890bce34df42b603f1a6675a110
blob - 0ce90275bab1028c73efcf66d2d59a727f7ca7c7
blob + 85a4ee7974b69efd0c56c02dc288ecf6e719fc21
--- gotwebd/gotweb.c
+++ gotwebd/gotweb.c
@@ -99,8 +99,6 @@ const struct got_error *gotweb_render_navs(struct requ
static const struct got_error *gotweb_render_tree(struct request *);
static const struct got_error *gotweb_render_branches(struct request *);
-const struct got_error *gotweb_render_navs(struct request *);
-
static void gotweb_free_querystring(struct querystring *);
static void gotweb_free_repo_dir(struct repo_dir *);
@@ -679,105 +677,53 @@ const struct got_error *
return NULL;
}
-const struct got_error *
-gotweb_render_navs(struct request *c)
+void
+gotweb_get_navs(struct request *c, struct gotweb_url *prev, int *have_prev,
+ struct gotweb_url *next, int *have_next)
{
- const struct got_error *error = NULL;
struct transport *t = c->t;
struct querystring *qs = t->qs;
struct server *srv = c->srv;
- int r;
- r = fcgi_printf(c, "<div id='np_wrapper'>\n<div id='nav_prev'>\n");
- if (r == -1)
- goto done;
+ *have_prev = *have_next = 0;
switch(qs->action) {
case INDEX:
if (qs->index_page > 0) {
- struct gotweb_url url = {
+ *have_prev = 1;
+ *prev = (struct gotweb_url){
.action = -1,
.index_page = qs->index_page - 1,
.page = -1,
};
-
- r = gotweb_link(c, &url, "Previous");
}
- break;
- case BRIEFS:
- if (t->prev_id && qs->commit != NULL &&
- strcmp(qs->commit, t->prev_id) != 0) {
- struct gotweb_url url = {
- .action = BRIEFS,
- .index_page = -1,
- .page = qs->page - 1,
- .path = qs->path,
- .commit = t->prev_id,
- .headref = qs->headref,
- };
-
- r = gotweb_link(c, &url, "Previous");
- }
- break;
- case COMMITS:
- if (t->prev_id && qs->commit != NULL &&
- strcmp(qs->commit, t->prev_id) != 0) {
- struct gotweb_url url = {
- .action = COMMIT,
- .index_page = -1,
- .page = qs->page - 1,
- .path = qs->path,
- .commit = t->prev_id,
- .headref = qs->headref,
- .folder = qs->folder,
- .file = qs->file,
- };
-
- r = gotweb_link(c, &url, "Previous");
- }
- break;
- case TAGS:
- if (t->prev_id && qs->commit != NULL &&
- strcmp(qs->commit, t->prev_id) != 0) {
- struct gotweb_url url = {
- .action = TAGS,
- .index_page = -1,
- .page = qs->page - 1,
- .path = qs->path,
- .commit = t->prev_id,
- .headref = qs->headref,
- };
-
- r = gotweb_link(c, &url, "Previous");
- }
- break;
- }
-
- if (r == -1)
- goto done;
-
- r = fcgi_printf(c, "</div>\n" /* #nav_prev */
- "<div id='nav_next'>");
- if (r == -1)
- goto done;
-
- switch(qs->action) {
- case INDEX:
if (t->next_disp == srv->max_repos_display &&
t->repos_total != (qs->index_page + 1) *
srv->max_repos_display) {
- struct gotweb_url url = {
+ *have_next = 1;
+ *next = (struct gotweb_url){
.action = -1,
.index_page = qs->index_page + 1,
.page = -1,
};
-
- r = gotweb_link(c, &url, "Next");
}
break;
case BRIEFS:
+ if (t->prev_id && qs->commit != NULL &&
+ strcmp(qs->commit, t->prev_id) != 0) {
+ *have_prev = 1;
+ *prev = (struct gotweb_url){
+ .action = BRIEFS,
+ .index_page = -1,
+ .page = qs->page - 1,
+ .path = qs->path,
+ .commit = t->prev_id,
+ .headref = qs->headref,
+ };
+ }
if (t->next_id) {
- struct gotweb_url url = {
+ *have_next = 1;
+ *next = (struct gotweb_url){
.action = BRIEFS,
.index_page = -1,
.page = qs->page + 1,
@@ -785,13 +731,26 @@ gotweb_render_navs(struct request *c)
.commit = t->next_id,
.headref = qs->headref,
};
-
- r = gotweb_link(c, &url, "Next");
}
break;
case COMMITS:
+ if (t->prev_id && qs->commit != NULL &&
+ strcmp(qs->commit, t->prev_id) != 0) {
+ *have_prev = 1;
+ *prev = (struct gotweb_url){
+ .action = COMMIT,
+ .index_page = -1,
+ .page = qs->page - 1,
+ .path = qs->path,
+ .commit = t->prev_id,
+ .headref = qs->headref,
+ .folder = qs->folder,
+ .file = qs->file,
+ };
+ }
if (t->next_id) {
- struct gotweb_url url = {
+ *have_next = 1;
+ *next = (struct gotweb_url){
.action = COMMIT,
.index_page = -1,
.page = qs->page + 1,
@@ -801,13 +760,24 @@ gotweb_render_navs(struct request *c)
.folder = qs->folder,
.file = qs->file,
};
-
- r = gotweb_link(c, &url, "Next");
}
break;
case TAGS:
+ if (t->prev_id && qs->commit != NULL &&
+ strcmp(qs->commit, t->prev_id) != 0) {
+ *have_prev = 1;
+ *prev = (struct gotweb_url){
+ .action = TAGS,
+ .index_page = -1,
+ .page = qs->page - 1,
+ .path = qs->path,
+ .commit = t->prev_id,
+ .headref = qs->headref,
+ };
+ }
if (t->next_id) {
- struct gotweb_url url = {
+ *have_next = 1;
+ *next = (struct gotweb_url){
.action = TAGS,
.index_page = -1,
.page = qs->page + 1,
@@ -815,22 +785,9 @@ gotweb_render_navs(struct request *c)
.commit = t->next_id,
.headref = qs->headref,
};
-
- r = gotweb_link(c, &url, "Next");
}
break;
}
- if (r == -1)
- goto done;
-
- fcgi_printf(c, "</div>\n"); /* #nav_next */
- fcgi_printf(c, "</div>\n"); /* #np_wrapper */
-done:
- free(t->next_id);
- t->next_id = NULL;
- free(t->prev_id);
- t->prev_id = NULL;
- return error;
}
static const struct got_error *
@@ -925,8 +882,7 @@ gotweb_render_index(struct request *c)
t->repos_total <= srv->max_repos_display)
goto done;
- error = gotweb_render_navs(c);
- if (error)
+ if (gotweb_render_navs(c->tp) == -1)
goto done;
done:
if (sd_dent) {
@@ -1085,8 +1041,7 @@ gotweb_render_commits(struct request *c)
}
if (t->next_id || t->prev_id) {
- error = gotweb_render_navs(c);
- if (error)
+ if (gotweb_render_navs(c->tp) == -1)
goto done;
}
fcgi_printf(c, "</div>\n"); /* .commits_content */
@@ -1622,8 +1577,7 @@ gotweb_render_tags(struct request *c)
msg = NULL;
}
if (t->next_id || t->prev_id) {
- error = gotweb_render_navs(c);
- if (error)
+ if (gotweb_render_navs(c->tp) == -1)
goto done;
}
fcgi_printf(c, "</div>\n"); /* #tags_content */
blob - 64fce7c6d8ee3f57305034f0c0434cff991a82bd
blob + 700307a1481fa9b5b991ba6ed6090d29566a7cd0
--- gotwebd/gotwebd.h
+++ gotwebd/gotwebd.h
@@ -436,6 +436,8 @@ const struct got_error *gotweb_get_time_str(char **, t
const uint8_t *);
const struct got_error
*gotweb_render_content_type_file(struct request *, const uint8_t *, char *);
+void gotweb_get_navs(struct request *, struct gotweb_url *, int *,
+ struct gotweb_url *, int *);
const struct got_error *gotweb_get_time_str(char **, time_t, int);
const struct got_error *gotweb_init_transport(struct transport **);
const struct got_error *gotweb_escape_html(char **, const char *);
@@ -455,6 +457,7 @@ int gotweb_render_briefs(struct template *);
int gotweb_render_repo_table_hdr(struct template *);
int gotweb_render_repo_fragment(struct template *, struct repo_dir *);
int gotweb_render_briefs(struct template *);
+int gotweb_render_navs(struct template *);
/* parse.y */
int parse_config(const char *, struct gotwebd *);
blob - 0d49898e174e9bfad77b158729eb04ab949bd736
blob + 88158c157c6d585b1e9692319e29e9bbe08f9390
--- gotwebd/pages.tmpl
+++ gotwebd/pages.tmpl
@@ -30,8 +30,6 @@ const struct got_error *gotweb_render_navs(struct requ
#include "gotwebd.h"
#include "tmpl.h"
-const struct got_error *gotweb_render_navs(struct request *);
-
static int
gotweb_render_age(struct template *tp, time_t time, int ref_tm)
{
@@ -296,7 +294,41 @@ gotweb_render_age(struct template *tp, time_t time, in
<div class="dotted_line"></div>
{{ end }}
{{ if t->next_id || t->prev_id }}
- {! gotweb_render_navs(c); !}
+ {{ render gotweb_render_navs(tp) }}
{{ end }}
</div>
{{ end }}
+
+{{ define gotweb_render_navs(struct template *tp) }}
+{!
+ struct request *c = tp->tp_arg;
+ struct transport *t = c->t;
+ struct gotweb_url prev, next;
+ int have_prev, have_next;
+
+ gotweb_get_navs(c, &prev, &have_prev, &next, &have_next);
+!}
+<div id="np_wrapper">
+ <div id="nav_prev">
+ {{ if have_prev }}
+ <a href="{{ render gotweb_render_url(c, &prev) }}">
+ Previous
+ </a>
+ {{ end }}
+ </div>
+ <div id="nav_next">
+ {{ if have_next }}
+ <a href="{{ render gotweb_render_url(c, &next) }}">
+ Next
+ </a>
+ {{ end }}
+ </div>
+</div>
+{{ finally }}
+{!
+ free(t->next_id);
+ t->next_id = NULL;
+ free(t->prev_id);
+ t->prev_id = NULL;
+!}
+{{ end }}
templateify gotweb_render_navs