PageSourceSearch

https://nevesta-serial.com/nevest.js?v=1791387562

js nevesta-serial.com collected 2026-10-07 15:39:29 UTC 29,301 bytes, 663 lines download raw bytes

1function showVoteSuccess()
2{
3    document.querySelector('.firstVoteBanner').classList.add('open');
4    setTimeout(function() {
5        document.querySelector('.firstVoteBanner').classList.remove('open');
6    }, 5000);
7}
8function showVoteFailed()
9{
10    document.querySelector('.repeatVoteBanner').classList.add('open');
11    setTimeout(function() {
12        document.querySelector('.repeatVoteBanner').classList.remove('open');
13    }, 5000);
14}
15
16const videoClass = document.querySelector('[data-video-class]') ? document.querySelector('[data-video-class]').dataset.videoClass : 'video';
17
18document.addEventListener('DOMContentLoaded', function () {
19      fetch('/api/select').then((response) => response.json()).then((result) => {
20          result.list.forEach((item) => {
21              document.querySelectorAll('select.choice__select').forEach((select) => {
22                  if(select.name == 'select-season')
23                      return;
24                  select.innerHTML += '<option value="' + item.link + '" data-season="' + item.season + '" data-link="' + item.link + '">' + item.label  + '</option>';
25              });
26              if(document.querySelector('.select__block.select__header ul'))
27                  document.querySelector('.select__block.select__header ul').innerHTML += '<li class="dropdown__list-item" data-episode="' + item.episode + '" data-link="' + item.link + '" title="' + item.title + '">' + item.label + '</li>';
28              if(document.querySelector('.select__block.select__burger ul'))
29                  document.querySelector('.select__block.select__burger ul').innerHTML += '<li class="dropdown__list-item" data-episode="' + item.episode + '" data-link="' + item.link + '" title="' + item.title + '">' + item.label + '</li>';
30          });
31      });
32
33      if (document.querySelector('.info__swiper')) {
34            const headlinerSwiper = new Swiper(".info__swiper", {
35                  slidesPerView: 1,
36                  loop: true,
37                  observer: true,
38                  observeParents: true,
39                  pagination: {
40                        el: ".swiper-info-pagination",
41                        clickable: true
42                  },
43            });
44            headlinerSwiper.on("slideChange", (swiper) => {
45                  document.querySelector('.serial__info-trailer span').innerHTML = 'Трейлер ' + swiper.activeIndex;
46            });
47      }
48
49      if (document.querySelector('.gallery__swiper')) {
50            const gallerySwiper = new Swiper(".gallery__swiper", {
51                  slidesPerView: "auto",
52                  spaceBetween: 16,
53                  navigation: {
54                        nextEl: ".swiper-gallery__next",
55                        prevEl: ".swiper-gallery__prev",
56                  },
57                  breakpoints: {
58                        480: {
59                              spaceBetween: 16,
60                        },
61                        200: {
62                              spaceBetween: 10,
63                        }
64                  }
65            });
66            const galleryModalSwiper = new Swiper(".modal__gallery-swiper", {
67                  slidesPerView: 1,
68                  navigation: {
69                        nextEl: ".swiper-modal-gallery__next",
70                        prevEl: ".swiper-modal-gallery__prev",
71                  },
72                  keyboard: {
73                        enabled: true
74                  },
75                  thumbs: {
76                        swiper: gallerySwiper
77                  },
78            });
79            galleryModalSwiper.on("keyPress", (swiper, keyCode) => {
80                  switch (keyCode) {
81                        case 38:
82                            swiper.slidePrev();
83                            break;
84                       case 40:
85                            swiper.slideNext();
86                            break;
87                  }
88            });
89      }
90
91      if (document.querySelector('.actors__swiper')) {
92            const actorsSwiper = new Swiper(".actors__swiper", {
93                  slidesPerView: "auto",
94                  spaceBetween: 12,
95                  observer: true,
96                  observeParents: true,
97                  navigation: {
98                        nextEl: ".swiper-actors__next",
99                        prevEl: ".swiper-actors__prev",
100                  },
101            });
102      }
103
104      if (document.querySelector('.recommend__swiper')) {
105            const actorsSwiper = new Swiper(".recommend__swiper", {
106                  slidesPerView: "auto",
107                  spaceBetween: 12,
108                  observer: true,
109                  observeParents: true,
110                  navigation: {
111                        nextEl: ".swiper-recommend__next",
112                        prevEl: ".swiper-recommend__prev",
113                  },
114            });
115      }
116
117      if (document.querySelector('.series__swiper')) {
118            const seriesSwiper = new Swiper(".series__swiper", {
119                  slidesPerView: 1,
120                  loop: true,
121                  observer: true,
122                  observeParents: true,
123                  pagination: {
124                        el: ".swiper-series-pagination",
125                        clickable: true
126                  },
127            });
128      }
129
130      var videoSwiper = null;
131      if (document.querySelector('.' + videoClass + '__swiper')) {
132            videoSwiper = new Swiper("." + videoClass + "__swiper", {
133                  slidesPerView: "auto",
134                  spaceBetween: 10,
135                  observer: true,
136                  observeParents: true,
137                  navigation: {
138                        nextEl: ".swiper-" + videoClass + "__next",
139                        prevEl: ".swiper-" + videoClass + "__prev",
140                  },
141            });
142      }
143
144      function slideSwiperToActive(swiper)
145      {
146            var activeIndex = 0;
147            document.querySelectorAll('.' + videoClass + '__swiper .swiper-slide').forEach((item, index) => { 
148                if(item.classList.contains('active'))
149                    activeIndex = index;
150            });
151            if((activeIndex - 3) >= 0)
152               activeIndex = activeIndex - 3;
153            else if((activeIndex - 2) >= 0)
154               activeIndex = activeIndex - 2;
155            else if((activeIndex - 1) >= 0)
156               activeIndex = activeIndex - 1;
157            if(activeIndex > (document.querySelectorAll('.' + videoClass + '__swiper .swiper-slide').length - 7))
158               activeIndex = document.querySelectorAll('.' + videoClass + '__swiper .swiper-slide').length - 7;
159            swiper.slideTo(activeIndex);
160      }
161
162      // Меню бургер
163      const menuOpen = document.querySelector('.header__menu')
164      if (menuOpen) {
165            const mobileMenu = document.querySelector('.menu__burger')
166            const menuClose = document.querySelector('.menu__burger-close')
167
168            menuOpen.addEventListener('click', function () {
169                  mobileMenu.classList.add('active')
170            })
171
172            menuClose.addEventListener('click', function () {
173                  mobileMenu.classList.remove('active')
174            })
175      };
176
177      // Появление блока при скролле
178      const videoFixed = document.querySelector('.' + videoClass + '__fixed')
179      if (videoFixed) {
180            window.addEventListener('scroll', function () {
181                  if (window.scrollY > 550) {
182                        videoFixed.classList.add('active')
183                  } else {
184                        videoFixed.classList.remove('active')
185                  }
186            })
187      }
188
189      // Озвучки
190      [].forEach.call(
191            document.querySelectorAll('[data-url-player]'),
192            (btnPlayer) => {
193                  btnPlayer.addEventListener('click', (e) => {
194                        e.preventDefault();
195                        document.querySelectorAll('[data-url-player]').forEach((item) => {
196                          item.classList.remove('active');
197                        });
198                        let player = btnPlayer.getAttribute('data-url-player');
199                        const image = btnPlayer.getAttribute('data-img');
200                        const iframe = document.querySelector('#video iframe');
201                        if(image)
202                              player += '&img=' + image;
203                        btnPlayer.classList.add('active');
204                        if (iframe) {
205                              iframe.setAttribute('src', player)
206                        }
207                  });
208            });
209
210
211      // Модалки
212      [].forEach.call(
213            document.querySelectorAll('[data-modal]'),
214            (btnModal) => {
215                  btnModal.addEventListener('click', (e) => {
216                        e.preventDefault();
217                        const href = btnModal.getAttribute('data-modal');
218                        const modal = document.querySelector(href);
219                        if (modal) {
220                              modal.classList.add('active')
221                        }
222                  });
223            });
224
225          document.addEventListener('click', function(e) {
226		if(!e.target.closest('.modal__close'))
227		    return;
228
229                e.preventDefault();
230                const modal = e.target.closest('.modal');
231                if (modal) {
232                     modal.classList.remove('active');
233                     modal.querySelectorAll('iframe').forEach((iframe) => {
234                         let src = iframe.src;
235                         iframe.src = '';
236                         iframe.src = src;
237                     });
238                }
239            });
240
241      window.onclick = function (event) {
242            let target = event.target
243            let modals = document.querySelectorAll('.modal')
244            modals.forEach(function (item) {
245                  if (target === item) {
246                        item.classList.remove('active');
247                        item.querySelectorAll('iframe').forEach((iframe) => {
248                            let src = iframe.src;
249                            iframe.src = '';
250                            iframe.src = src;
251                        });
252                  }
253            })
254      }
255
256      // Селекты
257      let wrapper = document.querySelectorAll('.select__block-wrapper');
258      if (wrapper) {
259            wrapper.forEach(function (dropDownWrapper) {
260
261                  const buttonDropdown = dropDownWrapper.querySelector('.dropdown__button');
262                  const listDropdown = dropDownWrapper.querySelector('.dropdown__list-wrapper');
263                  const itemsDropdown = listDropdown.querySelectorAll('.dropdown__list-item');
264
265                  // Клик по кнопке. Открыть/закрыть select
266                  buttonDropdown.addEventListener('click', function () {
267                        listDropdown.classList.toggle('dropdown__list-visible');
268                        buttonDropdown.classList.toggle('active')
269                  })
270
271                  // Выбор элемента списка. Запомнить выбранное значение. Закрыть дропдаун
272	          document.addEventListener('click', function(e) {
273			if(!e.target.closest('.select__block-wrapper li'))
274			    return;
275
276                        if(e.target.dataset.link)
277                            document.location.href = e.target.dataset.link;
278                  });
279
280
281                  itemsDropdown.forEach(function (listItem) {
282                        listItem.addEventListener('click', function (e) {
283                              if (e.target.tagName !== 'INPUT') {
284                                    buttonDropdown.innerText = this.innerText;
285                                    document.querySelector("select.choice__select").value = this.dataset.value;
286                                    listDropdown.classList.remove('dropdown__list-visible');
287                                    if(this.dataset.link)
288                                        document.location.href = this.dataset.link;
289                              }
290
291                        })
292                  })
293
294                  // Клик снаружи дропдауна закрывает дропдаун
295                  document.addEventListener('click', function (e) {
296                        if (e.target !== buttonDropdown && e.target.tagName !== 'INPUT') {
297                              listDropdown.classList.remove('dropdown__list-visible');
298                              buttonDropdown.classList.remove('active')
299                        }
300                  })
301
302                  // Нажатие Tab или Escape закрывает дропдаун
303                  document.addEventListener('keydown', function (e) {
304                        if ((e.key === 'Escape') || (e.key === 'Tab')) {
305                              listSelect.classList.remove('dropdown__list-visible');
306                              buttonDropdown.classList.remove('active')
307                        }
308                  })
309            });
310      }
311
312      if(document.querySelector('.choice__select-series') || document.querySelector('.choice__select-burger'))
313      {
314          document.addEventListener('click', function(e) {
315		if(!e.target.closest('.choice__select-series, .choice__select-burger'))
316		    return;
317
318		document.querySelectorAll('.choice__select-series, .choice__select-burger').forEach(function(item) {
319		    item.addEventListener('change', function(e) {
320	                if(e.target.value)
321                            document.location.href = e.target.value;
322                    });
323                });
324          });
325      }
326      if(document.querySelector('.choice__select-episodes[name="select-series"]'))
327      {
328          document.querySelectorAll('.choice__select-episodes[name="select-series"]').forEach(function(item) {
329		  item.addEventListener('change', function(e) {
330	              if(e.target.value)
331                           document.location.href = e.target.value;
332                  });
333          });
334      }
335
336      if(document.querySelector('.select__seasons .choice__select-episodes'))
337      {
338          document.querySelector('.select__seasons .choice__select-episodes').addEventListener('change', function(e) {
339              let season = e.target.value;
340              if(season != 'all')
341                  document.querySelectorAll('.select__series select.choice__select-episodes option').forEach(function(option) { option.hidden = true; });
342              else
343                  document.querySelectorAll('.select__series select.choice__select-episodes option').forEach(function(option) { option.hidden = false; });
344              document.querySelectorAll('.select__series select.choice__select-episodes option[data-season="' + season + '"]').forEach(function(option) { option.hidden = false; });
345          });
346      }
347
348      if(document.querySelector('.episode-input'))
349      {
350          document.querySelector('.episode-input').addEventListener('keyup', function(e) {
351              let number = e.target.value;
352              if(number > 0)
353              {
354                  this.closest('ul').querySelectorAll('.dropdown__list-item').forEach(function(option) { option.hidden = true; });
355                  this.closest('ul').querySelectorAll('.dropdown__list-item[data-episode^="' + number + '"]').forEach(function(option) { option.hidden = false; });
356              } else {
357                  this.closest('ul').querySelectorAll('.dropdown__list-item').forEach(function(option) { option.hidden = false; });
358              }
359          });
360      }
361
362      if(document.querySelector('.menu__burger-nav__item .info-link'))
363      {
364          document.querySelector('.menu__burger-nav__item .info-link').addEventListener('click', function(e) {
365              document.querySelector('.menu__burger').classList.remove('active');
366          });
367      }
368
369      if(document.querySelector('[data-episode-seasons]'))
370      {
371	setTimeout(function() {
372          let season = document.querySelector('.active[data-season]').dataset.season;
373          let episode = document.location.pathname.substring(1);
374          fetch('/api/episodes?season=' + season + '&episode=' + episode).then((response) => response.json()).then((result) => {
375              if(result.list)
376              {
377                 document.querySelector('[data-episode-seasons] .swiper-wrapper').innerHTML = result.list;
378                 videoSwiper.updateSlides();
379                 slideSwiperToActive(videoSwiper);
380              }
381          });
382	}, 6000);
383      }
384
385      if(document.querySelector('.all_series_btn'))
386      {
387          document.querySelector('.all_series_btn').addEventListener('click', function(e) {
388              let page = e.target.dataset.page;
389              let sort = window.location.search.match(/(\?|&)sort\=([^&]*)/) ? decodeURIComponent(window.location.search.match(/(\?|&)sort\=([^&]*)/)[2]) : '';
390              fetch('/api/all?page=' + page + '&sort=' + sort).then((response) => response.json()).then((result) => {
391                  if(result.html)
392                      document.querySelector('.series__list').innerHTML += result.html;
393                  if(result.load_more)
394                      e.target.dataset.page = Number(page) + 1;
395                  else
396                       e.target.remove();
397                  //adjustNamesToFit();
398              });
399          });
400      }
401
402      if(document.querySelector('.close_menu_btn'))
403      {
404          document.querySelector('.close_menu_btn').addEventListener('click', function(e) {
405              document.querySelector('.menu__burger').classList.remove('active');
406          });
407      }
408      if(document.querySelector('.swiper-trailer__next') || document.querySelector('.swiper-trailer__prev'))
409      {
410          document.querySelectorAll('.swiper-trailer__next, .swiper-trailer__prev').forEach((item) => {
411              item.addEventListener('click', function(e) {
412                  document.querySelectorAll('#fragments iframe, #trailer iframe').forEach((iframe) => {
413                      let src = iframe.src;
414                      iframe.src = '';
415                      iframe.src = src;
416                  });
417              });
418          });
419      }
420
421      if(document.querySelector('.description_btn') && (document.location.pathname == '/'))
422      {
423          document.querySelector('.description_btn').addEventListener('click', function(e) {
424              e.preventDefault();
425              const offsetPosition = document.getElementById("description").offsetTop - document.querySelector('header').offsetHeight - 10 - window.pageYOffset;
426              window.scrollBy({
427                  top: offsetPosition,
428                  behavior: 'smooth'
429              });
430          });
431      }
432
433      if(document.location.hash == '#description')
434      {
435          setTimeout(function() {
436              const offsetPosition = document.getElementById("description").offsetTop - document.querySelector('header').offsetHeight - 10 - window.pageYOffset;
437              window.scrollBy({
438                  top: offsetPosition,
439                  behavior: 'smooth'
440              });
441          }, 1000);
442      }
443
444      if((document.querySelectorAll('.' + videoClass + '__translation').length > 0) && document.location.hash)
445      {
446          const hashtag = document.location.hash.substr(1);
447          if(document.querySelector('.' + videoClass + '__translation[data-hash="' + hashtag + '"]'))
448              document.querySelector('.' + videoClass + '__translation[data-hash="' + hashtag + '"]').click();
449      }
450
451
452
453      if(document.querySelector('.rating-area'))
454      {
455          document.querySelectorAll('.rating-area .star').forEach(function(area) {
456              area.addEventListener('click', function(e) {
457                  let type = this.dataset.type;
458                  let rate = Number(this.dataset.rate);
459                  let id = Number(this.dataset.id);
460                  if(type == 'serial')
461                  {
462                      fetch('/api/vote/serial?value=' + rate).then((response) => response.json()).then((result) => {
463                          document.querySelector('.firstVoteBanner').classList.remove('open');
464                          document.querySelector('.repeatVoteBanner').classList.remove('open');
465                          if(result.rating > 0)
466                          {
467                              showVoteSuccess();
468                              document.querySelector('.firstVoteBanner').classList.add('open');
469                              if(result.data)
470                              {
471                                  this.closest('.info__rating-row').querySelector('.info__rating-number').innerHTML = result.votes + ' голосов(-а)';
472                                  let shouldSkip = false;
473                                  this.closest('.info__rating-row').querySelectorAll('[type=radio]').forEach(function(radio) {
474                                      if(shouldSkip)
475                                          return;
476                                      let label = document.querySelector('label[for="' + radio.id + '"]');
477                                      if(Number(label.dataset.rate) <= result.rating)
478                                      {
479                                          radio.checked = true;
480                                          shouldSkip = true;
481                                      } else
482                                          radio.checked = false;
483                                  });
484                              }
485                          } else {
486                              showVoteFailed();
487                          }
488                      });
489                  } else if(type == 'season') {
490                      fetch('/api/vote/season?value=' + rate + '&id=' + id).then((response) => response.json()).then((result) => {
491                          document.querySelector('.firstVoteBanner').classList.remove('open');
492                          document.querySelector('.repeatVoteBanner').classList.remove('open');
493                          if(result.rating > 0)
494                          {
495                              showVoteSuccess();
496                              if(result.data)
497                              {
498                                  this.closest('.info__rating-row').querySelector('.info__rating-number').innerHTML = result.votes + ' голосов(-а)';
499                                  let shouldSkip = false;
500                                  this.closest('.info__rating-row').querySelectorAll('[type=radio]').forEach(function(radio) {
501                                      if(shouldSkip)
502                                          return;
503                                      let label = document.querySelector('label[for="' + radio.id + '"]');
504                                      if(Number(label.dataset.rate) <= result.rating)
505                                      {
506                                          radio.checked = true;
507                                          shouldSkip = true;
508                                      } else
509                                          radio.checked = false;
510                                  });
511                              }
512                          } else {
513                              showVoteFailed();
514                          }
515                      });
516                  } else if(type == 'episode') {
517                      fetch('/api/vote/episode?value=' + rate + '&id=' + id).then((response) => response.json()).then((result) => {
518                          document.querySelector('.firstVoteBanner').classList.remove('open');
519                          document.querySelector('.repeatVoteBanner').classList.remove('open');
520                          if(result.rating > 0)
521                          {
522                              showVoteSuccess();
523                              if(result.data)
524                              {
525                                  this.closest('.' + videoClass + '__rating-row').querySelector('.' + videoClass + '__rating-number').innerHTML = result.votes + ' голосов(-а)';
526                                  let shouldSkip = false;
527                                  this.closest('.' + videoClass + '__rating-row').querySelectorAll('[type=radio]').forEach(function(radio) {
528                                      if(shouldSkip)
529                                          return;
530                                      let label = document.querySelector('label[for="' + radio.id + '"]');
531                                      if(Number(label.dataset.rate) <= result.rating)
532                                      {
533                                          radio.checked = true;
534                                          shouldSkip = true;
535                                      } else
536                                          radio.checked = false;
537                                  });
538                             }
539                          } else {
540                              showVoteFailed();
541                          }
542                      });
543		   }
544               });
545          });
546      }
547
548      if(document.querySelector('#info.serial__info'))
549      {
550          setTimeout(function() {
551              fetch('/api/trailer').then((response) => response.json()).then((result) => {
552                  document.querySelector('section#info').insertAdjacentHTML('afterEnd', result.html);
553if (document.querySelector('.modal__trailer-swiper')) {
554            const trailerSwiper = new Swiper(".modal__trailer-swiper", {
555                  slidesPerView: 1,
556                  pagination: {
557                        el: ".swiper-trailer-pagination",
558                        clickable: true
559                  },
560                  keyboard: {
561                        enabled: true
562                  },
563                  navigation: {
564                        nextEl: ".swiper-trailer__next",
565                        prevEl: ".swiper-trailer__prev",
566                  },
567            });
568            trailerSwiper.on("keyPress", (swiper, keyCode) => {
569                  switch (keyCode) {
570                        case 38:
571                            swiper.slidePrev();
572                            break;
573                       case 40:
574                            swiper.slideNext();
575                            break;
576                  }
577            });
578            trailerSwiper.on("slideChange", (swiper) => {
579                  if(document.querySelectorAll('.serial__info-trailer span').length > 1)
580                       document.querySelectorAll('.serial__info-trailer span')[1].innerHTML = 'Трейлер ' + (swiper.activeIndex + 1);
581            });
582      }
583              });
584          }, 4000);
585      }
586})
587
588function adjustNamesToFit() {
589    const containers = document.querySelectorAll('.series__small-item__names');
590
591    containers.forEach(container => {
592        container.querySelectorAll('.ellipsis').forEach(ellipsis => ellipsis.remove());
593
594        let names = container.querySelectorAll('.series__small-item__name');
595        names.forEach(name => {
596            name.classList.remove('show');
597            name.style.visibility = 'hidden';
598        });
599
600        let containerWidth = container.offsetWidth - 40;
601        let usedWidth = 0;
602        let lastIndexToFit = -1;
603
604        names.forEach((name, index) => {
605            name.style.visibility = 'visible';
606            usedWidth += name.offsetWidth;
607            if (usedWidth <= containerWidth) {
608                lastIndexToFit = index;
609                name.classList.add('show');
610            } else {
611                name.style.visibility = 'hidden';
612                return false;
613            }
614        });
615
616        if (lastIndexToFit < names.length - 1 && lastIndexToFit >= 0) {
617            const ellipsis = document.createElement('div');
618            ellipsis.textContent = '';//'...';
619            ellipsis.className = 'ellipsis show';
620            ellipsis.style.visibility = 'visible';
621            if (names[lastIndexToFit + 1]) {
622                names[lastIndexToFit + 1].insertAdjacentElement('beforebegin', ellipsis);
623            } else {
624                container.appendChild(ellipsis);
625            }
626        }
627    });
628}
629
630
631//window.onload = adjustNamesToFit;
632//window.onresize = adjustNamesToFit;
633
634var scrollableElement = document.querySelector('.' + videoClass + '__translations_container');
635var isDown = false;
636var startX;
637var scrollLeft;
638
639if(scrollableElement)
640{
641scrollableElement.addEventListener('mousedown', function(e) {
642    isDown = true;
643    startX = e.pageX - scrollableElement.offsetLeft;
644    scrollLeft = scrollableElement.scrollLeft;
645    e.preventDefault();
646});
647
648scrollableElement.addEventListener('mouseleave', function() {
649    isDown = false;
650});
651
652scrollableElement.addEventListener('mouseup', function() {
653    isDown = false;
654});
655
656scrollableElement.addEventListener('mousemove', function(e) {
657    if(!isDown) return;
658    e.preventDefault();
659    var x = e.pageX - scrollableElement.offsetLeft;
660    var walk = (x - startX) * 3;
661    scrollableElement.scrollLeft = scrollLeft - walk;
662});
663}

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.