{# BLOCK LISTA #}
{% if blockscontent %}
{% import 'blocks\\macros.html.twig' as macros %}
<section class="{{ blockSequence|default }} block-list episodes{% if settings.light_mode|default == 1 %} light-mode{% endif %} {{ settings.extra_class|default(null) }}" style="{{ macros.getStyles(settings) }}" {{ macros.getBlockDataAttributes(_context) }}>
<div class="{% if settings.fullwidth|default(0) != 1 %}container{% else %}w-100{% endif %}">
{% if settings.carousel|default == '1' or settings.carousel_1175|default == '1' or settings.carousel_600|default == '1' or settings.carousel_480|default == '1' %}
{% import 'blocks\\block_list\\block_list.default.settings.twig' as slick_settings %}
<div class="slick-carousel programs-list__carousel" data-slick='{{slick_settings.getSlick_Settings(settings)|replace({"\n":""})}}' style="--block-list-gap:{{ settings.items_gap|default('var(--margin)') }};">
{% else %}
{% set temporadas = studio.getVariable('temporadas')|default([]) %}
{{ studio.setVariable('temporadas', []) }}
{% set temporadas = temporadas|filter(v => v is not null) %}
{% set temporadas = temporadas|reduce((carry, item) => item in carry ? carry : carry|merge([item]), []) %}
{% set temporadas = temporadas|sort %}
<div class="program__episodes">
<div class="row justify-content-between align-items-center">
<div class="col-12 col-lg-auto ">
<h2 class="program__episodes--title mb-2 mb-lg-0">{{fields.title|default}}</h2>
</div>
<div class="col-12 col-lg-auto">
{% if temporadas is not empty %}
<div hidden class="select-wrapper w-100">
<select name="temporadas" id="cb_temporadas" class="program-custom-select w-100">
{% for temporada in temporadas %}
<option value="{{ temporada }}" {% if loop.first %}selected{% endif %}>{{ temporada }}</option>
{% endfor %}
</select>
<i class="fa-solid fa-chevron-down"></i>
</div>
{% endif %}
</div>
</div>
</div>
<div class="spinner-container">
<i class="fas fa-circle-notch spinner"></i>
</div>
<div hidden id="grid-videos-programas" class="row grid" style="--block-list-gap:{{ settings.items_gap|default('var(--margin)') }}; --block-list-cols:{{settings.column|default('3')}}">
{% endif %}
{{ blockscontent|raw }}
</div>
</div>
{% if fields.paginate %}
<div class="container">
{% set datapage = paginator.getPaginationData %}
{% if isajax is defined %}
{% if datapage.pageCount > 1 %}
<nav>
<ul class="pagination">
{% if datapage.previous is defined %}
<li class="page-item ajax-paginator" data-page-id="{{ pageid }}" page-id="{{ datapage.previous }}">
<span class="page-link" rel="prev">« {{ 'label_previous'|trans([], 'KnpPaginatorBundle') }}</span>
</li>
{% else %}
<li class="page-item disabled">
<span class="page-link">« {{ 'label_previous'|trans([], 'KnpPaginatorBundle') }}</span>
</li>
{% endif %}
{% for i in 1..datapage.pageCount %}
<li class="page-item {% if i == datapage.current %}active{% else %}ajax-paginator" data-page-id="{{ pageid }}" page-id="{{ i }}{% endif %}">
<span class="page-link">{{ i }}</span>
</li>
{% endfor %}
{% if datapage.next is defined %}
<li class="page-item ajax-paginator" data-page-id="{{ pageid }}" page-id="{{ datapage.next }}">
<span class="page-link" rel="next">{{ 'label_next'|trans([], 'KnpPaginatorBundle') }} »</span>
</li>
{% else %}
<li class="page-item disabled">
<span class="page-link">{{ 'label_next'|trans([], 'KnpPaginatorBundle') }} »</span>
</li>
{% endif %}
</ul>
</nav>
{% endif %}
{% else %}
{{ knp_pagination_render(paginator,'paginator/navigation.pagination.html.twig') }}
{% endif %}
</div>
{% endif %}
</section>
{% endif %}
{# @END BLOCK LISTA #}
{% include 'blocks/block_share_modal/block_share_modal.default.html.twig' %}
<script>
document.addEventListener('DOMContentLoaded', function() {
const cb_temporadas = document.getElementById('cb_temporadas');
const grid = document.getElementById('grid-videos-programas');
const spinnerContainer = document.querySelector('.spinner-container');
if(cb_temporadas) {
// 1️⃣ Pega todas as options
const options = Array.from(cb_temporadas.options);
// 2️⃣ Ordena ignorando acentos e maiúsculas/minúsculas
options.sort((a, b) => {
const textA = a.text.trim();
const textB = b.text.trim();
return textA.localeCompare(textB, 'pt-PT', { sensitivity: 'base' });
});
// 3️⃣ Remove todas as opções antigas e reinsere ordenadas
cb_temporadas.innerHTML = '';
// 4️⃣ Reinsere as opções ordenadas
options.forEach(opt => cb_temporadas.add(opt));
// 5️⃣ Seleciona a primeira opção (padrão) após ordenar
cb_temporadas.selectedIndex = 0; // Seleciona a primeira opção após ordenar
// 6️⃣ remove o atributo hidden pai do select
cb_temporadas.parentElement.removeAttribute('hidden');
}
// Remove o spinner e mostra o grid
spinnerContainer.style.display = 'none';
grid.removeAttribute('hidden');
});
//
function mostrarTemporada(valor) {
let temporadas = document.querySelectorAll(".episodes_card");
temporadas.forEach(function (t) {
if (t.getAttribute("data-temporada") === valor) {
t.style.display = "block";
} else {
t.style.display = "none";
}
});
}
document.addEventListener("DOMContentLoaded", function () {
let select = document.getElementById("cb_temporadas");
mostrarTemporada(select.value);
});
document.getElementById("cb_temporadas").addEventListener("change", function() {
let temporadaSelecionada = this.value;
mostrarTemporada(temporadaSelecionada);
});
</script>