1function createVCardFromAttributes(cardElement) { 2 const lastName = cardElement.getAttribute('data-person-surname') || ''; 3 const firstName = cardElement.getAttribute('data-person-name') || ''; 4 const middleName = cardElement.getAttribute('data-person-patronymic') || ''; 5 6 const workPhone = cardElement.querySelector('.person__phone')?.textContent.trim() || ''; 7 const workEmail = cardElement.querySelector('.person__email')?.textContent.trim() || ''; 8 const workFax = cardElement.querySelector('.person__fax')?.textContent.trim() || ''; 9 console.log(cardElement.querySelector('.person__email')?.textContent.trim()); 10 return { 11 version: '3.0', 12 lastName: lastName, 13 firstName: firstName, 14 middleName: middleName, 15 organization: 'СÐбÐУ', 16 workPhone: workPhone, 17 workFax:workFax, 18 workEmail: workEmail 19 }; 20} 21 22function handleQrClick(event) { 23 event.preventDefault(); 24 const cardElement = event.target.closest('.person-card'); 25 const qrContainer = cardElement.querySelector('.qr-code'); 26 const contactInfo = cardElement.querySelector('.person-contact-info'); 27 28 // Helper function to manage adding/removing classes after animation 29 function fadeOutElement(element, callback) { 30 element.classList.remove('fadeIn', 'animated'); 31 element.classList.add('fadeOut', 'animated'); 32 element.addEventListener('animationend', function onFadeOut() { 33 element.classList.add('hidden'); 34 element.classList.remove('fadeOut', 'animated'); 35 element.removeEventListener('animationend', onFadeOut); 36 if (callback) callback(); 37 }); 38 } 39 40 function fadeInElement(element) { 41 element.classList.remove('hidden', 'fadeOut', 'animated'); 42 element.classList.add('fadeIn', 'animated'); 43 element.addEventListener('animationend', function onFadeIn() { 44 element.classList.remove('fadeIn', 'animated'); 45 element.removeEventListener('animationend', onFadeIn); 46 }); 47 } 48 if (qrContainer.innerHTML.trim() !== '') { 49 if (qrContainer.classList.contains('hidden')) { 50 fadeOutElement(contactInfo, () => fadeInElement(qrContainer)); 51 } else { 52 fadeOutElement(qrContainer, () => fadeInElement(contactInfo)); 53 } 54 } else { 55 const vCard = createVCardFromAttributes(cardElement); 56 qrContainer.innerHTML = qrCode.createVCardQr(vCard, { 57 typeNumber: 16, 58 cellSize: 2, 59 typeElement: 'createSvg', 60 dotsFill: '#32325d' 61 }); 62 63 fadeOutElement(contactInfo, () => fadeInElement(qrContainer)); 64 } 65} 66 67 68function setupQrCodeGeneration() { 69 const qrIcons = document.querySelectorAll('.generate-qr'); 70 qrIcons.forEach(function (icon) { 71 icon.addEventListener('click', handleQrClick); 72 }); 73} 74 75window.onload = function () { 76 setupQrCodeGeneration(); // Setup QR code generation 77};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.