fix the matrix
This commit is contained in:
parent
b1c31379b2
commit
df6bda30b1
375628
data/embeddings.json
375628
data/embeddings.json
File diff suppressed because it is too large
Load Diff
@ -771,18 +771,35 @@ const sortedTags = Object.entries(tagFrequency)
|
||||
btn.addEventListener('click', () => {
|
||||
const view = btn.getAttribute('data-view');
|
||||
|
||||
// Update active states
|
||||
elements.viewToggles.forEach(b => {
|
||||
b.classList.toggle('active', b.getAttribute('data-view') === view);
|
||||
});
|
||||
|
||||
window.dispatchEvent(new CustomEvent('viewChanged', { detail: view }));
|
||||
|
||||
if (view === 'hosted') {
|
||||
const hosted = window.toolsData.filter(tool => isToolHosted(tool));
|
||||
window.dispatchEvent(new CustomEvent('toolsFiltered', { detail: hosted }));
|
||||
// Call the global switchToView function
|
||||
if (window.switchToView) {
|
||||
window.switchToView(view);
|
||||
} else {
|
||||
filterTools();
|
||||
console.error('switchToView function not available');
|
||||
}
|
||||
|
||||
// Dispatch view changed event
|
||||
window.dispatchEvent(new CustomEvent('viewChanged', {
|
||||
detail: view,
|
||||
triggeredByButton: true
|
||||
}));
|
||||
|
||||
// Handle filtering after view switch
|
||||
setTimeout(() => {
|
||||
if (view === 'matrix') {
|
||||
// Ensure matrix gets populated by triggering filter
|
||||
filterTools();
|
||||
} else if (view === 'grid') {
|
||||
// Standard filtering for grid view
|
||||
filterTools();
|
||||
}
|
||||
// AI view doesn't need filtering from here
|
||||
}, 100); // Slightly longer delay to ensure view switch completes
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -772,19 +772,24 @@ domains.forEach((domain: any) => {
|
||||
window.addEventListener('viewChanged', (event) => {
|
||||
const view = event.detail;
|
||||
if (view === 'matrix') {
|
||||
setTimeout(updateMatrixHighlighting, 100);
|
||||
setTimeout(() => {
|
||||
if (window.filterTools && typeof window.filterTools === 'function') {
|
||||
window.filterTools();
|
||||
} else {
|
||||
const allTools = window.toolsData || [];
|
||||
window.dispatchEvent(new CustomEvent('toolsFiltered', {
|
||||
detail: {
|
||||
tools: allTools,
|
||||
semanticSearch: false
|
||||
}
|
||||
}));
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('toolsFiltered', (event) => {
|
||||
const currentView = document.querySelector('.view-toggle.active')?.getAttribute('data-view');
|
||||
if (currentView === 'matrix') {
|
||||
setTimeout(updateMatrixHighlighting, 50);
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('toolsFiltered', (event) => {
|
||||
const filtered = event.detail;
|
||||
const { tools: filtered, semanticSearch } = event.detail; // ✅ Correct destructuring
|
||||
const currentView = document.querySelector('.view-toggle.active')?.getAttribute('data-view');
|
||||
|
||||
if (currentView === 'matrix') {
|
||||
@ -827,6 +832,7 @@ domains.forEach((domain: any) => {
|
||||
hasValidProjectUrl ? 'tool-chip-hosted' :
|
||||
tool.license !== 'Proprietary' ? 'tool-chip-oss' : '';
|
||||
chip.className = `tool-chip ${chipClass}`;
|
||||
chip.setAttribute('data-tool-name', tool.name);
|
||||
chip.setAttribute('title', `${tool.name}${tool.knowledgebase === true ? ' (KB verfügbar)' : ''}`);
|
||||
chip.innerHTML = `${tool.name}${tool.knowledgebase === true ? '<span style="margin-left: 0.25rem; font-size: 0.6875rem;">📖</span>' : ''}`;
|
||||
chip.onclick = () => window.showToolDetails(tool.name);
|
||||
|
@ -1157,6 +1157,8 @@ tools:
|
||||
- nethunter
|
||||
- custom-builds
|
||||
- rolling-release
|
||||
domain-agnostic-software:
|
||||
- specific-os
|
||||
related_software:
|
||||
- Parrot Security OS
|
||||
- SIFT Workstation
|
||||
@ -2433,6 +2435,8 @@ tools:
|
||||
- mobile-forensics
|
||||
platforms:
|
||||
- OS
|
||||
domain-agnostic-software:
|
||||
- specific-os
|
||||
tags:
|
||||
- gui
|
||||
- cli
|
||||
@ -2476,6 +2480,8 @@ tools:
|
||||
- mobile-forensics
|
||||
platforms:
|
||||
- OS
|
||||
domain-agnostic-software:
|
||||
- specific-os
|
||||
tags:
|
||||
- gui
|
||||
- write-blocker
|
||||
@ -2536,6 +2542,8 @@ tools:
|
||||
icon: 🦜
|
||||
license: GPL-3.0
|
||||
accessType: download
|
||||
domain-agnostic-software:
|
||||
- specific-os
|
||||
- name: LibreOffice
|
||||
type: software
|
||||
description: >-
|
||||
@ -3081,6 +3089,8 @@ tools:
|
||||
skillLevel: beginner
|
||||
domains:
|
||||
- collaboration-general
|
||||
domain-agnostic-software:
|
||||
- collaboration-general
|
||||
phases:
|
||||
- reporting
|
||||
platforms:
|
||||
@ -3783,6 +3793,8 @@ tools:
|
||||
skillLevel: beginner
|
||||
domains:
|
||||
- collaboration-general
|
||||
domain-agnostic-software:
|
||||
- collaboration-general
|
||||
phases:
|
||||
- reporting
|
||||
platforms:
|
||||
@ -4490,6 +4502,8 @@ tools:
|
||||
- analysis
|
||||
platforms:
|
||||
- Linux
|
||||
domain-agnostic-software:
|
||||
- specific-os
|
||||
tags:
|
||||
- live-distro
|
||||
- imaging
|
||||
@ -7214,4 +7228,3 @@ scenarios:
|
||||
- id: scenario:windows-registry
|
||||
icon: 📜
|
||||
friendly_name: Windows Registry analysieren
|
||||
skill_levels: {}
|
||||
|
@ -356,6 +356,8 @@ if (aiAuthRequired) {
|
||||
}
|
||||
|
||||
function switchToView(view) {
|
||||
console.log('[VIEW] Switching to view:', view);
|
||||
|
||||
const toolsGrid = document.getElementById('tools-grid');
|
||||
const matrixContainer = document.getElementById('matrix-container');
|
||||
const aiInterface = document.getElementById('ai-interface');
|
||||
@ -365,8 +367,12 @@ if (aiAuthRequired) {
|
||||
const methodologySection = document.getElementById('methodology-section');
|
||||
const targetedSection = document.getElementById('targeted-section');
|
||||
|
||||
// Hide all views
|
||||
if (toolsGrid) toolsGrid.style.display = 'none';
|
||||
if (matrixContainer) matrixContainer.style.display = 'none';
|
||||
if (matrixContainer) {
|
||||
matrixContainer.style.display = 'none';
|
||||
matrixContainer.classList.add('hidden');
|
||||
}
|
||||
if (aiInterface) aiInterface.style.display = 'none';
|
||||
if (noResults) noResults.style.display = 'none';
|
||||
|
||||
@ -375,14 +381,22 @@ if (aiAuthRequired) {
|
||||
|
||||
switch (view) {
|
||||
case 'grid':
|
||||
console.log('[VIEW] Showing grid view');
|
||||
if (toolsGrid) toolsGrid.style.display = 'block';
|
||||
if (filtersSection) filtersSection.style.display = 'block';
|
||||
break;
|
||||
|
||||
case 'matrix':
|
||||
if (matrixContainer) matrixContainer.style.display = 'block';
|
||||
console.log('[VIEW] Showing matrix view');
|
||||
if (matrixContainer) {
|
||||
matrixContainer.style.display = 'block';
|
||||
matrixContainer.classList.remove('hidden');
|
||||
}
|
||||
if (filtersSection) filtersSection.style.display = 'block';
|
||||
break;
|
||||
|
||||
case 'ai':
|
||||
console.log('[VIEW] Showing AI view');
|
||||
if (aiAuthRequired && !aiAuthenticated) {
|
||||
console.log('[AUTH] AI access denied, redirecting to login');
|
||||
const currentUrl = encodeURIComponent(window.location.href);
|
||||
@ -405,8 +419,12 @@ if (aiAuthRequired) {
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
console.warn('[VIEW] Unknown view:', view);
|
||||
}
|
||||
|
||||
// Restore all filter sections for non-AI views
|
||||
if (view !== 'ai' && filtersSection) {
|
||||
const filterSections = filtersSection.querySelectorAll('.filter-section');
|
||||
filterSections.forEach(section => {
|
||||
@ -415,7 +433,6 @@ if (aiAuthRequired) {
|
||||
}
|
||||
}
|
||||
|
||||
// Rest of the existing code remains the same...
|
||||
window.navigateToGrid = function(toolName) {
|
||||
console.log('Navigating to grid for tool:', toolName);
|
||||
|
||||
@ -655,10 +672,13 @@ if (aiAuthRequired) {
|
||||
|
||||
window.addEventListener('viewChanged', (event) => {
|
||||
const view = event.detail;
|
||||
switchToView(view);
|
||||
if (!event.triggeredByButton) {
|
||||
switchToView(view);
|
||||
}
|
||||
});
|
||||
|
||||
window.switchToAIView = () => switchToView('ai');
|
||||
window.switchToView = switchToView;
|
||||
|
||||
handleSharedURL();
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user