Untitled
unknown
plain_text
a year ago
8.3 kB
5
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("2024-11-05T23:59:59");
}
// Uruchom nowy licznik dla nowych ofert, jeśli licznik jeszcze nie istnieje
if ((content === "K INT 300Mb + 7m NK eSales 40457" ||
content === "K INT 450Mb + 7m NK eSales 40458" ||
content === "K INT 900Mb + 7m NK eSales 40463") &&
!document.querySelector('.counter-element')) {
initCounter("2024-11-09T23:59:59");
}
}
}
// 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(endDateStr) {
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, new Date(endDateStr)); // Zaktualizuj od razu
const timer = setInterval(() => updateCounter(licznikElement, new Date(endDateStr)), 60000); // Aktualizacja co minutę
licznikElement.dataset.timer = timer; // Przechowuj timer jako atrybut dataset
}
}
// Funkcja aktualizująca licznik
function updateCounter(element, endDate) {
const now = new Date();
const remainingTime = endDate - now;
if (remainingTime <= 0) {
element.textContent = "Odliczanie zakończone";
clearInterval(element.dataset.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("2024-11-05T23:59:59");
clearInterval(checkInterval);
} else if (element && (element.textContent === "K INT 300Mb + 7m NK eSales 40457" ||
element.textContent === "K INT 450Mb + 7m NK eSales 40458" ||
element.textContent === "K INT 900Mb + 7m NK eSales 40463")) {
initCounter("2024-11-09T23:59:59");
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