1/* ai-gem-3d.js */ 2// (function () { 3// "use strict"; 4 5// var FACE_COLORS = [ 6// 0x4478ff, 7// 0x8a54ff, 8// 0xff4f4f, 9// 0xf79009, 10// 0x63c909, 11// 0x4478ff, 12// 0x8a54ff, 13// 0xff4f4f, 14// ]; 15 16// function buildGemGeometry(radius) { 17// var geo = new THREE.OctahedronGeometry(radius, 0); 18// geo = geo.toNonIndexed(); 19 20// var posCount = geo.attributes.position.count; 21// var colors = new Float32Array(posCount * 3); 22// var c = new THREE.Color(); 23 24// for (var i = 0; i < posCount; i += 3) { 25// var faceIdx = Math.floor(i / 3); 26// c.set(FACE_COLORS[faceIdx % FACE_COLORS.length]); 27// for (var v = 0; v < 3; v++) { 28// colors[(i + v) * 3] = c.r; 29// colors[(i + v) * 3 + 1] = c.g; 30// colors[(i + v) * 3 + 2] = c.b; 31// } 32// } 33 34// geo.setAttribute("color", new THREE.BufferAttribute(colors, 3)); 35// geo.computeVertexNormals(); 36// return geo; 37// } 38 39// function createGlowSprite(colorStr, size) { 40// var cv = document.createElement("canvas"); 41// cv.width = 256; 42// cv.height = 256; 43// var ctx = cv.getContext("2d"); 44// var g = ctx.createRadialGradient(128, 128, 0, 128, 128, 128); 45// g.addColorStop(0, colorStr); 46// g.addColorStop(0.4, colorStr.replace(",1)", ",0.3)")); 47// g.addColorStop(1, "rgba(0,0,0,0)"); 48// ctx.fillStyle = g; 49// ctx.fillRect(0, 0, 256, 256); 50 51// var tex = new THREE.CanvasTexture(cv); 52// var mat = new THREE.SpriteMaterial({ 53// map: tex, 54// transparent: true, 55// depthWrite: false, 56// depthTest: false, 57// blending: THREE.AdditiveBlending, 58// }); 59// var sprite = new THREE.Sprite(mat); 60// sprite.scale.set(size, size, 1); 61// return sprite; 62// } 63 64// var CSS_SIZES = { 65// sm: { w: 32, h: 36 }, 66// md: { w: 52, h: 58 }, 67// lg: { w: 120, h: 134 }, 68// }; 69 70// var RENDER_MULT = 5; 71 72// function initGem3D(canvas) { 73// try { 74// var size = canvas.getAttribute("data-gem-size") || "sm"; 75// var dim = CSS_SIZES[size] || CSS_SIZES.sm; 76 77// canvas.width = dim.w * RENDER_MULT; 78// canvas.height = dim.h * RENDER_MULT; 79// canvas.style.width = dim.w + "px"; 80// canvas.style.height = dim.h + "px"; 81 82// var renderer = new THREE.WebGLRenderer({ 83// canvas: canvas, 84// alpha: true, 85// antialias: true, 86// }); 87// renderer.setSize(dim.w * RENDER_MULT, dim.h * RENDER_MULT, false); 88// renderer.outputEncoding = THREE.sRGBEncoding; 89 90// var scene = new THREE.Scene(); 91 92// var fov = size === "lg" ? 30 : size === "md" ? 35 : 40; 93// var camZ = size === "lg" ? 4.0 : size === "md" ? 3.8 : 3.5; 94// var camera = new THREE.PerspectiveCamera(fov, dim.w / dim.h, 0.1, 100); 95// camera.position.set(0, 0.12, camZ); 96 97// // Main gem 98// var mainGeo = buildGemGeometry(0.55); 99// var mainMat = new THREE.MeshPhysicalMaterial({ 100// vertexColors: true, 101// roughness: 0.08, 102// metalness: 0.15, 103// clearcoat: 1.0, 104// clearcoatRoughness: 0.03, 105// transparent: true, 106// opacity: 0.95, 107// reflectivity: 0.9, 108// }); 109// var mainGem = new THREE.Mesh(mainGeo, mainMat); 110// mainGem.scale.set(1, 1.35, 1); 111// scene.add(mainGem); 112 113// // Small gem 114// var smallGeo = buildGemGeometry(0.22); 115// var smallMat = new THREE.MeshPhysicalMaterial({ 116// vertexColors: true, 117// roughness: 0.06, 118// metalness: 0.15, 119// clearcoat: 1.0, 120// clearcoatRoughness: 0.03, 121// transparent: true, 122// opacity: 0.92, 123// reflectivity: 0.9, 124// }); 125// var smallGem = new THREE.Mesh(smallGeo, smallMat); 126// smallGem.position.set(0.55, 0.72, 0.1); 127// smallGem.scale.set(1, 1.3, 1); 128// scene.add(smallGem); 129 130// // Glow sprites â additive blending, colored (not white) 131// var mainGlow = createGlowSprite("rgba(120,80,255,1)", 2.0); 132// mainGlow.position.set(0, 0, -0.3); 133// scene.add(mainGlow); 134 135// var smallGlow = createGlowSprite("rgba(255,160,40,1)", 0.9); 136// smallGlow.position.set(0.55, 0.72, -0.1); 137// scene.add(smallGlow); 138 139// // Lighting â strong colored lights 140// scene.add(new THREE.AmbientLight(0xffffff, 0.3)); 141 142// var blueLight = new THREE.PointLight(0x4488ff, 4.0, 14); 143// blueLight.position.set(-2, 1.5, 3); 144// scene.add(blueLight); 145 146// var purpleLight = new THREE.PointLight(0x8855ff, 3.5, 14); 147// purpleLight.position.set(2.5, -0.5, 2.5); 148// scene.add(purpleLight); 149 150// var redLight = new THREE.PointLight(0xff5555, 2.5, 12); 151// redLight.position.set(0, 3, -1); 152// scene.add(redLight); 153 154// var orangeLight = new THREE.PointLight(0xffa500, 2.0, 12); 155// orangeLight.position.set(-1.5, -2, 2); 156// scene.add(orangeLight); 157 158// var greenLight = new THREE.PointLight(0x88ff00, 1.5, 12); 159// greenLight.position.set(2, 0, -2); 160// scene.add(greenLight); 161 162// var keyLight = new THREE.DirectionalLight(0xffffff, 0.8); 163// keyLight.position.set(1, 2, 4); 164// scene.add(keyLight); 165 166// var fillLight = new THREE.DirectionalLight(0xaabbff, 0.4); 167// fillLight.position.set(-2, -1, 2); 168// scene.add(fillLight); 169 170// // Interaction state 171// var state = { 172// rotSpeed: 0.4, 173// targetRotSpeed: 0.4, 174// smallBounce: 0, 175// targetSmallBounce: 0, 176// lightBoost: 1, 177// targetLightBoost: 1, 178// }; 179 180// var baseLights = { blue: 4.0, purple: 3.5, red: 2.5, orange: 2.0, green: 1.5 }; 181 182// var hoverTarget = canvas.closest("a") || canvas.closest("button") || canvas.parentElement; 183// if (hoverTarget) { 184// hoverTarget.addEventListener("mouseenter", function () { 185// state.targetRotSpeed = 1.4; 186// state.targetSmallBounce = 1; 187// state.targetLightBoost = 2.0; 188// }); 189// hoverTarget.addEventListener("mouseleave", function () { 190// state.targetRotSpeed = 0.4; 191// state.targetSmallBounce = 0; 192// state.targetLightBoost = 1; 193// }); 194// } 195 196// var prefersReduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches; 197// var clock = new THREE.Clock(); 198 199// function animate() { 200// requestAnimationFrame(animate); 201// var dt = clock.getDelta(); 202// var t = clock.getElapsedTime(); 203 204// if (prefersReduced) { 205// renderer.render(scene, camera); 206// return; 207// } 208 209// state.rotSpeed += (state.targetRotSpeed - state.rotSpeed) * dt * 3; 210// state.smallBounce += (state.targetSmallBounce - state.smallBounce) * dt * 4; 211// state.lightBoost += (state.targetLightBoost - state.lightBoost) * dt * 3; 212 213// mainGem.rotation.y += state.rotSpeed * dt; 214// mainGem.rotation.x = Math.sin(t * 0.5) * 0.08; 215// mainGem.position.y = Math.sin(t * 0.8) * 0.05; 216 217// smallGem.rotation.y -= state.rotSpeed * 1.3 * dt; 218// smallGem.rotation.z = Math.sin(t * 0.7) * 0.15; 219// smallGem.position.set( 220// 0.55 + state.smallBounce * Math.sin(t * 3.5) * 0.05, 221// 0.72 + state.smallBounce * Math.sin(t * 4) * 0.1, 222// 0.1 223// ); 224 225// mainGlow.position.y = mainGem.position.y; 226// mainGlow.material.opacity = 0.5 + Math.sin(t * 2.0) * 0.1 * state.lightBoost; 227 228// smallGlow.position.x = smallGem.position.x; 229// smallGlow.position.y = smallGem.position.y; 230// smallGlow.material.opacity = 0.4 + Math.sin(t * 2.8) * 0.1 * state.lightBoost; 231 232// blueLight.intensity = baseLights.blue * state.lightBoost; 233// purpleLight.intensity = baseLights.purple * state.lightBoost; 234// redLight.intensity = baseLights.red * state.lightBoost; 235// orangeLight.intensity = baseLights.orange * state.lightBoost; 236// greenLight.intensity = baseLights.green * state.lightBoost; 237 238// renderer.render(scene, camera); 239// } 240 241// animate(); 242// } catch (e) { 243// console.error("ai-gem-3d init error:", e); 244// } 245// } 246 247// function bootAll() { 248// if (typeof THREE === "undefined") { 249// setTimeout(bootAll, 100); 250// return; 251// } 252
253// var canvases = document.querySelectorAll(".ai-gem-3d"); 254// for (var i = 0; i < canvases.length; i++) { 255// if (!canvases[i].dataset.gemInit) { 256// canvases[i].dataset.gemInit = "1"; 257// initGem3D(canvases[i]); 258// } 259// } 260// } 261 262// if (document.readyState === "loading") { 263// document.addEventListener("DOMContentLoaded", bootAll); 264// } else { 265// bootAll(); 266// } 267 268// window.initGem3D = initGem3D; 269// })(); 270 271 272(function () { 273 "use strict"; 274 275 var FACE_COLORS = [ 276 0x4478ff, 277 0x8a54ff, 278 0xff4f4f, 279 0xf79009, 280 0x63c909, 281 0x4478ff, 282 0x8a54ff, 283 0xff4f4f, 284 ]; 285 286 var CSS_SIZES = { 287 xs: { w: 24, h: 27 }, 288 sm: { w: 32, h: 36 }, 289 md: { w: 52, h: 58 }, 290 lg: { w: 120, h: 134 }, 291 }; 292 293 var RENDER_MULT = 3; 294 295 function buildGemGeometry(radius) { 296 var geo = new THREE.OctahedronGeometry(radius, 0); 297 geo = geo.toNonIndexed(); 298 299 var posCount = geo.attributes.position.count; 300 var colors = new Float32Array(posCount * 3); 301 var c = new THREE.Color(); 302 303 for (var i = 0; i < posCount; i += 3) { 304 var faceIdx = Math.floor(i / 3); 305 c.set(FACE_COLORS[faceIdx % FACE_COLORS.length]); 306 307 for (var v = 0; v < 3; v++) { 308 colors[(i + v) * 3] = c.r; 309 colors[(i + v) * 3 + 1] = c.g; 310 colors[(i + v) * 3 + 2] = c.b; 311 } 312 } 313 314 geo.setAttribute("color", new THREE.BufferAttribute(colors, 3)); 315 geo.computeVertexNormals(); 316 317 return geo; 318 } 319 320 function createGlowSprite(colorStr, size) { 321 var cv = document.createElement("canvas"); 322 cv.width = 256; 323 cv.height = 256; 324 325 var ctx = cv.getContext("2d"); 326 var g = ctx.createRadialGradient(128, 128, 0, 128, 128, 128); 327 328 g.addColorStop(0, colorStr); 329 g.addColorStop(0.4, colorStr.replace(",1)", ",0.32)")); 330 g.addColorStop(1, "rgba(0,0,0,0)"); 331 332 ctx.fillStyle = g; 333 ctx.fillRect(0, 0, 256, 256); 334 335 var tex = new THREE.CanvasTexture(cv); 336 tex.needsUpdate = true; 337 338 var mat = new THREE.SpriteMaterial({ 339 map: tex, 340 transparent: true, 341 depthWrite: false, 342 depthTest: false, 343 blending: THREE.AdditiveBlending, 344 }); 345 346 var sprite = new THREE.Sprite(mat); 347 sprite.scale.set(size, size, 1); 348 349 return sprite; 350 } 351 352 function initGem3D(canvas) { 353 if (!canvas || canvas.dataset.gemInit === "1") return; 354 355 try { 356 var size = canvas.getAttribute("data-gem-size") || "sm"; 357 var dim = CSS_SIZES[size] || CSS_SIZES.sm; 358 var pixelRatio = Math.min(window.devicePixelRatio || 1, 2); 359 360 canvas.dataset.gemInit = "1"; 361 canvas.style.width = dim.w + "px"; 362 canvas.style.height = dim.h + "px"; 363 canvas.style.display = "block"; 364 365 canvas.width = Math.round(dim.w * pixelRatio * RENDER_MULT); 366 canvas.height = Math.round(dim.h * pixelRatio * RENDER_MULT); 367 368 var renderer = new THREE.WebGLRenderer({ 369 canvas: canvas, 370 alpha: true, 371 antialias: true, 372 premultipliedAlpha: false, 373 powerPreference: "high-performance", 374 }); 375 376 renderer.setPixelRatio(pixelRatio * RENDER_MULT); 377 renderer.setSize(dim.w, dim.h, false); 378 renderer.setClearColor(0x000000, 0); 379 renderer.outputEncoding = THREE.sRGBEncoding; 380 renderer.toneMapping = THREE.ACESFilmicToneMapping; 381 renderer.toneMappingExposure = 1.65; 382 383 var scene = new THREE.Scene(); 384 385 var fov = size === "lg" ? 30 : size === "md" ? 35 : 40; 386 var camZ = size === "lg" ? 4.0 : size === "md" ? 3.5 : 3.0; 387 var camera = new THREE.PerspectiveCamera(fov, dim.w / dim.h, 0.1, 100); 388 camera.position.set(0, 0.08, camZ); 389 390 // Main gem 391 var mainGeo = buildGemGeometry(0.62); 392 var mainMat = new THREE.MeshBasicMaterial({ 393 vertexColors: true, 394 transparent: true, 395 opacity: 0.98, 396 side: THREE.DoubleSide, 397 color: 0xffffff, 398 }); 399 400 var highlight = new THREE.Mesh( 401 new THREE.OctahedronGeometry(0.2), 402 new THREE.MeshBasicMaterial({ 403 color: 0xffffff, 404 transparent: true, 405 opacity: 0.15, 406 }) 407 ); 408 highlight.position.set(0, 0, 0.3); 409 scene.add(highlight); 410 411 var mainGem = new THREE.Mesh(mainGeo, mainMat); 412 mainGem.scale.set(1, 1.1, 1); 413 414 scene.add(mainGem); 415 416 // Small gem 417 var smallGeo = buildGemGeometry(0.26); 418 var smallMat = new THREE.MeshBasicMaterial({ 419 vertexColors: true, 420 transparent: true, 421 opacity: 0.96, 422 side: THREE.DoubleSide, 423 }); 424 425 var smallGem = new THREE.Mesh(smallGeo, smallMat); 426 smallGem.position.set(0.62, 0.78, 0.1); 427 smallGem.scale.set(1, 1.1, 1); 428 scene.add(smallGem); 429 430 // Glow 431 var mainGlow = createGlowSprite("rgba(120,80,255,1)", 2.15); 432 mainGlow.position.set(0, 0, -0.3); 433 scene.add(mainGlow); 434 435 var smallGlow = createGlowSprite("rgba(255,160,40,1)", 1.0); 436 smallGlow.position.set(0.62, 0.78, -0.1); 437 scene.add(smallGlow); 438 439 // Lights 440 scene.add(new THREE.AmbientLight(0xffffff, 0.34)); 441 442 var blueLight = new THREE.PointLight(0x4488ff, 4.0, 14); 443 blueLight.position.set(-2, 1.5, 3); 444 scene.add(blueLight); 445 446 var purpleLight = new THREE.PointLight(0x8855ff, 3.4, 14); 447 purpleLight.position.set(2.5, -0.5, 2.5); 448 scene.add(purpleLight); 449 450 var redLight = new THREE.PointLight(0xff5555, 2.4, 12); 451 redLight.position.set(0, 3, -1); 452 scene.add(redLight); 453 454 var orangeLight = new THREE.PointLight(0xffa500, 2.0, 12); 455 orangeLight.position.set(-1.5, -2, 2); 456 scene.add(orangeLight); 457 458 var greenLight = new THREE.PointLight(0x88ff00, 1.5, 12); 459 greenLight.position.set(2, 0, -2); 460 scene.add(greenLight); 461 462 var keyLight = new THREE.DirectionalLight(0xffffff, 0.85); 463 keyLight.position.set(1, 2, 4); 464 scene.add(keyLight); 465 466 var fillLight = new THREE.DirectionalLight(0xaabbff, 0.4); 467 fillLight.position.set(-2, -1, 2); 468 scene.add(fillLight); 469 470 var state = { 471 rotSpeed: 0.4, 472 targetRotSpeed: 0.4, 473 smallBounce: 0, 474 targetSmallBounce: 0, 475 lightBoost: 1, 476 targetLightBoost: 1, 477 }; 478 479 var baseLights = { 480 blue: 4.0, 481 purple: 3.4, 482 red: 2.4, 483 orange: 2.0, 484 green: 1.5, 485 }; 486 487 var hoverTarget = 488 canvas.closest("a") || 489 canvas.closest("button") || 490 canvas.parentElement; 491 492 if (hoverTarget && hoverTarget.dataset.aiGemHoverBound !== "1") { 493 hoverTarget.dataset.aiGemHoverBound = "1"; 494 495 hoverTarget.addEventListener("mouseenter", function () { 496 state.targetRotSpeed = 1.2; 497 state.targetSmallBounce = 1; 498 state.targetLightBoost = 1.7; 499 }); 500 501 hoverTarget.addEventListener("mouseleave", function () { 502 state.targetRotSpeed = 0.4; 503 state.targetSmallBounce = 0; 504 state.targetLightBoost = 1; 505 }); 506 } 507 508 var prefersReduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches; 509 var clock = new THREE.Clock(); 510 511 function animate() { 512 if (!canvas.isConnected) { 513 renderer.dispose(); 514 return; 515 } 516 517 requestAnimationFrame(animate); 518 519 var dt = clock.getDelta(); 520 var t = clock.getElapsedTime(); 521 522 if (prefersReduced) { 523 renderer.render(scene, camera); 524 return; 525 } 526 527 state.rotSpeed += (state.targetRotSpeed - state.rotSpeed) * dt * 3; 528 state.smallBounce += (state.targetSmallBounce - state.smallBounce) * dt * 4; 529 state.lightBoost += (state.targetLightBoost - state.lightBoost) * dt * 3; 530 531 mainGem.rotation.y += state.rotSpeed * dt; 532 mainGem.rotation.x = Math.sin(t * 0.5) * 0.08; 533 mainGem.position.y = Math.sin(t * 0.8) * 0.05; 534 535 smallGem.rotation.y -= state.rotSpeed * 1.3 * dt; 536 smallGem.rotation.z = Math.sin(t * 0.7) * 0.15; 537 smallGem.position.set( 538 0.62 + state.smallBounce * Math.sin(t * 3.5) * 0.05, 539 0.78 + state.smallBounce * Math.sin(t * 4) * 0.1, 540 0.1 541 ); 542 543 mainGlow.position.y = mainGem.position.y; 544 mainGlow.material.opacity = 0.72 + Math.sin(t * 2.0) * 0.04 * state.lightBoost; 545 546 smallGlow.position.x = smallGem.position.x; 547 smallGlow.position.y = smallGem.position.y; 548 smallGlow.material.opacity = 0.62 + Math.sin(t * 2.8) * 0.05 * state.lightBoost; 549 550 blueLight.intensity = baseLights.blue * state.lightBoost; 551 purpleLight.intensity = baseLights.purple * state.lightBoost; 552 redLight.intensity = baseLights.red * state.lightBoost; 553 orangeLight.intensity = baseLights.orange * state.lightBoost; 554 greenLight.intensity = baseLights.green * state.lightBoost; 555 556 renderer.render(scene, camera); 557 } 558 559 function onResize() { 560 var newPixelRatio = Math.min(window.devicePixelRatio || 1, 2); 561 562 canvas.width = Math.round(dim.w * newPixelRatio * RENDER_MULT); 563 canvas.height = Math.round(dim.h * newPixelRatio * RENDER_MULT); 564 565 renderer.setPixelRatio(newPixelRatio * RENDER_MULT); 566 renderer.setSize(dim.w, dim.h, false); 567 568 camera.aspect = dim.w / dim.h; 569 camera.updateProjectionMatrix(); 570 } 571 572 window.addEventListener("resize", onResize); 573 animate(); 574 } catch (e) { 575 console.error("ai-gem-3d init error:", e); 576 canvas.dataset.gemInit = ""; 577 } 578 } 579 580 function bootAll() { 581 if (typeof THREE === "undefined") { 582 setTimeout(bootAll, 120); 583 return; 584 } 585
586 var canvases = document.querySelectorAll(".ai-gem-3d"); 587 for (var i = 0; i < canvases.length; i++) { 588 initGem3D(canvases[i]); 589 } 590 } 591 592 if (document.readyState === "loading") { 593 document.addEventListener("DOMContentLoaded", bootAll); 594 } else { 595 bootAll(); 596 } 597 598 window.initGem3D = initGem3D; 599})(); 600 601/* script.js */ 602var app = { 603 setWindowHeight() { 604 document.documentElement.style.setProperty( 605 "--window-inner-height", 606 $(window).innerHeight() + "px" 607 ); 608 }, 609 610 swiperFn() { 611 if ($(".story-slider").length > 0) { 612 $(".story-slider").each(function () { 613 const $this = $(this); 614 615 const isLargeScreen = window.innerWidth >= 992; 616 617 const storySlider = new Swiper($this[0], { 618 loop: isLargeScreen ? false : true, 619 speed: 700, 620 slidesPerView: 1, 621 effect: "fade", 622 fadeEffect: { 623 crossFade: true, 624 }, 625 simulateTouch: !isLargeScreen ? true : false, 626 observer: true, 627 observeParents: true, 628 autoplay: { 629 delay: 6000, 630 disableOnInteraction: false, 631 }, 632 navigation: { 633 nextEl: $this.find(".story-slider-next")[0], 634 prevEl: $this.find(".story-slider-prev")[0], 635 }, 636 pagination: { 637 el: $this.find(".story-slider-pagination")[0], 638 clickable: true, 639 renderBullet: function (index, className) { 640 return `<div class="${className}"> 641 <div class="swiper-nav__timeline"><span></span></div> 642 </div>`; 643 }, 644 }, 645 646 on: { 647 init: function () { 648 const swiper = this; 649 650 setTimeout(() => { 651 swiper.autoplay.start(); 652 updateUI(swiper.realIndex); 653 }, 50); 654 }, 655 656 slideChangeTransitionStart: function () { 657 updateUI(this.realIndex); 658 }, 659 }, 660 }); 661 662 function updateUI(activeIndex) { 663 const bullets = $this.find(".swiper-pagination-bullet"); 664 const logos = $this.find(".story-slider-logo"); 665 666 bullets.each(function (idx) { 667 const span = $(this).find("span"); 668 if (span.length) { 669 span.removeClass("start"); 670 void span[0].offsetWidth; 671 if (idx === activeIndex) { 672 span.addClass("start"); 673 } 674 } 675 }); 676 677 logos.each(function () { 678 const logoIndex = parseInt($(this).attr("data-index"), 10); 679 $(this).toggleClass("active", logoIndex === activeIndex); 680 }); 681 } 682 683 $this.find(".story-slider-logo").each(function () { 684 $(this).on("click", function () { 685 const clickedIndex = parseInt($(this).attr("data-index"), 10); 686 const currentIndex = storySlider.realIndex; 687 688 if (!isNaN(clickedIndex) && clickedIndex !== currentIndex) { 689 storySlider.slideTo(clickedIndex); 690 updateUI(clickedIndex); 691 } 692 }); 693 }); 694 }); 695 } 696 697 if ($(".app-cycle-slider").length > 0) { 698 var appCycleSlider = new Swiper(".app-cycle-slider", { 699 fadeEffect: { 700 crossFade: true, 701 }, 702 speed: 700, 703 watchSlidesVisibility: true, 704 observer: true, 705 spaceBetween: 25, 706 observeParents: true, 707 watchSlidesProgress: true, 708 709 navigation: { 710 nextEl: ".app-cycle-slider-next", 711 prevEl: ".app-cycle-slider-prev", 712 }, 713 pagination: { 714 el: ".nav-pagination.swiper-pagination.app-cycle-slider-pagination", 715 clickable: true, 716 }, 717 breakpoints: { 718 320: { 719 slidesPerView: 1, 720 spaceBetween: 30, 721 }, 722 350: { 723 slidesPerView: 1, 724 spaceBetween: 30, 725 }, 726 400: { 727 slidesPerView: 1, 728 spaceBetween: 30, 729 }, 730 440: { 731 slidesPerView: 1, 732 spaceBetween: 30, 733 }, 734 525: { 735 slidesPerView: 1, 736 spaceBetween: 16, 737 }, 738 650: { 739 slidesPerView: 1, 740 spaceBetween: 30, 741 }, 742 768: { 743 slidesPerView: 1, 744 spaceBetween: 30, 745 }, 746 992: { 747 slidesPerView: 7, 748 spaceBetween: 0, 749 }, 750 1200: { 751 slidesPerView: 7, 752 spaceBetween: 0, 753 }, 754 1700: { 755 slidesPerView: 7, 756 spaceBetween: 0, 757 }, 758 }, 759 }); 760 761 $(".app-cycle-slider").on("click", ".label", function () { 762 var $currentSlide = $(this).closest(".swiper-slide"); 763 764 $(".app-cycle-content-item-wrapper").removeClass("active"); 765 766 $currentSlide 767 .find(".app-cycle-content-item-wrapper") 768 .addClass("active"); 769 }); 770 } 771 if ($(".brands-item-slider-2").length > 0) { 772 var brandsItemSlider2 = new Swiper(".brands-item-slider-2", { 773 loop: true, 774 slideVisibleClass: "is-visible", 775 speed: 700, 776 watchSlidesVisibility: true, 777 observer: true, 778 spaceBetween: 25, 779 observeParents: true, 780 watchSlidesProgress: true, 781 782 navigation: { 783 nextEl: ".brands-item-slider-2-next", 784 prevEl: ".brands-item-slider-2-prev", 785 }, 786 pagination: { 787 el: ".nav-pagination.swiper-pagination.brands-item-slider-2-pagination", 788 clickable: true, 789 }, 790 breakpoints: { 791 320: { 792 slidesPerView: 3, 793 spaceBetween: 30, 794 }, 795 350: { 796 slidesPerView: 3.5, 797 spaceBetween: 30, 798 }, 799 400: { 800 slidesPerView: 4, 801 spaceBetween: 30, 802 }, 803 440: { 804 slidesPerView: 4, 805 spaceBetween: 30, 806 }, 807 525: { 808 slidesPerView: 4, 809 spaceBetween: 30, 810 }, 811 650: { 812 slidesPerView: 4, 813 spaceBetween: 30, 814 }, 815 768: { 816 slidesPerView: 4, 817 spaceBetween: 30, 818 }, 819 992: { 820 slidesPerView: 5, 821 spaceBetween: 30, 822 }, 823 1200: { 824 slidesPerView: 5, 825 spaceBetween: 30, 826 }, 827 1700: { 828 slidesPerView: 5, 829 spaceBetween: 30, 830 }, 831 }, 832 }); 833 } 834 if ($(".experience-item-slider").length > 0) { 835 var experienceSlider = new Swiper(".experience-item-slider", { 836 loop: true, 837 slideVisibleClass: "is-visible", 838 speed: 700, 839 watchSlidesVisibility: true, 840 observer: true, 841 spaceBetween: 25, 842 observeParents: true, 843 watchSlidesProgress: true, 844 autoplay: { 845 delay: 10000, 846 disableOnInteraction: false, 847 }, 848 navigation: { 849 nextEl: ".experience-item-slider-next", 850 prevEl: ".experience-item-slider-prev", 851 }, 852 pagination: { 853 el: ".nav-pagination.swiper-pagination.experience-item-slider-nav", 854 clickable: true, 855 }, 856 breakpoints: { 857 320: { 858 slidesPerView: 1, 859 spaceBetween: 24, 860 }, 861 350: { 862 slidesPerView: 1.6, 863 spaceBetween: 24, 864 }, 865 400: { 866 slidesPerView: 1.75, 867 spaceBetween: 24, 868 }, 869 440: { 870 slidesPerView: 1.7, 871 spaceBetween: 24, 872 }, 873 525: { 874 slidesPerView: 1.8, 875 spaceBetween: 16, 876 }, 877 650: { 878 slidesPerView: 1.8, 879 spaceBetween: 16, 880 }, 881 768: { 882 slidesPerView: 2.1, 883 spaceBetween: 16, 884 }, 885 992: { 886 slidesPerView: 3.1, 887 spaceBetween: 65, 888 }, 889 1200: { 890 slidesPerView: 3.1, 891 spaceBetween: 65, 892 }, 893 1700: { 894 slidesPerView: 3.1, 895 spaceBetween: 65, 896 }, 897 }, 898 }); 899 } 900 901 if ($(".timeline-item-slider").length > 0) { 902 var timelineItemSlider = new Swiper(".timeline-item-slider", { 903 loop: false, 904 speed: 700, 905 slideVisibleClass: "is-visible", 906 watchSlidesVisibility: true, 907 observer: true, 908 spaceBetween: 25, 909 observeParents: true, 910 watchSlidesProgress: true, 911 navigation: { 912 nextEl: ".timeline-item-slider-next", 913 prevEl: ".timeline-item-slider-prev", 914 }, 915 pagination: { 916 el: ".nav-pagination.swiper-pagination.timeline-item-slider-pagination", 917 clickable: true, 918 }, 919 breakpoints: { 920 320: { 921 slidesPerView: 1, 922 spaceBetween: 24, 923 }, 924 350: { 925 slidesPerView: 1.4, 926 spaceBetween: 60, 927 }, 928 400: { 929 slidesPerView: 1.4, 930 spaceBetween: 60, 931 }, 932 440: { 933 slidesPerView: 1.4, 934 spaceBetween: 60, 935 }, 936 525: { 937 slidesPerView: 1.8, 938 spaceBetween: 16, 939 }, 940 650: { 941 slidesPerView: 1.8, 942 spaceBetween: 16, 943 }, 944 768: { 945 slidesPerView: 2.1, 946 spaceBetween: 16, 947 }, 948 992: { 949 slidesPerView: 3.7, 950 spaceBetween: 80, 951 }, 952 1200: { 953 slidesPerView: 3.7, 954 spaceBetween: 80, 955 }, 956 1700: { 957 slidesPerView: 3.7, 958 spaceBetween: 80, 959 }, 960 }, 961 }); 962 } 963 if ($(".resource-card-slider").length > 0) { 964 var resourceCardSlider = new Swiper(".resource-card-slider", { 965 loop: false, 966 slideVisibleClass: "is-visible", 967 speed: 700, 968 watchSlidesVisibility: true, 969 observer: true, 970 spaceBetween: 25, 971 observeParents: true, 972 watchSlidesProgress: true, 973 974 navigation: { 975 nextEl: ".resource-card-slider-next", 976 prevEl: ".resource-card-slider-prev", 977 }, 978 pagination: { 979 el: ".nav-pagination.swiper-pagination.resource-card-slider-pagination", 980 clickable: true, 981 }, 982 breakpoints: { 983 320: { 984 slidesPerView: 1, 985 spaceBetween: 16, 986 }, 987 350: { 988 slidesPerView: 1.3, 989 spaceBetween: 16, 990 }, 991 376: { 992 slidesPerView: 1.3, 993 spaceBetween: 16, 994 }, 995 440: { 996 slidesPerView: 1.4, 997 spaceBetween: 16, 998 }, 999 525: { 1000 slidesPerView: 1.4, 1001 spaceBetween: 16, 1002 }, 1003 650: { 1004 slidesPerView: 2.1, 1005 spaceBetween: 16, 1006 }, 1007 768: { 1008 slidesPerView: 2.1, 1009 spaceBetween: 16, 1010 }, 1011 992: { 1012 slidesPerView: 4, 1013 spaceBetween: 22, 1014 }, 1015 1200: { 1016 slidesPerView: 3, 1017 spaceBetween: 22, 1018 }, 1019 1700: { 1020 slidesPerView: 3, 1021 spaceBetween: 22, 1022 }, 1023 }, 1024 }); 1025 } 1026 if ($(".featured-slider").length > 0) { 1027 var featuredSlider = new Swiper(".featured-slider", { 1028 loop: true, 1029 slideVisibleClass: "is-visible", 1030 slidesPerView: 1, 1031 speed: 700, 1032 watchSlidesVisibility: true, 1033 observer: true, 1034 spaceBetween: 14, 1035 observeParents: true, 1036 watchSlidesProgress: true, 1037 1038 navigation: { 1039 nextEl: ".featured-slider-next", 1040 prevEl: ".featured-slider-prev", 1041 }, 1042 pagination: { 1043 el: ".nav-pagination.swiper-pagination.featured-slider-pagination", 1044 clickable: true, 1045 }, 1046 }); 1047 } 1048 if ($(".other-slider").length > 0) { 1049 var otherSlider = new Swiper(".other-slider", { 1050 loop: true, 1051 slideVisibleClass: "is-visible", 1052 speed: 700, 1053 watchSlidesVisibility: true, 1054 observer: true, 1055 spaceBetween: 25, 1056 observeParents: true, 1057 watchSlidesProgress: true, 1058 1059 navigation: { 1060 nextEl: ".other-slider-next", 1061 prevEl: ".other-slider-prev", 1062 }, 1063 pagination: { 1064 el: ".nav-pagination.swiper-pagination.other-slider-pagination", 1065 clickable: true, 1066 }, 1067 breakpoints: { 1068 320: { 1069 slidesPerView: 1, 1070 spaceBetween: 24, 1071 }, 1072 350: { 1073 slidesPerView: 1.38, 1074 spaceBetween: 24, 1075 }, 1076 376: { 1077 slidesPerView: 1.5, 1078 spaceBetween: 24, 1079 }, 1080 440: { 1081 slidesPerView: 1.38, 1082 spaceBetween: 24, 1083 }, 1084 525: { 1085 slidesPerView: 1.955, 1086 spaceBetween: 24, 1087 }, 1088 650: { 1089 slidesPerView: 2.1, 1090 spaceBetween: 16, 1091 }, 1092 768: { 1093 slidesPerView: 2.1, 1094 spaceBetween: 16, 1095 }, 1096 992: { 1097 slidesPerView: 4, 1098 spaceBetween: 25, 1099 }, 1100 1200: { 1101 slidesPerView: 4, 1102 spaceBetween: 25, 1103 }, 1104 1700: { 1105 slidesPerView: 4, 1106 spaceBetween: 25, 1107 }, 1108 }, 1109 }); 1110 } 1111 if ($(".other-slider-2").length > 0) { 1112 var otherSlider2 = new Swiper(".other-slider-2", { 1113 loop: true, 1114 slideVisibleClass: "is-visible", 1115 speed: 700, 1116 watchSlidesVisibility: true, 1117 observer: true, 1118 spaceBetween: 22, 1119 observeParents: true, 1120 watchSlidesProgress: true, 1121 1122 navigation: { 1123 nextEl: ".other-slider-2-next", 1124 prevEl: ".other-slider-2-prev", 1125 }, 1126 pagination: { 1127 el: ".nav-pagination.swiper-pagination.other-slider-2-pagination", 1128 clickable: true, 1129 }, 1130 breakpoints: { 1131 320: { 1132 slidesPerView: 1, 1133 spaceBetween: 14, 1134 centeredSlides: true, 1135 }, 1136 350: { 1137 slidesPerView: 1.1, 1138 spaceBetween: 14, 1139 centeredSlides: true, 1140 }, 1141 376: { 1142 slidesPerView: 1.1, 1143 spaceBetween: 14, 1144 centeredSlides: true, 1145 }, 1146 440: { 1147 slidesPerView: 1.1, 1148 spaceBetween: 14, 1149 centeredSlides: true, 1150 }, 1151 525: { 1152 slidesPerView: 1.8, 1153 spaceBetween: 14, 1154 centeredSlides: true, 1155 }, 1156 650: { 1157 slidesPerView: 2.1, 1158 spaceBetween: 16, 1159 }, 1160 768: { 1161 slidesPerView: 2.1, 1162 spaceBetween: 16, 1163 }, 1164 992: { 1165 slidesPerView: 3, 1166 spaceBetween: 22, 1167 }, 1168 1200: { 1169 slidesPerView: 3, 1170 spaceBetween: 22, 1171 }, 1172 1700: { 1173 slidesPerView: 3, 1174 spaceBetween: 22, 1175 }, 1176 }, 1177 }); 1178 } 1179 1180 if ($(".featured-partner-slider").length > 0) { 1181 var featuredPartnerSlider = new Swiper(".featured-partner-slider", { 1182 loop: false, 1183 slideVisibleClass: "is-visible", 1184 speed: 700, 1185 watchSlidesVisibility: true, 1186 observer: true, 1187 spaceBetween: 25, 1188 observeParents: true, 1189 watchSlidesProgress: true, 1190 1191 navigation: { 1192 nextEl: ".featured-partner-slider-next", 1193 prevEl: ".featured-partner-slider-prev", 1194 }, 1195 pagination: { 1196 el: ".nav-pagination.swiper-pagination.featured-partner-slider-pagination", 1197 clickable: true, 1198 }, 1199 breakpoints: { 1200 320: { 1201 slidesPerView: 1, 1202 spaceBetween: 14, 1203 }, 1204 350: { 1205 slidesPerView: 1.2, 1206 spaceBetween: 14, 1207 }, 1208 376: { 1209 slidesPerView: 1.2, 1210 spaceBetween: 14, 1211 }, 1212 440: { 1213 slidesPerView: 1.2, 1214
1214 spaceBetween: 14, 1215 }, 1216 525: { 1217 slidesPerView: 1.2, 1218 spaceBetween: 14, 1219 }, 1220 650: { 1221 slidesPerView: 2.1, 1222 spaceBetween: 14, 1223 }, 1224 768: { 1225 slidesPerView: 2.1, 1226 spaceBetween: 16, 1227 }, 1228 992: { 1229 slidesPerView: 3.65, 1230 spaceBetween: 24, 1231 }, 1232 1200: { 1233 slidesPerView: 3.65, 1234 spaceBetween: 24, 1235 }, 1236 1700: { 1237 slidesPerView: 3.65, 1238 spaceBetween: 24, 1239 }, 1240 }, 1241 }); 1242 } 1243 1244 $(".price-card-slider").each(function (index, sliderEl) { 1245 var $slider = $(sliderEl); 1246 var totalSlides = $slider.find(".swiper-slide").length; 1247 var slidesPerView = 1; 1248 var windowWidth = window.innerWidth; 1249 var simulateTouch = false; 1250 1251 if (windowWidth <= 576) { 1252 $slider.addClass("no-swiper"); 1253 return; 1254 } else { 1255 $slider.removeClass("no-swiper"); 1256 } 1257 1258 var spaceBetween = 16; 1259 var centeredSlides = false; 1260 var loop = false; 1261 1262 if (windowWidth >= 992) { 1263 if (totalSlides === 1) { 1264 slidesPerView = 1; 1265 spaceBetween = 0; 1266 } else if (totalSlides === 2) { 1267 slidesPerView = 2; 1268 spaceBetween = 0; 1269 $slider.addClass("grid-2"); 1270 } else if (totalSlides === 3) { 1271 slidesPerView = totalSlides; 1272 spaceBetween = 25; 1273 } else if (totalSlides === 4) { 1274 slidesPerView = 4; 1275 spaceBetween = 16; 1276 } else { 1277 slidesPerView = 4; 1278 spaceBetween = 16; 1279 centeredSlides = false; 1280 loop = false; 1281 } 1282 } else if (windowWidth >= 768) { 1283 slidesPerView = 2.1; 1284 if (totalSlides === 1) { 1285 slidesPerView = 1; 1286 spaceBetween = 0; 1287 } 1288 } else if (windowWidth >= 525) { 1289 slidesPerView = 1.8; 1290 if (totalSlides === 1) { 1291 slidesPerView = 1; 1292 spaceBetween = 0; 1293 } 1294 } else { 1295 slidesPerView = 1.1; 1296 if (totalSlides === 1) { 1297 slidesPerView = 1; 1298 spaceBetween = 0; 1299 } 1300 } 1301 1302 var navNext = $slider.find(".price-card-slider-next")[0]; 1303 var navPrev = $slider.find(".price-card-slider-prev")[0]; 1304 var pagination = $slider.find(".price-card-slider-pagination")[0]; 1305 1306 new Swiper($slider[0], { 1307 loop: loop, 1308 speed: 700, 1309 spaceBetween: spaceBetween, 1310 slidesPerView: slidesPerView, 1311 centeredSlides: centeredSlides, 1312 observer: true, 1313 observeParents: true, 1314 watchSlidesProgress: true, 1315 watchSlidesVisibility: true, 1316 simulateTouch: simulateTouch, 1317 1318 navigation: { 1319 nextEl: navNext, 1320 prevEl: navPrev, 1321 }, 1322 pagination: { 1323 el: pagination, 1324 clickable: true, 1325 }, 1326 }); 1327 1328 if (totalSlides <= 4) { 1329 $(navNext).hide(); 1330 $(navPrev).hide(); 1331 $(pagination).hide(); 1332 } else { 1333 $(navNext).show(); 1334 $(navPrev).show(); 1335 $(pagination).show(); 1336 } 1337 }); 1338 1339 if ($(".category-item-slider").length > 0) { 1340 var experienceSlider = new Swiper(".category-item-slider", { 1341 loop: true, 1342 slideVisibleClass: "is-visible", 1343 speed: 700, 1344 watchSlidesVisibility: true, 1345 observer: true, 1346 spaceBetween: 25, 1347 observeParents: true, 1348 watchSlidesProgress: true, 1349 1350 navigation: { 1351 nextEl: ".category-item-slider-next", 1352 prevEl: ".category-item-slider-prev", 1353 }, 1354 pagination: { 1355 el: ".nav-pagination.swiper-pagination.category-item-slider-nav", 1356 clickable: true, 1357 }, 1358 breakpoints: { 1359 320: { 1360 slidesPerView: 1, 1361 spaceBetween: 16, 1362 }, 1363 350: { 1364 slidesPerView: 1.1, 1365 spaceBetween: 16, 1366 }, 1367 400: { 1368 slidesPerView: 1.1, 1369 spaceBetween: 16, 1370 }, 1371 440: { 1372 slidesPerView: 1.1, 1373 spaceBetween: 16, 1374 }, 1375 525: { 1376 slidesPerView: 1.8, 1377 spaceBetween: 16, 1378 }, 1379 650: { 1380 slidesPerView: 1.8, 1381 spaceBetween: 16, 1382 }, 1383 768: { 1384 slidesPerView: 2.1, 1385 spaceBetween: 16, 1386 }, 1387 992: { 1388 slidesPerView: 3, 1389 spaceBetween: 65, 1390 }, 1391 1200: { 1392 slidesPerView: 3, 1393 spaceBetween: 65, 1394 }, 1395 1700: { 1396 slidesPerView: 3, 1397 spaceBetween: 65, 1398 }, 1399 }, 1400 }); 1401 } 1402 if ($(".solution-item-slider").length > 0) { 1403 var totalSlides = $(".solution-item-slider .swiper-slide").length; 1404 var isLessThanOrEqualThree = totalSlides <= 3; 1405 1406 var solutionItemSlider = new Swiper(".solution-item-slider", { 1407 loop: !isLessThanOrEqualThree, 1408 speed: 700, 1409 slideVisibleClass: "is-visible", 1410 watchSlidesVisibility: true, 1411 centeredSlides: !isLessThanOrEqualThree, 1412 observer: true, 1413 spaceBetween: 25, 1414 observeParents: true, 1415 watchSlidesProgress: true, 1416 1417 navigation: { 1418 nextEl: ".solution-item-slider-next", 1419 prevEl: ".solution-item-slider-prev", 1420 }, 1421 pagination: { 1422 el: ".nav-pagination.swiper-pagination.solution-item-slider-nav", 1423 clickable: true, 1424 }, 1425 1426 breakpoints: isLessThanOrEqualThree 1427 ? { 1428 320: { 1429 slidesPerView: 1, 1430 centeredSlides: false, 1431 spaceBetween: 16, 1432 }, 1433 350: { 1434 slidesPerView: 1.2, 1435 centeredSlides: false, 1436 spaceBetween: 16, 1437 }, 1438 400: { 1439 slidesPerView: 1.3, 1440 centeredSlides: false, 1441 spaceBetween: 16, 1442 }, 1443 440: { 1444 slidesPerView: 1.1, 1445 centeredSlides: false, 1446 spaceBetween: 16, 1447 }, 1448 525: { 1449 slidesPerView: 1.8, 1450 centeredSlides: false, 1451 spaceBetween: 16, 1452 }, 1453 650: { 1454 slidesPerView: 1.8, 1455 centeredSlides: false, 1456 spaceBetween: 16, 1457 }, 1458 768: { 1459 slidesPerView: 2.1, 1460 centeredSlides: false, 1461 spaceBetween: 16, 1462 }, 1463 992: { 1464 slidesPerView: 3, 1465 centeredSlides: true, 1466 spaceBetween: 20, 1467 }, 1468 1200: { 1469 slidesPerView: 3, 1470 centeredSlides: false, 1471 spaceBetween: 20, 1472 }, 1473 1700: { 1474 slidesPerView: 3, 1475 centeredSlides: false, 1476 spaceBetween: 20, 1477 }, 1478 1921: { 1479 slidesPerView: 3, 1480 centeredSlides: false, 1481 spaceBetween: 20, 1482 }, 1483 } 1484 : { 1485 320: { 1486 centeredSlides: false, 1487 slidesPerView: 1, 1488 spaceBetween: 16, 1489 }, 1490 350: { 1491 centeredSlides: false, 1492 slidesPerView: 1.2, 1493 spaceBetween: 16, 1494 }, 1495 400: { 1496 centeredSlides: false, 1497 slidesPerView: 1.3, 1498 spaceBetween: 16, 1499 }, 1500 440: { 1501 centeredSlides: false, 1502 slidesPerView: 1.1, 1503 spaceBetween: 16, 1504 }, 1505 525: { 1506 centeredSlides: false, 1507 slidesPerView: 1.8, 1508 spaceBetween: 16, 1509 }, 1510 650: { 1511 centeredSlides: false, 1512 slidesPerView: 1.8, 1513 spaceBetween: 16, 1514 }, 1515 768: { 1516 centeredSlides: false, 1517 slidesPerView: 2.1, 1518 spaceBetween: 16, 1519 }, 1520 992: { 1521 centeredSlides: true, 1522 slidesPerView: 3.35, 1523 spaceBetween: 20, 1524 }, 1525 1200: { 1526 centeredSlides: true, 1527 slidesPerView: 3.35, 1528 spaceBetween: 20, 1529 }, 1530 1700: { 1531 centeredSlides: true, 1532 slidesPerView: 3.35, 1533 spaceBetween: 20, 1534 }, 1535 1921: { 1536 centeredSlides: false, 1537 slidesPerView: 3, 1538 spaceBetween: 20, 1539 }, 1540 }, 1541 }); 1542 } 1543 1544 if ($(".guides-item-slider").length > 0) { 1545 var guidesItemSlider = new Swiper(".guides-item-slider", { 1546 loop: true, 1547 speed: 700, 1548 centeredSlides: true, 1549 grabCursor: true, 1550 observer: true, 1551 spaceBetween: 25, 1552 observeParents: true, 1553 slideToClickedSlide: false, 1554 1555 navigation: { 1556 nextEl: ".guides-item-slider-next", 1557 prevEl: ".guides-item-slider-prev", 1558 }, 1559 pagination: { 1560 el: ".nav-pagination.swiper-pagination.guides-item-slider-pagination", 1561 clickable: true, 1562 }, 1563 breakpoints: { 1564 320: { 1565 centeredSlides: true, 1566 slidesPerView: 1, 1567 spaceBetween: 8, 1568 }, 1569 350: { 1570 centeredSlides: true, 1571 slidesPerView: 1.02, 1572 spaceBetween: 8, 1573 }, 1574 400: { 1575 centeredSlides: true, 1576 slidesPerView: 1.02, 1577 spaceBetween: 8, 1578 }, 1579 440: { 1580 centeredSlides: true, 1581 slidesPerView: 1.02, 1582 spaceBetween: 8, 1583 }, 1584 525: { 1585 centeredSlides: true, 1586 slidesPerView: 1.8, 1587 spaceBetween: 8, 1588 }, 1589 650: { 1590 centeredSlides: true, 1591 slidesPerView: 1.8, 1592 spaceBetween: 16, 1593 }, 1594 768: { 1595 centeredSlides: true, 1596 slidesPerView: 2.1, 1597 spaceBetween: 16, 1598 }, 1599 992: { 1600 centeredSlides: true, 1601 slidesPerView: 3.35, 1602 spaceBetween: 20, 1603 }, 1604 1200: { 1605 centeredSlides: true, 1606 slidesPerView: 1.38, 1607 spaceBetween: 18, 1608 }, 1609 1700: { 1610 centeredSlides: true, 1611 slidesPerView: 1.38, 1612 spaceBetween: 18, 1613 }, 1614 1921: { 1615 centeredSlides: false, 1616 slidesPerView: 1.38, 1617 spaceBetween: 18, 1618 }, 1619 }, 1620 }); 1621 1622 guidesItemSlider.on("click", function (swiper) { 1623 if (!swiper.clickedSlide) return; 1624 1625 const clickedSlide = swiper.clickedSlide;
1626 1627 if (clickedSlide.classList.contains("swiper-slide-prev")) { 1628 swiper.slidePrev(); 1629 } else if (clickedSlide.classList.contains("swiper-slide-next")) { 1630 swiper.slideNext(); 1631 } 1632 }); 1633 } 1634 if ($(".blog-card-slider").length > 0) { 1635 var blogCardSlider = new Swiper(".blog-card-slider", { 1636 effect: "coverflow", 1637 loop: true, 1638 speed: 700, 1639 grabCursor: true, 1640 centeredSlides: true, 1641 coverflowEffect: { 1642 rotate: 0, 1643 stretch: -350, 1644 depth: 650, 1645 modifier: 1, 1646 slideShadows: false, 1647 }, 1648 1649 navigation: { 1650 nextEl: ".blog-card-slider-next", 1651 prevEl: ".blog-card-slider-prev", 1652 }, 1653 pagination: { 1654 el: ".nav-pagination.swiper-pagination.blog-card-slider-nav", 1655 clickable: true, 1656 }, 1657 breakpoints: { 1658 320: { 1659 slidesPerView: 1, 1660 coverflowEffect: { 1661 rotate: 0, 1662 stretch: -100, 1663 depth: 650, 1664 modifier: 1, 1665 slideShadows: false, 1666 }, 1667 }, 1668 350: { 1669 slidesPerView: 1.1, 1670 coverflowEffect: { 1671 rotate: 0, 1672 stretch: -100, 1673 depth: 650, 1674 modifier: 1, 1675 slideShadows: false, 1676 }, 1677 }, 1678 400: { 1679 slidesPerView: 1.2, 1680 coverflowEffect: { 1681 rotate: 0, 1682 stretch: -100, 1683 depth: 650, 1684 modifier: 1, 1685 slideShadows: false, 1686 }, 1687 }, 1688 440: { 1689 slidesPerView: 1.1, 1690 coverflowEffect: { 1691 rotate: 0, 1692 stretch: -150, 1693 depth: 650, 1694 modifier: 1, 1695 slideShadows: false, 1696 }, 1697 }, 1698 525: { 1699 slidesPerView: 1.1, 1700 coverflowEffect: { 1701 rotate: 0, 1702 stretch: -150, 1703 depth: 650, 1704 modifier: 1, 1705 slideShadows: false, 1706 }, 1707 }, 1708 650: { 1709 slidesPerView: 1, 1710 coverflowEffect: { 1711 rotate: 0, 1712 stretch: -200, 1713 depth: 650, 1714 modifier: 1, 1715 slideShadows: false, 1716 }, 1717 }, 1718 768: { 1719 slidesPerView: 1, 1720 coverflowEffect: { 1721 rotate: 0, 1722 stretch: -250, 1723 depth: 650, 1724 modifier: 1, 1725 slideShadows: false, 1726 }, 1727 }, 1728 992: { 1729 slidesPerView: 1, 1730 coverflowEffect: { 1731 rotate: 0, 1732 stretch: -350, 1733 depth: 650, 1734 modifier: 1, 1735 slideShadows: false, 1736 }, 1737 }, 1738 1200: { 1739 slidesPerView: 1, 1740 }, 1741 1700: { 1742 slidesPerView: 1, 1743 }, 1744 }, 1745 }); 1746 } 1747 if ($(".customer-card-slider").length > 0) { 1748 const isMobile = window.innerWidth < 992; 1749 var customerCardSlider = new Swiper(".customer-card-slider", { 1750 effect: "coverflow", 1751 loop: true, 1752 speed: 700, 1753 grabCursor: isMobile ? false : true, 1754 centeredSlides: true, 1755 coverflowEffect: { 1756 rotate: 0, 1757 stretch: -350, 1758 depth: 650, 1759 modifier: 1, 1760 slideShadows: false, 1761 }, 1762 1763 navigation: { 1764 nextEl: ".customer-card-slider-next", 1765 prevEl: ".customer-card-slider-prev", 1766 }, 1767 pagination: { 1768 el: ".nav-pagination.swiper-pagination.customer-card-slider-pagination", 1769 clickable: true, 1770 }, 1771 breakpoints: { 1772 320: { 1773 slidesPerView: 1, 1774 coverflowEffect: { 1775 rotate: 0, 1776 stretch: -100, 1777 depth: 650, 1778 modifier: 1, 1779 slideShadows: false, 1780 }, 1781 }, 1782 350: { 1783 slidesPerView: 1.1, 1784 coverflowEffect: { 1785 rotate: 0, 1786 stretch: -100, 1787 depth: 650, 1788 modifier: 1, 1789 slideShadows: false, 1790 }, 1791 }, 1792 400: { 1793 slidesPerView: 1.2, 1794 coverflowEffect: { 1795 rotate: 0, 1796 stretch: -100, 1797 depth: 650, 1798 modifier: 1, 1799 slideShadows: false, 1800 }, 1801 }, 1802 440: { 1803 slidesPerView: 1.1, 1804 coverflowEffect: { 1805 rotate: 0, 1806 stretch: -150, 1807 depth: 650, 1808 modifier: 1, 1809 slideShadows: false, 1810 }, 1811 }, 1812 525: { 1813 slidesPerView: 1.1, 1814 coverflowEffect: { 1815 rotate: 0, 1816 stretch: -150, 1817 depth: 650, 1818 modifier: 1, 1819 slideShadows: false, 1820 }, 1821 }, 1822 650: { 1823 slidesPerView: 1, 1824 coverflowEffect: { 1825 rotate: 0, 1826 stretch: -200, 1827 depth: 650, 1828 modifier: 1, 1829 slideShadows: false, 1830 }, 1831 }, 1832 768: { 1833 slidesPerView: 1, 1834 coverflowEffect: { 1835 rotate: 0, 1836 stretch: -250, 1837 depth: 650, 1838 modifier: 1, 1839 slideShadows: false, 1840 }, 1841 }, 1842 992: { 1843 slidesPerView: 1, 1844 coverflowEffect: { 1845 rotate: 0, 1846 stretch: -350, 1847 depth: 650, 1848 modifier: 1, 1849 slideShadows: false, 1850 }, 1851 }, 1852 1200: { 1853 slidesPerView: 1, 1854 }, 1855 1700: { 1856 slidesPerView: 1, 1857 }, 1858 1920: { 1859 slidesPerView: 1, 1860 centeredSlides: true, 1861 coverflowEffect: { 1862 rotate: 0, 1863 stretch: -450, 1864 depth: 750, 1865 modifier: 3, 1866 slideShadows: false, 1867 }, 1868 }, 1869 }, 1870 }); 1871 } 1872 1873 if ($(".challenge-card-slider").length > 0) { 1874 var challengeCardSlider = new Swiper(".challenge-card-slider", { 1875 loop: true, 1876 effect: "fade", 1877 fadeEffect: { 1878 crossFade: true, 1879 }, 1880 speed: 700, 1881 navigation: { 1882 nextEl: ".challenge-card-slider-next", 1883 prevEl: ".challenge-card-slider-prev", 1884 }, 1885 pagination: { 1886 el: ".nav-pagination.swiper-pagination.challenge-card-slider-pagination", 1887 clickable: true, 1888 }, 1889 1890 spaceBetween: 0, 1891 1892 breakpoints: { 1893 320: { 1894 slidesPerView: 1, 1895 }, 1896 768: { 1897 slidesPerView: 1, 1898 }, 1899 992: { 1900 slidesPerView: 1, 1901 }, 1902 1200: { 1903 slidesPerView: 1, 1904 }, 1905 1700: { 1906 slidesPerView: 1, 1907 }, 1908 }, 1909 }); 1910 } 1911 if ($(".webinar-item-slider").length > 0) { 1912 var isLargeScreen = window.innerWidth >= 992; 1913 var webinarItemSlider = new Swiper(".webinar-item-slider", { 1914 loop: false, 1915 effect: "fade", 1916 fadeEffect: { 1917 crossFade: true, 1918 }, 1919 slideVisibleClass: "is-visible", 1920 speed: 700, 1921 watchSlidesVisibility: true, 1922 observer: true, 1923 spaceBetween: 25, 1924 observeParents: true, 1925 watchSlidesProgress: true, 1926 1927 simulateTouch: !isLargeScreen ? true : false, 1928 1929 navigation: { 1930 nextEl: ".webinar-item-slider-next", 1931 prevEl: ".webinar-item-slider-prev", 1932 }, 1933 pagination: { 1934 el: ".nav-pagination.swiper-pagination.webinar-item-slider-pagination", 1935 clickable: true, 1936 }, 1937 breakpoints: { 1938 320: { slidesPerView: 1, spaceBetween: 16 }, 1939 350: { slidesPerView: 1, spaceBetween: 16 }, 1940 400: { slidesPerView: 1, spaceBetween: 16 }, 1941 440: { slidesPerView: 1, spaceBetween: 16 }, 1942 525: { slidesPerView: 1, spaceBetween: 16 }, 1943 650: { slidesPerView: 1, spaceBetween: 16 }, 1944 768: { slidesPerView: 1, spaceBetween: 16 }, 1945 992: { slidesPerView: 1, spaceBetween: 0 }, 1946 1200: { slidesPerView: 1, spaceBetween: 0 }, 1947 1700: { slidesPerView: 1, spaceBetween: 0 }, 1948 }, 1949 }); 1950 1951 $(".webinar-item").removeClass("active").first().addClass("active"); 1952 1953 $(".webinar-item").each(function (index) { 1954 $(this).on("click", function () { 1955 const realIndex = index; 1956 webinarItemSlider.slideToLoop(realIndex); 1957 1958 $(".webinar-item").removeClass("active"); 1959 $(this).addClass("active"); 1960 }); 1961 }); 1962 1963 webinarItemSlider.on("slideChange", function () { 1964 var realIndex = webinarItemSlider.realIndex; 1965 $(".webinar-item").removeClass("active"); 1966 $(".webinar-item").eq(realIndex).addClass("active"); 1967 }); 1968 } 1969 1970 $(function () { 1971 window.setTimeout(function () { 1972 window.dispatchEvent(new Event("resize")); 1973 }, 300); 1974 }); 1975 $(window).focus(function () { 1976 { 1977 window.dispatchEvent(new Event("resize")); 1978 } 1979 }); 1980 }, 1981 mobileMenuOpenFn() { 1982 $("body").on("click", ".js-open-menu", function () { 1983 if ($(".header").hasClass("active")) { 1984 $(".header").removeClass("active"); 1985 $(".js-open-menu").removeClass("active"); 1986 $("html, body").removeClass("scroll-disabled"); 1987 $(".w-brief-banner .header-wrapper").removeClass("fixed"); 1988 } else { 1989 $(".header").addClass("active"); 1990 $(".js-open-menu").addClass("active"); 1991 $("html, body").addClass("scroll-disabled"); 1992 $(".w-brief-banner .header-wrapper").addClass("fixed"); 1993 } 1994 }); 1995 }, 1996 mobileMenuItemOpen() { 1997 if (window.innerWidth <= 991) { 1998 $("body").on( 1999 "click", 2000 ".header-menu-item.has-submenu .header-menu-item__title", 2001 function () { 2002 if ($(this).hasClass("active")) { 2003 $(this).removeClass("active"); 2004 $(".header-right").removeClass("active"); 2005 $("html, body").removeClass("scroll-disabled"); 2006 } else { 2007 $(this).addClass("active"); 2008 $(".header-right").addClass("active"); 2009 $("html, body").addClass("scroll-disabled"); 2010 } 2011 } 2012 ); 2013 2014 $("body").on("click", ".js-close-submenu", function () { 2015 $(".header-menu-item__title").removeClass("active"); 2016 $(".header-right").removeClass("active"); 2017 $(".submenu-overlay").removeClass("active"); 2018 }); 2019 2020 $("body").on( 2021 "click", 2022 ".header-menu-item.has-submenu.simple .header-menu-item__title", 2023 function () { 2024 $(".header-right").removeClass("active"); 2025 $(".submenu-overlay").addClass("active"); 2026 } 2027 ); 2028 } 2029 }, 2030 2031 langsMenuOpen() { 2032 if (window.innerWidth < 992) { 2033 $(".langs").click(function () { 2034 $(".langs-menu").toggleClass("active"); 2035 }); 2036 } 2037 }, 2038 mobileSubmenuOpen() { 2039 $(".mobile-menu-item.has-submenu").click(function () { 2040 if ($(this).hasClass("active")) { 2041 $(this).removeClass("active"); 2042 } else { 2043 $(".mobile-menu-item").removeClass("active"); 2044 $(this).addClass("active"); 2045 } 2046 }); 2047 if ($(window).width() < 992) { 2048 $(".footer-menu-item").click(function () { 2049 if ($(this).hasClass("active")) { 2050 $(this).removeClass("active"); 2051 } else { 2052 $(".footer-menu-item").removeClass("active"); 2053 $(this).addClass("active"); 2054 } 2055 }); 2056 } 2057 }, 2058 bodyClickControlFn() { 2059 $("body").on("click", function (e) { 2060 if ( 2061 e.target.closest(".langs-menu") === null && 2062 e.target.closest(".langs-menu-content") === null 2063 ) { 2064 $(".langs-menu").removeClass("active"); 2065 } 2066 if ( 2067 e.target.closest(".dropdown_bar-item") === null && 2068 e.target.closest(".dropdown_bar-item-box") === null 2069 ) { 2070 $(".dropdown_bar-item").removeClass("active"); 2071 } 2072 if ( 2073 e.target.closest(".header-user-icon") === null && 2074 e.target.closest(".header-user-menu") === null 2075 ) { 2076 if (window.innerWidth > 991) { 2077 $(".header-user-icon").removeClass("active"); 2078 } 2079 } 2080 if (
2081 e.target.closest(".notification-btn") === null && 2082 e.target.closest(".notification-content") === null 2083 ) { 2084 $(".notification-btn").removeClass("active"); 2085 } 2086 if ( 2087 e.target.closest(".hero-search-top") === null && 2088 e.target.closest(".hero-search-content") === null 2089 ) { 2090 $(".hero-search-top").removeClass("active"); 2091 } 2092 }); 2093 }, 2094 dropdown() { 2095 $(".dropdown_bar-item").on("click", function (e) { 2096 e.stopPropagation(); 2097 const isActive = $(this).hasClass("active"); 2098 2099 $(".dropdown_bar-item").not(this).removeClass("active"); 2100 2101 if (isActive) { 2102 $(this).removeClass("active"); 2103 return; 2104 } 2105 2106 $(this).addClass("active"); 2107 }); 2108 2109 $(".dropdown_bar-item-box__item").on("click", function (e) { 2110 e.stopPropagation(); 2111 const parentWrapper = $(this).closest(".dropdown_bar-item-box-wrapper"); 2112 const parent = parentWrapper.parent(); 2113 const isMultiple = parent.hasClass("multiple-choice"); 2114 2115 if (isMultiple) { 2116 $(this).toggleClass("active"); 2117 2118 const selectedCount = parentWrapper.find( 2119 ".dropdown_bar-item-box__item.active" 2120 ).length; 2121 2122 if (selectedCount > 0) { 2123 parent.find(".dropdown_bar-item-choiced").addClass("show"); 2124 parent.find(".dropdown_bar-item-choiced-count").text(selectedCount); 2125 } else { 2126 parent.find(".dropdown_bar-item-choiced").removeClass("show"); 2127 } 2128 } else { 2129 parentWrapper 2130 .find(".dropdown_bar-item-box__item") 2131 .removeClass("active"); 2132 $(this).addClass("active"); 2133 2134 const selectedText = $(this).text(); 2135 parent.find(".dropdown_bar-item__title").text(selectedText); 2136 2137 parent.addClass("selected").removeClass("active"); 2138 } 2139 }); 2140 2141 $(document).on("click", function () { 2142 $(".dropdown_bar-item").removeClass("active"); 2143 }); 2144 2145 $(".dropdown_bar-item .search-input").on("click", function (e) { 2146 e.stopPropagation(); 2147 }); 2148 2149 $(".dropdown_bar-item .search-input input").on("input", function () { 2150 const searchTerm = $(this).val().toLowerCase(); 2151 2152 $(".dropdown_bar-item-box__item").each(function () { 2153 const itemText = $(this).text().toLowerCase(); 2154 2155 if (itemText.indexOf(searchTerm) === -1) { 2156 $(this).addClass("hidden"); 2157 } else { 2158 $(this).removeClass("hidden"); 2159 } 2160 }); 2161 }); 2162 $(".dropdown_bar-item-box__item.selected.active").each(function () { 2163 const selectedText = $(this).text(); 2164 const parent = $(this).closest(".dropdown_bar-item-box-wrapper").parent(); 2165 parent.find(".dropdown_bar-item__title").text(selectedText); 2166 }); 2167 }, 2168 tabFn() { 2169 $(".tab").each(function () { 2170 const $tabContainer = $(this); 2171 2172 const $tabItems = $tabContainer.find(".js-tab-item"); 2173 2174 $tabItems.on("click", function (e) { 2175 e.preventDefault(); 2176 2177 const $clickedTab = $(this); 2178 const dataFilter = $clickedTab.data("filter"); 2179 const dataTab = $clickedTab.data("tab"); 2180 2181 const $allTabItems = $clickedTab 2182 .closest(".animated-tabs") 2183 .find(".js-tab-item"); 2184 const $filteredItems = $clickedTab 2185 .closest(".tab") 2186 .find(".filtered-item"); 2187 2188 $allTabItems.removeClass("active"); 2189 2190 if (dataFilter) { 2191 $allTabItems.removeClass("active"); 2192 $clickedTab.addClass("active"); 2193 $clickedTab 2194 .parent(".animated-tabs") 2195 .closest(".tab") 2196 .find(".filtered-item.active") 2197 .find(".js-tab-item.active") 2198 .trigger("click"); 2199 2200 if ($clickedTab.hasClass("js-filter-all")) { 2201 $filteredItems.removeClass("hide").addClass("active"); 2202 } else { 2203 const $targetFiltered = $filteredItems.filter("." + dataFilter); 2204 const $aiSection = $clickedTab.closest(".ai-features-section"); 2205 const $currentActive = $filteredItems.filter(".active"); 2206 2207 $filteredItems.removeClass("active tab-visible").addClass("hide"); 2208 $targetFiltered.removeClass("hide").addClass("active"); 2209 2210 if ($aiSection.length) { 2211 setTimeout(function () { 2212 $targetFiltered.addClass("tab-visible"); 2213 }, 20); 2214 } 2215 2216 setTimeout(() => { 2217 const $activeSubTab = $targetFiltered.find( 2218 ".tab-link-wrapper .js-tab-item.active" 2219 ); 2220 if ($activeSubTab.length === 0) { 2221 const $firstSubTab = $targetFiltered 2222 .find(".tab-link-wrapper .js-tab-item") 2223 .first(); 2224 if ($firstSubTab.length) { 2225 $firstSubTab.addClass("active"); 2226 const subFilter = $firstSubTab.data("filter"); 2227 const $subFiltered = $targetFiltered.find(".filtered-item"); 2228 2229 $subFiltered.removeClass("active").addClass("hide"); 2230 $subFiltered 2231 .filter("." + subFilter) 2232 .removeClass("hide") 2233 .addClass("active"); 2234 } 2235 } else { 2236 const subFilter = $activeSubTab.data("filter"); 2237 const $subFiltered = $targetFiltered.find(".filtered-item"); 2238 2239 $subFiltered.removeClass("active").addClass("hide"); 2240 $subFiltered 2241 .filter("." + subFilter) 2242 .removeClass("hide") 2243 .addClass("active"); 2244 } 2245 }, 0); 2246 } 2247 } else if (dataTab) { 2248 $clickedTab.addClass("active"); 2249 const $tabContent = $tabContainer.find(".tab-content"); 2250 2251 $tabContent.removeClass("filtering").addClass("filtered"); 2252 $tabContent.filter("." + dataTab).removeClass("filtered"); 2253 2254 const hasAccordion = $tabContainer 2255 .find(".tab-content." + dataTab) 2256 .find(".accordion-wrapper"); 2257 if (hasAccordion.length) { 2258 const firstItem = hasAccordion.find(".accordion-item").first(); 2259 if (!firstItem.hasClass("active")) { 2260 firstItem.find(".js-accordion-trigger").trigger("click"); 2261 } 2262 } 2263 } 2264 2265 setTimeout(() => { 2266 const $tabsWrapper = $clickedTab.closest(".animated-tabs"); 2267 app.updateTabLine($tabsWrapper, $clickedTab); 2268 }, 100); 2269 }); 2270 2271 const $initialTab = $tabContainer.find(".js-tab-item.active").first(); 2272 if ($initialTab.length > 0) { 2273 $initialTab.trigger("click"); 2274 } else { 2275 const $firstTab = $tabContainer 2276 .find(".js-tab-item") 2277 .first() 2278 .addClass("active"); 2279 $firstTab.trigger("click"); 2280 } 2281 }); 2282 2283 $(".animated-tabs .js-tab-item.active").each(function () { 2284 const $tabsWrapper = $(this).closest(".animated-tabs"); 2285 app.updateTabLine($tabsWrapper, $(this)); 2286 }); 2287 2288 setTimeout(function () { 2289 $(".ai-features-section .filtered-item.active").addClass("tab-visible"); 2290 }, 50); 2291 2292 $(".js-category-filter .dropdown_bar-item-box__item").on( 2293 "click", 2294 function (e) { 2295 e.preventDefault(); 2296 2297 const $clickedItem = $(this); 2298 const dataFilter = $clickedItem.data("filter"); 2299 2300 if (dataFilter) { 2301 const $tabContainer = $(".tab"); 2302 const $filteredItems = $tabContainer.find(".filtered-item"); 2303 2304 $filteredItems.removeClass("active").addClass("hide"); 2305 $filteredItems 2306 .filter("." + dataFilter) 2307 .removeClass("hide") 2308 .addClass("active"); 2309 2310 const $targetFiltered = $filteredItems.filter("." + dataFilter); 2311 const $firstSubTab = $targetFiltered 2312 .find(".tab-link-wrapper .js-tab-item") 2313 .first(); 2314 2315 if ($firstSubTab.length) { 2316 $targetFiltered 2317 .find(".tab-link-wrapper .js-tab-item") 2318 .removeClass("active"); 2319 $firstSubTab.addClass("active"); 2320 2321 const subFilter = $firstSubTab.data("filter"); 2322 const $subFiltered = $targetFiltered.find(".filtered-item"); 2323 2324 $subFiltered.removeClass("active").addClass("hide"); 2325 $subFiltered 2326 .filter("." + subFilter) 2327 .removeClass("hide") 2328 .addClass("active"); 2329 } 2330 } 2331 } 2332 ); 2333 2334 const resetSubTabsInActiveFilteredItems = () => { 2335 $(".tab .filtered-item.active").each(function () { 2336 const $filteredItem = $(this); 2337 const $subTabsWrapper = $filteredItem.find(".tab-link-wrapper"); 2338 const $subTabs = $subTabsWrapper.find(".js-tab-item"); 2339 2340 if ($subTabs.length > 0) { 2341 const $firstSubTab = $subTabs.first(); 2342 const $activeSubTab = $subTabs.filter(".active"); 2343 2344 if (!$firstSubTab.is($activeSubTab)) { 2345 $subTabs.removeClass("active"); 2346 $firstSubTab.addClass("active"); 2347 2348 const subFilter = $firstSubTab.data("filter"); 2349 const $subFiltered = $filteredItem.find(".filtered-item"); 2350 2351 $subFiltered.removeClass("active").addClass("hide"); 2352 $subFiltered 2353 .filter("." + subFilter) 2354 .removeClass("hide") 2355 .addClass("active"); 2356 2357 const $tabsWrapper = $firstSubTab.closest(".animated-tabs"); 2358 if ($tabsWrapper.length > 0) { 2359 app.updateTabLine($tabsWrapper, $firstSubTab); 2360 } 2361 } 2362 } 2363 }); 2364 }; 2365 2366 $(document).on( 2367 "click", 2368 ".js-outline-tab .js-tab-item[data-filter]", 2369 function () { 2370 setTimeout(() => { 2371 resetSubTabsInActiveFilteredItems(); 2372 }, 100); 2373 } 2374 ); 2375 }, 2376 2377 animatedTabs() { 2378 $(".animated-tabs").each(function () { 2379 const $tabsWrapper = $(this); 2380 app.updateTabLine($tabsWrapper); 2381 2382 $tabsWrapper.find(".animated-tabs-item").on("click", function (e) { 2383 e.preventDefault(); 2384 }); 2385 }); 2386 }, 2387 2388 updateTabLine($tabsWrapper, $activeTab = null) { 2389 if (!$tabsWrapper || !$tabsWrapper.length) return; 2390 2391 const $activeItem = 2392 $activeTab || $tabsWrapper.find(".animated-tabs-item.active, .tab-item-landing.active").first(); 2393 const $line = $tabsWrapper.find(".animated-tabs-line"); 2394 2395 if (!$activeItem.length || !$line.length) return; 2396 2397 const isFixed = $tabsWrapper.closest(".tab-link-wrapper").hasClass("fixed"); 2398 const activeWidth = $activeItem.outerWidth(); 2399 const activePos = $activeItem.position(); 2400 const scrollLeft = $tabsWrapper.scrollLeft(); 2401 2402 if (isFixed) { 2403 const containerOffset = $tabsWrapper.offset().left; 2404 const itemOffset = $activeItem.offset().left; 2405 const relativeLeft = itemOffset - containerOffset + scrollLeft; 2406 2407 $line.css({ 2408 left: relativeLeft, 2409 width: activeWidth, 2410 }); 2411 } else { 2412 $line.css({ 2413 left: activePos.left + scrollLeft, 2414 width: activeWidth, 2415 }); 2416 } 2417 2418 $line.removeClass("blue orange light-purple purple red green"); 2419 const colorClass = $activeItem 2420 .attr("class") 2421 .split(" ") 2422 .find((cls) => 2423 ["blue", "orange", "light-purple", "purple", "red", "green"].includes( 2424 cls 2425 ) 2426 ); 2427 if (colorClass) { 2428 $line.addClass(colorClass); 2429 } 2430 }, 2431 2432 fixedTab: function () { 2433 var tab = $(".tab .tab-link-wrapper"); 2434 if (tab.length > 0) { 2435 var scrollPos = $(window).scrollTop(); 2436 var wrapper = $(".wrapper"); 2437 if (wrapper.length > 0) { 2438 var firstSection = wrapper.find(".section").first(); 2439 var lastSection = wrapper.find(".section").last(); 2440 2441 if (firstSection.length > 0 && lastSection.length > 0) { 2442 var firstSectionPos = firstSection.offset().top; 2443 var lastSectionPos = lastSection.offset().top + 300; 2444 var positionTopValue = parseInt( 2445 window 2446 .getComputedStyle(document.documentElement) 2447 .getPropertyValue("--tab-position") 2448 .trim() 2449 ); 2450 var activeTabItem = $(".js-scroll-item.active"); 2451 2452 if (activeTabItem.length > 0) { 2453 var parent = activeTabItem.parent(".animated-tabs"); 2454 var activeWidth = activeTabItem.outerWidth(); 2455 var activePos = activeTabItem.position(); 2456 2457 $(".js-scroll-item").each(function () { 2458 var targetSection = $("#" + $(this).data("target"));
2459 if (targetSection.length > 0) { 2460 var sectionPos = targetSection.offset().top - 100; 2461 if (scrollPos > sectionPos - 100) { 2462 $(".js-scroll-item").removeClass("active"); 2463 $(this).addClass("active"); 2464 } 2465 } 2466 }); 2467 2468 if (parent.length > 0) { 2469 app.updateTabLine(parent); 2470 2471 if ($(window).width() < 992) { 2472 parent.stop(true).animate( 2473 { 2474 scrollLeft: activePos.left + parent.scrollLeft() - 50, 2475 }, 2476 200, 2477 function () { 2478 app.updateTabLine(parent); 2479 } 2480 ); 2481 } 2482 } 2483 2484 if (!isNaN(positionTopValue) && scrollPos > positionTopValue) { 2485 tab.addClass("fixed").removeClass("hidden"); 2486 if (scrollPos > lastSection.offset().top + 300) { 2487 tab.addClass("hidden"); 2488 } 2489 } else { 2490 tab.removeClass("fixed hidden"); 2491 } 2492 } 2493 } 2494 } 2495 } else { 2496 } 2497 2498 $(".js-scroll-item").on("click", function (e) { 2499 e.preventDefault(); 2500 2501 var target = $(this).data("target"); 2502 var targetSection = $("#" + target); 2503 2504 if (targetSection.length > 0) { 2505 var newUrl = window.location.pathname + "#" + target; 2506 history.replaceState(null, null, newUrl); 2507 } 2508 }); 2509 }, 2510 scrollItem() { 2511 $("body").on("click", ".js-scroll-item", function (e) { 2512 e.preventDefault(); 2513 let id = ""; 2514 let scrollPos = ""; 2515 2516 if ($(this).hasClass("animated-tabs-item")) { 2517 $(".js-scroll-item").removeClass("active"); 2518 $(this).addClass("active"); 2519 } 2520 if ($(this).data("target")) { 2521 id = $(this).data("target"); 2522 if (window.innerWidth < 992) { 2523 scrollPos = $("#" + id).offset().top - 100; 2524 } else scrollPos = $("#" + id).offset().top - 20; 2525 } else { 2526 id = $(this).attr("href"); 2527 scrollPos = $(id).offset().top; 2528 } 2529 $("html, body").animate( 2530 { 2531 scrollTop: scrollPos, 2532 }, 2533 200 2534 ); 2535 }); 2536 $("body").on("click", ".js-scroll-link-item", function (e) { 2537 e.preventDefault(); 2538 let id = $(this).attr("href"); 2539 let scrollPos = $(id).offset().top; 2540 $("html, body").animate( 2541 { 2542 scrollTop: scrollPos, 2543 }, 2544 200 2545 ); 2546 }); 2547 }, 2548 2549 productStrategySectionImgChange() { 2550 $("body").on("click", ".js-filter-item", function () { 2551 const index = $(this).data("index"); 2552 2553 $(".product-strategy-img").removeClass("active"); 2554 2555 $('.product-strategy-img[data-index="' + index + '"]').addClass("active"); 2556 }); 2557 }, 2558 2559 accordionFn() { 2560 $("body").on("click", ".js-accordion-trigger", function () { 2561 const trigger = $(this); 2562 const accordionGroup = trigger.closest(".accordion-wrapper"); 2563 const item = trigger.closest(".accordion-item"); 2564 const content = item.find(".accordion-calc"); 2565 const contentWrapper = item.find(".accordion-content"); 2566 2567 let multipleShow = accordionGroup.data("multiple-show") === true; 2568 2569 if (item.hasClass("active")) { 2570 trigger.removeClass("active"); 2571 item.removeClass("active"); 2572 contentWrapper.css("height", 0); 2573 } else { 2574 if (!multipleShow) { 2575 accordionGroup 2576 .find(".accordion-item.active") 2577 .removeClass("active") 2578 .find(".accordion-content") 2579 .css("height", 0); 2580 accordionGroup 2581 .find(".js-accordion-trigger.active") 2582 .removeClass("active"); 2583 } 2584 2585 trigger.addClass("active"); 2586 item.addClass("active"); 2587 contentWrapper.css("height", content.outerHeight(true)); 2588 } 2589 }); 2590 2591 $(".accordion-item.opened .js-accordion-trigger").trigger("click"); 2592 }, 2593 recalcAccordionHeights() { 2594 var itemContent; 2595 $.each($(".accordion-item.active"), function (i, val) { 2596 itemContent = $(this).find(".accordion-calc"); 2597 itemContent 2598 .parent(".accordion-content") 2599 .css("height", itemContent.outerHeight(true)); 2600 }); 2601 }, 2602 validateForm() { 2603 $(".validateForm").each(function () {
2604 $(this).validate({ 2605 rules: { 2606 mail: "required email", 2607 namesurname: { 2608 required: true, 2609 }, 2610 name: { 2611 required: true, 2612 }, 2613 2614 surname: { 2615 required: true, 2616 }, 2617 phone: { 2618 required: true, 2619 }, 2620 phoneCode: { 2621 required: true, 2622 }, 2623 library: { 2624 required: true, 2625 }, 2626 checkbox: { 2627 required: true, 2628 }, 2629 ccardskt: { 2630 required: true, 2631 }, 2632 detailCheckbox: { 2633 required: true, 2634 }, 2635 ckullaniciadi: { 2636 required: true, 2637 }, 2638 accessCode: { 2639 required: true, 2640 }, 2641 oldpassword: { 2642 required: true, 2643 minlength: 8, 2644 maxlength: 14, 2645 }, 2646 password: { 2647 required: true, 2648 minlength: 8, 2649 maxlength: 14, 2650 }, 2651 retry_password: { 2652 required: true, 2653 minlength: 8, 2654 maxlength: 14, 2655 equalTo: "#password", 2656 }, 2657 cpasswordnew: { 2658 required: true, 2659 minlength: 8, 2660 maxlength: 14, 2661 }, 2662 2663 cnewpasswordagain: { 2664 required: true, 2665 minlength: 8, 2666 maxlength: 14, 2667 equalTo: "#cnewpassword", 2668 }, 2669 verification: { 2670 required: true, 2671 maxlength: 1, 2672 }, 2673 sozlesme: { 2674 required: true, 2675 }, 2676 subject: { 2677 required: true, 2678 }, 2679 message: { 2680 required: true, 2681 }, 2682 rating: { 2683 required: true, 2684 }, 2685 comment: { 2686 required: true, 2687 }, 2688 }, 2689 messages: { 2690 mail: { 2691 required: "This field is required!", 2692 email: "Please enter a valid e-mail address!", 2693 }, 2694 namesurname: { 2695 required: "This field is required!", 2696 }, 2697 name: { 2698 required: "This field is required!", 2699 }, 2700 surname: { 2701 required: "This field is required!", 2702 }, 2703 phone: { 2704 required: "This field is required!", 2705 }, 2706 phoneCode: { 2707 required: "This field is required!", 2708 }, 2709 checkbox: { 2710 required: "This field is required!", 2711 }, 2712 detailCheckbox: { 2713 required: "This field is required!", 2714 }, 2715 library: { 2716 required: "This field is required!", 2717 }, 2718 accessCode: { 2719 required: "This field is required!", 2720 }, 2721 2722 subject: { 2723 required: "This field is required!", 2724 }, 2725 message: { 2726 required: "This field is required!", 2727 }, 2728 kitapadi: { 2729 required: "This field is required!", 2730 }, 2731 rating: { 2732 required: "This field is required!", 2733 }, 2734 comment: { 2735 required: "This field is required!", 2736 }, 2737 user: { 2738 required: "Select A User!", 2739 }, 2740 2741 oldpassword: { 2742 required: "This field is required!", 2743 minlength: jQuery.validator.format( 2744 "You must enter at least {0} characters!" 2745 ), 2746 maxlength: jQuery.validator.format( 2747 "Maximum allowed length is {0} characters!" 2748 ), 2749 }, 2750 password: { 2751 required: "This field is required!", 2752 minlength: jQuery.validator.format( 2753 "You must enter at least {0} characters!" 2754 ), 2755 maxlength: jQuery.validator.format( 2756 "Maximum allowed length is {0} characters!" 2757 ), 2758 }, 2759 retry_password: { 2760 required: "This field is required!", 2761 minlength: jQuery.validator.format( 2762 "You must enter at least {0} characters!" 2763 ), 2764 maxlength: jQuery.validator.format( 2765 "Maximum allowed length is {0} characters!" 2766 ), 2767 }, 2768 cpasswordagain: { 2769 required: "This field is required!", 2770 minlength: jQuery.validator.format( 2771 "You must enter at least {0} characters!" 2772 ), 2773 maxlength: jQuery.validator.format( 2774 "Maximum allowed length is {0} characters!" 2775 ), 2776 equalTo: "Passwords Don't Match", 2777 }, 2778 cnewpasswordagain: { 2779 required: "This field is required!", 2780 minlength: jQuery.validator.format( 2781 "You must enter at least {0} characters!" 2782 ), 2783 maxlength: jQuery.validator.format( 2784 "Maximum allowed length is {0} characters!" 2785 ), 2786 equalTo: "Passwords Don't Match", 2787 }, 2788 sozlesme: { 2789 required: "This field is required!", 2790 }, 2791 verification: { 2792 required: "This field is required!", 2793 }, 2794 }, 2795 highlight: function (element) { 2796 $(element).closest(".input-row").addClass("input-error"); 2797 }, 2798 unhighlight: function (element) { 2799 $(element).closest(".input-row").removeClass("input-error"); 2800 }, 2801 }); 2802 }); 2803 }, 2804 2805 modalFn: function () { 2806 $(".js-open-modal").on("click", function (e) { 2807 e.preventDefault(); 2808 2809 $(".overlay, .js-modal").removeClass("active"); 2810 2811 $(".overlay").addClass("active"); 2812 var id = $(this).data("modal-id"); 2813 $('.js-modal[data-modal-id="' + id + '"]').addClass("active"); 2814 2815 $("html, body").addClass("scroll-disabled"); 2816 }); 2817 2818 $(".js-close-modal").on("click", function () { 2819 $(".overlay,.js-modal").removeClass("active"); 2820 $("html, body").removeClass("scroll-disabled"); 2821 }); 2822 2823 $(document).keydown(function (e) { 2824 if (e.key === "Escape") { 2825 $(".overlay,.js-modal").removeClass("active"); 2826 $("html, body").removeClass("scroll-disabled"); 2827 } 2828 }); 2829 2830 $("body").on("click", ".overlay", function () { 2831 $(".overlay,.js-modal").removeClass("active"); 2832 $("html, body").removeClass("scroll-disabled"); 2833 }); 2834 }, 2835 2836 overlayClickControlFn() { 2837 $(".overlay, .submenu-overlay").on("click", function (e) { 2838 $("html, body").removeClass("scroll-disabled"); 2839 $(".overlay").removeClass("active"); 2840 $(".submenu-overlay").removeClass("active"); 2841 $( 2842 ".header-menu-item.has-submenu.simple .header-menu-item__title" 2843 ).removeClass("active"); 2844 $(".js-open-search").removeClass("active"); 2845 $(".js-open-subscribe").removeClass("active"); 2846 }); 2847 }, 2848 inputPhoneControl() { 2849 $(".phone-mask").inputmask({ 2850 mask: "999 999 99 99", 2851 showMaskOnHover: false, 2852 showMaskOnFocus: true, 2853 }); 2854 }, 2855 2856 animationTyping() { 2857 if ($(".animation-text").length > 0) { 2858 const $wordElements = $(".animation-text .word"); 2859 const words = $wordElements 2860 .map(function () { 2861 return $(this).text().trim(); 2862 }) 2863 .get(); 2864 2865 let currentWordIndex = 0; 2866 let isDeleting = true; 2867 let text = words[0]; 2868 const typingSpeed = 150; 2869 const deletingSpeed = 100; 2870 const delayAfterTyping = 1000; 2871 const delayAfterDeleting = 1000; 2872 2873 $wordElements.removeClass("active").text(""); 2874 $($wordElements.get(currentWordIndex)).addClass("active").text(words[0]); 2875 2876 function type() { 2877 const currentWord = words[currentWordIndex]; 2878 const $currentElement = $($wordElements.get(currentWordIndex)); 2879 2880 if (isDeleting) { 2881 text = currentWord.substring(0, text.length - 1); 2882 } else { 2883 text = currentWord.substring(0, text.length + 1); 2884 } 2885 2886 $currentElement.text(text); 2887 2888 if (!isDeleting && text === currentWord) { 2889 setTimeout(() => { 2890 isDeleting = true; 2891 type(); 2892 }, delayAfterTyping); 2893 } else if (isDeleting && text === "") { 2894 setTimeout(() => { 2895 isDeleting = false;
2896 $currentElement.removeClass("active").text(""); 2897 currentWordIndex = (currentWordIndex + 1) % words.length; 2898 const $nextElement = $($wordElements.get(currentWordIndex)); 2899 $nextElement.addClass("active").text(""); 2900 type(); 2901 }, delayAfterDeleting); 2902 } else { 2903 setTimeout(type, isDeleting ? deletingSpeed : typingSpeed); 2904 } 2905 } 2906 2907 setTimeout(type, 1000); 2908 } 2909 }, 2910 2911 initBeforeAfterSlider() { 2912 const windowWidth = $(window).width(); 2913 if (windowWidth > 991) { 2914 const sliders = document.querySelectorAll(".transformation-slider"); 2915 2916 sliders.forEach((slider) => { 2917 const handle = slider.querySelector(".js-slider-handle"); 2918 const afterItem = slider.querySelector(".js-after"); 2919 const beforeBtns = slider.querySelectorAll(".before-btn"); 2920 const afterBtns = slider.querySelectorAll(".after-btn"); 2921 2922 if (!handle || !afterItem) return; 2923 2924 let isDragging = false; 2925 2926 const setPosition = (percent, withTransition = false) => { 2927 if (withTransition) { 2928 handle.style.transition = "left 0.5s ease"; 2929 afterItem.style.transition = "clip-path 0.5s ease"; 2930 } else { 2931 handle.style.transition = "none"; 2932 afterItem.style.transition = "none"; 2933 } 2934 2935 handle.style.left = `${percent}%`; 2936 afterItem.style.clipPath = `inset(0 ${100 - percent}% 0 0)`; 2937 }; 2938 2939 handle.addEventListener("mousedown", () => { 2940 isDragging = true; 2941 }); 2942 2943 window.addEventListener("mouseup", () => { 2944 isDragging = false; 2945 }); 2946 2947 window.addEventListener("mousemove", (e) => { 2948 if (!isDragging) return; 2949 const rect = slider.getBoundingClientRect(); 2950 const offsetX = Math.min( 2951 Math.max(e.clientX - rect.left, 0), 2952 rect.width 2953 ); 2954 const percent = (offsetX / rect.width) * 100; 2955 setPosition(percent, false); 2956 }); 2957 2958 handle.addEventListener("touchstart", () => { 2959 isDragging = true; 2960 setPosition(null, false); 2961 }); 2962 2963 window.addEventListener("touchend", () => { 2964 isDragging = false; 2965 }); 2966 2967 window.addEventListener("touchmove", (e) => { 2968 if (!isDragging) return; 2969 const rect = slider.getBoundingClientRect(); 2970 const offsetX = Math.min( 2971 Math.max(e.touches[0].clientX - rect.left, 0), 2972 rect.width 2973 ); 2974 const percent = (offsetX / rect.width) * 100; 2975 setPosition(percent, false); 2976 }); 2977 2978 beforeBtns.forEach((btn) => { 2979 btn.addEventListener("click", () => { 2980 setPosition(100, true); 2981 }); 2982 }); 2983 2984 afterBtns.forEach((btn) => { 2985 btn.addEventListener("click", () => { 2986 setPosition(0, true); 2987 }); 2988 }); 2989 2990 setPosition(70); 2991 }); 2992 } 2993 }, 2994 2995 dateTab() { 2996 $(document).ready(function () { 2997 $(".date-tab").each(function () { 2998 var $tabWrapper = $(this); 2999 var activeFilter = $tabWrapper 3000 .find(".date-tab-item.active") 3001 .data("filter"); 3002 3003 var $container = $tabWrapper.parent(); 3004 $container.find(".price-info").addClass("hidden"); 3005 $container.find(".price-info.js-" + activeFilter).removeClass("hidden"); 3006 3007 $tabWrapper.find(".date-tab-item").on("click", function () { 3008 var selectedFilter = $(this).data("filter"); 3009 3010 $tabWrapper.find(".date-tab-item").removeClass("active"); 3011 $(this).addClass("active"); 3012 3013 $container.find(".price-info").addClass("hidden"); 3014 $container 3015 .find(".price-info.js-" + selectedFilter) 3016 .removeClass("hidden"); 3017 }); 3018 }); 3019 }); 3020 }, 3021 showMoreList() { 3022 $(".js-show-more-bar").on("click", function () { 3023 $(this).toggleClass("active"); 3024 $(this) 3025 .parent(".js-collapse-wrapper") 3026 .find(".js-show-more-list") 3027 .toggleClass("active"); 3028 $(this).find(".show-more-button-text.show").toggleClass("active"); 3029 $(this).find(".show-more-button-text.hide").toggleClass("active"); 3030 $(this).find(".show-more-button-icon").toggleClass("active"); 3031 }); 3032 }, 3033 3034 searchOpen() {
3035 const $searchWrapper = $(".js-open-search"); 3036 const $closeBtn = $(".js-close-search"); 3037 3038 $searchWrapper.on("click", function () { 3039 $(this).addClass("active"); 3040 $(".overlay").addClass("active"); 3041 3042 setTimeout(() => { 3043 $(".search-content .inputMain").focus(); 3044 }, 100); 3045 }); 3046 3047 $closeBtn.on("click", function () { 3048 $searchWrapper.removeClass("active"); 3049 $(".overlay").removeClass("active"); 3050 }); 3051 }, 3052 subscribeOpen() { 3053 const $searchWrapper = $(".js-open-subscribe"); 3054 const $closeBtn = $(".js-close-subscribe"); 3055 3056 $searchWrapper.on("click", function () { 3057 $(this).addClass("active"); 3058 $(".overlay").addClass("active"); 3059 }); 3060 3061 $closeBtn.on("click", function () { 3062 $searchWrapper.removeClass("active"); 3063 $(".overlay").removeClass("active"); 3064 }); 3065 }, 3066 3067 appImageLoad() { 3068 $(".app-section-img").css("z-index", "5"); 3069 }, 3070 3071 heroScrollImages() { 3072 $(document).ready(function () { 3073 const $scrollInner = $(".hero-right .scroll-inner"); 3074 const $items = $scrollInner.children(".js-animation-img"); 3075 const $cloned = $items.clone(); 3076 $scrollInner.append($cloned); 3077 3078 let pos = 0; 3079 let velocity = 0.5; 3080 let targetVelocity = 1; 3081 let animationFrameId; 3082 const isMobile = window.innerWidth <= 991; 3083 3084 function animate() { 3085 velocity += (targetVelocity - velocity) * 0.05; 3086 3087 pos -= velocity; 3088 if (!$scrollInner[0]) return; 3089 3090 if (isMobile) { 3091 const scrollWidth = $scrollInner[0].scrollWidth / 2; 3092 if (Math.abs(pos) >= scrollWidth) pos = 0; 3093 $scrollInner.css("transform", `translateX(${pos}px)`); 3094 } else { 3095 const scrollHeight = $scrollInner[0].scrollHeight / 2; 3096 if (Math.abs(pos) >= scrollHeight) pos = 0; 3097 $scrollInner.css("transform", `translateY(${pos}px)`); 3098 } 3099 3100 animationFrameId = requestAnimationFrame(animate); 3101 } 3102 3103 animate(); 3104 3105 $(".hero-right") 3106 .on("mouseenter", function () { 3107 targetVelocity = 0; 3108 }) 3109 .on("mouseleave", function () { 3110 targetVelocity = 1; 3111 }); 3112 }); 3113 }, 3114 3115 careerHeroImgSlides() { 3116 const run = () => { 3117 const container = document.querySelector(".js-scrolling"); 3118 3119 if (!container) { 3120 return; 3121 } 3122 3123 const images = Array.from(container.children); 3124 images.forEach((img) => { 3125 const clone = img.cloneNode(true); 3126 container.appendChild(clone); 3127 }); 3128 3129 let scrollX = 0; 3130 const speed = 0.5; 3131 3132 const animate = () => { 3133 scrollX += speed; 3134 if (scrollX >= container.scrollWidth / 2) { 3135 scrollX = 0; 3136 } 3137 container.scrollLeft = scrollX; 3138 requestAnimationFrame(animate); 3139 }; 3140 3141 animate(); 3142 }; 3143 3144 if (document.readyState === "loading") { 3145 document.addEventListener("DOMContentLoaded", run); 3146 } else { 3147 run(); 3148 } 3149 }, 3150 3151 brandsLogosSlides() { 3152 const wrappers = document.querySelectorAll(".brands-item-wrapper"); 3153 3154 wrappers.forEach((wrapper) => { 3155 const container = wrapper.querySelector(".brands-item-content"); 3156 if (!container) return; 3157 3158 const items = Array.from(container.querySelectorAll(".brands-item")); 3159 if (items.length <= 5) { 3160 wrapper.classList.add("no-mask"); 3161 return; 3162 } 3163 3164 const cloneTimes = 3; 3165 for (let i = 0; i < cloneTimes; i++) { 3166 items.forEach((item) => { 3167 const clone = item.cloneNode(true); 3168 container.appendChild(clone); 3169 }); 3170 } 3171 3172 let pos = 0; 3173 const speed = 0.5; 3174 3175 function animate() { 3176 const resetWidth = container.scrollWidth / 2; 3177 pos -= speed; 3178 3179 container.style.transform = `translateX(${pos}px)`; 3180 3181 if (pos <= -resetWidth) { 3182 pos = 0; 3183 } 3184 3185 requestAnimationFrame(animate); 3186 } 3187 3188 animate(); 3189 }); 3190 }, 3191 3192 careerScrollingImageSection() { 3193 const container = document.querySelector(".scrolling-img-section"); 3194 if (!container) return; 3195 3196 const items = Array.from(container.children);
3197 items.forEach((item) => { 3198 const clone = item.cloneNode(true); 3199 container.appendChild(clone); 3200 }); 3201 3202 let scrollPosition = 0; 3203 const speed = 0.5; 3204 3205 function animateScroll() { 3206 scrollPosition += speed; 3207 container.scrollLeft = scrollPosition; 3208 3209 const resetPoint = container.scrollWidth / 2; 3210 3211 if (scrollPosition >= resetPoint) { 3212 scrollPosition -= resetPoint; 3213 container.scrollLeft = scrollPosition; 3214 } 3215 3216 requestAnimationFrame(animateScroll); 3217 } 3218 3219 window.addEventListener("load", () => { 3220 container.scrollLeft = 0; 3221 animateScroll(); 3222 }); 3223 }, 3224 3225 stepItemLineHeightControl() { 3226 $(document).ready(function () { 3227 var $wrapper = $(".step-item-wrapper"); 3228 var $line = $wrapper.find(".line"); 3229 var $lastBottom = $wrapper.find(".step-item-bottom").last(); 3230 3231 if ( 3232 $wrapper.length && 3233 $lastBottom.length && 3234 $wrapper.offset() && 3235 $lastBottom.offset() 3236 ) { 3237 var wrapperTop = $wrapper.offset().top; 3238 var bottomTop = $lastBottom.offset().top; 3239 var lineHeight = bottomTop - wrapperTop - 26; 3240 3241 $line.css("height", lineHeight + "px"); 3242 } 3243 }); 3244 }, 3245 3246 appCircleControl() { 3247 $(document).ready(function () { 3248 const $items = $(".app-cycle-content-item-wrapper"); 3249 let currentIndex = 0; 3250 3251 const isMobile = window.innerWidth < 992; 3252 let $pagination = null; 3253 3254 if (isMobile) { 3255 $pagination = $(".pagination"); 3256 $pagination.empty(); 3257 3258 $items.each(function (i) { 3259 const $dot = $('<div class="pagination-item"></div>'); 3260 3261 if ($(this).hasClass("active")) { 3262 $dot.addClass("active"); 3263 currentIndex = i; 3264 } 3265 3266 $pagination.append($dot); 3267 }); 3268 } 3269 3270 function updateView() { 3271 $items.removeClass("active").eq(currentIndex).addClass("active"); 3272 3273 if (isMobile) { 3274 $(".pagination-item") 3275 .removeClass("active") 3276 .eq(currentIndex) 3277 .addClass("active"); 3278 } 3279 3280 const rotation = currentIndex * 90; 3281 $(".cycle-center .center-circle").css( 3282 "transform", 3283 `rotate(${rotation}deg)` 3284 ); 3285 } 3286 3287 $(".app-cycle .label").on("click", function () { 3288 const targetFilter = $(this).data("filter"); 3289 3290 $(".app-cycle-content-item-wrapper").removeClass("active"); 3291 3292 $(".app-cycle-content-item-wrapper").each(function () { 3293 const itemFilter = $(this).find(".label").data("filter"); 3294 if (itemFilter === targetFilter) { 3295 $(this).addClass("active"); 3296 currentIndex = i; 3297 } 3298 }); 3299 3300 updateView(); 3301 }); 3302 3303 if (isMobile) { 3304 $(".btn-next").on("click", function () { 3305 currentIndex = (currentIndex + 1) % $items.length; 3306 updateView(); 3307 }); 3308 3309 $(".btn-prev").on("click", function () { 3310 currentIndex = (currentIndex - 1 + $items.length) % $items.length; 3311 updateView(); 3312 }); 3313 3314 $pagination.on("click", ".pagination-item", function () { 3315 currentIndex = $(this).index(); 3316 updateView(); 3317 }); 3318 } 3319 }); 3320 }, 3321 3322 sidebarContentOpen() { 3323 $(".js-open-sidebar-content").on("click", function (e) { 3324 e.preventDefault(); 3325 3326 const $clickedTop = $(this).closest(".sidebar-item-top"); 3327 3328 $clickedTop.toggleClass("opened"); 3329 }); 3330 }, 3331 3332 reportDetailProgressBar() { 3333 $(document).ready(function () { 3334 const $items = $(".sidebar-item-top"); 3335 const total = $items.length; 3336 3337 const read = $items.filter(function () { 3338 return ( 3339 $(this).hasClass("chapter-read") || $(this).hasClass("page-active") 3340 ); 3341 }).length; 3342 3343 if (total > 0) { 3344 const percentage = (read / total) * 100; 3345 $(".progress span").css("width", `${percentage}%`); 3346 } 3347 }); 3348 }, 3349 3350 sidebarSearchFn() { 3351 jQuery(document).ready(function ($) { 3352 $(".sidebar .inputMain").on("input", function () { 3353 var searchTerm = $(this).val().toLowerCase().trim(); 3354 3355 $(".sidebar-item").each(function () { 3356 var item = $(this); 3357 var matchCount = 0; 3358 3359 item.find(".sidebar-item-link").each(function () { 3360 var link = $(this);
3361 var content = link.data("content").toLowerCase(); 3362 3363 if (searchTerm === "" || content.includes(searchTerm)) { 3364 link.show(); 3365 matchCount++; 3366 } else { 3367 link.hide(); 3368 } 3369 }); 3370 3371 if (searchTerm === "" || matchCount > 0) { 3372 item.show(); 3373 } else { 3374 item.hide(); 3375 } 3376 }); 3377 }); 3378 }); 3379 }, 3380 3381 mobileSidebarOpen() { 3382 $(document).ready(function () { 3383 $(".js-open-sidebar").on("click", function (e) { 3384 e.preventDefault(); 3385 $(".js-sidebar").addClass("active"); 3386 $(".header-wrapper").addClass("no-fixed"); 3387 $("html, body").addClass("scroll-disabled"); 3388 }); 3389 $(".js-close-sidebar").on("click", function (e) { 3390 e.preventDefault(); 3391 $(".js-sidebar").removeClass("active"); 3392 $(".header-wrapper").removeClass("no-fixed"); 3393 $("html, body").removeClass("scroll-disabled"); 3394 }); 3395 $(".sidebar-item-link").on("click", function () { 3396 $(".js-sidebar").removeClass("active"); 3397 $(".header-wrapper").removeClass("no-fixed"); 3398 $("html, body").removeClass("scroll-disabled"); 3399 }); 3400 }); 3401 }, 3402 3403 modalVideoControlFn() { 3404 $(document).ready(function () { 3405 $(".js-modal-btn").modalVideo({ 3406 channel: "youtube", 3407 autoplay: 1, 3408 youtube: { 3409 autoplay: 1, 3410 mute: 1, 3411 }, 3412 }); 3413 $(".js-modal-btn-vimeo").modalVideo({ channel: "vimeo" }); 3414 }); 3415 }, 3416 3417 scrollRevealFn() { 3418 if (!document.querySelector('.landing-page-v2')) return; 3419 if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; 3420 3421 const io = new IntersectionObserver( 3422 (entries) => { 3423 entries.forEach((entry) => { 3424 if (entry.isIntersecting) { 3425 entry.target.classList.add('sr-visible'); 3426 io.unobserve(entry.target); 3427 } 3428 }); 3429 }, 3430 { threshold: 0.1, rootMargin: '0px 0px -48px 0px' } 3431 ); 3432 3433 const reveal = (el, delay, extraClass) => { 3434 if (extraClass) el.classList.add(extraClass); 3435 if (delay) el.style.setProperty('--sr-delay', delay + 's'); 3436 el.classList.add('sr-ready'); 3437 io.observe(el); 3438 }; 3439 3440 // Section heads 3441 document.querySelectorAll('.landing-page-v2 .section-head').forEach((el) => { 3442 reveal(el, 0, ''); 3443 }); 3444 3445 // Staggered grid items 3446 const staggerConfigs = [ 3447 { parent: '.count-item-grid', child: '.count-item', extra: '' }, 3448 { parent: '.feature-item-grid', child: '.feature-item', extra: 'sr-scale' }, 3449 { parent: '.product-dev-item-grid', child: '.product-dev-item', extra: 'sr-scale' }, 3450 ]; 3451 3452 staggerConfigs.forEach(({ parent, child, extra }) => { 3453 document.querySelectorAll('.landing-page-v2 ' + parent).forEach((parentEl) => { 3454 parentEl.querySelectorAll(child).forEach((el, idx) => { 3455 reveal(el, idx * 0.09, extra); 3456 }); 3457 }); 3458 }); 3459 3460 // Timeline items 3461 document.querySelectorAll('.landing-page-v2 .timeline-item').forEach((el, idx) => { 3462 reveal(el, idx * 0.1, ''); 3463 }); 3464 3465 // Section content left/right columns 3466 document.querySelectorAll( 3467 '.landing-page-v2 .section--row .section-content-left, .landing-page-v2 .section--row .section-content-right' 3468 ).forEach((el) => { 3469 reveal(el, 0, ''); 3470 }); 3471 }, 3472 3473 landingTabScroll() { 3474 if (!$("body").hasClass("testing-ai-hero")) return; 3475 3476 var isDark = $(".landing-page-v2-dark").length > 0; 3477 var $wrapper = $(".landing-page-v2"); 3478 if ($wrapper.length === 0) return; 3479 3480 var $breadcrumbWrapper = $wrapper.find(".breadcrumb-wrapper"); 3481 if ($breadcrumbWrapper.length === 0) return; 3482 3483 var $allTabItems = $breadcrumbWrapper.find(".tab-item-landing"); 3484 if ($allTabItems.length === 0) return; 3485 3486 var $animatedTabs = $breadcrumbWrapper.find(".animated-tabs"); 3487 var $line = $animatedTabs.find(".animated-tabs-line"); 3488 var scrollThreshold = 80; 3489 3490 function buildSections() { 3491 var sections = []; 3492 $allTabItems.each(function () { 3493 var anchor = $(this).attr("data-anchor") || ""; 3494 var href = $(this).attr("href") || ""; 3495 var hash = ""; 3496 if (anchor && anchor.charAt(0) === "#") { 3497 hash = anchor; 3498 } else if (href.indexOf("#") !== -1) { 3499 hash = href.substring(href.indexOf("#")); 3500 } 3501 if (hash && hash.length > 1) { 3502 var $el = $(hash); 3503 if ($el.length > 0) { 3504 sections.push({ $tab: $(this), $section: $el, hash: hash }); 3505 } 3506 } 3507 }); 3508 sections.sort(function (a, b) { 3509 return a.$section.offset().top - b.$section.offset().top; 3510 }); 3511 return sections; 3512 } 3513 3514 var anchorSections = buildSections(); 3515 3516 console.log("[landingTabScroll] tabs:", $allTabItems.length, "anchors:", anchorSections.length, anchorSections.map(function (s) { return s.hash; })); 3517 3518 function syncLine() { 3519 if (!$animatedTabs.length || !$line.length) return; 3520 var $active = $allTabItems.filter(".active").first(); 3521 if (!$active.length) { 3522 $line.css({ width: 0 }); 3523 return; 3524 } 3525 var pos = $active.position(); 3526 var scrollLeft = $animatedTabs.scrollLeft(); 3527 $line.css({ 3528 left: pos.left + scrollLeft, 3529 width: $active.outerWidth(), 3530 }); 3531 } 3532 3533 $allTabItems.on("click", function (e) { 3534 var anchor = $(this).attr("data-anchor") || ""; 3535 var href = $(this).attr("href") || ""; 3536 var hash = ""; 3537 if (anchor && anchor.charAt(0) === "#") { 3538 hash = anchor; 3539 } else if (href.indexOf("#") !== -1) { 3540 hash = href.substring(href.indexOf("#")); 3541 } 3542 3543 if (hash && hash.length > 1) { 3544 var $target = $(hash); 3545 if ($target.length > 0) { 3546 e.preventDefault(); 3547 var headerOffset = $breadcrumbWrapper.outerHeight() || 60; 3548 var scrollTo = $target.offset().top - headerOffset - 10; 3549 $("html, body").animate({ scrollTop: scrollTo }, 600, "swing"); 3550 } 3551 } 3552 3553 $allTabItems.removeClass("active"); 3554 $(this).addClass("active"); 3555 syncLine(); 3556 }); 3557 3558 function updateOnScroll() { 3559 var scrollTop = $(window).scrollTop(); 3560 3561 if (!isDark && scrollTop > scrollThreshold) { 3562 $breadcrumbWrapper.addClass("tab-scrolled"); 3563 } else { 3564 $breadcrumbWrapper.removeClass("tab-scrolled"); 3565 } 3566 3567 if (anchorSections.length === 0) return; 3568 3569 var headerOffset = $breadcrumbWrapper.outerHeight() || 60; 3570 var activeFound = false;
3571 3572 for (var i = anchorSections.length - 1; i >= 0; i--) { 3573 var sectionTop = anchorSections[i].$section.offset().top - headerOffset - 60; 3574 if (scrollTop >= sectionTop) { 3575 $allTabItems.removeClass("active"); 3576 anchorSections[i].$tab.addClass("active"); 3577 activeFound = true; 3578 break; 3579 } 3580 } 3581 3582 if (!activeFound) { 3583 $allTabItems.removeClass("active"); 3584 } 3585 3586 syncLine(); 3587 } 3588 3589 $(window).on("scroll", updateOnScroll); 3590 updateOnScroll(); 3591 }, 3592 3593 landingPageHeaderScroll() { 3594 var $heroVideo = $(".landing-page .hero-video"); 3595 if ($(".w-brief-banner").length > 0) return; 3596 if ($heroVideo.length === 0) return; 3597 3598 var heroHeight = $heroVideo.outerHeight(); 3599 3600 function checkScroll() { 3601 var isOverlayHero = $("body").hasClass("has-video-overlay-hero"); 3602 var scrollTop = $(window).scrollTop(); 3603 3604 if ($(window).width() >= 992) { 3605 if (isOverlayHero) { 3606 $(".header-wrapper").addClass("header-light-theme"); 3607 $(".header").removeClass("header-light-theme"); 3608 } else { 3609 $(".header, .header-wrapper").addClass("header-light-theme"); 3610 } 3611 return; 3612 } 3613 3614 if (isOverlayHero) { 3615 if (scrollTop >= heroHeight) { 3616 $(".header-wrapper").removeClass("header-light-theme"); 3617 } else { 3618 $(".header-wrapper").addClass("header-light-theme"); 3619 } 3620 $(".header").removeClass("header-light-theme"); 3621 } else { 3622 if (scrollTop >= heroHeight) { 3623 $(".header, .header-wrapper").removeClass("header-light-theme"); 3624 } else { 3625 $(".header, .header-wrapper").addClass("header-light-theme"); 3626 } 3627 } 3628 } 3629 3630 checkScroll(); 3631 3632 $(window).on("scroll", checkScroll); 3633 $(window).on("resize", function () { 3634 heroHeight = $heroVideo.outerHeight(); 3635 checkScroll(); 3636 }); 3637 }, 3638 3639 3640 aiFeatureSectionFilter() { 3641 $(".ai-feature-section").each(function () { 3642 const $section = $(this); 3643 3644 const $accordionItems = $section.find(".js-accordion-item"); 3645 const $productImages = $section.find(".product-info-img"); 3646 3647 $accordionItems.on("click", function () { 3648 const index = $accordionItems.index(this); 3649 3650 $productImages.removeClass("active"); 3651 $productImages.eq(index).addClass("active"); 3652 }); 3653 }); 3654 }, 3655 3656 3657 3658 init: function () { 3659 app.overlayClickControlFn(); 3660 app.setWindowHeight(); 3661 app.swiperFn(); 3662 app.mobileMenuOpenFn(); 3663 app.bodyClickControlFn(); 3664 app.dropdown(); 3665 app.tabFn(); 3666 app.animatedTabs(); 3667 app.mobileSubmenuOpen(); 3668 app.fixedTab(); 3669 app.scrollItem(); 3670 app.accordionFn(); 3671 app.recalcAccordionHeights(); 3672 app.modalFn(); 3673 app.validateForm(); 3674 app.inputPhoneControl(); 3675 app.animationTyping(); 3676 app.initBeforeAfterSlider(); 3677 app.dateTab(); 3678 app.mobileMenuItemOpen(); 3679 app.showMoreList(); 3680 app.appImageLoad(); 3681 app.langsMenuOpen(); 3682 app.searchOpen(); 3683 app.subscribeOpen(); 3684 app.heroScrollImages(); 3685 app.careerHeroImgSlides(); 3686 app.brandsLogosSlides(); 3687 app.careerScrollingImageSection(); 3688 app.appCircleControl(); 3689 app.sidebarContentOpen(); 3690 app.reportDetailProgressBar(); 3691 app.sidebarSearchFn(); 3692 app.mobileSidebarOpen(); 3693 app.stepItemLineHeightControl(); 3694 app.modalVideoControlFn(); 3695 app.productStrategySectionImgChange(); 3696 app.landingPageHeaderScroll(); 3697 app.scrollRevealFn(); 3698 app.landingTabScroll(); 3699 app.aiFeatureSectionFilter(); 3700 3701 setTimeout(() => { 3702 $(".animated-tabs").each(function () { 3703 app.updateTabLine($(this)); 3704 }); 3705 }, 100); 3706 }, 3707}; 3708 3709$(function () { 3710 app.init(); 3711}); 3712 3713$(window).on("scroll", function () { 3714 app.fixedTab(); 3715}); 3716 3717$(window).on("resize", function () { 3718 $(".animated-tabs").each(function () { 3719 app.updateTabLine($(this)); 3720 }); 3721}); 3722 3723 3724$('[data-fancybox="gallery"]').fancybox({ 3725 buttons: ["download", "zoom", "fullScreen", "close"], 3726 lang: "tr", 3727 i18n: { 3728 tr: { 3729 CLOSE: "ÃıkıÅ", 3730 NEXT: "Sonraki", 3731 PREV: "Ãnceki", 3732 ERROR: 3733 "The requested content cannot be loaded. <br/> Please try again later.", 3734 PLAY_START: "Start slideshow", 3735 PLAY_STOP: "Pause slideshow", 3736 FULL_SCREEN: "Tam Ekran", 3737 THUMBS: "Galeri", 3738 DOWNLOAD: "İndir", 3739 SHARE: "Share", 3740 ZOOM: "Zoom", 3741 }, 3742 thumbs: { 3743 autoStart: true, 3744 }, 3745 }, 3746 animationEffect: "zoom", 3747 transitionEffect: "slide", 3748 dblclickContent: "zoom", 3749}); 3750 3751 3752 3753 3754function handleFooterMenuLimit() { 3755 var isDesktop = window.innerWidth > 991; 3756 $(".js-footer-menu-links").each(function () { 3757 var $container = $(this); 3758 var menu = $container.data("menu"); 3759 var $links = $container.find(".footer-menu__link"); 3760 var $seeAllBtn = $(".see-all-btn[data-menu='" + menu + "']");
3761 var $modal = $("#modal-" + menu); 3762 $links.show(); 3763 $seeAllBtn.hide(); 3764 $modal.hide(); 3765 if (isDesktop && $links.length > 10) { 3766 $links.each(function (i) { 3767 if (i >= 10) $(this).hide(); 3768 }); 3769 $seeAllBtn.show(); 3770 $modal.hide(); 3771 } 3772 }); 3773} 3774 3775$(function () { 3776 handleFooterMenuLimit(); 3777 $(window).on("resize", handleFooterMenuLimit); 3778}); 3779 3780$(document).on("click", ".see-all-btn", function (e) { 3781 e.stopPropagation(); 3782 var menu = $(this).data("menu"); 3783 var $container = $(".js-footer-menu-links[data-menu='" + menu + "']"); 3784 var $links = $container.find(".footer-menu__link"); 3785 var $modal = $("#modal-" + menu); 3786 $modal.show().addClass("active"); 3787 $(".overlay").addClass("active"); 3788 $("html, body").addClass("scroll-disabled"); 3789}); 3790$(document).on("click", ".footer-modal-close", function (e) { 3791 e.stopPropagation(); 3792 $(this).closest(".footer-modal").hide().removeClass("active"); 3793 $(".overlay").removeClass("active"); 3794 $("html, body").removeClass("scroll-disabled"); 3795}); 3796$(document).on("click", ".overlay", function (e) { 3797 e.stopPropagation(); 3798 $(".footer-modal.active").hide().removeClass("active"); 3799 $(".overlay").removeClass("active"); 3800 $("html, body").removeClass("scroll-disabled"); 3801}); 3802$(document).on("keydown", function (e) { 3803 if (e.key === "Escape" || e.key === "Esc") { 3804 $(".footer-modal.active").hide().removeClass("active"); 3805 $(".overlay").removeClass("active"); 3806 $("html, body").removeClass("scroll-disabled"); 3807 } 3808}); 3809document.querySelectorAll("li").forEach((li) => { 3810 if (li.querySelector("h3")) { 3811 li.classList.add("has-h3"); 3812 } 3813}); 3814 3815$(document).ready(function () { 3816 document.querySelectorAll("li").forEach((li) => { 3817 if (li.querySelector("h3")) { 3818 li.classList.add("has-h3"); 3819 } 3820 }); 3821}); 3822 3823document.addEventListener("DOMContentLoaded", () => { 3824 hljs.highlightAll(); 3825}); 3826 3827 3828$(document).ready(function () { 3829 var $infoCard = $(".info-card"); 3830 if ($(window).width() >= 992) { 3831 $(window).on("scroll", function () { 3832 if ($(this).scrollTop() >= 200) { 3833 $infoCard.addClass("sticky"); 3834 updateSidebarMaxHeight(); 3835 } else { 3836 $infoCard.removeClass("sticky"); 3837 } 3838 }); 3839 } 3840}); 3841 3842function updateSidebarMaxHeight() { 3843 const sidebar = document.querySelector(".sidebar"); 3844 const onlyDesktop = document.querySelector(".only-desktop"); 3845 if ( 3846 !sidebar || 3847 sidebar.classList.contains("sidebar--accordion") || 3848 window.innerWidth < 1024 3849 ) 3850 return; 3851 const onlyDesktopHeight = onlyDesktop?.offsetHeight || 0; 3852 const additionalOffset = 4 * 16; 3853 const newMaxHeight = 3854 window.innerHeight - (onlyDesktopHeight + additionalOffset); 3855 sidebar.style.maxHeight = `${newMaxHeight}px`; 3856}
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.