PageSourceSearch

https://alatantour.by/tourvisor-lazy.js?v=1

js alatantour.by collected 2026-10-08 10:51:04 UTC 2,789 bytes, 57 lines download raw bytes

1/* =========================================================================
2   Отложенная загрузка нижних модулей Tourvisor
3   =========================================================================
4   На главной три модуля Tourvisor: форма поиска на первом экране,
5   «Минимальные цены» и «Горящие туры» — ниже по странице.
6
7   Каждый требует своего вызова init.js — так устроен сам Tourvisor.
8   Убрать «лишние» подключения нельзя, модули перестанут работать.
9
10   Зато можно не грузить их сразу. Раньше все три стартовали при
11   открытии страницы и тянули за собой десятки запросов к серверам
12   Tourvisor, включая ответы под сотни килобайт. Человек, пришедший
13   почитать про визы, ждал загрузку модулей, которые даже не увидит.
14
15   Теперь нижние модули подключаются, когда посетитель до них
16   доскроллил. Форма поиска на первом экране грузится сразу —
17   она главная и должна быть готова к нажатию.
18
19   Загрузка начинается с запасом в 300 пикселей до появления блока:
20   к моменту, когда человек долистает, модуль обычно уже готов.
21   ========================================================================= */
22
23(function () {
24  'use strict';
25
26  var SRC = 'https://tourvisor.ru/module/init.js';
27
28  var blocks = document.querySelectorAll('[data-tv-lazy]');
29  if (!blocks.length) return;
30
31  /* Браузер без IntersectionObserver — грузим сразу, как раньше.
32     Лучше лишний запрос, чем пустой блок вместо цен. */
33  if (!('IntersectionObserver' in window)) {
34    blocks.forEach(load);
35    return;
36  }
37
38  function load(block) {
39    if (block.dataset.tvLoaded) return;
40    block.dataset.tvLoaded = '1';
41
42    var script = document.createElement('script');
43    script.type = 'text/javascript';
44    script.src = SRC;
45    block.appendChild(script);
46  }
47
48  var observer = new IntersectionObserver(function (entries) {
49    entries.forEach(function (entry) {
50      if (!entry.isIntersecting) return;
51      load(entry.target);
52      observer.unobserve(entry.target);
53    });
54  }, { rootMargin: '300px' });
55
56  blocks.forEach(function (b) { observer.observe(b); });
57})();

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.