Teste de filtros de projetos
Deploy / Deploy (push) Successful in 1m51s
Details
Deploy / Deploy (push) Successful in 1m51s
Details
This commit is contained in:
parent
6b53212ea2
commit
6f50de815f
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue