From 6f50de815f0a9a9872407428e8b6f8282a3f6179 Mon Sep 17 00:00:00 2001 From: JotaChina Date: Sat, 13 Dec 2025 21:32:16 -0300 Subject: [PATCH] Teste de filtros de projetos --- pages/projetos.md | 49 +++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/pages/projetos.md b/pages/projetos.md index 48828529..ff7d8ee4 100755 --- a/pages/projetos.md +++ b/pages/projetos.md @@ -325,23 +325,39 @@ document.addEventListener('DOMContentLoaded', () => { if(filterBox) filterBox.style.display = 'none'; }); - function enrichCards(data) { - cards.forEach(card => { - // Normalização para tentar encontrar o projeto no JSON - // Remove espaços extras e deixa minúsculo para comparar - const cardTitleRaw = card.dataset.title || ""; - const cardTitle = cardTitleRaw.trim().toLowerCase(); - - const info = data.find(item => { - // Tenta bater pelo título do projeto no YAML - const jsonTitle = (item.dados_projeto && item.dados_projeto.titulo) ? item.dados_projeto.titulo.trim().toLowerCase() : ""; - // Tenta bater pelo nome do arquivo (sem extensão) - const jsonFile = item.arquivo ? item.arquivo.toLowerCase().replace('.wav', '').replace('.mp3', '') : ""; - - // Estratégia de busca flexível - return jsonTitle === cardTitle || jsonTitle.includes(cardTitle) || cardTitle.includes(jsonFile); - }); + // Função auxiliar para gerar estrelas HTML + function gerarEstrelas(num) { + let html = ''; + for (let i = 0; i < 5; i++) { + if (i < num) { + html += ''; // Estrela cheia + } else { + html += ''; // Estrela vazia + } + } + html += ''; + return html; + } + function enrichCards(data) { + // 1. Cria um mapa para busca rápida (O(N)) + const mapDados = {}; + data.forEach(item => { + // Mapeia tanto pelo nome do arquivo quanto pelo título do projeto + const keyArquivo = normalizarChaveJS(item.arquivo.replace('.wav','').replace('.mp3','')); + mapDados[keyArquivo] = item; + + if(item.dados_projeto && item.dados_projeto.titulo) { + const keyTitulo = normalizarChaveJS(item.dados_projeto.titulo); + mapDados[keyTitulo] = item; + } + }); + + cards.forEach(card => { + const cardKey = normalizarChaveJS(card.dataset.title); + // 2. Busca instantânea (O(1)) + const info = mapDados[cardKey]; + if (info) { // 1. Salvar Metadados nos atributos HTML para usar nos filtros card.dataset.genre = (info.analise_ia && info.analise_ia.genero_macro) ? info.analise_ia.genero_macro : "Unknown"; @@ -350,6 +366,7 @@ document.addEventListener('DOMContentLoaded', () => { // 2. Injetar Etiquetas Visuais no Card const bpmContainer = card.querySelector('.bpm-container'); + const estrelasHTML = gerarEstrelas(projeto.analise_tecnica.complexidade.estrelas); // Se achou o container do BPM, insere as novas tags logo após if (bpmContainer) {