{% endif %}
{% set selected_creation_mode = request.form.get('creation_mode') or selected_creation_mode or 'clone' %}
{% set selected_aspect_ratio = request.form.get('aspect_ratio') or selected_aspect_ratio or '9:16' %}
{% set selected_h3_resolution = request.form.get('h3_resolution') or selected_h3_resolution or '480p' %}
{% if error %}
{{ error }}
{% endif %}
{% if message %}
{{ message }}
{% endif %}
{% set project_groups = project_groups|default([], true) %}
{% set selected_group = selected_group|default('all', true) %}
{% set selected_group_name = selected_group_name|default('全部项目', true) %}
{% set all_projects = all_projects|default(projects, true) %}
{% set all_project_count = all_project_count|default(projects|length) %}
{% set ungrouped_project_count = ungrouped_project_count|default(projects|length) %}
{# ── 服务端分页上下文(?page=&size=):变量缺失时按"单页全量"兜底,保证老调用不炸 ── #}
{% set page_projects = page_projects|default(projects, true) %}
{% set page = page|default(1) %}
{% set page_count = page_count|default(1) %}
{% set page_size = page_size|default(page_projects|length) %}
{% set size_param = size_param|default('20') %}
{% set page_size_options = page_size_options|default(['20', '50', '100', '500', '1000', 'all']) %}
{% set page_size_labels = page_size_labels|default({}) %}
{% set pagination_enabled = pagination_enabled|default(true) %}
{% set total_count = total_count|default(page_projects|length) %}
{# 轮询用的 URL:优先服务端给的(含当前页),老调用缺变量时按当前分组/每页数量现算,确保可序列化。
轮询抓卡片必须带上当前搜索/筛选条件(q/mode/status),否则筛选页里补插的卡片会是不匹配的项目。 #}
{% set _poll_qs = (('q=' ~ (filter_q|urlencode)) if filter_q else '') ~
(('&mode=' ~ filter_mode) if filter_mode else '') ~
(('&status=' ~ filter_status) if filter_status else '') %}
{% set home_page_url = home_page_url|default(url_for('home', group=selected_group, size=size_param, page=page) ~ (('&' ~ _poll_qs) if _poll_qs else '')) %}
{% set home_first_page_url = home_first_page_url|default(url_for('home', group=selected_group, size=size_param, page=1) ~ (('&' ~ _poll_qs) if _poll_qs else '')) %}
{# 分页控件(列表上下各一处):首页 / 上一页 / 下一页 / 末页 + 每页数量 + 跳到指定页。
每页数量用下拉选择框(用户要求);搜索/筛选参数在切换时透传,不让结果跳变。 #}
{% macro render_pagination_bar(where) %}
{% set _f_qs = (('q=' ~ (filter_q|urlencode)) if filter_q else '') ~
(('&mode=' ~ filter_mode) if filter_mode else '') ~
(('&status=' ~ filter_status) if filter_status else '') %}
{% if pagination_enabled and page_count > 1 %}
{% endif %}
{% if pagination_enabled and page_count > 1 %}第 {{ page }}/{{ page_count }} 页 · {% endif %}共 {{ total_count }} 个项目{% if pagination_enabled and total_count %}(本页 {{ page_projects|length }} 个){% endif %}