// Threat Intelligence Vendor Data const vendors = [ { id: 'abuse-ch', name: 'abuse.ch', logo: 'http://static.photos/technology/200x200/1', description: 'Malware and botnet tracking platform', features: ['Malware Tracking', 'Botnet Monitoring', 'IOC Feeds', 'Threat Intelligence'], pricing: 'Freemium', coverage: ['Network', 'Malware', 'Botnet'], integrations: ['SIEM', 'Firewalls', 'EDR'], freeTrial: true, rating: 4.3 }, { id: 'anomali', name: 'Anomali', logo: 'http://static.photos/technology/200x200/2', description: 'Enterprise threat intelligence platform', features: ['Threat Intelligence', 'Threat Hunting', 'SIEM Integration', 'Automation'], pricing: 'Enterprise', coverage: ['Network', 'Endpoint', 'Cloud'], integrations: ['SIEM', 'Firewalls', 'EDR'], freeTrial: false, rating: 4.2 }, { id: 'arctic-wolf', name: 'Arctic Wolf Networks', logo: 'http://static.photos/technology/200x200/3', description: 'Security operations and threat intelligence', features: ['Managed Detection', 'Threat Intelligence', 'Vulnerability Management', 'Cloud Monitoring'], pricing: 'Subscription-based', coverage: ['Network', 'Endpoint', 'Cloud'], integrations: ['SIEM', 'SOAR', 'EDR'], freeTrial: true, rating: 4.5 }, { id: 'bitdefender', name: 'Bitdefender', logo: 'http://static.photos/technology/200x200/4', description: 'Endpoint protection with threat intelligence', features: ['Endpoint Security', 'Threat Intelligence', 'Network Security', 'Cloud Security'], pricing: 'Subscription-based', coverage: ['Endpoint', 'Network', 'Cloud'], integrations: ['SIEM', 'SOAR', 'EDR'], freeTrial: true, rating: 4.6 }, { id: 'bitsight', name: 'Bitsight', logo: 'http://static.photos/technology/200x200/5', description: 'Security ratings and risk intelligence', features: ['Risk Assessment', 'Threat Intelligence', 'Third-Party Risk', 'Compliance'], pricing: 'Enterprise', coverage: ['Network', 'Web', 'Third-Party'], integrations: ['SIEM', 'GRC', 'SOAR'], freeTrial: false, rating: 4.4 }, { id: 'blocklist-de', name: 'Blocklist.de', logo: 'http://static.photos/technology/200x200/6', description: 'Community-based IP blocklist', features: ['IP Blocklist', 'Brute Force Protection', 'Attack Logs', 'Community Data'], pricing: 'Free', coverage: ['Network', 'IP Reputation'], integrations: ['Firewalls', 'IDS/IPS', 'SIEM'], freeTrial: true, rating: 4.0 }, { id: 'mandiant', name: 'Mandiant Threat Intelligence', logo: 'http://static.photos/technology/200x200/3', description: 'Expert-led threat intelligence services', features: ['Incident Response', 'Threat Intelligence', 'Malware Analysis', 'Vulnerability Research'], pricing: 'Enterprise', coverage: ['Network', 'Endpoint', 'Cloud'], integrations: ['Firewalls', 'SIEM', 'EDR'], freeTrial: false, rating: 4.7 }, { id: 'palo-alto', name: 'Palo Alto Unit 42', logo: 'http://static.photos/technology/200x200/4', description: 'Integrated threat intelligence with next-gen firewalls', features: ['Network Security', 'Cloud Security', 'Threat Intelligence', 'Automated Response'], pricing: 'Bundled with Products', coverage: ['Network', 'Cloud', 'Endpoint'], integrations: ['Firewalls', 'Cortex XSOAR', 'SIEM'], freeTrial: true, rating: 4.5 }, { id: 'fireeye', name: 'FireEye Threat Intelligence', logo: 'http://static.photos/technology/200x200/5', description: 'Comprehensive threat intelligence and analysis', features: ['Malware Analysis', 'Threat Intelligence', 'Incident Response', 'Vulnerability Research'], pricing: 'Enterprise', coverage: ['Network', 'Endpoint', 'Email'], integrations: ['SIEM', 'EDR', 'SOAR'], freeTrial: false, rating: 4.4 }, { id: 'anomali', name: 'Anomali ThreatStream', logo: 'http://static.photos/technology/200x200/6', description: 'Threat intelligence platform for security operations', features: ['Threat Intelligence', 'Threat Hunting', 'SIEM Integration', 'Automation'], pricing: 'Subscription-based', coverage: ['Network', 'Endpoint', 'Cloud'], integrations: ['SIEM', 'Firewalls', 'EDR'], freeTrial: true, rating: 4.3 }, { id: 'flashpoint', name: 'Flashpoint Intelligence', logo: 'http://static.photos/technology/200x200/7', description: 'Business risk intelligence from the deep and dark web', features: ['Dark Web Monitoring', 'Vulnerability Intelligence', 'Brand Protection', 'Fraud Detection'], pricing: 'Enterprise', coverage: ['Dark Web', 'Web', 'Network'], integrations: ['SIEM', 'SOAR', 'TIPS'], freeTrial: false, rating: 4.5 }, { id: 'threatconnect', name: 'ThreatConnect', logo: 'http://static.photos/technology/200x200/8', description: 'Threat intelligence platform (TIP) with automation', features: ['Threat Intelligence', 'Analytics', 'Automation', 'Collaboration'], pricing: 'Subscription-based', coverage: ['Network', 'Endpoint', 'Cloud'], integrations: ['SIEM', 'SOAR', 'EDR'], freeTrial: true, rating: 4.2 }, { id: 'alienvault', name: 'AT&T Alien Labs', logo: 'http://static.photos/technology/200x200/9', description: 'Open threat intelligence community and platform', features: ['Threat Intelligence', 'USM Platform', 'Open Source', 'Community'], pricing: 'Freemium', coverage: ['Network', 'Endpoint', 'Cloud'], integrations: ['SIEM', 'USM', 'OSSIM'], freeTrial: true, rating: 4.0 }, { id: 'wiz', name: 'Wiz', logo: 'http://static.photos/technology/200x200/50', description: 'Cloud security and threat intelligence', features: ['Cloud Security', 'Threat Detection', 'Vulnerability Management', 'Compliance'], pricing: 'Subscription-based', coverage: ['Cloud', 'Container', 'Serverless'], integrations: ['SIEM', 'SOAR', 'CSPM'], freeTrial: true, rating: 4.7 }, { id: 'withsecure', name: 'WithSecure', logo: 'http://static.photos/technology/200x200/51', description: 'Endpoint protection and threat intelligence', features: ['Endpoint Security', 'Threat Intelligence', 'EDR', 'XDR'], pricing: 'Subscription-based', coverage: ['Endpoint', 'Network', 'Cloud'], integrations: ['SIEM', 'SOAR', 'EDR'], freeTrial: true, rating: 4.5 }, { id: 'yeti', name: 'Yeti', logo: 'http://static.photos/technology/200x200/52', description: 'Open-source threat intelligence platform', features: ['Threat Intelligence', 'Malware Analysis', 'IOC Management', 'Collaboration'], pricing: 'Open Source', coverage: ['Network', 'Endpoint', 'Malware'], integrations: ['SIEM', 'SOAR', 'MISP'], freeTrial: true, rating: 4.2 }, { id: 'zerofox', name: 'ZeroFOX', logo: 'http://static.photos/technology/200x200/53', description: 'Digital risk protection platform', features: ['Social Media Protection', 'Threat Intelligence', 'Brand Protection', 'Fraud Detection'], pricing: 'Enterprise', coverage: ['Social Media', 'Web', 'Dark Web'], integrations: ['SIEM', 'SOAR', 'TIPS'], freeTrial: false, rating: 4.4 } ]; // Sort vendors alphabetically by name vendors.sort((a, b) => a.name.localeCompare(b.name)); // Selected vendors for comparison let selectedVendors = []; // DOM elements const vendorGrid = document.getElementById('vendor-grid'); const comparisonBody = document.getElementById('comparison-body'); const compareBtn = document.getElementById('compare-btn'); const clearBtn = document.getElementById('clear-btn'); const vendorModal = document.getElementById('vendor-modal'); const closeModal = document.getElementById('close-modal'); const modalTitle = document.getElementById('modal-title'); const modalContent = document.getElementById('modal-content'); // Initialize the page document.addEventListener('DOMContentLoaded', () => { renderVendorGrid(); setupEventListeners(); }); // Render all vendors in the grid function renderVendorGrid() { vendorGrid.innerHTML = ''; vendors.forEach(vendor => { const isSelected = selectedVendors.includes(vendor.id); const card = document.createElement('div'); card.className = `vendor-card bg-white rounded-xl shadow-md overflow-hidden ${isSelected ? 'ring-2 ring-indigo-500' : ''}`; card.innerHTML = `
${vendor.name}

