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.