<script type="text/javascript">
$(document).ready(function () {
// Función para obtener los filtros de cualquier bloque/formulario
function getFiltersAsParams($block) {
const params = new URLSearchParams();
$block.find('input[name^="filter["], select[name^="filter["], textarea[name^="filter["]').each(function () {
const $input = $(this);
if (($input.is(":checkbox") || $input.is(":radio")) && !$input.is(":checked")) return;
if ($input.attr("name").endsWith("[]")) {
const values = Array.isArray($input.val()) ? $input.val() : [$input.val()];
values.forEach(val => { if (val !== "") params.append($input.attr("name"), val); });
} else if ($input.val() !== "") {
params.append($input.attr("name"), $input.val());
}
});
return params;
}
// Copiar filtros de todos los bloques a un formulario antes de submit
function copyFiltersToForm($form) {
$form.find(".__cloned-filter").remove();
$('[id^="filter-"], .prometeo-filters').each(function () {
const $block = $(this);
$block.find('input[name^="filter["], select[name^="filter["], textarea[name^="filter["]').each(function () {
const $input = $(this);
if (($input.is(":checkbox") || $input.is(":radio")) && !$input.is(":checked")) return;
if ($input.attr("name").endsWith("[]")) {
const values = Array.isArray($input.val()) ? $input.val() : [$input.val()];
values.forEach(val => {
if (val === "") return;
$("<input>").attr({
type: "hidden",
name: $input.attr("name"),
value: val,
class: "__cloned-filter"
}).appendTo($form);
});
} else if ($input.val() !== "") {
$("<input>").attr({
type: "hidden",
name: $input.attr("name"),
value: $input.val(),
class: "__cloned-filter"
}).appendTo($form);
}
});
});
}
// Detectar cualquier submit de formulario y copiar filtros
$("form").on("submit", function () {
copyFiltersToForm($(this));
});
// Actualizar enlaces de exportación para incluir todos los filtros
function updateExportLinks() {
$('a[href*="/export"]').each(function () {
const $link = $(this);
$link.off("click.updateFilters").on("click.updateFilters", function () {
const url = new URL($link.attr("href"), window.location.origin);
const params = new URLSearchParams(url.search);
$('[id^="filter-"], .prometeo-filters').each(function () {
getFiltersAsParams($(this)).forEach((value, key) => params.append(key, value));
});
$link.attr("href", url.pathname + "?" + params.toString());
});
});
}
updateExportLinks();
// Observador para nuevos enlaces de exportación que se agreguen dinámicamente
const observer = new MutationObserver(() => updateExportLinks());
observer.observe(document.body, { childList: true, subtree: true });
});
</script>