${vendor.name}

${renderStars(vendor.rating)}
${vendor.rating}

${vendor.description}

${vendor.features.map(feature => ` ${feature} `).join('')}
`; vendorGrid.appendChild(card); }); feather.replace(); } // Render stars based on rating function renderStars(rating) { const fullStars = Math.floor(rating); const hasHalfStar = rating % 1 >= 0.5; let stars = ''; for (let i = 0; i < fullStars; i++) { stars += ''; } if (hasHalfStar) { stars += ''; } const emptyStars = 5 - fullStars - (hasHalfStar ? 1 : 0); for (let i = 0; i < emptyStars; i++) { stars += ''; } return stars; } // Set up event listeners function setupEventListeners() { // Compare button click compareBtn.addEventListener('click', () => { if (selectedVendors.length < 2) { alert('Please select at least 2 vendors to compare'); return; } renderComparisonTable(); document.getElementById('comparison').scrollIntoView({ behavior: 'smooth' }); }); // Clear comparison button clearBtn.addEventListener('click', () => { selectedVendors = []; renderVendorGrid(); comparisonBody.innerHTML = ''; }); // Close modal button closeModal.addEventListener('click', () => { vendorModal.classList.add('hidden'); }); // Vendor grid event delegation vendorGrid.addEventListener('click', (e) => { const compareBtn = e.target.closest('.compare-btn'); const detailsBtn = e.target.closest('.view-details-btn'); if (compareBtn) { const vendorId = compareBtn.getAttribute('data-vendor-id'); toggleVendorSelection(vendorId); } if (detailsBtn) { const vendorId = detailsBtn.getAttribute('data-vendor-id'); showVendorDetails(vendorId); } }); } // Toggle vendor selection for comparison function toggleVendorSelection(vendorId) { const index = selectedVendors.indexOf(vendorId); if (index === -1) { selectedVendors.push(vendorId); } else { selectedVendors.splice(index, 1); } renderVendorGrid(); } // Show vendor details in modal function showVendorDetails(vendorId) { const vendor = vendors.find(v => v.id === vendorId); if (!vendor) return; modalTitle.textContent = vendor.name; modalContent.innerHTML = `
${vendor.name}
${renderStars(vendor.rating)}
${vendor.rating}/5.0

