diff options
| author | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2015-01-30 21:32:29 +0100 |
|---|---|---|
| committer | Tomas Bzatek <tbzatek@users.sourceforge.net> | 2015-01-30 21:32:29 +0100 |
| commit | fa871cef365c57f80442a9a02c34ff4bf82ae833 (patch) | |
| tree | aa3ad12f88d691ff9f410c0c7458df00983e24a2 | |
| parent | 7271fb0b5e24ac014366c7c029822ef4cb2e03eb (diff) | |
| download | cataract-fa871cef365c57f80442a9a02c34ff4bf82ae833.tar.xz | |
theming: Implement have_album_image_size() block function
Similar to the have_image_size() block function this is its
variation operating over the album. The block condition is true
if there's at least one item in the album of the specified
image size.
Respects the legacy "nofullsize" tags.
Takes one mandatory argument of image size name.
| -rw-r--r-- | src/generators.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/generators.c b/src/generators.c index 845e5c1..e1b1fdc 100644 --- a/src/generators.c +++ b/src/generators.c @@ -369,6 +369,36 @@ have_image_size_cb (gchar **args, gpointer user_data) return FALSE; } +static gboolean +have_album_image_size_cb (gchar **args, gpointer user_data) +{ + struct HaveImageSizeData *data = user_data; + gboolean is_original; + TIndexItem *iter_item; + int i; + + g_return_val_if_fail (g_strv_length (args) != 2, FALSE); /* incl. trailing NULL */ + + /* no image size of that name available */ + if (! lookup_image_size_for_name (data->setup, *args)) + return FALSE; + + is_original = g_ascii_strcasecmp ("original", *args) == 0; + + for (i = 0; i < data->items->items->len; i++) { + iter_item = g_ptr_array_index (data->items->items, i); + if (iter_item == NULL || iter_item->type != INDEX_ITEM_TYPE_PICTURE || iter_item->hidden) + continue; + + if (! is_original && iter_item->image_sizes && g_hash_table_lookup (iter_item->image_sizes, *args)) + return TRUE; + + if (is_original && iter_item->path && ! IS_NOFULLSIZE (iter_item, data->items, data->setup)) + return TRUE; + } + + return FALSE; +} /* @@ -976,6 +1006,7 @@ write_html_page (TGallerySetup *setup, GHashTable *defines; GHashTable *local_defines; TImageSize *image_size, *thumb_image_size; + struct HaveImageSizeData *img_size_data; res = TRUE; @@ -1048,6 +1079,12 @@ write_html_page (TGallerySetup *setup, thumb_image_size = lookup_image_size_for_name (setup, items->type == GALLERY_TYPE_ALBUM ? theme->album_thumb_size : theme->index_thumb_size); } + /* Album image size availability callback */ + img_size_data = g_new0 (struct HaveImageSizeData, 1); + img_size_data->setup = setup; + img_size_data->items = items; + block_parser_register_function (block_parser, "have_album_image_size", have_album_image_size_cb, img_size_data, g_free); + /* Picture page tags */ if (item != NULL) { add_next_prev_links (setup, path_info, theme, items, item, global_replace_table, image_size); |
