Untitled
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