const generateMalwareMapPins = () => { const malwareMapData = document.querySelector('.malware-map__data'); const malwareMapDataAsJSON = malwareMapData.dataset.malwareMapData; const malwareMapDataAsArray = JSON.parse(malwareMapDataAsJSON); const sortedMalwareMapData = malwareMapDataAsArray.sort((malwareMapDataItem1, malwareMapDataItem2) => { return malwareMapDataItem1.countryName < malwareMapDataItem2.countryName ? -1 : 1; }); if (malwareMapDataAsArray.length > 0) { const malwareMapWrapper = document.querySelector('.malware-map__map-wrapper'); malwareMapDataAsArray.forEach((malwareMapPinData, index, array) => { const malwareMapPinWrapper = document.createElement('div'); malwareMapPinWrapper.classList.add('malware-map__pin-wrapper'); malwareMapPinWrapper.style.cssText = `top: ${malwareMapPinData.positionTop}%; left: ${malwareMapPinData.positionLeft}%;`; malwareMapPinWrapper.dataset.index = index; const malwareMapPin = document.createElement('div'); malwareMapPin.classList.add('malware-map__pin'); malwareMapPin.dataset.index = index; malwareMapPinWrapper.appendChild(malwareMapPin); const malwareMapPinPulse = document.createElement('div'); malwareMapPinPulse.classList.add('malware-map__pin-pulse'); malwareMapPinWrapper.appendChild(malwareMapPinPulse); const malwareMapPinPopup = document.createElement('div'); malwareMapPinPopup.classList.add('malware-map__pin-popup'); malwareMapPinWrapper.appendChild(malwareMapPinPopup); const malwareMapPinPopupCountry = document.createElement('h3'); malwareMapPinPopupCountry.classList.add('malware-map__pin-popup-country'); malwareMapPinPopupCountry.textContent = malwareMapPinData.countryName; malwareMapPinPopup.appendChild(malwareMapPinPopupCountry); if (!!malwareMapPinData.fraudulentTransactions) { const fraudulentTransactionsSection = document.createElement('div'); fraudulentTransactionsSection.classList.add('malware-map__pin-popup-section'); fraudulentTransactionsSection.innerHTML = ` <span class="malware-map__pin-popup-section-name">Fraudulent transactions</span> <span class="malware-map__pin-popup-section-value">${malwareMapPinData.fraudulentTransactions}%</span> `; malwareMapPinPopup.appendChild(fraudulentTransactionsSection); } if (!!malwareMapPinData.gbConsumedByUser) { const gbConsumedByUserSection = document.createElement('div'); gbConsumedByUserSection.classList.add('malware-map__pin-popup-section'); gbConsumedByUserSection.innerHTML = ` <span class="malware-map__pin-popup-section-name">Data consumed by malware/user</span> <span class="malware-map__pin-popup-section-value">${malwareMapPinData.gbConsumedByUser} GB</span> `; malwareMapPinPopup.appendChild(gbConsumedByUserSection); } if (!!malwareMapPinData.malwareInfectedUsers) { const malwareInfectedUsersSection = document.createElement('div'); malwareInfectedUsersSection.classList.add('malware-map__pin-popup-section'); malwareInfectedUsersSection.innerHTML = ` <span class="malware-map__pin-popup-section-name">Malware infected users</span> <span class="malware-map__pin-popup-section-value">${malwareMapPinData.malwareInfectedUsers}</span> `; malwareMapPinPopup.appendChild(malwareInfectedUsersSection); } if (!!malwareMapPinData.lessRevenue) { const lessRevenueSection = document.createElement('div'); lessRevenueSection.classList.add('malware-map__pin-popup-section'); lessRevenueSection.innerHTML = ` <span class="malware-map__pin-popup-section-name">Less revenue</span> <span class="malware-map__pin-popup-section-value">${malwareMapPinData.lessRevenue}€</span> `; malwareMapPinPopup.appendChild(lessRevenueSection); } malwareMapWrapper.appendChild(malwareMapPinWrapper); const malwareMapOutsidePinPopup = malwareMapPinPopup.cloneNode(true); malwareMapOutsidePinPopup.dataset.index = index; malwareMapOutsidePinPopup.classList.add('malware-map__pin-popup_outside'); malwareMapWrapper.appendChild(malwareMapOutsidePinPopup); setTimeout(() => { malwareMapPinWrapper.classList.add('malware-map__pin-wrapper_pulse'); setTimeout(() => { malwareMapPinPulse.classList.add('malware-map__pin-pulse_hidden'); }, 1500); setInterval(() => { if (malwareMapPinPulse.classList.contains('malware-map__pin-pulse_hidden')) { malwareMapPinPulse.classList.remove('malware-map__pin-pulse_hidden'); setTimeout(() => { malwareMapPinPulse.classList.add('malware-map__pin-pulse_hidden'); }, 1500); } }, array.length * 1500); }, index * 1500); }); } };