${vendor.description}

Features

Coverage

${vendor.coverage.map(cov => ` ${cov} `).join('')}

Integrations

${vendor.integrations.map(int => ` ${int} `).join('')}

Pricing: ${vendor.pricing}

Free Trial: ${vendor.freeTrial ? 'Yes' : 'No'}

`; feather.replace(); vendorModal.classList.remove('hidden'); } // Render the comparison table function renderComparisonTable() { const selected = vendors.filter(v => selectedVendors.includes(v.id)); if (selected.length < 2) { comparisonBody.innerHTML = 'Please select at least 2 vendors to compare'; return; } // Clear previous content comparisonBody.innerHTML = ''; // Update table headers const headerRow = document.querySelector('#comparison thead tr'); headerRow.innerHTML = 'Feature'; selected.forEach(vendor => { headerRow.innerHTML += `
${vendor.name} ${vendor.name}
`; }); // Comparison categories const categories = [ { name: 'Features', key: 'features', type: 'list' }, { name: 'Coverage', key: 'coverage', type: 'list' }, { name: 'Integrations', key: 'integrations', type: 'list' }, { name: 'Pricing Model', key: 'pricing', type: 'text' }, { name: 'Free Trial', key: 'freeTrial', type: 'boolean' }, { name: 'Rating', key: 'rating', type: 'rating' } ]; // Add rows for each comparison category categories.forEach(category => { const row = document.createElement('tr'); row.innerHTML = `${category.name}`; selected.forEach(vendor => { const value = vendor[category.key]; let cellContent = ''; if (category.type === 'list') { cellContent = value.map(item => ` ${item} `).join(''); } else if (category.type === 'boolean') { cellContent = value ? 'Yes' : 'No'; } else if (category.type === 'rating') { cellContent = `
${renderStars(value)}
${value}
`; } else { cellContent = `${value}`; } row.innerHTML += `${cellContent}`; }); comparisonBody.appendChild(row); }); feather.replace(); }