PageSourceSearch

https://teploobmennik-russia.ru/assets/zavod/js/ajax-catalog.js?v1.1

js teploobmennik-russia.ru collected 2026-10-05 18:08:29 UTC 6,678 bytes, 232 lines download raw bytes

1jQuery(function ($) {
2  var uriNext;
3  var uri1 = "/shipped-ajax";
4  var uri;
5  var iter = 1;
6  let model = 0;
7
8  if ($("body").hasClass("template-18")) {
9    uri1 = "/shipped-ajax";
10  }
11
12  if ($("body").hasClass("template-25")) {
13    uri1 = "/review-ajax";
14  }
15
16  if ($("body").hasClass("template-28")) {
17    uri1 = "/portfolio-ajax";
18  }
19
20  if ($("body").hasClass("template-50")) {
21    uri1 = "/faq-ajax";
22  }
23
24  if ($("body").hasClass("template-52")) {
25    uri1 = "/articles-ajax";
26  }
27
28  if ($("body").hasClass("template-33")) {
29    uri1 = "/teh-ajax";
30  }
31
32  uri = uri1;
33
34  // Первая страница уже отрендерена на сервере (SSR) — не делаем повторный запрос
35  if ($(".wrapper .view-content").length) {
36    initFromServer();
37  } else {
38    startCatalog();
39  }
40
41  $(".bef-select-as-links .form-type-bef-link a").click(function () {
42    $(".bef-select-as-links .form-type-bef-link a").removeClass("active");
43    $(this).addClass("active");
44    let dataValue = $(this).attr("data-id");
45    if (dataValue == 0) {
46      uri = uri1;
47    } else {
48      if (model == 0) {
49        uriNext = "page-review=" + dataValue;
50        uri = uri1 + "?" + uriNext;
51      } else {
52        uriNext = "page-review=" + dataValue;
53        uriNext = uriNext + "&filter_models=" + model;
54        uri = uri1 + "?" + uriNext;
55      }
56    }
57
58    startCatalog(1);
59    startTop();
60    return false;
61  });
62
63  $(".bef-model a:not(.page-list__tag--more)").click(function () {
64    console.log(11);
65    $(".bef-model a").removeClass("active");
66    $(this).addClass("active");
67
68    model = $(this).attr("data-id");
69
70    let dataValue = 0;
71
72    $(".bef-select-as-links .form-type-bef-link a").each(function () {
73      if ($(this).hasClass("active")) {
74        dataValue = $(this).attr("data-id");
75      }
76    });
77
78    if (dataValue == 0) {
79      if (model == 0) {
80        uri = uri1;
81      } else {
82        uriNext = "&filter_models=" + model;
83        uri = uri1 + "?" + uriNext;
84      }
85    } else {
86      if (model == 0) {
87        uriNext = "page-review=" + dataValue;
88        uri = uri1 + "?" + uriNext;
89      } else {
90        uriNext = "page-review=" + dataValue;
91        uriNext = uriNext + "&filter_models=" + model;
92        uri = uri1 + "?" + uriNext;
93      }
94    }
95
96    startCatalog(1);
97    startTop();
98    return false;
99  });
100
101  function startCatalog(clean) {
102    console.log(uri);
103    $("#more").hide();
104
105    $(".wrapper").append(
106      '<div class="ajax_overlay"><div class="ajax_loader"><img src="/assets/zavod/images/renew.svg" alt="" /></div></div>',
107    );
108    $(".wrapper").removeClass("opacity");
109    $.ajax({
110      url: uri,
111      cache: false,
112      success: function (html) {
113        $(".wrapper").find(".ajax_overlay").detach();
114
115        if (clean == 1) {
116          iter = 1;
117          $(".wrapper").html('<div class="inner-' + iter + '"></div>');
118        } else {
119          $(".wrapper").append('<div class="inner-' + iter + '"></div>');
120        }
121        $(".wrapper").addClass("opacity");
122        $(".wrapper")
123          .find(".inner-" + iter)
124          .html(html);
125
126        if (typeof window.fixRutubeLinks === "function") {
127          window.fixRutubeLinks($(".wrapper").find(".inner-" + iter));
128        }
129
130        let pageNext = $(".wrapper")
131          .find(".inner-" + iter)
132          .find(".pagination .next a")
133          .attr("href");
134
135        if (pageNext) {
136          $("#more a").attr("data-next", pageNext);
137          $("#more").show();
138        } else {
139          $("#more a").attr("data-next", "");
140        }
141
142        iter++;
143      },
144    });
145  }
146
147  function initFromServer() {
148    // оборачиваем серверный контент в .inner-1, чтобы "Показать ещё" работало как обычно
149    $(".wrapper").children().wrapAll('<div class="inner-1"></div>');
150    iter = 2;
151    $(".wrapper").addClass("opacity");
152
153    if (typeof window.fixRutubeLinks === "function") {
154      window.fixRutubeLinks($(".wrapper .inner-1"));
155    }
156
157    var nextHref = $(".wrapper .inner-1 .pagination .next a").attr("href");
158    if (nextHref) {
159      var m = nextHref.match(/[?&]page=(\d+)/);
160      var nextPage = m ? m[1] : 2;
161      // data-next должен указывать на ajax-эндпоинт, а не на адрес страницы
162      $("#more a").attr(
163        "data-next",
164        uri1.replace(/^\//, "") + "?page=" + nextPage,
165      );
166      $("#more").show();
167    } else {
168      $("#more a").attr("data-next", "");
169      $("#more").hide();
170    }
171  }
172
173  $("#more").on("click", function () {
174    let pageNext = "/" + $("#more a").attr("data-next");
175    if (pageNext.includes("&_")) {
176      pageNext = pageNext.split("&_");
177      uri = pageNext[0];
178    } else {
179      uri = pageNext;
180    }
181
182    startCatalog();
183    //startTop();
184
185    return false;
186  });
187
188  function startTop() {
189    var topId = $(".wrapper").offset().top - 50;
190    $("body,html").animate({ scrollTop: topId }, 500);
191  }
192});
193
194// RuTube: преобразуем обычные ссылки /video/{id}/ в embed /play/embed/{id}
195(function (global) {
196  function toRutubeEmbed(url) {
197    if (!url || url.indexOf("rutube.ru") === -1) return url;
198    if (url.indexOf("/play/embed/") !== -1) return url;
199    // (?:private\/)? — пропускаем сегмент private у приватных ссылок
200    // shorts/{id} — шортсы, страница шортса во фрейме не открывается (X-Frame-Options)
201    var m = url.match(
202      /rutube\.ru\/(?:video\/(?:private\/)?|shorts\/)([0-9a-zA-Z]+)/,
203    );
204    if (!m) return url;
205    var id = m[1];
206    var q = url.indexOf("?");
207    var query = q !== -1 ? url.slice(q) : "";
208    return "https://rutube.ru/play/embed/" + id + query;
209  }
210
211  // context — DOM-узел или jQuery-объект, в пределах которого искать ссылки
212  function fixRutubeLinks(context) {
213    $("a[data-fancybox][href*='rutube.ru']", context).each(function () {
214      var $a = $(this);
215      var href = $a.attr("href");
216      $a.attr("href", toRutubeEmbed(href));
217      // шортсы вертикальные — окно 9:16 вместо 16:9
218      if (href.indexOf("/shorts/") !== -1) {
219        $a.attr({ "data-width": 405, "data-height": 720 });
220      }
221      if (!$a.attr("data-type")) $a.attr("data-type", "iframe");
222    });
223  }
224
225  // делаем доступной снаружи
226  global.fixRutubeLinks = fixRutubeLinks;
227
228  // обработка ссылок, которые уже есть на странице при первой загрузке
229  $(function () {
230    fixRutubeLinks(document);
231  });
232})(window);

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.