Download raw body.
templateify gotweb_render_navs
On Thu, Dec 15, 2022 at 12:29:20PM +0100, Omar Polo wrote:
> 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.
ok
>
> 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 }}
>
--
Tracey Emery
templateify gotweb_render_navs