From d24357c01bde9406d0e7d8713912e15e2627f51a Mon Sep 17 00:00:00 2001 From: JotaChina Date: Tue, 16 Dec 2025 17:40:55 -0300 Subject: [PATCH] reformula buscas --- pages/projetos.md | 47 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/pages/projetos.md b/pages/projetos.md index eb352ab0..24f6f8d0 100755 --- a/pages/projetos.md +++ b/pages/projetos.md @@ -44,7 +44,7 @@ permalink: /projetos/

📁 Projetos Disponíveis

- Use o menu lateral para filtrar projetos por BPM, Plugin, Instrumento, etc. + Busca avançada: Digite termos ou selecione filtros para refinar.

@@ -60,6 +60,17 @@ permalink: /projetos/
+
+ +
+ + + + +
+
+
+
@@ -156,8 +167,11 @@ permalink: /projetos/ {% assign p_automation = page.tags.automation | join: ',' %} {% assign p_samples = page.tags.sample | join: ',' %} {% assign p_instruments = page.tags.instruments | default: page.tags.instrument | join: ',' %} + + {% assign p_name = page.title | default: page.name | downcase %}
document.addEventListener('DOMContentLoaded', function () { const checkboxes = document.querySelectorAll('.filter-checkbox'); + const searchInput = document.getElementById('search-input'); const projects = document.querySelectorAll('.project-item'); const resetBtn = document.getElementById('reset-all-filters'); const countBar = document.getElementById('results-count-bar'); @@ -363,10 +378,13 @@ document.addEventListener('DOMContentLoaded', function () { // Estado do Filtro let activeFilters = { bpm: [], instruments: [], plugins: [], samples: [], bassline: [], automation: [] }; + let searchText = ""; function updateState() { + // Reseta Arrays activeFilters = { bpm: [], instruments: [], plugins: [], samples: [], bassline: [], automation: [] }; + // LĂȘ Checkboxes checkboxes.forEach(cb => { if (cb.checked) { const category = cb.getAttribute('data-category'); @@ -377,6 +395,9 @@ document.addEventListener('DOMContentLoaded', function () { } }); + // LĂȘ Campo de Texto (IA Filter) + searchText = searchInput.value.toLowerCase().trim(); + applyFilters(); } @@ -384,7 +405,8 @@ document.addEventListener('DOMContentLoaded', function () { let visibleCount = 0; projects.forEach(project => { - // LĂȘ dados do elemento (Fallback para string vazia) + // LĂȘ dados do elemento + const pName = project.getAttribute('data-name') || ""; const pBpm = project.getAttribute('data-bpm') || ""; const pInsts = (project.getAttribute('data-instruments') || "").split(','); const pPlugins = (project.getAttribute('data-plugins') || "").split(','); @@ -392,6 +414,7 @@ document.addEventListener('DOMContentLoaded', function () { const pBassline = (project.getAttribute('data-bassline') || "").split(','); const pAutomation = (project.getAttribute('data-automation') || "").split(','); + // 1. Checa Filtros de Categoria (Checkbox) const matchBpm = activeFilters.bpm.length === 0 || activeFilters.bpm.includes(pBpm); const matchInst = activeFilters.instruments.length === 0 || activeFilters.instruments.some(f => pInsts.includes(f)); const matchPlugin = activeFilters.plugins.length === 0 || activeFilters.plugins.some(f => pPlugins.includes(f)); @@ -399,7 +422,12 @@ document.addEventListener('DOMContentLoaded', function () { const matchBassline = activeFilters.bassline.length === 0 || activeFilters.bassline.some(f => pBassline.includes(f)); const matchAutomation = activeFilters.automation.length === 0 || activeFilters.automation.some(f => pAutomation.includes(f)); - if (matchBpm && matchInst && matchPlugin && matchSample && matchBassline && matchAutomation) { + // 2. Checa Busca de Texto (IA Filter) + // Concatena tudo para buscar em qualquer campo + const fullMeta = [pName, pBpm, pInsts.join(' '), pPlugins.join(' '), pSamples.join(' '), pBassline.join(' '), pAutomation.join(' ')].join(' ').toLowerCase(); + const matchText = searchText === "" || fullMeta.includes(searchText); + + if (matchBpm && matchInst && matchPlugin && matchSample && matchBassline && matchAutomation && matchText) { project.style.display = 'block'; visibleCount++; } else { @@ -412,17 +440,28 @@ document.addEventListener('DOMContentLoaded', function () { noResults.classList.toggle('is-hidden', visibleCount > 0); } + // Eventos checkboxes.forEach(cb => cb.addEventListener('change', updateState)); + searchInput.addEventListener('input', updateState); + + // Suporte para parĂąmetros de URL (q=...) + const urlParams = new URLSearchParams(window.location.search); + const qParam = urlParams.get('q'); + if(qParam) { + searchInput.value = qParam; + updateState(); + } resetBtn.addEventListener('click', () => { checkboxes.forEach(cb => { cb.checked = false; if(cb.parentElement.classList.contains('tag')) cb.parentElement.classList.remove('is-checked'); }); + searchInput.value = ""; updateState(); }); - // --- LĂłgica do Modal (Existente) --- + // --- Modal Logic --- const modal = document.getElementById('preview-modal'); const iframe = document.getElementById('preview-iframe'); const modalTitle = document.getElementById('modal-title');