Untitled

 avatar
unknown
plain_text
6 months ago
7.6 kB
3
Indexable
// Funkcja do dynamicznej podmiany tekstu na podstawie prędkości, nazwy kategorii i konkretnej nazwy produktu
function replaceTextDynamically(selector) {
    var element = document.querySelector(selector);
    if (element) {
        var content = element.textContent;

        // Jeśli nazwa już została zmieniona, nie przetwarzaj dalej
        if (content === "Internet do 450 Mb/s z przyspieszeniem do 600 Mb/s" || content.includes("Abonament komórkowy (GB)") || content.includes("Internet mobilny 5G - Pakiet") || content.includes("Telewizja mobilna - Pakiet")) {
            return;
        }

        var speedPattern = /(300|450|600|900|1,2)/;
        var categoryPattern = /(Stalowy|Złoty|Platynowy|Srebrny)/;
        var mobileDataPattern = /(30 GB|100 GB|10 GB|200 GB)/;
        var mobileInternetPattern = /(100 GB|300 GB|500 GB|1000 GB)/;
        var ottPattern = /(Max|Start|Standard)/;

        var speedMatch = content.includes("INT") ? content.match(speedPattern) : null;
        var categoryMatch = content.match(categoryPattern);
        var mobileDataMatch = content.match(mobileDataPattern);
        var mobileInternetMatch = content.match(mobileInternetPattern);
        var ottMatch = content.match(ottPattern);
        var mvnoMatch = content.includes("MVNO");
        var kIntMobiMatch = content.includes("K Int Mobi");
        var kVectraMatch = content.includes("K Vectra TV Smart");

        var newText = '';

        // Sprawdzenie konkretnej nazwy produktu
        if (content === "K INT 450Mb 8m NK eSales 40283 p") {
            newText = "Internet do 450 Mb/s z przyspieszeniem do 600 Mb/s";
        } else if (speedMatch) {
            var speed = speedMatch[0];
            if (categoryMatch) {
                var category = categoryMatch[0];
                newText = `Internet do ${speed} Mb/s + TV Pakiet ${category}`;
                if (speed === '1,2') {
                    newText = `Internet do 1,2 Gb/s + TV Pakiet ${category}`;
                }
            } else {
                newText = `Internet do ${speed} Mb/s`;
                if (speed === '1,2') {
                    newText = `Internet do 1,2 Gb/s`;
                }
            }
        } else if (mvnoMatch && mobileDataMatch) {
            var dataAmount = mobileDataMatch[0];
            newText = `Abonament komórkowy 5G - Pakiet ${dataAmount}`;
        } else if (kIntMobiMatch && mobileInternetMatch) {
            var internetDataAmount = mobileInternetMatch[0];
            newText = `Internet mobilny 5G - Pakiet ${internetDataAmount}`;
        } else if (kVectraMatch && ottMatch) {
            var ottPackage = ottMatch[0];
            switch (ottPackage) {
                case 'Max':
                    newText = `Telewizja mobilna - Pakiet ${ottPackage} (86 kanałów)`;
                    break;
                case 'Start':
                    newText = `Telewizja mobilna - Pakiet ${ottPackage} (23 kanały)`;
                    break;
                case 'Standard':
                    newText = `Telewizja mobilna - Pakiet ${ottPackage} (53 kanały)`;
                    break;
            }
        }

        // Aktualizacja tekstu tylko jeśli obecna treść jest inna od nowej treści
        if (newText && element.textContent !== newText) {
            element.textContent = newText;
        }

        // Uruchom licznik, jeśli nazwa jest zgodna i licznik jeszcze nie istnieje
        if (content === "K INT 450Mb BZ NK eSales 40527" && !document.querySelector('.counter-element')) {
            initCounter();
        }
    }
}

// Użyj window.onload, aby zapewnić pełne załadowanie strony
window.onload = function() {
    replaceTextDynamically('.basket-summary__title--product');
};

// Opcjonalnie: obserwator dla zmian w DOM (jeśli elementy są dodawane dynamicznie)
var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        mutation.addedNodes.forEach(function(node) {
            if (node.nodeType === Node.ELEMENT_NODE) {
                replaceTextDynamically('.basket-summary__title--product');
            }
        });
    });
});

// Konfiguracja obserwatora: nasłuchujemy na całym dokumencie dla nowych węzłów
observer.observe(document.body, {
    childList: true,
    subtree: true
});

// Alternatywna metoda: okresowe sprawdzanie obecności elementu
var checkExist = setInterval(function() {
    var element = document.querySelector('.basket-summary__title--product');
    if (element) {
        replaceTextDynamically('.basket-summary__title--product');
        clearInterval(checkExist);
    }
}, 100);

// Funkcja inicjalizująca licznik, gdy element się pojawi
function initCounter() {
    const targetElement = document.querySelector("aside.page__aside.data--filled#js-load__summary section.page__section.data--filled header.page__section-title");

    if (targetElement && !document.querySelector('.counter-element')) {
        // Utwórz nowy element dla licznika
        const licznikElement = document.createElement("div");
        licznikElement.classList.add("counter-element");
        styleCounter(licznikElement);    // Dodaj style
        targetElement.parentNode.insertBefore(licznikElement, targetElement); // Wstaw licznik nad sekcją "page__section-title"
        updateCounter(licznikElement);   // Zaktualizuj od razu
        const timer = setInterval(() => updateCounter(licznikElement), 60000); // Aktualizacja co minutę
    }
}

// Funkcja aktualizująca licznik
function updateCounter(element) {
    const now = new Date();
    const endDate = new Date("2024-11-05T23:59:59");
    const remainingTime = endDate - now;

    if (remainingTime <= 0) {
        element.textContent = "Odliczanie zakończone";
        clearInterval(timer);  // Zatrzymaj licznik po zakończeniu
        return;
    }

    // Oblicz dni, godziny, minuty
    const days = Math.floor(remainingTime / (1000 * 60 * 60 * 24));
    const hours = Math.floor((remainingTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    const minutes = Math.floor((remainingTime % (1000 * 60 * 60)) / (1000 * 60));

    // Aktualizacja tekstu licznika z dodaniem "Koniec za:"
    element.textContent = `Koniec za: ${days} dni, ${hours} godz., ${minutes} min.`;
}

// Funkcja stylizująca licznik
function styleCounter(element) {
    element.style.backgroundColor = "#EF2D2D";
    element.style.color = "#FFFFFF";
    element.style.borderRadius = "16px";
    element.style.padding = "6px 8px";
    element.style.fontFamily = "Visuelt-light, sans-serif";
    element.style.fontStyle = "normal";
    element.style.fontWeight = "400";
    element.style.fontSize = "14px";
    element.style.lineHeight = "16px";
    element.style.marginBottom = "10px";
    element.style.textAlign = "center"; // Wycentrowanie tekstu
    element.style.width = "100%"; // Utrzymanie szerokości sekcji
}

// Sprawdzaj co 500ms, czy element z sekcją "page__section-title" się pojawił (zmieniono z 100ms na 500ms)
const checkInterval = setInterval(function() {
    var element = document.querySelector('.basket-summary__title--product');
    if (element && element.textContent === "K INT 450Mb BZ NK eSales 40527") {
        initCounter();
        clearInterval(checkInterval);
    }
}, 500);

// Ustaw limit czasu 10 sekund na zatrzymanie sprawdzania (zmieniono z 6 sekund na 10 sekund)
const stopChecking = setTimeout(() => clearInterval(checkInterval), 10000);
Editor is loading...
Leave a Comment