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';
});
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 = '<span class="has-text-warning" title="Nível de Complexidade Técnica">';
for (let i = 0; i < 5; i++) {
if (i < num) {
html += '<i class="fa-solid fa-star"></i>'; // Estrela cheia
} else {
html += '<i class="fa-regular fa-star"></i>'; // Estrela vazia
}
}
html += '</span>';
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) {