diff options
author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2018-06-10 11:15:47 +0200 |
---|---|---|
committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2018-06-10 11:37:53 +0200 |
commit | 7a01d4616cec1831ec025e62bc64b4ec5d6ed600 (patch) | |
tree | 1c65e77aeb3b03bab99457facc98d166a1da1e7f /src | |
parent | 780310275325795722d4a555cdcba2342f6a9e39 (diff) | |
download | blogc-7a01d4616cec1831ec025e62bc64b4ec5d6ed600.tar.gz blogc-7a01d4616cec1831ec025e62bc64b4ec5d6ed600.tar.bz2 blogc-7a01d4616cec1831ec025e62bc64b4ec5d6ed600.zip |
make: disable post listings if {atom_,}posts_per_page is 0
Diffstat (limited to 'src')
-rw-r--r-- | src/blogc-make/rules.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/blogc-make/rules.c b/src/blogc-make/rules.c index aea9c0f..8851313 100644 --- a/src/blogc-make/rules.c +++ b/src/blogc-make/rules.c @@ -53,6 +53,19 @@ posts_pagination(bm_ctx_t *ctx, bc_trie_t *variables, const char *variable) } +static bool +posts_pagination_enabled(bm_ctx_t *ctx, const char *variable) +{ + if (ctx == NULL || ctx->settings == NULL || ctx->settings->settings == NULL) + return false; + + long posts_per_page = strtol( + bc_trie_lookup(ctx->settings->settings, variable), + NULL, 10); // FIXME: improve + return posts_per_page != 0; +} + + // INDEX RULE static bc_slist_t* @@ -61,6 +74,9 @@ index_outputlist(bm_ctx_t *ctx) if (ctx == NULL || ctx->settings->posts == NULL) return NULL; + if (!posts_pagination_enabled(ctx, "posts_per_page")) + return NULL; + bc_slist_t *rv = NULL; const char *html_ext = bc_trie_lookup(ctx->settings->settings, "html_ext"); @@ -119,6 +135,9 @@ atom_outputlist(bm_ctx_t *ctx) if (ctx == NULL || ctx->settings->posts == NULL) return NULL; + if (!posts_pagination_enabled(ctx, "atom_posts_per_page")) + return NULL; + bc_slist_t *rv = NULL; const char *atom_prefix = bc_trie_lookup(ctx->settings->settings, "atom_prefix"); @@ -173,6 +192,9 @@ atom_tags_outputlist(bm_ctx_t *ctx) if (ctx == NULL || ctx->settings->posts == NULL || ctx->settings->tags == NULL) return NULL; + if (!posts_pagination_enabled(ctx, "atom_posts_per_page")) + return NULL; + bc_slist_t *rv = NULL; const char *atom_prefix = bc_trie_lookup(ctx->settings->settings, "atom_prefix"); @@ -234,13 +256,15 @@ pagination_outputlist(bm_ctx_t *ctx) if (ctx == NULL || ctx->settings->posts == NULL) return NULL; - long num_posts = bc_slist_length(ctx->posts_fctx); + // not using posts_pagination_enabled() here because we need to calculate + // posts per page here anyway, and the condition is different. long posts_per_page = strtol( bc_trie_lookup(ctx->settings->settings, "posts_per_page"), NULL, 10); // FIXME: improve if (posts_per_page <= 0) return NULL; + long num_posts = bc_slist_length(ctx->posts_fctx); size_t pages = ceilf(((float) num_posts) / posts_per_page); const char *pagination_prefix = bc_trie_lookup(ctx->settings->settings, @@ -374,6 +398,9 @@ tags_outputlist(bm_ctx_t *ctx) if (ctx == NULL || ctx->settings->posts == NULL || ctx->settings->tags == NULL) return NULL; + if (!posts_pagination_enabled(ctx, "posts_per_page")) + return NULL; + bc_slist_t *rv = NULL; const char *tag_prefix = bc_trie_lookup(ctx->settings->settings, "tag_prefix"); |