diff options
| author | Paul Buetow <paul@buetow.org> | 2026-06-12 07:57:00 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-06-12 07:57:00 +0300 |
| commit | c9d9394146e617bfcdce3eb93ec70aeccb5eddb8 (patch) | |
| tree | aa43022ea8dd8ce9700fa9f4b791f4c0272d8832 /src/lib | |
| parent | 8a2a442f6f10f303ec06a658958210fd3da84678 (diff) | |
Co-locate template required context vars for gm0
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/template.source.sh | 120 |
1 files changed, 69 insertions, 51 deletions
diff --git a/src/lib/template.source.sh b/src/lib/template.source.sh index 0f038e4..20b5bca 100644 --- a/src/lib/template.source.sh +++ b/src/lib/template.source.sh @@ -142,35 +142,35 @@ current_date_text_to() { } declare -ra TEMPLATE_RENDER_FIELD_SPECS=( - 'render_animation_class_html|context_html|animation_class|preview details view' - 'render_backhref_css|context_css|backhref|header splash' - 'render_backhref_html|context_html|backhref|footer header preview splash details view' - 'render_background_image_css|context_css|background_image|header splash' - 'render_blurs_dir_css|context_css|blurs_dir|header splash' - 'render_current_date_text|current_date_html||' - 'render_enter_page_html|context_html|enter_page|splash' - 'render_exif_details_html|context_raw|exif_details|details' - 'render_exif_tooltip_html|context_html|exif_tooltip|details' - 'render_height_html|config_html|HEIGHT|' - 'render_html_dir_html|context_html|html_dir|*' - 'render_maxpreviews_html|config_html|MAXPREVIEWS|' - 'render_next_html|context_html|next|next' - 'render_original_basepath_is_set|original_basepath_is_set||' - 'render_original_basepath_html|config_html|ORIGINAL_BASEPATH|' - 'render_page_num_html|context_html|page_num|preview details view' - 'render_photo_html|context_html|photo|preview splash details view' - 'render_photos_dir_html|context_html|photos_dir|splash details view' - 'render_prev_html|context_html|prev|prev next' - 'render_preview_num_html|context_html|preview_num|preview details view' - 'render_redirect_page_html|context_html|redirect_page|redirect' - 'render_show_header_bar|context_raw|show_header_bar|header' - 'render_tarball_include|tarball_include||' - 'render_tarball_name_html|context_html|tarball_name|footer' - 'render_thumbheight_html|config_html|THUMBHEIGHT|' - 'render_thumbs_dir_html|context_html|thumbs_dir|preview' - 'render_title_html|config_html|TITLE|' - 'render_view_next_html|preview_num_next_html|preview_num|' - 'render_view_prev_html|preview_num_prev_html|preview_num|' + 'render_animation_class_html|context_html|animation_class|animation_class|preview details view' + 'render_backhref_css|context_css|backhref|backhref|header splash' + 'render_backhref_html|context_html|backhref|backhref|footer header preview splash details view' + 'render_background_image_css|context_css|background_image|background_image|header splash' + 'render_blurs_dir_css|context_css|blurs_dir|blurs_dir|header splash' + 'render_current_date_text|current_date_html|||' + 'render_enter_page_html|context_html|enter_page|enter_page|splash' + 'render_exif_details_html|context_raw|exif_details|exif_details|details' + 'render_exif_tooltip_html|context_html|exif_tooltip|exif_tooltip|details' + 'render_height_html|config_html|HEIGHT||' + 'render_html_dir_html|context_html|html_dir|html_dir|*' + 'render_maxpreviews_html|config_html|MAXPREVIEWS||' + 'render_next_html|context_html|next|next|next' + 'render_original_basepath_is_set|original_basepath_is_set|||' + 'render_original_basepath_html|config_html|ORIGINAL_BASEPATH||' + 'render_page_num_html|context_html|page_num|page_num|preview details view' + 'render_photo_html|context_html|photo|photo|preview splash details view' + 'render_photos_dir_html|context_html|photos_dir|photos_dir|splash details view' + 'render_prev_html|context_html|prev|prev|prev next' + 'render_preview_num_html|context_html|preview_num|preview_num|preview details view' + 'render_redirect_page_html|context_html|redirect_page|redirect_page|redirect' + 'render_show_header_bar|context_raw|show_header_bar|show_header_bar|header' + 'render_tarball_include|tarball_include|||' + 'render_tarball_name_html|context_html|tarball_name|tarball_name|footer' + 'render_thumbheight_html|config_html|THUMBHEIGHT||' + 'render_thumbs_dir_html|context_html|thumbs_dir|thumbs_dir|preview' + 'render_title_html|config_html|TITLE||' + 'render_view_next_html|preview_num_next_html|preview_num||' + 'render_view_prev_html|preview_num_prev_html|preview_num||' ) current_timestamp_slug() { @@ -238,33 +238,49 @@ template_render_field_is_required_for() { esac } -validate_template_context() { +template_required_context_vars_to() { + local -n required_vars_ref="$1"; shift local -r template_name="$1"; shift - local -r context_name="$1"; shift local -A required_var_seen=() - local -a required_vars=() local field_spec - local kind + local _kind local _render_var + local required_context_var local required_templates - local source_name + local _source_name - for field_spec in "${TEMPLATE_RENDER_FIELD_SPECS[@]}"; do - IFS='|' read -r _render_var kind source_name required_templates \ - <<< "$field_spec" + required_vars_ref=() - case "$kind" in - context_*) - if template_render_field_is_required_for \ - "$template_name" "$required_templates" \ - && [ -z "${required_var_seen[$source_name]+x}" ]; then - required_vars+=("$source_name") - required_var_seen["$source_name"]=yes - fi - ;; - esac + for field_spec in "${TEMPLATE_RENDER_FIELD_SPECS[@]}"; do + IFS='|' read -r _render_var _kind _source_name \ + required_context_var required_templates <<< "$field_spec" + + if [ -n "$required_context_var" ] \ + && template_render_field_is_required_for \ + "$template_name" "$required_templates" \ + && [ -z "${required_var_seen[$required_context_var]+x}" ]; then + required_vars_ref+=("$required_context_var") + required_var_seen["$required_context_var"]=yes + fi done +} + +template_required_context_vars() { + local -r template_name="$1"; shift + local -a required_vars=() + + template_required_context_vars_to required_vars "$template_name" + if (( ${#required_vars[@]} > 0 )); then + printf '%s\n' "${required_vars[@]}" + fi +} + +validate_template_context() { + local -r template_name="$1"; shift + local -r context_name="$1"; shift + local -a required_vars=() + template_required_context_vars_to required_vars "$template_name" require_template_context_vars "$template_name" "$context_name" \ "${required_vars[@]}" } @@ -332,12 +348,13 @@ serialize_template_render_context() { local field_spec local _kind local render_var + local _required_context_var local _required_templates local _source_name for field_spec in "${TEMPLATE_RENDER_FIELD_SPECS[@]}"; do - IFS='|' read -r render_var _kind _source_name _required_templates \ - <<< "$field_spec" + IFS='|' read -r render_var _kind _source_name \ + _required_context_var _required_templates <<< "$field_spec" serialize_template_render_var \ "$render_var" "${render_vars_ref[$render_var]}" done @@ -352,14 +369,15 @@ prepare_template_render_vars() { local kind local render_value local render_var + local _required_context_var local _required_templates local source_name render_vars_ref=() for field_spec in "${TEMPLATE_RENDER_FIELD_SPECS[@]}"; do - IFS='|' read -r render_var kind source_name _required_templates \ - <<< "$field_spec" + IFS='|' read -r render_var kind source_name \ + _required_context_var _required_templates <<< "$field_spec" case "$kind" in context_css) |
