PageSourceSearch

https://www.spbstu.ru/local/templates/main/js/libs/qr-vcard-init.js

js spbstu.ru collected 2026-09-24 08:49:25 UTC 2,991 bytes, 77 lines download raw bytes

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.