Teste de filtros de projetos
Deploy / Deploy (push) Successful in 1m51s Details

This commit is contained in:
JotaChina 2025-12-13 21:32:16 -03:00
parent 6b53212ea2
commit 6f50de815f
1 changed files with 33 additions and 16 deletions

View File

@ -325,23 +325,39 @@ document.addEventListener('DOMContentLoaded', () => {
if(filterBox) filterBox.style.display = 'none'; if(filterBox) filterBox.style.display = 'none';
}); });
function enrichCards(data) { // Função auxiliar para gerar estrelas HTML
cards.forEach(card => { function gerarEstrelas(num) {
// Normalização para tentar encontrar o projeto no JSON let html = '<span class="has-text-warning" title="Nível de Complexidade Técnica">';
// Remove espaços extras e deixa minúsculo para comparar for (let i = 0; i < 5; i++) {
const cardTitleRaw = card.dataset.title || ""; if (i < num) {
const cardTitle = cardTitleRaw.trim().toLowerCase(); html += '<i class="fa-solid fa-star"></i>'; // Estrela cheia
} else {
const info = data.find(item => { html += '<i class="fa-regular fa-star"></i>'; // Estrela vazia
// 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) html += '</span>';
const jsonFile = item.arquivo ? item.arquivo.toLowerCase().replace('.wav', '').replace('.mp3', '') : ""; return html;
}
// Estratégia de busca flexível
return jsonTitle === cardTitle || jsonTitle.includes(cardTitle) || cardTitle.includes(jsonFile);
});
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) { if (info) {
// 1. Salvar Metadados nos atributos HTML para usar nos filtros // 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"; 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 // 2. Injetar Etiquetas Visuais no Card
const bpmContainer = card.querySelector('.bpm-container'); 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 // Se achou o container do BPM, insere as novas tags logo após
if (bpmContainer) { if (bpmContainer) {