PageSourceSearch

https://tygodnikdzierzoniowski.pl/wp-content/plugins/features-of-local-websites/includes/tooltip/tooltip.js

js tygodnikdzierzoniowski.pl collected 2026-10-02 23:33:02 UTC 27,335 bytes, 333 lines download raw bytes

1document.addEventListener('DOMContentLoaded', function () {
2    var tooltipContents = {
3        'job-tooltip-homepage-data': '<p>Kolejność ogłoszeń o pracę w powyższych wynikach wyszukiwania jest uzależniona od daty publikacji ogłoszenia na stronie naszego partnera <a href="https://www.careerjet.pl/" target="_blank">www.careerjet.pl</a> dla lokalizacji [city-name] o ustalonym zasięgu do [job-offers-location-range] km.</p><br><p>Wyjątkiem są płatne oferty promowane w naszym serwisie znajdujące się ponad wynikami wyszukiwania pochodzącymi ze strony naszego partnera <a href="https://www.careerjet.pl/" target="_blank">www.careerjet.pl</a>.</p>',
4        'job-offers-single-tooltip': '<p>Pracodawca wykupił płatne ogłoszenie o pracę w serwisie [domain-name].</p>',
5        'job-offers-praca-tooltip': '<p>Pracodawca wykupił płatne ogłoszenie o pracę w serwisie [domain-name], dlatego oferta znajduję się wyżej w wynikach wyszukiwania.</p>',
6        'job-offers-homepage-tooltip': '<p>Pracodawca wykupił płatne ogłoszenie o pracę w serwisie [domain-name], dlatego oferta znajduję się wyżej w wynikach wyszukiwania.</p>',
7        'job-tooltip-data': '<p>Kolejność ogłoszeń o pracę w poniższych wynikach wyszukiwania jest uzależniona od daty publikacji ogłoszenia na stronie naszego partnera <a href="https://www.careerjet.pl/" target="_blank">www.careerjet.pl</a> (<a href="#job-tooltip-source-data">Więcej informacji o źródle danych.</a>) dla lokalizacji [city-name] o ustalonym zasięgu do [job-offers-location-range] km.</p><br><p>Wyjątkiem są płatne oferty promowane w naszym serwisie znajdujące się ponad wynikami wyszukiwania pochodzącymi ze strony naszego partnera <a href="https://www.careerjet.pl/" target="_blank">www.careerjet.pl</a>.</p>',
8        'job-tooltip-source-data': '<p>Powyższe oferty o pracę pochodzą z systemu naszego partnera i są pobierane poprzez <a href="https://pl.wikipedia.org/wiki/Interfejs_programowania_aplikacji" target="_blank">interfejs programistyczny aplikacji</a>. Wydawca serwisu nie jest właścicielem powyższych ofert pracy (z wyjątkiem płatnych ofert promowanych zatwierdzonych przez redakcje serwisu) i nie odpowiada za ich treści. Za moderację ogłoszeń odpowiada firma Careerjet Ltd.</p>',
9        'kamery-image-display': '<p>Po kliknięciu w powyższy odtwarzacz użytkownik zostanie przekierowany do strony <a href="[source-url]" target="_blank">[source-url]</a>, gdzie znajduje się docelowy odtwarzacz z kamerami na żywo. Oznacza to, że na naszej stronie nie ma umieszczonego odtwarzacza kamer. Strona [page-url-kamery] udostępnia jedynie odnośnik do zewnętrznej strony z odtwarzaczem. Wydawca serwisu [domain-name] nie jest właścicielem kamer, a jedynie udostępnia ich Internetową lokalizację.</p>',
10        'kamery-image-broken-display': '<p>Oznacza to, że obecnie na naszej stronie nie udostępniamy odnośnika do zewnętrznej strony z działającym odtwarzaczem z widokiem z kamer na żywo.</p>',
11        'ogloszenia-tooltip': '<p>Poniższa sekcja prezentuje przykładowe archiwalne ogłoszenia.</p><br><p>W poniższych wynikach wyszukiwania nie znajdują się aktualne ogłoszenia pochodzące z systemu ogłoszeń. Oznacza to, że w tej sekcji nie umieszczamy ogłoszeń użytkowników dodanych do systemu ogłoszeń.</p><br><p>Jest to wyłącznie demonstracyjna strona, która kieruje do docelowego systemu ogłoszeń. Kliknięcie w jakiekolwiek poniższe przykładowe ogłoszenie przekierowuje użytkownika na stronę główną naszego systemu ogłoszeń.</p>',
12        'system-ogloszen-tooltip': '<p>Ogłoszenia zamieszczone na niniejszej stronie pochodzą z systemu tablicy ogłoszeniowej OfferCloud, należącego do firmy OfferCloud Sp. z o.o, z siedzibą przy ul. Bukszpanowa 4/3, 20-810 Lublin, NIP: 9462699513 / KRS: 0000856744.</p><br><p>Wydawca serwisu [domain-name] nie jest właścicielem ogłoszeń i nie odpowiada za ich moderację oraz treść ogłoszeń. Za akceptację i moderację ogłoszeń odpowiada firma OfferCloud Sp. z o.o.</p><br><p>W przypadku jakichkolwiek pytań, wątpliwości lub potrzeby kontaktu w sprawie ogłoszeń, prosimy o bezpośredni kontakt z firmą OfferCloud Sp. z o.o. za pomocą <a href="https://offercloud.pl/kontakt/" target="_blank">formularza kontaktowego</a> na ich stronie.</p>',
13        'wiadomosci-post-tooltip': '<p>Informacje o wydarzeniach, zjawiskach, miejscach i osobach zawarte w artykule mogą być fikcyjne. Oznacza to, że mogą być fikcją literacką i opisywać przeinaczone fakty, które nigdy nie miały i nie będą mieć miejsca. Zbieżność wydarzeń, ulic, imi
13on i nazwisk w artykule może być przypadkowa. Treść artykułu nie jest wiążąca wobec tego, co opisuje. Artykuł nie powinien być traktowany jako źródło wiedzy na dany temat oraz nie powinien być wykorzystywany jako poradnik w określonym celu.</p><br><p>Jeżeli poczujesz się w jakikolwiek sposób urażony treścią artykułu, napisz do nas w tej sprawie. Adres e-mail redakcji znajdziesz w zakładce ‘Kontakt’. Postaramy się odpowiedzieć najszybciej jak to możliwe i przychylnie rozpatrzyć Twoją prośbę o usunięcie treści.</p>',
14        'artykul-sponsorowany-tooltip': '<p>Artykuł, który został opublikowany w serwisie w ramach płatnej współpracy. Oznacza to, że redakcja serwisu [domain-name] zapoznała się z jego treścią i zatwierdziła jego publikację. Redakcja serwisu nie jest autorem treści. Artykuł został dostarczony przez reklamodawcę.</p>',
15        'firmy-lead-tooltip': '<p>Oznacza to, że poniższy ranking został stworzony według ustalonych przez redakcje portalu kryteriów. Prezentuje on firmy z wybranej kategorii tematycznej ([data-query]) dostępne w usłudze Google Maps w określonej lokalizacji geograficznej.</p><br><p>Ranking nie obejmuje wszystkich firm z danej branży ani wszystkich firm z Google Maps w tej lokalizacji. <a href="#jak-powstal-ranking">Więcej na temat tego, jak został ustalony ranking.</a></p>',
16        'firmy-tooltip-top-company': '<p>Redakcja serwisu nie sprawdziła oferty żadnej z poniższych firm osobiście i nie poleca oferty żadnej z poniższych firm. Ranking przedstawia listę najlepszych firm według ustalonych przez redakcje portalu kryteriów. <a href="#jak-powstal-ranking">Więcej na temat tego, jak został ustalony ranking.</a></p>',
17        'firmy-tooltip-more-information': '<p>Powyższe TOP 3 firmy pochodzą z naszego rankingu, który stanowi listę najlepszych firm w danej kategorii według ustalonych przez redakcję kryteriów. <a href="#jak-powstal-ranking">Więcej na temat tego, jak został ustalony ranking.</a></p><br><p>Redakcja serwisu nie sprawdziła oferty żadnej z powyższych firm osobiście i nie poleca oferty żadnej z tych firm.</p>',
18        'nekrologi-tooltip': '<p>Oznacza to, że zamieszczony powyżej nekrolog nie jest prawdziwy, a jest jedynie reprezentatywnym przykładem mającym na celu prezentację użytkownikowi, jak może wyglądać prawdziwy nekrolog w serwisie [domain-name]. Imiona i nazwiska w przykładowych nekrologach są przypadkowe i nie odnoszą się do prawdziwych osób i zdarzeń.</p>',
19        'nekrologi-tooltip-single-post': '<p>Oznacza to, że zamieszczony powyżej nekrolog nie jest prawdziwy, a jest jedynie reprezentatywnym przykładem mającym na celu prezentację użytkownikowi, jak może wyglądać prawdziwy nekrolog w serwisie [domain-name]. Imiona i nazwiska w przykładowych nekrologach są przypadkowe i nie odnoszą się do prawdziwych osób i zdarzeń.</p>',
20        'wizytowki-firm-tooltip-ranking': '<p>Firma wykupiła płatną wizytówkę w serwisie [domain-name], dlatego oferta znajduje się wyżej w wynikach wyszukiwania.</p>',
21        'wizytowki-firm-tooltip-kategoria': '<p>Firma opłaciła wizytówkę w serwisie [domain-name], dlatego jest ona promowana i wyróżniona na tej stronie.</p>',
22        'liczba-opinii-google-tooltip': '<p>Dane zostały pozyskane dnia: [date-download]</p>',
23        'customer-feedback-tooltip': '<p>Przeczytaliśmy opinie klientów na temat firmy w Google my Business i wybraliśmy najczęściej powtarzalne stwierdzenia użytkowników.</p>',
24        'company-profile-trophies': '<p>Firma została wyróżniona w rankingu na [position] pozycji  w [quarter] [year] roku.</p>',
25        'img-info-badge': '<p>To zdjęcie zostało wygenerowane z pomocą sztucznej inteligencji (AI).</p>',
26        'desc-info-badge': '<p>Opis firmy został wygenerowany z użyciem sztucznej inteligencji (AI).</p>',
27        'article-info-badge': '<p>Treść tego artykułu została opracowana z użyciem sztucznej inteligencji (AI) na podstawie materiału źródłowego wskazanego pod artykułem.</p>'
28    };
29
30    var aiBadgeClasses = ['img-info-badge', 'desc-info-badge', 'article-info-badge'];
31
32    function isAiBadge(element) {
33        return aiBadgeClasses.some(function(cls) {
34            return element.classList.contains(cls);
35        });
36    }
37
38    function aiBadgeContent(element) {
39        var badgeClass = aiBadgeClasses.find(function(cls) {
40            return element.classList.contains(cls);
41        });
42
43        return tooltipContents[badgeClass] || '';
44    }
45
46    document.querySelectorAll('.info-icon-container, .trophy, .img-info-badge, .desc-info-badge, .article-info-badge').forEach(function(container) {
47        container.addEventListener('click', function (e) {
48            e.stopPropagation();
49
50            // Toggle behavior for AI badges - second click closes the tooltip
51            if (isAiBadge(this)) {
52                e.preventDefault();
53                var badgeWrapper = this.closest('.img-info-badge-wrapper, .desc-info-badge-wrapper, .article-info-badge-wrapper');
54                if (badgeWrapper && badgeWrapper.querySelector('.tooltip-content')) {
55                    removeExistingTooltips();
56                    return;
57                }
58            }
59
60            removeExistingTooltips();
61
62            var isInsideSlider = !!this.closest('.company-profiles-slider-container');
63
64            var tooltipContentText = '';
65
66            if (isAiBadge(this)) {
67                tooltipContentText = aiBadgeContent(this);
68                this.setAttribute('aria-expanded', 'true');
69            } else if (this.classList.contains('trophy')) {
70                var year = this.getAttribute('data-year');
71                var quarter = this.getAttribute('data-quarter');
72                var position = this.getAttribute('data-position');
73                
74                tooltipContentText = tooltipContents['company-profile-trophies']
75                    .replace('[year]', year)
76                    .replace('[quarter]', quarter)
77                    .replace('[position]', position === 'top1' ? '1' : position === 'top2' ? '2' : '3');
78            } else {
79                var domainName = this.querySelector('.info-icon-svg').getAttribute('data-domain-name');
80                var cityName = this.querySelector('.info-icon-svg').getAttribute('data-city-name');
81                var rankingDate = this.querySelector('.info-icon-svg').getAttribute('data-ranking-date');
82                var dateDownload = this.getAttribute('date-download');
83                var joblocationRange = this.getAttribute('data-job-locat-range');
84                var dataQuery = this.getAttribute('data-query');
85
86                var encodedUrl = this.getAttribute('data-kamery-url');
87                var decodedUrl = encodedUrl ? atob(encodedUrl) : '';
88
89                var currentPageUrl = window.location.href;
90                var cleanUrl = currentPageUrl.replace(/^(https?:\/\/)?(www\.)?/, '');
91
92                var tooltipClass = Array.from(this.classList).find(cls => tooltipContents.hasOwnProperty(cls));
93                tooltipContentText = tooltipContents[tooltipClass] || '';
94
95                tooltipContentText = tooltipContentText.replace('[city-name]', cityName)
96                    .replace('[domain-name]', domainName)
97                    .replace('[ranking-date]', rankingDate)
98                    .replace('[date-download]', dateDownload || '')
99                    .replace('[job-offers-location-range]', joblocationRange)
100                    .replace('[data-query]', dataQuery)
101                    .replace(/\[source-url\]/g, decodedUrl)
102                    .replace(/\[page-url-kamery\]/g, cleanUrl);
103            }
104            
105            var tooltipContent = document.createElement('div');
106            tooltipContent.className = 'tooltip-content';
107            tooltipContent.innerHTML = '<span class="close-tooltip">
107&times;</span>' + tooltipContentText;
108            tooltipContent.style.display = 'block';
109            
110            if (isInsideSlider) {
111                var rect = this.getBoundingClientRect();
112                
113                document.body.appendChild(tooltipContent);
114                
115                tooltipContent.style.position = 'absolute';
116                tooltipContent.style.zIndex = '1000';
117                tooltipContent.style.padding = '10px';
118                tooltipContent.style.maxWidth = '300px';
119                
120                if (this.classList.contains('trophy')) {
121                    var trophiesContainer = this.closest('.company-profile-trophies');
122                    if (trophiesContainer) {
123                        var allTrophies = trophiesContainer.querySelectorAll('.trophy');
124                        if (allTrophies.length > 0) {
125                            var firstTrophyRect = allTrophies[0].getBoundingClientRect();
126                            tooltipContent.style.top = (rect.bottom + window.scrollY - 5) + 'px';
127                            tooltipContent.style.left = (firstTrophyRect.left + window.scrollX) + 'px';
128                        } else {
129                            tooltipContent.style.top = (rect.bottom + window.scrollY - 5) + 'px';
130                            tooltipContent.style.left = (rect.left + window.scrollX) + 'px';
131                        }
132                    } else {
133                        tooltipContent.style.top = (rect.bottom + window.scrollY - 5) + 'px';
134                        tooltipContent.style.left = (rect.left + window.scrollX) + 'px';
135                    }
136                } else {
137                    tooltipContent.style.top = (rect.bottom + window.scrollY - 5) + 'px';
138                    tooltipContent.style.left = (rect.left + window.scrollX) + 'px';
139                }
140                
141                tooltipContent.querySelector('.close-tooltip').addEventListener('click', function(e) {
142                    e.stopPropagation();
143                    if (tooltipContent.parentNode) {
144                        tooltipContent.parentNode.removeChild(tooltipContent);
145                    }
146                });
147                
148                var slider = this.closest('.company-profiles-slider');
149                if (slider) {
150                    var updateTooltipPosition = function() {
151                        var newRect = container.getBoundingClientRect();
152                        
153                        if (container.classList.contains('trophy')) {
154                            var trophiesContainer = container.closest('.company-profile-trophies');
155                            if (trophiesContainer) {
156                                var allTrophies = trophiesContainer.querySelectorAll('.trophy');
157                                if (allTrophies.length > 0) {
158                                    var firstTrophyRect = allTrophies[0].getBoundingClientRect();
159                                    tooltipContent.style.top = (newRect.bottom + window.scrollY - 5) + 'px';
160                                    tooltipContent.style.left = (firstTrophyRect.left + window.scrollX) + 'px';
161                                } else {
162                                    tooltipContent.style.top = (newRect.bottom + window.scrollY - 5) + 'px';
163                                    tooltipContent.style.left = (newRect.left + window.scrollX) + 'px';
164                                }
165                            } else {
166                                tooltipContent.style.top = (newRect.bottom + window.scrollY - 5) + 'px';
167                                tooltipContent.style.left = (newRect.left + window.scrollX) + 'px';
168                            }
169                        } else {
170                            tooltipContent.style.top = (newRect.bottom + window.scrollY - 5) + 'px';
171                            tooltipContent.style.left = (newRect.left + window.scrollX) + 'px';
172                        }
173                    };
174                    
175                    slider.addEventListener('scroll', updateTooltipPosition);
176                    
177                    var sliderContainer = slider.closest('.company-profiles-slider-container');
178                    if (sliderContainer) {
179                        var prevButton = sliderContainer.querySelector('.slider-prev');
180                        var nextButton = sliderContainer.querySelector('.slider-next');
181                        
182                        if (prevButton) prevButton.addEventListener('click', function() {
183                            setTimeout(updateTooltipPosition, 400);
184                        });
185                        
186                        if (nextButton) nextButton.addEventListener('click', function() {
187                            setTimeout(updateTooltipPosition, 400);
188                        });
189                    }
190                }
191            } else {
192                this.parentNode.insertBefore(tooltipContent, this.nextSibling);
193
194                // Keep AI badge tooltips inside the viewport (RWD)
195                if (isAiBadge(this)) {
196                    var viewportMargin = 10;
197                    var tooltipRect = tooltipContent.getBoundingClientRect();
198                    var shift = 0;
199
200                    if (tooltipRect.left < viewportMargin) {
201                        shift = viewportMargin - tooltipRect.left;
202                    } else if (tooltipRect.right > window.innerWidth - viewportMargin) {
203                        shift = (window.innerWidth - viewportMargin) - tooltipRect.right;
204                    }
205
206                    if (shift !== 0) {
207                        tooltipContent.style.transform = 'translateX(' + shift + 'px)';
208                    }
209                }
210
211                tooltipContent.querySelector('.close-tooltip').addEventListener('click', function(e) {
212                    e.stopPropagation();
213                    if (tooltipContent.parentNode) {
214                        tooltipContent.parentNode.removeChild(tooltipContent);
215                    }
216                });
217            }
218        });
219    });
220
221    window.addEventListener('click', function (e) {
222        if (!e.target.closest('.tooltip-content') && !e.target.closest('.trophy') && !e.target.closest('.info-icon-container') && !e.target.closest('.img-info-badge') && !e.target.closest('.desc-info-badge') && !e.target.closest('.article-info-badge')) {
223            removeExistingTooltips();
224        }
225    });
226
227    document.addEventListener('keydown', function (e) {
228        if (e.key === 'Escape') {
229            removeExistingTooltips();
230        }
231    });
232});
233
234function removeExistingTooltips() {
235    document.querySelectorAll('.tooltip-content').forEach(function(content) {
236        if (content.parentNode) {
237            content.parentNode.removeChild(content);
238        }
239    });
240    document.querySelectorAll('.img-info-badge[aria-expanded="true"], .desc-info-badge[aria-expanded="true"], .article-info-badge[aria-expanded="true"]').forEach(function(badge) {
241        badge.setAttribute('aria-expanded', 'false');
242    });
243}
244
245document.addEventListener('DOMContentLoaded', function () {
246    var accordionContainers = document.querySelectorAll(".ranking-information-accordion");
247
248    accordionContainers.forEach(function(container) {
249        container.addEventListener("click", function() {
250            var existingTab = this.nextElementSibling;
251            if (existingTab && existingTab.classList.contains("ranking-information-tab")) {
252                if (existingTab.style.maxHeight !== "0px") {
253                    existingTab.style.maxHeight = "0px";
254                } else {
255                    existingTab.style.maxHeight = existingTab.scrollHeight + "px";
256                }
257            } else {
258                var svgIcon = this.querySelector(".accordion-icon-svg");
259                var dataQuery = svgIcon.getAttribute("data-query");
260                var datageoLat = svgIcon.getAttribute("data-geo-lat");
261                var datageoLon = svgIcon.getAttribute("data-geo-lon");
262                var dataZoom = svgIcon.getAttribute("data-zoom");
263                var dataCity = svgIcon.getAttribute("data-city");
264                var datarankingTop = svgIcon.getAttribute("data-ranking-top");
265                var datarealNumber = svgIcon.getAttribute("data-real-number");
266                
267                var firstTooltipElement = document.querySelector(".liczba-opinii-google-tooltip[date-download]");
268                var rawDate = firstTooltipElement ? firstTooltipElement.getAttribute("date-download") : svgIcon.getAttribute("data-creation-date");
269                
270                var datacreationDate = rawDate;
271                if (rawDate && rawDate.includes('-')) {
272                    var dateParts = rawDate.split(' ')[0].split('-');
273                    if (dateParts.length === 3) {
274                        var year = dateParts[0];
275                        var month = dateParts[1];
276                        var day = dateParts[2];
277                        datacreationDate = day + '.' + month + '.' + year;
278                    }
279                }
280
281                var newTab = document.createElement("div");
282                newTab.className = "ranking-information-tab";
283                newTab.innerHTML = "<div class='ranking-information-html'><p>Ranking powstał na bazie danych o firmach dostępnych w usłudze Google Maps i dotyczy wyników wyszukiwania dla zapytania “" + dataQuery + "“ w lokalizacji określonej współrzędnymi " + datageoLat + ',' + datageoLon + " przy parametrze zoom wynoszącym " + dataZoom + " co odpowiada miejscowości " + dataCity + ".</p><br>" +
284                    "<p>Z otrzymanych wyników wyszukiwania z usługi Google Maps dla zapytania uwzględniliśmy tylko " + datarealNumber + " pierwszych pozycji na liście, wliczając przy tym zduplikowane profile firm, możliwe błędy usługi Google Maps i niepoprawne tematycznie dopasowane firmy względem danego zapytania.</p><br>" +
285                    "<p>Na bazie otrzymanych danych dotyczących liczby opinii i średniej oceny obliczyliśmy dla każdej firmy z otrzymanej listy ‘Ranking Score’ i na bazie jego wyniku dokonaliśmy procesu ustalania rankingu, według poniższych kryteriów:</p>" +
286                    "<ul><li>Firma z wyższym wynikiem ‘Ranking Score’ zajmuje wyższą pozycję w rankingu.</li>" +
287                    "<li>Pierwszeństwo w rankingu mają firmy, które w adresie zawierają miejscowość " + dataCity + ". Oznacza to, że w pierwszej kolejności na liście będą firmy, które najtrafniej odpowiadają danej lokalizacji, o ile występują.</li>" +
288                    "<li>Firmy niezawierające w adresie miejscowości " + dataCity + " mogą występować w rankingu, ale tylko wtedy gdy brakuje firm z trafną lokalizacją wymaganych do utworzenia rankingu. Natomiast nigdy nie mogą być wyżej nad wynikami, które posiadają w adresie trafną lokalizację, o ile takie wyniki istnieją.</li></ul>" +
289                    "<p>Ilość pozycji w rankingu (TOP " + datarankingTop + ")  jest ustalona w subiektywny sposób przez redakcję i nie jest w żaden sposób powiązana z żadnym konkretnym schematem ustalania omawianej ilości.</p><br>" +
290                    "<p>Ranking został stworzony dnia: " + datacreationDate + " r., oznacza to, że dane w rankingu mogą się różnić od tych prezentowanych w usłudze Google Maps obecnie.</p><br>" +
291                    "<p><b>Definicje:</b></p>" +
292                    "<ul><li><b>Ranking Score</b> - iloczyn z ilości opinii i oceny firmy z usługi Google Maps z dodatkowo ustaloną wagą.</li>" +
293                    "<li><b>Ocena w naszym rankingu</b> - wartość przypisywana firmie na danej pozycji, obniżana o 0,25 punktu dla każdej kolejnej pozycji w rankingu w stosunku do oceny firmy bezpośrednio wyżej, gdzie pierwsza pozycja otrzymuję wartość 10,00. Parametr ustalony przez naszą redakcję w celu atrakcyjnej prezentacji danych w rankingu.</li>" +
294                    "<li><b>Data Aktualizacji Rankingu</b> - data aktualizacji dokumentu, która nie jest powiązana z datą pozyskania wyników z usługi Google Maps. Oznacza to, że liczba opinii, ocena i inne pozostałe elementy w rankingu, mogą się różnić, a dane w rankingach mogą być częściowo nieaktualne.</li></ul>" +
295                    "<p><b>Poprawność Danych:</b></p>" +
296                    "<ul><li><b>Oferta firm w rankingach</b> - informacje związane z ofertą usług oferowanych przez firmy w rankingu, mogą nie pokrywać się z rzeczywistą ofertą. Opisy ofert firm w rankingu uwzględniają ogólne informacje o ofercie danego typu biznesu (" + dataQuery + ").</li>" +
297                    "<li><b>Dane teleadresowe firm w rankingach</b> - informacje takie jak adres, telefon, itd., pochodzą z usługi Google Maps i zostały przez nas pozyskane w dniu " + datacreationDate + " r., oznacza to, że mogły one ulec zmianie.</li>" +
298                    "<li><b>Dopasowanie firm do danego rankingu</b> - w rankingu mogą znaleźć się nietrafne firmy względem danego typu usługi, które w rzeczywistości nie świadczą danej usługi. Może to wynikać z nietrafnego dopasowania ich do zapytania “" + dataQuery + "” w lokalizacji " + datageoLat + ',' + datageoLon + " z parametrem zoom " + dataZoom + " w usłudze Google Maps.</li></ul>" +
299                    "<p>W razie znalezienia błędów związanych z poprawnością danych w rankingu prosimy o kontakt, w celu naniesienia poprawek. Dziękujemy za wyrozumiałość.</p></div>";
300                this.parentNode.insertBefore(newTab, this.nextSibling);
301
302                setTimeout(() => {
303                    newTab.style.maxHeight = newTab.scrollHeight + "px";
304                }, 10);
305            }
306        });
307    });
308});
309
310document.addEventListener("DOMContentLoaded", function() {
311    function decodeAndSetValue() {
312        const oferteoInputDiv = document.querySelector('.oferteo-input');
313        if (oferteoInputDiv) {
314            const inputElement = oferteoInputDiv.querySelector('input[type="text"]');
315            if (inputElement) {
316                const dataInfo = inputElement.getAttribute('data-info');
317                if (dataInfo) {
318                    const decodedValue = b64DecodeUnicode(dataInfo);
319                    inputElement.setAttribute('value', decodedValue);
320                }
321            }
322        }
323    }
324
325    function b64DecodeUnicode(str) {
326        const binaryString = atob(str);
327        const bytes = Uint8Array.from(binaryString, char => char.charCodeAt(0));
328        const decoder = new TextDecoder('utf-8');
329        return decoder.decode(bytes);
330    }
331
332    decodeAndSetValue();
333});

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.