commit - 3d6d1fb0b8a423e777c05cd69b1fb57fd69dd94c
commit + 2f4f0731243b48a022f336d0ce7765a27e0cc56e
blob - 661014fad988a39c7ca9f4324f708ee909db84c0
blob + 803c797648647c0dba3b11489062062b86f3bea8
--- gotwebd/gotweb.c
+++ gotwebd/gotweb.c
static const struct got_error *gotweb_render_tags(struct request *);
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 *);
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");
}
+ if (t->next_disp == srv->max_repos_display &&
+ t->repos_total != (qs->index_page + 1) *
+ srv->max_repos_display) {
+ *have_next = 1;
+ *next = (struct gotweb_url){
+ .action = -1,
+ .index_page = qs->index_page + 1,
+ .page = -1,
+ };
+ }
break;
case BRIEFS:
if (t->prev_id && qs->commit != NULL &&
strcmp(qs->commit, t->prev_id) != 0) {
- struct gotweb_url url = {
+ *have_prev = 1;
+ *prev = (struct gotweb_url){
.action = BRIEFS,
.index_page = -1,
.page = qs->page - 1,
.commit = t->prev_id,
.headref = qs->headref,
};
-
- r = gotweb_link(c, &url, "Previous");
}
+ if (t->next_id) {
+ *have_next = 1;
+ *next = (struct gotweb_url){
+ .action = BRIEFS,
+ .index_page = -1,
+ .page = qs->page + 1,
+ .path = qs->path,
+ .commit = t->next_id,
+ .headref = qs->headref,
+ };
+ }
break;
case COMMITS:
if (t->prev_id && qs->commit != NULL &&
strcmp(qs->commit, t->prev_id) != 0) {
- struct gotweb_url url = {
+ *have_prev = 1;
+ *prev = (struct gotweb_url){
.action = COMMITS,
.index_page = -1,
.page = qs->page - 1,
.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 = {
- .action = -1,
- .index_page = qs->index_page + 1,
- .page = -1,
- };
-
- r = gotweb_link(c, &url, "Next");
- }
- break;
- case BRIEFS:
- if (t->next_id) {
- struct gotweb_url url = {
- .action = BRIEFS,
- .index_page = -1,
- .page = qs->page + 1,
- .path = qs->path,
- .commit = t->next_id,
- .headref = qs->headref,
- };
-
- r = gotweb_link(c, &url, "Next");
- }
- break;
- case COMMITS:
- if (t->next_id) {
- struct gotweb_url url = {
+ if (t->next_id) {
+ *have_next = 1;
+ *next = (struct gotweb_url){
.action = COMMITS,
.index_page = -1,
.page = qs->page + 1,
.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,
.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 *
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) {
}
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 */
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 - db15603fe2e34e9c6f0b3d4a599e93a5777bfd72
blob + ca24af3793aac515e3a3c00a8b6bcfc8e32cb5e8
--- gotwebd/gotwebd.h
+++ gotwebd/gotwebd.h
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 *);
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
#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)
<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 }}