Galaxy S24 | S24+ | Galaxy AI | Samsung México (2024)

Table of Contents
Galaxy S24 | S24+ Galaxy AI ha llegado Disfruta cada curva Más grande y más rápido Elige tu épico favorito Colores inspirados en minerales Reforzado con Armor Aluminium Conoce nuestra historia inspirada en minerales Potencia los detalles con ProVisual engine 50 MP. Mega megapixeles Obtén los detalles de la cámara Captura a distancia. Incluso en la oscuridad. Acércate con cada cerrar de tus dedos Prepárate para un AI Zoom épico Cambia el tamaño y retócala. ¡Así de fácil! Use el Asistente de fotos para cambiar el tamaño de la foto y retocarla Toca y mantén presionado para Slow-mo Toca y mantén presionado para Slow-mo Vistas previas de Super HDR. Mejoradas con AI incluso antes de que las captures Enciérralo en un círculo y encuéntralo. Así de fácil Enciérrelo en un círculo, Encuéntrelo Live Translate. La forma más fácil de comunicarse Comunícatede inmediatoen otro idioma La AI puede resumir tus grabaciones de voz Un intérprete en tu bolsillo Lo que más necesitas está al alcance de tus dedos Elige el tono adecuado para tu texto con Chat Assist Traducciones de texto en tiempo real al alcance de la mano Vapor Chamber más fuerte. Es hora de jugar Nuestra pantalla móvil adaptable más brillante bajo el sol La batería para todo el día es más inteligente durante más tiempo, ¿Por qué cambiar de iOS a Galaxy? Cambia sin esfuerzos desde iOS Sé pionero en el mundo de la AI Olvídate de las barreras entre dispositivos Try Galaxy en tu teléfono Protegido por Samsung Knox Los cambios comienzan con pasos pequeños Cambia el Smartphone que tienes y ahorra Hasta 512 GB de almacenamiento Accesorios para la próxima era Preguntas frecuentes

Galaxy S24 | S24+

  • ESPECIFICACIONES
  • SOPORTE
  • RESEÑAS

Comprar ahora

  • Destacados
  • Compara
  • Accesorios
  • ESPECIFICACIONES
  • SOPORTE
  • RESEÑAS
Galaxy S24 | S24+ | Galaxy AI | Samsung México (1)

25% dto. adicional en la compra de tu Monitor* + Tarjeta interactiva + Funda personalizada ¡Gratis!
*Aplica solo en productos seleccionados

Comprar ahora Compra en Pre-venta Compra en Pre-venta ahora Dónde comprar

Galaxy S24 | S24+ | Galaxy AI | Samsung México (2)

Galaxy AI ha llegado

Bienvenido a la era de la AI móvil. Con Galaxy S24|S24+ en tus manos, puedes descubrir nuevos niveles de creatividad y productividad, comenzando con el dispositivo más importante de tu vida: Tu smartphone.

Totalmente épico.

Galaxy S24 | S24+ | Galaxy AI | Samsung México (3)

Blog abierto en aplicación web. Texto de blog circulado: papas en espiral. Los resultados de búsqueda en ventana emergente en la aplicación. La ventana emergente se arrastra arriba a una pantalla de resultados de Google Search.

Galaxy S24 | S24+ | Galaxy AI | Samsung México (4)

Se muestra cómo se traduce una llamada telefónica en tiempo real. El diálogo se muestra en pantalla como una conversación de texto en dos idiomas.

Galaxy S24 | S24+ | Galaxy AI | Samsung México (5)
Galaxy S24 | S24+ | Galaxy AI | Samsung México (6)

Se edita una foto. Se selecciona el sujeto, luego se cambia el tamaño y se mueve a otra ubicación en la imagen. Luego, se completan las áreas faltantes.

Galaxy S24 | S24+ | Galaxy AI | Samsung México (7)

Se muestra una conversación por mensaje de texto en un idioma extranjero. Una burbuja emergente dice: “toca para traducir”. Cuando se toca, la burbuja se convierte en una barra con menú desplegable de idioma de entrada y salida. Cada burbuja de mensaje ahora muestra tanto el mensaje original como su traducción.

Galaxy S24 | S24+ | Galaxy AI | Samsung México (8)

A text message conversation is shown in a foreign language. A popup bubble says, “tap to translate.” When tapped, the bubble turns into a bar with drop-down input and output language menu. Each message bubble now shows both the original message and its translation.

Circle to Search

Ir a Circle to Search

Live Translate

Ir a Live Translate

Interpreter

Ir a Intérprete

Transcript Assist

Ir a Transcript Assist

Photo Assist

Ir a Photo Assist

Chat assist

Saltar a Chat Assist

  • Circle to Search

  • Live Translate

  • Interpreter

  • Transcript Assist

  • Photo Assist

  • Chat assist

Try Galaxy en tu teléfono Escanea este QR code o visita trygalaxy.com

Galaxy S24 | S24+ | Galaxy AI | Samsung México (9)

Galaxy AI

"El mejor smartphone (Galaxy S24 Ultra) de Samsung hasta ahora no compite solo con hardware también con mucha inteligencia artificial."

Xataka @xatakamx

Galaxy AI

"Samsung REVOLUCIONA LA INDUSTRIA con Galaxy S24 Ultra."

Isa Marcial @isa_marcial

Galaxy AI

"Galaxy S24 Ultra, el smartphone más equipado y potente de todo su catálogo para 2024."

Carlos Vassan @carlosvassan

Disfruta cada curva

Galaxy S24 | S24+ | Galaxy AI | Samsung México (10)

Se muestran tomas de primer plano extremo de las esquinas del Galaxy S24 Plus. El dispositivo gira lentamente. A continuación, una toma de primer plano comienza con las teclas laterales y gira hacia el panel trasero. Luego, el dispositivo se ve completamente desde la parte de atrás.

Fáciles de agarrar. Agradables al sostenerlos. Gracias a su diseño unificado y acabado satinado, los Galaxy S24 y S24+ se sienten igual de lisos como se ven.

Más grande y más rápido

Estas son las actualizaciones que estabas esperando. Más pantalla. Más batería. Más potencia de procesamiento. Hay mucho más que disfrutar en un Galaxy S24 y S24+. Especialmente ahora que Galaxy S24+ viene con la mayor resolución de pantalla en un dispositivo Galaxy: QHD+.

Galaxy S24 | S24+ | Galaxy AI | Samsung México (11)

Elige tu épico favorito

Ambos dispositivos mejoraron sus características. Ahora ve la comparación entre el Galaxy S24 y el S24+.

Galaxy S24 Galaxy S24+

Tamaño Galaxy S24 | S24+ | Galaxy AI | Samsung México (12) 6.2 pulgadas Galaxy S24 | S24+ | Galaxy AI | Samsung México (13) 6.7pulgadas

Resolución Galaxy S24 | S24+ | Galaxy AI | Samsung México (14) FHD+ Galaxy S24 | S24+ | Galaxy AI | Samsung México (15) QHD+

Batería (típica) Galaxy S24 | S24+ | Galaxy AI | Samsung México (16) 4000 mAh Galaxy S24 | S24+ | Galaxy AI | Samsung México (17) 4900 mAh

Memoria Galaxy S24 | S24+ | Galaxy AI | Samsung México (18) 8GB Galaxy S24 | S24+ | Galaxy AI | Samsung México (19) 12 GB

Banda ultraancha - no disponible Galaxy S24 | S24+ | Galaxy AI | Samsung México (20) UWB

Colores inspirados en minerales

Galaxy S24 | S24+ | Galaxy AI | Samsung México (21)

Galaxy S24 | S24+ | Galaxy AI | Samsung México (22)

Disponible solo en Samsung.com/mx

    Violeta Amarillo Ámbar Negro Ónix Gris Mármol Verde Jade Azul Zafiro Naranja

    de muestran Dos dispositivos de la Serie Galaxy S24 en color Violeta. Uno se encuentra en posición vertical y se ve desde la parte posterior. El otro teléfono se ve desde un lado para mostrar los bordes del marco.

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (23)

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (24)

    Se muestran sos dispositivos de la Serie Galaxy S24 en color Amarillo Ámbar. Uno se encuentra en posición vertical y se ve desde la parte posterior. El otro teléfono se ve desde un lado para mostrar los bordes del marco.

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (25)

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (26)

    Se muestran dos dispositivos de la Serie Galaxy S24 en color Negro Ónix. Uno se encuentra en posición vertical y se ve desde la parte posterior. El otro teléfono se ve desde un lado para mostrar los bordes del marco.

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (27)

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (28)

    Se muestran sos dispositivos de la Serie Galaxy S24 en color gris Mármol. Uno se encuentra en posición vertical y se ve desde la parte posterior. El otro teléfono se ve desde un lado para mostrar los bordes del marco.

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (29)

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (30)

    Se muestran dos dispositivos de la Serie Galaxy S24 en Verde Jade. Uno se para en posición vertical y se ve desde la parte posterior. El otro teléfono se ve desde un lado para mostrar los bordes del marco.

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (31)

    Exclusivo en línea

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (32)

    Disponible solo en Samsung.com/mx

    Se muestran dos dispositivos de la Serie Galaxy S24 en color Azul Zafiro. Uno se encuentra en posición vertical y se ve desde la parte posterior. El otro teléfono se ve desde un lado para mostrar los bordes del marco.

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (33)

    Exclusivo en línea

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (34)

    Disponible solo en Samsung.com/mx

    Se muestran dos dispositivos de la Serie Galaxy S24 en color Naranja. Uno se para en posición vertical y se ve desde la parte posterior. El otro teléfono se ve desde un lado para mostrar los bordes del marco.

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (35)

    Exclusivo en línea

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (36)

    Disponible solo en Samsung.com/mx

    Reforzado con Armor Aluminium

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (37)

    Este aluminio de grado espacial asegura que tu dispositivo no solo sea duradero, sino que esté listo para la aventura. El nuevo y mejorado Armor Aluminium es más liviano que el acero inoxidable y te mantiene protegido. Gracias a la resistencia al polvo y al agua IP68, no tendrás de qué preocuparte.

    Conoce nuestra historia inspirada en minerales

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (38)

    Estos colores llamativos están inspirados en los minerales más preciosos de la Tierra y revelan el poder de la naturaleza. Cada color elemental, Violeta, Amarillo Ámbar, Negro Ónix y Gris Mármol hace una sólida declaración de estilo.

    Galaxy AI

    Potencia los detalles con ProVisual engine

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (39)

    Capturada con Galaxy S24+ #withGalaxy

    50 MP. Mega megapixeles

    Una verdadera potencia de pixeles que no decepcionará nunca. Toma fotos de alta resolución para que resistan indudablemente la prueba del tiempo.

    Obtén los detalles de la cámara

    Ya sea que estés tomando una selfie súper linda, tomando fotos de gran angular o haciendo zoom, estas cámaras te ayudarán a asegurarte que tengas una toma perfecta de pixeles.

    cámara trasera

    10MP Zoom óptico de 3x

    50MP Zoom de calidad óptica de 2x y de gran angular

    12MP Ultra Gran Angular

    cámara frontal

    12MP Cámara de selfie

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (40)

    Captura a distancia. Incluso en la oscuridad.

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (41)

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (42)

    Galaxy S24 | S24+ | Galaxy AI | Samsung México (43)

    Capturada con Galaxy S24+ #withGalaxy

      Captura fotos brillantes, coloridas y claras, incluso en la oscuridad con AI ISP. Finalmente tendrás los retratos con los que has estado soñando. En realidad no importa si el zoom es de 2x o 3x., Cada distancia puede ser tan clara como el día, aunque técnicamente sea de noche.

      Acércate con cada cerrar de tus dedos

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (44) Galaxy S24 | S24+ | Galaxy AI | Samsung México (45) Galaxy S24 | S24+ | Galaxy AI | Samsung México (46)

      Toca para aplicar zoom

      Capturada con Galaxy S24+ #withGalaxy

      Sigue cerrando tus dedos. Pasa de 1x a 2x o incluso a 3x., La AI mantiene la alta calidad de las imágenes: nítidas, claras y súper nítidas, sin perder muchos detalles.,

      Prepárate para un AI Zoom épico

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (47)

      Se muestra el visor de la aplicación Cámara con una mujer posando frente a un fondo panorámico. La cámara hace un zoom de 1x a 2x y luego a 3x. A continuación, aparece una foto clara de un sujeto con un fondo panorámico con zoom de 2.5x.

      Capturada con Galaxy S24+ #withGalaxy

      Captura tomas impresionantes con detalles vívidos a más distancias de zoom que antes. Haz zoom en la acción y captura detalles mejorados gracias a la nueva solución AI Zoom.,

      Cambia el tamaño y retócala. ¡Así de fácil!

      Descubre la magia de la edición de fotos con AI. Ahora puedes perfeccionar tus fotos sin esfuerzo, lo cual asegura que cada imagen brille. Pero eso no es todo, si no pudiste capturar la toma que querías, Generative Edit puede rellenar fondos y hacer que los objetos no deseados desaparezcan mágicamente.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (48)

      Se muestra cómo se edita una foto en la aplicación Galería. Para enderezarla, la foto se gira y aparecen esquinas vacías en el cuadro. Luego, se rellenan las áreas y los fondos faltantes.

      Gira tu foto y deja que el relleno de fondo complete las esquinas faltantes para que se ajusten al marco.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (49)

      se muestra cómo se edita una foto en la aplicación Galería. Se toca un botón de edición y se selecciona el sujeto. Se redimensionan y se trasladan a otra ubicación de la imagen. Luego, se completan las áreas faltantes.

      Selecciona y mueve un objeto en tu foto, la AI rellenará el espacio que quede vacío para dejarlo como si nunca hubiera estado allí.

      Photo Assist

      Use el Asistente de fotos para cambiar el tamaño de la foto y retocarla

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (50)

      En la pantalla del Galaxy S24 se muestra una foto de un skater ejecutando acrobacias en un parque de patinetas. Se selecciona el botón de edición. Después, el botón estrellas de Galaxy AI. El skater es rastreado y luego se mueve más alto. Se toca el botón “Generar”. La foto se procesa y se completa el área faltante donde antes estaba el sujeto. Se muestra la versión de antes y después.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (51)

      En la aplicación Gallery, se abre una foto de un chico que ejecuta una acrobacia en un parque de patinetas.

      Pulse aquí

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (52)

      La foto ahora está en el modo de edición de la aplicación Gallery.

      Pulse aquí

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (53)
      Galaxy S24 | S24+ | Galaxy AI | Samsung México (54)

      Pulse o trace para seleccionar

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (55)

      Mover la selección

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (56)

      En modo de edición. Una onda azulada de color pasa momentáneamente sobre la foto. Se traza al chico en patineta. El chico en patineta luego se mueve más alto en la foto.

      Pulse aquí

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (57)
      Galaxy S24 | S24+ | Galaxy AI | Samsung México (58)

      La foto se procesa. Se completa el área faltante donde antes estaba el sujeto.

      Photo Assist

      Reinvente imágenes reposicionando las personas o los objetos y rellenando los fondos.

      Toca y mantén presionado para Slow-mo

      Toca y mantén presionado para Slow-mo

      Captura la acción, agrega efectos épicos de cámara lenta más adelante. Instant Slow-mo coloca imágenes generadas por AI entre los cuadros de videos regulares de tu Gallery o de tus descargas. Todo lo que se necesita es tocar y mantener presionado.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (59)

      Un video de un corredor se reproduce a velocidad normal en la pantalla del Galaxy S24 plus. A medida que la cámara se acerca al corredor desde atrás, el video cae en cámara lenta.

      Vistas previas de Super HDR. Mejoradas con AI incluso antes de que las captures

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (60)

      Se muestra la ventana de vista previa de la aplicación Cámara mienstras se toma una foto. Luego, se toca el botón Galería para abrir la foto más reciente en Galería. Se toca el botón de compartir. Se selecciona una foto para compartirla. Luego, se selecciona una aplicación de redes sociales. La foto aparece en la aplicación de redes sociales para cargarla como una nueva publicación. Luego, la foto se ve como una publicación cargada en las actualizaciones de la aplicación.

      Capturada con Galaxy S24+ #withGalaxy

      Gracias a nuestra última actualización Super HDR, puedes capturar tomas vívidas de la manera en que las ves, desde la vista previa hasta la publicación. Incluso funciona cuando capturas con Instagram.

      Ve una vista previa de Super HDR incluso antes de tocar el obturador. Mantenla en Galería o cárgala en tus actualizaciones; de cualquier manera verás la misma calidad HDR que deslumbra.

      Enciérralo en un círculo y encuéntralo. Así de fácil

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (61)

      Blog abierto en aplicación web. Texto de blog circulado: papas en espiral. Los resultados de búsqueda en ventana emergente en la aplicación. La ventana emergente se arrastra arriba a una pantalla de resultados de Google Search.

      Busca como nunca antes con Circle to Search. Simplemente traza un círculo alrededor de un objeto para obtener los resultados de la búsqueda de Google. Es una nueva forma visual de encontrar lo que estás buscando.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (62)

      Circle to Search

      Enciérrelo en un círculo, Encuéntrelo

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (63)

      Un video publicado en una aplicación de redes sociales se reproduce en la pantalla de un Galaxy S24. Muestra una vista panorámica de una sala recién decorada. La toma se acerca a un póster enmarcado en la pared. El botón Home se mantiene presionado. Aparece una barra de búsqueda de Google en la parte inferior de la pantalla. Se traza un círculo alrededor del póster. Se identifica el póster y aparecen resultados similares de Google en una ventana emergente sobre la aplicación de redes sociales. Circle to Search con Google.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (64)
      Galaxy S24 | S24+ | Galaxy AI | Samsung México (65)

      Una aplicación de redes sociales reproduce una publicación de video. La publicación de redes sociales muestra una vista panorámica de una sala de estar recién decorada.

      Mantenga pulsado el botón Inicio

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (66)

      Se dibuja un círculo de puntos alrededor de un póster enmarcado en la pared. Google está escrito en la parte superior del marco y aparece una barra de búsqueda de Google en la parte inferior. Se traza un círculo alrededor del póster.

      Encierre en un círculo o pulse para buscar.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (67)
      Galaxy S24 | S24+ | Galaxy AI | Samsung México (68)

      Se identifica el póster y aparecen resultados similares de Google en una ventana emergente sobre la aplicación de redes sociales.

      Circle to Search

      Busque cualquier cosa sin alternar aplicaciones.

      Live Translate. La forma más fácil de comunicarse

      Obtén una traducción rápida al idioma en tu próxima llamada telefónica. La AI te ayuda a comunicarte en otro idioma mientras hablas por teléfono. Además, funciona con los mensajes.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (69)

      Se muestra cómo una llamada telefónica se interpreta en tiempo real. El diálogo se presenta en la pantalla como una conversación de texto en dos idiomas.

      Live Translate

      Comunícate
      de inmediato
      en otro idioma

      Pulsar para llamar

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (70)

      Hay una llamada telefónica en curso en la pantalla de un Galaxy S24.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (71)

      Hay una llamada telefónica en curso en la pantalla de un Galaxy S24. En la parte superior de la conversación hay un menú desplegable de idiomas.

      Pulsar para traducir

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (72)

      El diálogo hablado de la llamada telefónica se transcribe en la pantalla en el idioma hablado original, luego el idioma traducido aparece debajo de la transcripción original.

      Live Translate

      ¡Olvidó la billetera en un taxi! ¿Cómo debe hablarle a un taxista?

      La AI puede resumir tus grabaciones de voz

      ¿Estás listo para tu propio asistente personal? Graba tu voz y la AI la anotará: conviértela en texto y luego resúmela de manera inteligente. Incluso hace traducciones.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (73)

      Se muestra cómo se genera una transcripción del diálogo. El guion completo se presenta con texto separado según la persona que habla. Cuando se reproduce la grabación de voz, las oraciones se destacan en sincronía con el audio. Cuando se toca la pestaña de resumen, se produce un resumen detallado de la grabación de voz.

      Un intérprete en tu bolsillo

      ¿Quieres pedir una recomendación a un lugareño ? No te preocupes. Hay un intérprete en tu bolsillo. Disfrútalo incluso en modo avión sin Wi-Fi.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (74)

      En la aplicación Intérprete, una conversación en dos idiomas se transcribe y traduce en tiempo real.

      Lo que más necesitas está al alcance de tus dedos

      Personaliza tu experiencia diaria con widgets en tu pantalla de bloqueo y Always On Display. Desde recordatorios importantes hasta la calidad del aire local, obtén la información que necesitas de un vistazo.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (75)

      se muestra una pantalla de bloqueo atenuándose hasta ver una pantalla Always On Display con widgets de clima, hora y alarma con un panel de control del reproductor de música.

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (76)

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (77)

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (78)

      Galaxy S24 | S24+ | Galaxy AI | Samsung México (79)

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (80)

        Elige el tono adecuado para tu texto con Chat Assist

        Agrega un nivel totalmente nuevo de expresión a tus mensajes a través de Chat Assist. Funciona en el correo electrónico y las redes sociales para que chatear sea rápido y fácil.

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (81)

        Chat assist

        Traducciones de texto en tiempo real al alcance de la mano

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (82)

        Se ve una conversación de mensaje de texto abierta en la pantalla de un Galaxy S24. Los mensajes están en un idioma extranjero. Una burbuja emergente dice: “toca para traducir”. Cuando se toca, la burbuja se convierte en una barra con menú desplegable de idioma de entrada y salida. Cada burbuja de mensaje ahora muestra tanto el mensaje original como su traducción.

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (83)

        Se muestra una lista de conversaciones.

        Pulse aquí

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (84)

        La conversación se abre para mostrar un diálogo en un idioma extranjero. Aparece una burbuja emergente que dice “tocar para traducir”.

        Pulse aquí

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (85)

        El menú desplegable de idioma de entrada y salida muestra automático e inglés respectivamente. Cada burbuja de mensaje ahora muestra tanto el mensaje original como su traducción al inglés.

        Pulse aquí

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (86)

        El inglés se cambia a francés en el menú de salida.

        Pulse aquí

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (87)

        Ahora los mensajes se traducen al francés.

        Chat assist

        Mejore su comunicación traduciendo chats y mensajes de texto.

        Vapor Chamber más fuerte. Es hora de jugar

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (88)

        Se muestra la escena de un juego de Gameloft en la pantalla del Galaxy S24 Plus. Los detalles son claros y el contenido es fluido.

        Este nuevo y mejorado sistema de disipación de calor te ayuda a mantener los juegos con un rendimiento óptimo. Nuestra Vapor Chamber más reciente es más grande que antes, con un material integrado de interfaz térmica de tipo líquido.

        Vapor Chamber

        más de 1.5 veces más grande

        Nuestra pantalla móvil adaptable más brillante bajo el sol

        Mejora tu juego con estas dos pantallas enormes. Gracias a su mayor tamaño de pantalla y biseles ultradelgados, la pantalla FHD+ de 6.2 pulgadas del Galaxy S24 y la pantalla QHD+ de 6.7 pulgadas del Galaxy S24+ ofrecen más espacio de pantalla que nunca, lo que brinda la experiencia de visualización más envolvente., Además, puedes disfrutar de color y contraste óptimos con Vision Booster en ambas pantallas.

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (89)

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (90)

        La batería para todo el día es más inteligente durante más tiempo,

        Más y más tiempo de batería. Galaxy S24 y S24+ tienen una batería inteligente que te da más tiempo de juego, tiempo de visualización y tiempo para ti.,,,

        • Ve videos hasta por

          29 h Galaxy S24

          31 h Galaxy S24+

        • Escucha música hasta por

          78 h Galaxy S24

          92 h Galaxy S24+

        ¿Por qué cambiar de iOS a Galaxy?

        Cambia sin esfuerzos desde iOS

        Guarda tus fotos, videos, contactos, calendario y aplicaciones con Smart Switch, incluso si cambias de iOS.,,

        Ir a Smart Switch

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (91)

        Sé pionero en el mundo de la AI

        Cambia a Galaxy para hacer que todo tu día sea fácil a través de la nueva era de la AI móvil.

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (92)

        Olvídate de las barreras entre dispositivos

        Cambia a Galaxy para tener formas perfectas de trabajar, jugar y mantenerte saludable en todos tus dispositivos.

        Ir a Experiencia de conexión

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (93)

        Try Galaxy en tu teléfono

        ¿Ya experimentaste el dispositivo Galaxy más nuevo? ¿Qué tal si lo pruebas ahora en tu teléfono? Comienza la experiencia con esta descarga.

        ¿Ya experimentaste el dispositivo Galaxy más nuevo? ¿Qué tal si lo pruebas ahora en tu teléfono? Simplemente escanea el QR code y descarga para comenzar.

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (94)

        Protegido por Samsung Knox

        Puedes estar tranquilo con nuestra incomparable protección móvil, fortalecida por el impenetrable Knox Vault, así como Knox Matrix, la solución de Samsung para la seguridad de múltiples dispositivos.

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (95)

        Los cambios comienzan con pasos pequeños

        Estamos avanzando hacia un futuro sostenible, paso a paso. Creemos en generar un viaje sostenible a través de pequeños cambios que podrían marcar una gran diferencia. Se siente bien hacer el bien.

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (96)

        Cambia el Smartphone que tienes y ahorra

        Canjea tu teléfono anterior para ahorrar en tu nuevo Galaxy S24 o Galaxy S24+.

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (97)

        Hasta 512 GB de almacenamiento

        Almacena todo con opciones de 256 GB y 512 GB. O elige 128 GB en el Galaxy S24.

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (98)

        Accesorios para la próxima era

        Explorar más

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (99)

        Preguntas frecuentes

        Galaxy S24Ultra

        Conoce más

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (100)

        Descubre formas inteligentes de obtener tu Galaxy S24|S24+

        Comprar ahora Compra en Pre-venta Compra en Pre-venta ahora Dónde comprar

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (101)

        Ver los Galaxy S24|S24+ en RA Abrir en realidad aumentada

        Life opens up with Galaxy

        Ver más

        Galaxy S24 | S24+ | Galaxy AI | Samsung México (105)

        Ver en 360°

        Llévalo a dar una vuelta

        *Colores exclusivos solo disponibles en línea en Samsung.com/mx

        Nuevas formas épicas de hacer negocios

        Ir a Samsung Business

        *Todas las especificaciones y descripciones que se proporcionan en este documento pueden diferir de las especificaciones y descripciones reales del producto. Samsung se reserva el derecho de realizar cambios a este documento y al producto que se describe en él, en cualquier momento, sin obligación de Samsung de proporcionar notificación de dicho cambio. Toda la funcionalidad, características, especificaciones, interfaz gráfica de usuario y toda la información restante del producto que se muestra en este documento, lo que incluye, entre otros, los beneficios, diseño, precio, componentes, desempeño, disponibilidad y funcionalidades del producto, están sujetos a cambio sin previo aviso u obligación alguna. El contenido de la pantalla son imágenes utilizadas con fines ilustrativos.

        *Es posible que se requiera iniciar sesión en Samsung Account para usar ciertas funciones de AI de Samsung.

        *Samsung no hace promesas, garantías ni aseguramientos en cuanto a la precisión, integridad o confiabilidad de los resultados proporcionada por las funciones de AI.

        * Las funciones de Galaxy AI se ofrecerán gratuitamente hasta finales de 2025 en los dispositivos Samsung Galaxy compatibles. Los términos y condiciones pueden variar dependiendo de las funciones AI proporcionadas por terceros.

        *Las imágenes simuladas se usan con fines ilustrativos. Se redujeron y simularon las secuencias. La UI real podría ser diferente.

        1. Secuencias acortadas y simuladas. Resultados solo con fines ilustrativos. Los resultados pueden variar según las coincidencias visuales. Requiere conexión a Internet. Es posible que los usuarios deban actualizar Android a la versión más reciente. La funcionalidad del producto puede depender de la configuración de su aplicación y dispositivo. Algunas funciones pueden no ser compatibles con ciertas aplicaciones. La disponibilidad del servicio varía según el país y el idioma. No se garantiza la precisión de los resultados.
        2. Live Translate requiere una conexión de red e inicio de sesión en Samsung Account. Live Translate solo está disponible en la aplicación preinstalada Samsung Phone. Ciertos idiomas pueden requerir la descarga de paquetes de idiomas. La disponibilidad del servicio puede variar según el idioma. No se garantiza la precisión de los resultados.
        3. El intérprete requiere iniciar sesión en la cuenta Samsung. Algunos idiomas pueden requerir la descarga de paquetes de idiomas. La disponibilidad del servicio puede variar según el idioma. No se garantiza la precisión de los resultados. La disponibilidad y las funciones compatibles pueden variar según el país, la región o el operador. La disponibilidad de los idiomas soportados puede variar.
        4. Transcript Assist requiere una conexión de red e inicio de sesión en Samsung Account. Transcript Assist solo está disponible en la aplicación preinstalada Samsung Voice Recorder o en archivos grabados con la aplicación preinstalada del Samsung Phone. Es posible que la función de grabación de voz en la aplicación preinstalada de Samsung Phone no sea compatible en algunos países. Los archivos de audio deben tener menos de 3 horas de duración para ser procesados. La función de resumen en Transcript Assist se puede activar cuando se cumple un cierto número de caracteres. La disponibilidad del servicio puede variar según el idioma. No se garantiza la precisión de los resultados.
        5. Generative Edit requiere una conexión de red e inicio de sesión en Samsung Account. La edición con Generative Edit da como resultado un cambio de tamaño de una foto de hasta 12 MP. Una marca de agua visible se superpone en la salida de la imagen al guardarla para indicar que la imagen es generada por la AI. No se garantiza la precisión y confiabilidad de la imagen generada.
        6. Comparación entre Galaxy S24+ y Galaxy S24.
        7. En comparación con los Galaxy S23 y S23+.
        8. Medida diagonalmente, la pantalla del Galaxy S24 tiene 6.2 pulgadas como rectángulo completo y 6 pulgadas si tomamos en cuenta los bordes redondeados, y la pantalla del Galaxy S24+ mide 6.7 pulgadas como rectángulo completo y 6.5 pulgadas si tomamos en cuenta los bordes redondeados; el área visible real es menor debido a las esquinas redondeadas y al agujero de la cámara.
        9. Valor típico examinado en laboratorios de terceros. El valor típico es el valor promedio estimado teniendo en cuenta la desviación en la capacidad de batería de las muestras de baterías examinadas conforme a la norma IEC 61960. La capacidad nominal es de 3880 mAh para el Galaxy S24, 4755 mAh para el Galaxy S24+ y 4855 mAh para el Galaxy S24Ultra. La duración real de la batería podría variar en función del entorno de red, los patrones de uso y otros factores.
        10. La disponibilidad de los colores puede variar según el proveedor de servicio.
        11. El marco no incluye teclas de volumen y laterales ni bandeja de SIM.
        12. El zoom de calidad óptica está habilitado por el sensor de pixeles adaptables.
        13. El zoom de 2x debe estar habilitado en los ajustes de la aplicación Camera Assistant. La función Camera Assistant se puede descargar desde Galaxy Store.
        14. Los resultados pueden variar según las condiciones de luz y/o las condiciones de la toma como tener múltiples sujetos, estar fuera de foco o fotografiar sujetos en movimiento.
        15. Space Zoom de 30X incluye zoom óptico de 3x y zoom digital de 30x con tecnología de superresolución. Hacer zoom de más de 3x puede causar cierto deterioro de la imagen.
        16. AI Zoom se aplica a distancias entre longitudes de zoom digitales. No se garantiza la precisión de los resultados.
        17. Es posible que algunas aplicaciones de redes sociales no sean compatibles con Super HDR. No se garantiza la precisión de los resultados.
        18. La calidad HDR es compatible con fotos subidas como publicaciones de Instagram y videos cargados como reels.
        19. La función de traducción en Chat Assist puede requerir el inicio de sesión en Samsung Account. Es posible que algunas aplicaciones de chat no sean compatibles con esta función. Ciertos idiomas pueden requerir la descarga del paquete de idiomas. La disponibilidad del servicio puede variar según el idioma. Esta función se activa cuando se detecta un idioma traducible. No se garantiza la precisión de los resultados.
        20. Algunos widgets funcionales pueden requerir una conexión de red y/o inicio de sesión en Samsung Account. La disponibilidad de las funciones compatibles con las aplicaciones puede variar según el proveedor de servicio.
        21. La función de sugerencia de tono en Chat Assist requiere una conexión de red e inicio de sesión en Samsung Account. Debe cumplir con los requisitos de longitud para activar la función. La disponibilidad del servicio puede variar según el idioma. No se garantiza la precisión de los resultados.
        22. ©2024 Gameloft. Todos los derechos reservados. Gameloft, el logotipo de Gameloft y Asphalt son marcas comerciales de Gameloft en EE.UU. y/u otros países. Todos los fabricantes, automóviles, nombres, marcas e imágenes asociadas son marcas comerciales y/o materiales protegidos por derechos de autor de sus respectivos propietarios.
        23. La pantalla Dynamic AMOLED 2X en los Galaxy S24 y S24+ recibió una certificación de VDE Alemania por un Mobile Color Volume del 100 por ciento en la gama de colores DCI-P3, lo que significa que tus imágenes no se degradan y obtienes colores increíblemente vívidos independientemente de los diferentes niveles de brillo. La pantalla puede lograr un brillo máximo de hasta 2600 nits, lo que mejora el contraste entre los aspectos oscuros y claros del contenido digital para ofrecer una calidad de imagen más brillante, con una relación de contraste de 5,000,000:1 para hacer que tu experiencia con el teléfono sea más envolvente.
        24. La duración real de la batería varía según el entorno de red, las funciones y las aplicaciones que se usen, la frecuencia de llamadas y mensajes, el número de veces que se carga y muchos otros factores. Calculado según el uso de un perfil de usuario promedio por UX Connect Research. Evaluación independiente llevada a cabo por UX Connect Research entre el 25/11/2023 y el 15/12/2023 en Estados Unidos y el Reino Unido con versiones preliminares al lanzamiento del SM-S921, el SM-S926 y el SM-S928 con configuración predeterminada utilizando redes LTE y 5G Sub6. NO se probaron con una red 5G mmWave.
        25. Basado en las condiciones de prueba de laboratorio internas de Samsung con la versión previa al lanzamiento del modelo dado conectado a los audífonos a través de Bluetooth en la configuración predeterminada a través de LTE. Se calcula en función de la capacidad de la batería y la corriente medida sobre el consumo de energía de la batería durante la reproducción (resolución de archivo de video de 720p, guardada en el dispositivo) y reproducción de audio (archivo mp3, 192kbps, guardado en un dispositivo con pantalla de LCD apagada), respectivamente. Los tiempos reales de reproducción de video y audio varían según la conexión de red, la configuración, el formato de archivo, el brillo de la pantalla, el estado de la batería y muchos otros factores.
        26. Las transferencias con cable desde dispositivos Android™ requieren que el dispositivo receptor tenga Android™ 4.3 ó posterior y que el dispositivo remitente tenga Android™ 4.3 ó posterior. Las transferencias se pueden realizar sin un cable a través de una conexión inalámbrica. Para las conexiones inalámbricas, el dispositivo receptor debe tener Android™ 4.0 ó posterior y el dispositivo remitente debe tener Android™ 4.0 ó posterior. Abre Smart Switch Mobile en “Ajustes” en el dispositivo Galaxy receptor o descarga la aplicación Smart Switch Mobile desde Galaxy Store. Los datos y el contenido disponibles para la transferencia pueden variar según el método de transmisión.
        27. Las transferencias con cable desde iOS requieren que el dispositivo receptor tenga Android™ 4.3 ó posterior y que el dispositivo remitente tenga iOS 5 ó posterior. Las transferencias se pueden realizar sin un cable a través de una conexión inalámbrica o iCloud. Para las conexiones inalámbricas, el dispositivo receptor debe tener Android™ 4.0 ó posterior y el dispositivo remitente debe tener iOS 12 ó posterior. Las transferencias de iCloud requieren que el dispositivo receptor tenga Android™ 4.0 ó posterior y que el dispositivo remitente tenga iOS 5 ó posterior. Abre Smart Switch Mobile en “Ajustes” en el dispositivo Galaxy receptor o descarga la aplicación Smart Switch Mobile desde Galaxy Store. Para transferencias inalámbricas, descarga Smart Switch para iOS desde App Store en tu iPhone o iPad. Los datos y el contenido disponibles para la transferencia pueden variar según el método de transmisión.
        28. Se recomienda utilizar una conexión con cable al transferir diversos bloques de datos a la vez.
        29. Galaxy Buds2 Pro, Galaxy Watch6 y Galaxy Tab S9 se venden por separado.
        30. Disponible en dispositivos con Android OS 10 (sistema operativo Q) o posterior y One UI 2.1 o posterior. Las PC compatibles incluyen las computadoras portátiles y Galaxy Books de Samsung, lo que incluye las PC basadas en Qualcomm lanzadas en 2020 ó versiones posteriores y las PC con Windows de otros fabricantes que ejecutan Windows 10 2004 ó versiones posteriores que tienen controladores de Bluetooth Intel versión 22.50.02 ó versiones posteriores y controladores de Wi-Fi Intel versión 22.50.07 ó versiones posteriores.
        31. Galaxy Tab S9 se vende por separado.
        32. Al compartir archivos usando códigos QR y contactos, se pueden transferir hasta 1000 archivos a la vez. Los archivos individuales deben tener menos de 3GB se pueden transferir hasta 5GB de datos en total por día. Los enlaces vencen después de dos días. El dispositivo del remitente requiere una Samsung Account y los dispositivos del remitente y del receptor requieren una conexión a Internet.
        33. Knox Matrix es compatible con smarphones y tabletas Galaxy One UI 6.0 ó superior. La disponibilidad puede variar según proveedor de servicio.
        34. Se aplican términos y condiciones. La disponibilidad puede variar según el proveedor de servicio. Verifica la elegibilidad para el canje de dispositivos en la página de Samsung.com/mx
        35. Las opciones y la disponibilidad del almacenamiento pueden variar según el proveedor de servicio. La disponibilidad real del almacenamiento puede variar según el software preinstalado.
        36. Todos los accesorios se venden por separado.
        37. Los Galaxy S24, S24+ y S24 Ultra están clasificados como IP68. Se basa en condiciones de laboratorio prueba de inmersión en agua dulce con una profundidad máxima de 1.5 metros un máximo de 30 minutos. No se recomienda su uso en las albercas. La resistencia al agua y al polvo del dispositivo no es permanente y puede disminuir con el tiempo debido al uso y desgaste normal.
        38. Instant Slow-mo solo está disponible en la aplicación preinstalada Samsung Video Player y Samsung Gallery. La disponibilidad del servicio puede diferir según las especificaciones del video.
        39. La función de traducción en Chat Assist requiere una conexión de red, inicio de sesión en una Samsung Account y descarga del paquete de idiomas desde la Galaxy store. Debe cumplir con los requisitos de longitud para activar la función. La disponibilidad del servicio puede variar en función del país, la región o el idioma. Es posible que algunas aplicaciones de chat no sean compatibles con esta función. No se garantiza la precisión de los resultados.

        " ) ); } } }; const isZoom = function () { const winInnerWidth = window.innerWidth, winOuterWidth = window.outerWidth; let zoomLevel = 100 / ((winInnerWidth / winOuterWidth) * 100); if (zoomLevel > 1.75) { document.documentElement.classList.add("browser-zoomed-175"); } else { document.documentElement.classList.remove("browser-zoomed-175"); } }; return { addLoadStatusClass: addLoadStatusClass, setResolution: setResolution, onClickSup: onClickSup, centeredFocus: centeredFocus, setArBanner: setArBanner, isZoom: isZoom, }; })(); (function () { const resize = window.flagship.common.resize, common = window.flagship.highlights.common, utils = window.flagship.common.utils, agent = navigator.userAgent.toLowerCase(), maxOs = agent.indexOf("mac os") > -1, touchDevice = "ontouchstart" in window || (window.DocumentTouch && document instanceof window.DocumentTouch); let els = {}; const init = function () { els.videoWrap = document.querySelectorAll(".common-video"); els.isGlobal = document.documentElement.classList.contains("global"); if (!!els.videoWrap[0]) { setElements(); } }; const setElements = function () { // popup els.viewerPopup = document.querySelector(".highlights-viewer"); els.designSpecPopup = document.querySelector( ".highlights-design-spec-popup" ); els.cameraSpecPopup = document.querySelector( ".highlights-resolution-popup" ); els.dayVideoPopup = document.querySelector(".highlights-day-popup"); els.transcriptAssistPopup = document.querySelector( ".highlights-live-translate-popup" ); els.generativeEditExperience = document.querySelector( "#generative-edit-experience" ); els.circleToSearchExperience = document.querySelector( "#circle-to-search-experience" ); els.liveTranslateExperience = document.querySelector( "#live-translate-experience" ); els.chatAssistExperience = document.querySelector( "#chat-assist-experience" ); // video els.videosWrap = document.querySelectorAll(".common-video"); els.videos = document.querySelectorAll(".common-video video"); for (var i = 0; i < els.videosWrap.length; i++) { els.videos[i].videoWrap = els.videosWrap[i]; } }; const bindEvents = function () { window.addEventListener("load", anchorPosition); window.addEventListener("hashchange", anchorPosition); }; const anchorPosition = function () { if (window.location.hash != "") { switch (window.location.hash) { case "#s24-vs-s24-plus": if (els.designSpecPopup) els.designSpecPopup.show(); break; case "#see-in-360": if (els.viewerPopup) els.viewerPopup.show(); break; case "#camera-spec": if (els.cameraSpecPopup) els.cameraSpecPopup.show(); break; case "#day-video": if (els.dayVideoPopup) els.dayVideoPopup.show(); break; case "#transcript-assist": if (els.transcriptAssistPopup) els.transcriptAssistPopup.show(); break; case "#generative-edit-experience": if (els.generativeEditExperience) { els.generativeEditExperience.show(); } break; case "#circle-to-search-experience": if (els.circleToSearchExperience) { els.circleToSearchExperience.show(); } break; case "#live-translate-experience": if (els.liveTranslateExperience) { els.liveTranslateExperience.show(); } break; case "#chat-assist-experience": if (els.chatAssistExperience) { els.chatAssistExperience.show(); } break; default: let hash = location.hash.split("#")[1], hashSection = document.querySelector("#contents #" + hash), hashTimeout = null; clearTimeout(hashTimeout); hashTimeout = setTimeout(function () { if (hashSection) { let sectionTop = hashSection.getBoundingClientRect().top, navHeight = utils.getNavHeight(), hashScroll = window.pageYOffset + sectionTop - navHeight; window.scrollTo(0, hashScroll); } }, 300); break; } } }; var setResize = function () { resize.init( [ { resolution: 1920, resolutionName: "desktop", eventFunction: "", }, { resolution: 1023, resolutionName: "tablet", eventFunction: "", }, { resolution: 767, resolutionName: "mobile", eventFunction: "", }, { resolution: 320, resolutionName: "mobileS", eventFunction: "", }, ], 200 ); resize.add(common.setResolution); }; const setScrollControl = function () { window.scrollController = ANIUTIL.scrollController(); scrollController.init({ speed: 120, duration: 0.5, }); }; const setImageLoader = function () { window.imageLoader = ANIUTIL.mediaLoader({ lazyClass: ".js-img-src", responsiveClass: ".js-res-img", preset: els.isGlobal ? "" : "?imbypass=true", loadOption: [ { resolution: 1920, attribute: "data-src-pc", }, { resolution: 1023, attribute: "data-src-tb", }, { resolution: 767, attribute: "data-src-mo", }, { resolution: 360, attribute: "data-src-mo-s", }, ], visiblePoint: 2, }); window.bgLoader = ANIUTIL.mediaLoader({ type: "bgImage", lazyClass: ".js-bg-img", loadOption: [ { resolution: 1920, attribute: "", bgOpts: "", }, ], visiblePoint: 1, }); }; const setVideoLoader = function () { window.videoLoader = ANIUTIL.mediaLoader({ type: "video", lazyClass: ".js-video-src", responsiveClass: ".js-res-video", preset: els.isGlobal ? "" : "?imbypass=true", loadOption: [ { resolution: 1920, attribute: "data-video-src-pc", }, { resolution: 1023, attribute: "data-video-src-tb", }, { resolution: 767, attribute: "data-video-src-mo", }, { resolution: 360, attribute: "data-video-src-mo-s", }, ], visiblePoint: 1, endCallback: function (video) { if ( video.videoWrap && !video.videoWrap.classList.contains("is-loaded") ) { video.videoWrap.classList.add("is-loaded"); } }, }); }; const setCenteredfocus = function () { els.contents = document.querySelector("#contents"); els.allClickables = els.contents.querySelectorAll( "a, button, input, select" ); for (let i = 0; i < els.allClickables.length; i++) { els.allClickables[i].addEventListener( "focusin", common.centeredFocus ); } }; const setDisclaimerNumber = function () { const supTag = document.querySelectorAll(".click_sup"), btmDicl = document.querySelectorAll( "li.common-bottom-disclaimer__list-item" ); let btmDiclArr = []; for (let i = 0; i < btmDicl.length; i++) { let dataSup = btmDicl[i].getAttribute("data-sup"); btmDiclArr.push(dataSup); } for (let j = 0; j < supTag.length; j++) { let dataSupTag = supTag[j].getAttribute("data-sup-tag"); let supChildCount = supTag[j].parentElement.childElementCount; if (btmDiclArr.indexOf(dataSupTag) > -1) { supTag[j].innerText = btmDiclArr.indexOf(dataSupTag) + 1; } else { if (supChildCount == 1) { supTag[j].parentElement.remove(); } else { let supParent = supTag[j].parentElement.childNodes; let supArr = []; for (let supIndex = 0; supIndex < supParent.length; supIndex++) { supArr.push(supParent[supIndex]); } let index = supArr.indexOf(supTag[j]); if (index != 0 && index % 2 == 0) { supParent[index].remove(); supParent[index - 1].remove(); } else { if (index != supArr.length) supParent[index + 1].remove(); supParent[index].remove(); } } } } }; const setDisclaimer = function () { els.supClicker = document.querySelectorAll("a.click_sup"); for (let i = 0; i < els.supClicker.length; i++) { els.supClicker[i].addEventListener("click", common.onClickSup); } }; const setVideoTheme = function () { for (let i = 0; i < els.videoWrap.length; i++) { let colorType = els.videoWrap[i].getAttribute("data-theme-type"); if (colorType === "white") { els.videoWrap[i].classList.add("common-video__white"); } else if (colorType === "black") { els.videoWrap[i].classList.add("common-video__black"); } } }; const setVideoBlind = function () { for (let i = 0; i < els.videoWrap.length; i++) { els.videoWrap[i].control = els.videoWrap[i].querySelector( ".common-video__control" ); els.videoWrap[i].blind = els.videoWrap[i].querySelector(".blind"); els.videoWrap[i].blind.innerHTML = typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI ? LOCAL_VARI.play : "play"; } }; const onLoadHandler = function () { common.addLoadStatusClass(); common.setArBanner(); init(); bindEvents(); setResize(); if (!maxOs && !touchDevice) { setScrollControl(); } setImageLoader(); setVideoLoader(); setCenteredfocus(); setDisclaimerNumber(); setDisclaimer(); setVideoTheme(); setVideoBlind(); common.isZoom(); resize.add(common.isZoom); }; onLoadHandler(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.accordion = (function () { const resize = window.flagship.common.resize; let els = {}; let objs = { accordion: [], }; let prevDevice = null; let currDevice = resize.checkResolution(); const init = function () { els.accordionList = document.querySelectorAll( ".common-accordion__list" ); if (!!els.accordionList && els.accordionList.length > 0) { bindEvents(); } }; const bindEvents = function () { resize.add(onResizeHandler); setAccordion(); }; const onResizeHandler = function (currRes) { currDevice = currRes; if (currDevice != prevDevice) { onResponsiveHandler(); prevDevice = currDevice; } }; const onResponsiveHandler = function () { for (let i = 0; i < els.accordionList.length; i++) { let isOpenedItem = els.accordionList[i].querySelector(".is-open"); if (!!isOpenedItem) { let isOpenedItemContent = isOpenedItem.querySelector( ".js-accordion-content" ); let clientHeight = isOpenedItemContent.children[0].clientHeight; isOpenedItemContent.style.height = `${clientHeight}px`; } } }; const setAccordion = function () { for (let i = 0; i < els.accordionList.length; i++) { objs.accordion[i] = new window.flagship.common.accordion({ wrap: els.accordionList[i], openType: "single", open: { start: function (target) { handlerList.setImages(target); handlerList.setVideo(target); }, end: function (target) { let targetVideo = target.querySelector( ".common-accordion__content video" ); if (targetVideo && targetVideo.paused) targetVideo.play(); }, }, close: { start: function (target) { let targetVideo = target.querySelector( ".common-accordion__content video" ); if (targetVideo && !targetVideo.paused) { targetVideo.pause(); targetVideo.currentTime = 0; } }, end: function () { }, }, }); objs.accordion[i].init(); } }; const handlerList = { setImages: function (target) { let targetImages = target.querySelectorAll( ".common-accordion__content img" ); if (targetImages && targetImages.length > 0) { for (let i = 0; i < targetImages.length; i++) { if ( !targetImages[i].classList.contains("is-img-load-complete") ) { imageLoader.setResponsiveMedia([targetImages[i]]); } } } }, setVideo: function (target) { let targetVideos = target.querySelectorAll( ".common-accordion__content video" ); if (targetVideos && targetVideos.length > 0) { for (let i = 0; i < targetVideos.length; i++) { if ( !targetVideos[i].classList.contains("is-video-load-complete") ) { videoLoader.setResponsiveMedia([targetVideos[i]]); } } } }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.clickToVideo = (function () { let els = {}, objs = { clickToVideo: [], }; const init = function () { els.clickToVideosWrap = document.querySelectorAll( ".js-scroll-video-disable .common-video" ); if (els.clickToVideosWrap.length > 0) { setElements(); setVideo(); } }; const setElements = function () { for (let i = 0; i < els.clickToVideosWrap.length; i++) { els.clickToVideosWrap[i].video = els.clickToVideosWrap[ i ].querySelector(".common-video__figure>video"); els.clickToVideosWrap[i].controller = els.clickToVideosWrap[ i ].querySelector(".common-video__control"); els.clickToVideosWrap[i].controller.video = els.clickToVideosWrap[i].video; els.clickToVideosWrap[i].controller.addEventListener( "click", clickVideoCta ); } }; const setVideo = function () { for (let i = 0; i < els.clickToVideosWrap.length; i++) { objs.clickToVideo[i] = ANIUTIL.videoHandler({ wrap: els.clickToVideosWrap[i], video: els.clickToVideosWrap[i].video, controller: els.clickToVideosWrap[i].controller, resetCallback: function () { if (this.wrap.classList.contains("is-completed")) { this.wrap.classList.remove("is-completed"); } }, playCallback: function () { setTagging.pause(this.controller); }, pauseCallback: function () { setTagging.play(this.controller); }, endCallback: function () { if (!this.wrap.classList.contains("is-completed")) { this.wrap.classList.add("is-completed"); } }, }); } }; const clickVideoCta = function (e) { if (e.target == e.currentTarget) { if (e.currentTarget.video.paused) { e.currentTarget.video.play(); } else { e.currentTarget.video.pause(); } } }; const setTagging = { play: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("pause", "play") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("pause", "play") ); } }, pause: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("play", "pause") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("play", "pause") ); } }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.tutorialPopup = function (opts) { const utils = window.flagship.common.utils; let els = {}; let status = {}; let show = {}, hide = {}; status.isGlobal = document.documentElement.classList.contains("global"); const init = function () { setElements(); setOpts(); bindEvent(); }; const setElements = function () { els.html = document.documentElement; els.tutorialPopup = opts.tutorialPopup; els.closeCtas = opts.closeCtas; els.dimmed = !!!opts.dimmed ? "" : opts.dimmed; els.tutorialPopupClass = opts.tutorialPopupClass; }; const setOpts = function () { show.start = !!!opts.show ? undefined : opts.show.start; show.end = !!!opts.show ? undefined : opts.show.end; hide.start = !!!opts.hide ? undefined : opts.hide.start; hide.end = !!!opts.hide ? undefined : opts.hide.end; }; const bindEvent = function () { opts.openerEvent.element.addEventListener("click", showLayer); els.tutorialPopup.show = showLayer; els.tutorialPopup.hide = hideLayer; }; const showLayer = function (e) { if (opts.openerEvent.proxy) { if (opts.openerEvent.parent) { if ( e.target.parentElement.classList.contains( opts.openerEvent.class ) ) { els.openerCta = e.target.parentElement; } } else { if (e.target.classList.contains(opts.openerEvent.class)) { els.openerCta = e.target; } } } else { els.openerCta = this; } els.tutorialPopup.opener = els.openerCta; if (show.start) show.start(els); els.html.classList.add("is-layer-open"); utils.hiddenScroll(els.tutorialPopup); if (utils.detector.isIosDevice) { els.tutorialPopup.opener.blur(); els.openerCta.style.display = "none"; } els.closeCtas[0].focus(); setTimeout(function () { els.closeCtas[0].focus(); }, 300); for (let i = 0; i < els.closeCtas.length; i++) { els.closeCtas[i].addEventListener("click", hideLayer); } if (els.dimmed) els.dimmed.addEventListener("click", onClickDimmed); if (show.end) show.end(els); }; const hideLayer = function () { if (utils.detector.isIosDevice) els.openerCta.style.display = ""; if (hide.start) hide.start(els); for (let i = 0; i < els.closeCtas.length; i++) { els.closeCtas[i].removeEventListener("click", hideLayer); } if (els.dimmed) els.dimmed.removeEventListener("click", onClickDimmed); els.html.classList.remove("is-layer-open"); utils.visibleScroll(); if (!!!els.openerCta) { els.tutorialPopup.opener.focus(); } else { els.openerCta.focus(); } setTimeout(function () { if (!!!els.openerCta) { els.tutorialPopup.opener.focus(); } else { els.openerCta.focus(); } }, 300); if (hide.end) hide.end(els); }; const onClickDimmed = function (e) { if (e.currentTarget == e.target) { hideLayer(); } }; return init(); }; })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.scrollVideo = (function () { const utils = window.flagship.common.utils, resize = window.flagship.common.resize; let els = {}, objs = { scrollVideo: [], scene: [], }, currDevice = resize.checkResolution(); const init = function () { els.scrollVideoWraps = document.querySelectorAll( ".common-video.js-scroll-video" ); els.pageScrollVideoWraps = []; if (!!els.scrollVideoWraps) { for (let i = 0; i < els.scrollVideoWraps.length; i++) { if ( !els.scrollVideoWraps[i].parentElement.classList.contains( "common-popup__video" ) && !els.scrollVideoWraps[i].parentElement.classList.contains( "js-scroll-video-disable" ) ) { els.pageScrollVideoWraps.push(els.scrollVideoWraps[i]); } } } if (els.pageScrollVideoWraps.length > 0) { setElements(); objList.setVideo(); objList.setScene(); bindEvents(); } }; const setElements = function () { for (let i = 0; i < els.pageScrollVideoWraps.length; i++) { els.pageScrollVideoWraps[i].video = els.pageScrollVideoWraps[ i ].querySelector(".common-video__figure>video"); els.pageScrollVideoWraps[i].controller = els.pageScrollVideoWraps[ i ].querySelector(".common-video__control"); els.pageScrollVideoWraps[i].controller.video = els.pageScrollVideoWraps[i].video; els.pageScrollVideoWraps[i].startPoint = !!els.pageScrollVideoWraps[ i ].getAttribute("data-start-point") ? els.pageScrollVideoWraps[i].getAttribute("data-start-point") : undefined; els.pageScrollVideoWraps[i].reversePoint = !!els.pageScrollVideoWraps[i].getAttribute("data-reverse-point") ? els.pageScrollVideoWraps[i].getAttribute("data-reverse-point") : undefined; els.pageScrollVideoWraps[i].moStartPoint = !!els.pageScrollVideoWraps[i].getAttribute("data-mo-start-point") ? els.pageScrollVideoWraps[i].getAttribute( "data-mo-start-point" ) : undefined; els.pageScrollVideoWraps[i].moReversePoint = !!els.pageScrollVideoWraps[i].getAttribute( "data-mo-reverse-point" ) ? els.pageScrollVideoWraps[i].getAttribute( "data-mo-reverse-point" ) : undefined; els.pageScrollVideoWraps[i].controller.addEventListener( "click", handlerList.videoCta ); } }; const bindEvents = function () { window.addEventListener("scroll", handlerList.scroll); handlerList.scroll(); resize.add(onResizeHandler); }; const onResizeHandler = function (currRes) { currDevice = currRes; }; const objList = { setVideo: function () { for (let i = 0; i < els.pageScrollVideoWraps.length; i++) { objs.scrollVideo[i] = ANIUTIL.videoHandler({ playType: "scrollPlay", startPoint: currDevice.indexOf("mobile") > -1 ? els.pageScrollVideoWraps[i].moStartPoint : els.pageScrollVideoWraps[i].startPoint, reversePoint: currDevice.indexOf("mobile") > -1 ? els.pageScrollVideoWraps[i].moReversePoint : els.pageScrollVideoWraps[i].reversePoint, wrap: els.pageScrollVideoWraps[i], video: els.pageScrollVideoWraps[i].video, controller: els.pageScrollVideoWraps[i].controller, resetCallback: function () { if (this.wrap.classList.contains("is-completed")) { this.wrap.classList.remove("is-completed"); } }, playCallback: function () { setTagging.pause(this.controller); }, pauseCallback: function () { setTagging.play(this.controller); }, endCallback: function () { if (!this.wrap.classList.contains("is-completed")) { this.wrap.classList.add("is-completed"); } }, }); } }, setScene: function () { for (let i = 0; i < els.pageScrollVideoWraps.length; i++) { objs.scene[i] = SCROLLER({ trackElement: els.pageScrollVideoWraps[i].video, useFixed: false, resize: utils.detector.isTouchDevice ? false : true, }); } }, }; const handlerList = { scroll: function () { for (let i = 0; i < els.pageScrollVideoWraps.length; i++) { objs.scene[i].trackAnimation(function () { objs.scrollVideo[i].scrollActive(this.progress); }); } }, videoCta: function (e) { if (e.target == e.currentTarget) { if (e.currentTarget.video.paused) { e.currentTarget.video.play(); } else { e.currentTarget.video.pause(); } } }, }; const setTagging = { play: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("pause", "play") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("pause", "play") ); } }, pause: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("play", "pause") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("play", "pause") ); } }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.aod = (function () { let els = {}; let status = {}; let objs = { videos: [], }; const utils = window.flagship.common.utils; const resize = window.flagship.common.resize; const init = function () { els.section = document.querySelector(".highlights-aod"); if (!!els.section) { setElements(); objList.setScene(); bindEvents(); } }; const setElements = function () { els.swiperContainer = els.section.querySelector( ".highlights-aod__content-container" ); els.nextArrow = els.section.querySelector( ".highlights-aod__content-arrow--next" ); els.prevArrow = els.section.querySelector( ".highlights-aod__content-arrow--prev" ); els.pagination = els.section.querySelector( ".highlights-aod__content-pagination" ); }; const bindEvents = function () { objList.swiper(); objs.swiper.on("init", swiperEvents.init); objs.swiper.on("slideChange", swiperEvents.slideChange); objs.swiper.on("transitionEnd", swiperEvents.transitionEnd); objs.swiper.init(); window.addEventListener("scroll", eventList.scrollHandler); }; const objList = { swiper: function () { if (objs.swiper == null) { objs.swiper = new Swiper(els.swiperContainer, { init: false, navigation: { nextEl: els.nextArrow, prevEl: els.prevArrow, }, pagination: { el: els.pagination, type: "bullets", clickable: true, renderBullet: function () { return '

      • '; }, }, loop: true, slidesPerView: "auto", centeredSlides: true, speed: 800, }); } }, setVideo: function () { for (let i = 0; i < els.videoWrap.length; i++) { objs.videos[i] = ANIUTIL.videoHandler({ playType: "scrollPlay", startPoint: resize.checkResolution().indexOf("mobile") > -1 ? 37 : 45, reversePoint: resize.checkResolution().indexOf("mobile") > -1 ? 70 : 100, wrap: els.videoWrap[i], video: els.videos[i], controller: els.videoController[i], endCallback: function () { if (!els.videoWrap[i].classList.contains("is-completed")) { els.videoWrap[i].classList.add("is-completed"); } }, resetCallback: function () { if (els.videoWrap[i].classList.contains("is-completed")) { els.videoWrap[i].classList.remove("is-completed"); } }, }); } }, setScene: function () { objs.scene = SCROLLER({ trackElement: els.section, useFixed: false, }); }, }; const swiperEvents = { init: function () { let notification = this.el.querySelector(".swiper-notification"); if (!!notification) this.el.removeChild(notification); els.bullets = this.pagination.bullets; els.videoWrap = els.section.querySelectorAll(".common-video"); els.videos = els.section.querySelectorAll(".common-video__video"); els.videoController = els.section.querySelectorAll( ".common-video__control" ); for (let i = 0; i < els.videoWrap.length; i++) { els.videoWrap[i].classList.add("is-loaded"); els.videoController[i].video = els.videos[i]; els.videoController[i].addEventListener( "click", eventList.clickVideoCta ); } objList.setVideo(); accessibility.slide(); accessibility.pagination.tagging(); accessibility.pagination.label(); els.nextArrow.removeAttribute("aria-label"); els.prevArrow.removeAttribute("aria-label"); for (let i = 0; i < els.bullets.length; i++) { els.bullets[i].removeAttribute("role"); els.bullets[i].addEventListener("click", function (e) { e.preventDefault(); e.stopPropagation(); objs.swiper.slideTo(i); }); } }, slideChange: function () { accessibility.slide(); accessibility.pagination.label(); }, transitionEnd: function () { let playStatus = null; if (objs.videos.length > 0) { let isVideoSlide = objs.swiper.activeIndex == 0 || objs.swiper.activeIndex == 5 || objs.swiper.activeIndex == 10; let isPaused = objs.videos[0].video.paused || objs.videos[1].video.paused || objs.videos[2].video.paused; clearTimeout(playStatus); if (isVideoSlide) { if (isPaused) { playStatus = setTimeout(() => { for (let i = 0; i < objs.videos.length; i++) { objs.videos[i].video.currentTime = 0; objs.videos[i].video.play(); } }, 600); } } else { if ( !objs.videos[0].video.paused && !objs.videos[1].video.paused && !objs.videos[2].video.paused ) { for (let i = 0; i < objs.videos.length; i++) { objs.videos[i].video.pause(); if (resize.checkResolution().indexOf("desktop") > -1) objs.videos[i].video.currentTime = 0; } } } } }, }; const eventList = { scrollHandler: function () { objs.scene.trackAnimation(function () { let isVideoSlide = objs.swiper.activeIndex == 0 || objs.swiper.activeIndex == 5 || objs.swiper.activeIndex == 10; if (!isVideoSlide) return; objs.videos[0].scrollActive(this.progress); objs.videos[1].scrollActive(this.progress); objs.videos[2].scrollActive(this.progress); }); }, clickVideoCta: function () { if (this.video.paused) { this.video.play(); } else { this.video.pause(); } }, }; const accessibility = { slide: function () { for (let i = 0; i < objs.swiper.slides.length; i++) { if (i != objs.swiper.activeIndex) { utils.onAccessibility(objs.swiper.slides[i]); } else { utils.offAccessibility(objs.swiper.slides[i]); } } }, pagination: { tagging: function () { const tagging = { "data-omni-type": "microsite_gallery", "data-omni": "galaxy-s24:highlights:galaxy-ai^aod-lockscreen:index:", "ga-ca": "gallery", "ga-ac": "feature gallery", "ga-la": "galaxy-s24:highlights:galaxy-ai^aod-lockscreen:index:", }; for (let i = 0; i < els.bullets.length; i++) { Object.keys(tagging).forEach((key) => { if (key == "data-omni" || key == "ga-la") { els.bullets[i].setAttribute(key, tagging[key] + (i + 1)); } else { els.bullets[i].setAttribute(key, tagging[key]); } }); } }, label: function () { for (let i = 0; i < els.bullets.length; i++) { let slideName = objs.swiper.slides[i].getAttribute("data-slide-name"); if (i === objs.swiper.realIndex) { if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) { els.bullets[i].setAttribute( "aria-label", `${LOCAL_VARI.slide}${i + 1 }: ${slideName} ${LOCAL_VARI.selected.toLowerCase()}` ); } else { els.bullets[i].setAttribute( "aria-label", `Slide${i + 1}: ${slideName} selected` ); } } else { if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) { els.bullets[i].setAttribute( "aria-label", `${LOCAL_VARI.slide}${i + 1}: ${slideName}` ); } else { els.bullets[i].setAttribute( "aria-label", `Slide${i + 1}: ${slideName}` ); } } } }, }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.cameraAi = (function () { let els = {}; let objs = {}; const init = function () { els.section = document.querySelector(".highlights-camera-ai"); if (!!els.section) { setElements(); bindEvents(); } }; const setElements = function () { els.bgBlue = els.section.querySelector( ".highlights-camera-ai__gradient--blue" ); els.bgGreen = els.section.querySelector( ".highlights-camera-ai__gradient--green" ); }; const bindEvents = function () { setScene(); window.addEventListener("scroll", scrollHandler); scrollHandler(); }; const setScene = function () { objs.scene = SCROLLER({ trackElement: els.section, useFixed: false, }); }; const scrollHandler = function () { objs.scene.trackAnimation(function () { if (this.progress > 30 && this.progress < 70) { els.bgBlue.classList.add("is-active"); els.bgGreen.classList.add("is-active"); } else if (this.progress == 0) { els.bgBlue.classList.remove("is-active"); els.bgGreen.classList.remove("is-active"); } // TweenMax.to(els.bgBlue, 0, {opacity: BlueValue, ease: 'linear'}); // TweenMax.to(els.bgGreen, 0, {opacity: greenValue, ease: 'linear'}); }); }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.chatAssistTutorial = (function () { const utils = window.flagship.common.utils; const common = window.flagship.highlights.common; let els = {}; let objs = {}; let stepInfo = []; let status = {}; const init = function () { els.section = document.querySelector( ".highlights-chat-assist-tutorial" ); if (!!els.section) { setElements(); bindEvents(); } }; const setElements = function () { els.tutorialVideoContainer = els.section.querySelector( ".common-tutorial__main-video" ); els.videoList = els.tutorialVideoContainer.querySelectorAll( ".common-tutorial__video" ); els.videoWrap = els.tutorialVideoContainer.querySelectorAll( ".common-tutorial__video .common-video" ); els.videos = els.tutorialVideoContainer.querySelectorAll( ".common-tutorial__video .common-video__video" ); els.tooltipCta = els.tutorialVideoContainer.querySelectorAll( ".js-tutorial-tooltip-cta" ); els.tutorialReplay = els.tutorialVideoContainer.querySelector( ".common-tutorial__replay-cta" ); }; const setProperty = function (el, index) { el.video = el.querySelector("video"); el.controller = el.querySelector(".common-video__control"); el.controller.video = el.querySelector("video"); el.alert = el.parentElement.querySelector(".common-tutorial__alert"); el.tooltip = el.parentElement.querySelector(".js-tutorial-tooltip"); el.tooltipCta = el.parentElement.querySelector( ".js-tutorial-tooltip-cta" ); el.video.playIndex = index; }; const setStepStatus = function (el) { stepInfo.push({ alert: el.getAttribute("data-alert"), tooltip: el.getAttribute("data-tooltip"), }); }; const eventList = { videoController: function () { for (let i = 0; i < objs.videos.length; i++) { objs.videos[i].controller.addEventListener("click", function () { if (this.video.paused) { this.video.play(); } else { this.video.pause(); } }); } }, nextVideoPlay: function(index){if (!!els.videoList[index].tooltip) {utils.onAccessibility(els.videoList[index].tooltip);}els.videoList[index + 1].classList.add('is-visible');utils.onAccessibility(els.videoList[index]);if (els.videos[index + 1].readyState > 3) {els.videos[index + 1].play();} else {els.videos[index + 1].addEventListener('canplay', function(){if (this.paused) this.play();});}setTimeout(()=>{els.videoList[index].classList.remove('is-visible');if (!!els.videoList[index].tooltipCta) {els.videoList[index].tooltipCta.blur();}els.videos[index + 1].videoWrap.controller.focus();}, 200);},click: function(){ let self = this; for (let i = 0; i < els.tooltipCta.length; i++) { els.tooltipCta[i].addEventListener("click", function () { self.nextVideoPlay(i); }); } }, endCallback: function () { if (stepInfo[this.video.playIndex].tooltip == "true") { this.wrap.tooltipCta.removeAttribute("disabled"); this.wrap.tooltip.classList.add("is-visible"); } if (stepInfo[this.video.playIndex].alert == "true") { this.wrap.alert.classList.add("is-visible"); } if (!this.wrap.classList.contains("is-completed")) { this.wrap.classList.add("is-completed"); this.controller.style.display = "none"; } }, }; const setVideos = function () { objs.videos = []; for (let i = 0; i < els.videoWrap.length; i++) { let isVideoWrap = els.videoWrap[i]; objs.videos.push( ANIUTIL.videoHandler({ wrap: isVideoWrap, video: isVideoWrap.video, controller: isVideoWrap.controller, resetCallback: function () { if (this.wrap.classList.contains("is-completed")) { this.wrap.classList.remove("is-completed"); if ((this.controller.style.display = "none")) this.controller.style.display = ""; } }, playCallback: function () {els.videoList[this.video.playIndex].removeAttribute('tabindex');els.videoList[this.video.playIndex].removeAttribute('aria-hidden');this.controller.style.display = 'block';utils.offAccessibility(this.controller);setTagging.pause(this.controller);let nextPlayindex = this.video.playIndex + 1;if ((els.videos.length - 1) > this.video.playIndex && els.videos[nextPlayindex].readyState < 4) {videoLoader.setResponsiveMedia([els.videos[nextPlayindex]]);}},pauseCallback: function () {setTagging.play(this.controller);},endCallback: function () {if (!!this.wrap.tooltip) {let self = this;utils.offAccessibility(this.wrap.tooltip);setTimeout(function () {self.wrap.tooltipCta.focus();}, 200);}this.controller.style.display = 'none !important';eventList.endCallback.call(this);if ((els.videos.length -1) == this.video.playIndex) {els.tutorialReplay.style.display = 'block';els.tutorialReplay.removeAttribute('tabindex');els.tutorialReplay.removeAttribute('aria-hidden');els.tutorialReplay.focus();}}}));}};const setTagging = { play: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("pause", "play") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("pause", "play") ); } }, pause: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("play", "pause") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("play", "pause") ); } }, }; const bindEvents = function () { for (let i = 0; i < els.videoWrap.length; i++) { setProperty(els.videoWrap[i], i); setStepStatus(els.videoList[i]); } setVideos(); eventList.videoController(); eventList.click(); }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.circleToSearchTutorial = (function () { const utils = window.flagship.common.utils; const common = window.flagship.highlights.common; let els = {}; let objs = {}; let stepInfo = []; let status = {}; const init = function () { els.section = document.querySelector( ".highlights-circle-to-search-tutorial" ); if (!!els.section) { setElements(); bindEvents(); } }; const setElements = function () { els.tutorialVideoContainer = els.section.querySelector( ".common-tutorial__main-video" ); els.videoList = els.tutorialVideoContainer.querySelectorAll( ".common-tutorial__video" ); els.videoWrap = els.tutorialVideoContainer.querySelectorAll( ".common-tutorial__video .common-video" ); els.videos = els.tutorialVideoContainer.querySelectorAll( ".common-tutorial__video .common-video__video" ); els.tooltipCta = els.tutorialVideoContainer.querySelectorAll( ".js-tutorial-tooltip-cta" ); els.tutorialReplay = els.tutorialVideoContainer.querySelector( ".common-tutorial__replay-cta" ); status.isKeydownTime = null; }; const setProperty = function (el, index) { el.video = el.querySelector("video"); el.controller = el.querySelector(".common-video__control"); el.controller.video = el.querySelector("video"); el.alert = el.parentElement.querySelector(".common-tutorial__alert"); el.tooltip = el.parentElement.querySelector(".js-tutorial-tooltip"); el.tooltipCta = el.parentElement.querySelector( ".js-tutorial-tooltip-cta" ); el.video.playIndex = index; }; const setStepStatus = function (el) { stepInfo.push({ alert: el.getAttribute("data-alert"), tooltip: el.getAttribute("data-tooltip"), }); }; const eventList = { videoController: function () { for (let i = 0; i < objs.videos.length; i++) { objs.videos[i].controller.addEventListener("click", function () { if (this.video.paused) { this.video.play(); } else { this.video.pause(); } }); } }, nextVideoPlay: function (index) { if (!!els.videoList[index].tooltip) { utils.onAccessibility(els.videoList[index].tooltip); } els.videoList[index + 1].classList.add("is-visible"); utils.onAccessibility(els.videoList[index]); if (els.videos[index + 1].readyState > 3) { els.videos[index + 1].play(); } else { els.videos[index + 1].addEventListener('canplay', function(){if (this.paused) this.play();});}setTimeout(()=>{els.videoList[index].classList.remove('is-visible');if (!!els.videoList[index].tooltipCta) {els.videoList[index].tooltipCta.blur();}els.videos[index + 1].videoWrap.controller.focus();}, 400);},click: function(){ els.tooltipCta[0].addEventListener( "mousedown", eventList.pressButton ); els.tooltipCta[0].addEventListener("mouseup", function () { clearTimeout(status.mousedown); }); els.tooltipCta[0].addEventListener( "touchstart", eventList.pressButton ); els.tooltipCta[0].addEventListener("touchend", function () { clearTimeout(status.mousedown); }); els.tooltipCta[0].addEventListener( "keydown", eventList.keydownButton ); els.tooltipCta[1].addEventListener("click", function () { eventList.nextVideoPlay(2); }); }, pressButton: function (e) { e.preventDefault(); if (els.videos[2].readyState < 4) { videoLoader.setResponsiveMedia([els.videos[2]]); } clearTimeout(status.mousedown); status.mousedown = setTimeout(() => { eventList.nextVideoPlay(1); }, 1000); }, keydownButton: function (e) { if (e.type == "keydown" && e.keyCode != 13) return; if (status.isKeydownTime == null) { status.isKeydownTime = Date.now(); } else { let keyDownDuration = Date.now() - status.isKeydownTime; if (keyDownDuration >= 1000) { if (els.videos[2].readyState < 4) { videoLoader.setResponsiveMedia([els.videos[2]]); } eventList.nextVideoPlay(1); status.isKeydownTime = null; } } }, endCallback: function () { let autoplay = this.video.playIndex == 0 || this.video.playIndex == 3; if (stepInfo[this.video.playIndex].tooltip == "true") { this.wrap.tooltipCta.removeAttribute("disabled"); this.wrap.tooltip.classList.add("is-visible"); } if (stepInfo[this.video.playIndex].alert == "true") { this.wrap.alert.classList.add("is-visible"); } if (autoplay) { eventList.nextVideoPlay(this.video.playIndex); } if (!this.wrap.classList.contains("is-completed")) { this.wrap.classList.add("is-completed"); this.controller.style.display = "none"; } }, }; const setVideos = function () { objs.videos = []; for (let i = 0; i < els.videoWrap.length; i++) { let isVideoWrap = els.videoWrap[i]; objs.videos.push( ANIUTIL.videoHandler({ wrap: isVideoWrap, video: isVideoWrap.video, controller: isVideoWrap.controller, resetCallback: function () { if (this.wrap.classList.contains("is-completed")) { this.wrap.classList.remove("is-completed"); if ((this.controller.style.display = "none")) this.controller.style.display = ""; } }, playCallback: function () { els.videoList[this.video.playIndex].removeAttribute( "tabindex" ); els.videoList[this.video.playIndex].removeAttribute( "aria-hidden" ); if (this.video.duration > 3) { this.controller.style.display = "block"; utils.offAccessibility(this.controller); setTagging.pause(this.controller); } switch (this.video.playIndex) { case 2: videoLoader.setResponsiveMedia([ els.videos[3], els.videos[4], ]); break; default: break; } }, pauseCallback: function () { if (this.video.duration > 3) { setTagging.play(this.controller); } }, endCallback: function () { if (!!this.wrap.tooltip) { utils.offAccessibility(this.wrap.tooltip); } if (this.video.duration > 3) { this.controller.style.display = "none !important"; } eventList.endCallback.call(this); if (els.videos.length - 1 == this.video.playIndex) { els.tutorialReplay.style.display = "block"; els.tutorialReplay.removeAttribute("tabindex"); els.tutorialReplay.removeAttribute("aria-hidden"); } }, }) ); } }; const setTagging = { play: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("pause", "play") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("pause", "play") ); } }, pause: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("play", "pause") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("play", "pause") ); } }, }; const bindEvents = function () { for (let i = 0; i < els.videoWrap.length; i++) { setProperty(els.videoWrap[i], i); setStepStatus(els.videoList[i]); } setVideos(); eventList.videoController(); eventList.click(); }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.color = (function () { const utils = window.flagship.common.utils; const resize = window.flagship.common.resize; let els = {}, status = {}, objs = {}; let activeClass = "is-active"; let oldIndex = null; let currDevice = resize.checkResolution(); let prevDevice = null; const init = function () { els.section = document.querySelector(".highlights-color"); if (!!els.section) { setElements(); setStatus(); bindEvents(); } }; const setElements = function () { // topSwiper els.topSwiperWrap = els.section.querySelector( ".highlights-color__carousel" ); if (!!els.topSwiperWrap) { els.topSwiperSlides = els.topSwiperWrap.querySelectorAll( ".highlights-color__carousel-slide" ); if (els.topSwiperSlides.length > 1) { els.topSwiperContainer = els.section.querySelector( ".highlights-color__carousel-container" ); els.topSwiperNextArrow = els.topSwiperContainer.querySelector( ".highlights-color__arrow--next" ); els.topSwiperPrevArrow = els.topSwiperContainer.querySelector( ".highlights-color__arrow--prev" ); els.topSwiperPagination = els.section.querySelector( ".highlights-color__pagination" ); } } // colorchipSwiper els.colorchipWrap = els.section.querySelector( ".highlights-color__tab-colors" ); els.colorchipSwiperContainer = els.colorchipWrap.querySelector(".swiper-container"); els.colorchipSwiperArrowWrap = els.colorchipWrap.querySelector( ".highlights-color__tab-navigation" ); els.colorchipSwiperNextArrow = els.colorchipWrap.querySelector( ".highlights-color__navigation-arrow--next" ); els.colorchipSwiperPrevArrow = els.colorchipWrap.querySelector( ".highlights-color__navigation-arrow--prev" ); // colorchipItem els.colorchipItemWrap = els.section.querySelector( ".highlights-color__tab" ); els.colorchipItems = els.colorchipItemWrap.querySelectorAll( ".highlights-color__tab-item" ); els.colorchipBtns = els.colorchipItemWrap.querySelectorAll( ".highlights-color__tab-button" ); for (let i = 0; i < els.colorchipBtns.length; i++) { els.colorchipBtns[i].setAttribute("data-js-index", i); } // colorName els.colorNameWrap = els.section.querySelector( ".highlights-color__tab-names" ); els.colorNames = els.colorNameWrap.querySelectorAll( ".highlights-color__tab-name" ); // colorPanel els.panelWrap = els.section.querySelector( ".highlights-color__tab-panel-group" ); els.panels = els.panelWrap.querySelectorAll( ".highlights-color__tab-panel" ); // 360 Popup Btn els.popupBtn = els.section.querySelector(".common-cta-area button"); }; const setStatus = function () { status.isClick = false; // index status.targetIndex = null; status.oldColorIndex = null; }; const bindEvents = function () { resize.add(handlerList.onResize); setColorchipEvent(); if ( !els.topSwiperWrap || (!!els.topSwiperWrap && !!els.topSwiperSlides && els.topSwiperSlides.length < 2) ) return; setTimeout(function () { window.addEventListener("scroll", handlerList.scroll); }, 1000); objList.setScene(); setSwiper.top(); els.topSwiperNextArrow.addEventListener( "click", handlerList.onClickArrow ); els.topSwiperNextArrow.addEventListener( "keydown", handlerList.onClickArrow ); els.topSwiperPrevArrow.addEventListener( "click", handlerList.onClickArrow ); els.topSwiperPrevArrow.addEventListener( "keydown", handlerList.onClickArrow ); }; const setColorchipEvent = function () { let colorchipSwiperLength = currDevice.indexOf("mobile") > -1 ? 5 : 7; if (els.colorchipBtns.length >= colorchipSwiperLength) { status.isLoop = true; oldIndex = els.colorchipBtns.length; if (els.colorchipSwiperArrowWrap.style.display == "none") { els.colorchipSwiperArrowWrap.style.display = ""; } if (els.colorchipWrap.classList.contains("js-colorchip-static")) { els.colorchipWrap.classList.remove("js-colorchip-static"); } setSwiper.colorchip(); } else { status.isLoop = false; if (els.colorchipSwiperArrowWrap.style.display != "none") { els.colorchipSwiperArrowWrap.style.display = "none"; } if (!els.colorchipWrap.classList.contains("js-colorchip-static")) { els.colorchipWrap.classList.add("js-colorchip-static"); } if (objs.colorchipSwiper != null) { let realIndex = objs.colorchipSwiper.realIndex; if ( !els.colorchipBtns[realIndex].classList.contains(activeClass) ) { els.colorchipBtns[realIndex].classList.add(activeClass); els.colorchipBtns[realIndex].setAttribute( "aria-selected", true ); } swiperEvents.colorchip.destroy(); } let currentColorchip = els.colorchipItemWrap.querySelector( `.${activeClass}` ); status.oldColorIndex = currentColorchip.getAttribute("data-js-index"); for (let i = 0; i < els.colorchipBtns.length; i++) { els.colorchipBtns[i].addEventListener( "click", handlerList.onClickColorchip ); els.colorchipItems[i].removeAttribute("tabindex"); els.colorchipItems[i].removeAttribute("aria-hidden"); } } }; const objList = { topSwiper: function () { if (objs.topSwiper == null) { objs.topSwiper = new Swiper(els.topSwiperContainer, { init: false, speed: 800, navigation: { nextEl: els.topSwiperNextArrow, prevEl: els.topSwiperPrevArrow, }, pagination: { el: els.topSwiperPagination, type: "bullets", clickable: true, renderBullet: function () { return '

      • '; }, }, slidesPerView: "auto", centeredSlides: true, }); } }, colorchipSwiper: function () { if (objs.colorchipSwiper == null) { objs.colorchipSwiper = new Swiper(els.colorchipSwiperContainer, { init: false, navigation: { nextEl: els.colorchipSwiperNextArrow, prevEl: els.colorchipSwiperPrevArrow, }, slidesPerView: "auto", centeredSlides: true, loop: true, speed: 300, touchRatio: 0, }); } }, setScene: function () { objs.topScene = SCROLLER({ trackElement: els.topSwiperContainer, useFixed: false, resize: utils.detector.isTouchDevice ? false : true, }); }, }; const setSwiper = { top: function () { objList.topSwiper(); objs.topSwiper.on("init", swiperEvents.top.init); objs.topSwiper.on("slideChange", swiperEvents.top.slideChange); objs.topSwiper.init(); }, colorchip: function () { objList.colorchipSwiper(); objs.colorchipSwiper.on("init", swiperEvents.colorchip.init); objs.colorchipSwiper.on( "slideChange", swiperEvents.colorchip.slideChange ); objs.colorchipSwiper.on( "transitionEnd", swiperEvents.colorchip.transitionEnd ); objs.colorchipSwiper.init(); els.loopColorchipBtns = els.section.querySelectorAll( ".highlights-color__tab-button" ); for (let i = 0; i < els.loopColorchipBtns.length; i++) { els.loopColorchipBtns[i].index = i; els.loopColorchipBtns[i].addEventListener( "click", handlerList.onClickColorchip ); } if (status.targetIndex != 0) status.targetIndex = 0; eventList.colorchip(); eventList.colorName(); eventList.panel(); }, }; const swiperEvents = { top: { init: function () { let notification = this.el.querySelector(".swiper-notification"); let bullets = this.pagination.bullets; this.slides[this.activeIndex].style.transitionDuration = "0s"; setTimeout(() => { this.slides[this.activeIndex].style.transitionDuration = ""; }, 100); if (!!notification) this.el.removeChild(notification); accessibility.slide.top(objs.topSwiper); accessibility.pagination.tagging(bullets); accessibility.pagination.label(bullets); els.topSwiperPrevArrow.removeAttribute("aria-label"); els.topSwiperNextArrow.removeAttribute("aria-label"); setTimeout(function () { handlerList.scroll(); }, 900); status.isTest = false; for (let i = 0; i < bullets.length; i++) { bullets[i].removeAttribute("role"); bullets[i].addEventListener("click", function (e) { e.preventDefault(); e.stopPropagation(); objs.topSwiper.slideTo(i); }); } }, slideChange: function () { accessibility.slide.top(objs.topSwiper); accessibility.pagination.label(objs.topSwiper.pagination.bullets); }, }, colorchip: { init: function () { let notification = this.el.querySelector(".swiper-notification"); if (!!notification) this.el.removeChild(notification); accessibility.slide.colorchip(objs.colorchipSwiper); els.colorchipSwiperPrevArrow.removeAttribute("aria-label"); els.colorchipSwiperNextArrow.removeAttribute("aria-label"); let cloneSlide = this.el.querySelectorAll( ".swiper-slide-duplicate" ); for (let i = 0; i < cloneSlide.length; i++) { let activeClone = cloneSlide[i].querySelector( ".highlights-color__tab-button.is-active" ); if (!!activeClone) activeClone.classList.remove("is-active"); } }, slideChange: function () { let activeIndex = this.activeIndex; let oldColor = els.loopColorchipBtns[oldIndex]; status.oldColorIndex = oldColor.getAttribute("data-js-index"); status.targetIndex = els.loopColorchipBtns[activeIndex].getAttribute( "data-js-index" ); eventList.colorchip(); eventList.colorName(); eventList.panel(); accessibility.slide.colorchip(objs.colorchipSwiper); eventList.setPopupBtnColor(els.panels[status.targetIndex]); oldIndex = activeIndex; }, transitionEnd: function () { if (status.isClick) status.isClick = false; }, destroy: function () { objs.colorchipSwiper.destroy(true); objs.colorchipSwiper = null; }, }, }; const handlerList = { scroll: function () { objs.topScene.trackAnimation(function () { if ( this.wheelDirection == "down" && this.progress > 45 && this.progress < 70 ) { if (objs.topSwiper != null) { objs.topSwiper.slideNext(); objs.topScene.destroy(); window.removeEventListener("scroll", handlerList.scroll); } } else if (this.wheelDirection == "up" && this.progress < 50) { if (objs.topSwiper != null) { objs.topSwiper.slideNext(); objs.topScene.destroy(); window.removeEventListener("scroll", handlerList.scroll); } } }); }, onResize: function (currRes) { currDevice = currRes; if (currDevice !== prevDevice) { setColorchipEvent(); if (objs.colorchipSwiper != null) { accessibility.slide.colorchip(objs.colorchipSwiper); } prevDevice = currDevice; } }, onClickArrow: function (e) { status.isArrowClick = true; status.arrowStyleTimeout = null; if ((e.type == "keydown" && e.keyCode == 13) || e.type == "click") { e.preventDefault(); if (objs.topSwiper.isBeginning && !objs.topSwiper.isEnd) { els.topSwiperPrevArrow.style.setProperty( "display", "block", "important" ); clearTimeout(status.arrowTimeout); status.arrowTimeout = setTimeout(function () { els.topSwiperNextArrow.focus(); }, 300); clearTimeout(status.arrowStyleTimeout); status.arrowStyleTimeout = setTimeout(function () { els.topSwiperPrevArrow.style.display = ""; }, 400); } else if (!objs.topSwiper.isBeginning && objs.topSwiper.isEnd) { els.topSwiperNextArrow.style.setProperty( "display", "block", "important" ); clearTimeout(status.arrowTimeout); status.arrowTimeout = setTimeout(function () { els.topSwiperPrevArrow.focus(); }, 300); clearTimeout(status.arrowStyleTimeout); status.arrowStyleTimeout = setTimeout(function () { els.topSwiperNextArrow.style.display = ""; }, 400); } } }, onClickColorchip: function () { status.isClick = true; let targetColor = this; if (status.isLoop) { if (targetColor.classList.contains("is-active")) return; eventList.slideTo(targetColor); } else { status.targetIndex = targetColor.getAttribute("data-js-index"); eventList.colorchip(); eventList.colorName(); eventList.panel(); status.oldColorIndex = status.targetIndex; } }, }; const eventList = { colorchip: function () { let oldColor = els.colorchipItemWrap.querySelectorAll( `.${activeClass}` ); let activeIndex = status.isLoop ? objs.colorchipSwiper.activeIndex : status.targetIndex; let targetColorchipBtns = status.isLoop ? els.loopColorchipBtns[activeIndex] : els.colorchipBtns[activeIndex]; if (!targetColorchipBtns.classList.contains(activeClass)) { for (let i = 0; i < oldColor.length; i++) { oldColor[i].classList.remove(activeClass); oldColor[i].setAttribute("aria-selected", false); } targetColorchipBtns.classList.add(activeClass); targetColorchipBtns.setAttribute("aria-selected", true); } }, colorName: function () { for (let i = 0; i < els.colorNames.length; i++) { if (els.colorNames[i].classList.contains(activeClass)) { els.colorNames[i].classList.remove(activeClass); } } if ( !els.colorNames[status.targetIndex].classList.contains( activeClass ) ) { els.colorNames[status.targetIndex].classList.add(activeClass); } }, panel: function () { for (let i = 0; i < els.panels.length; i++) { if (els.panels[i].classList.contains(activeClass)) { els.panels[i].classList.remove(activeClass); els.panels[i].setAttribute("aria-hidden", true); } } if ( !els.panels[status.targetIndex].classList.contains(activeClass) ) { els.panels[status.targetIndex].classList.add(activeClass); els.panels[status.targetIndex].setAttribute("aria-hidden", false); els.popupBtn.setAttribute( "data-model-color", els.panels[status.targetIndex].getAttribute("id") ); } if (status.targetIndex != 0) { let targetPanelImgs = els.panels[status.targetIndex].querySelectorAll("img"); if ( !targetPanelImgs[0].classList.contains("is-img-load-complete") ) { imageLoader.setResponsiveMedia([targetPanelImgs[0]]); } if ( !targetPanelImgs[1].classList.contains("is-img-load-complete") ) { imageLoader.setResponsiveMedia([targetPanelImgs[1]]); } } }, slideTo: function (targetColor) { let self = objs.colorchipSwiper; let activeIndex = targetColor.index; objs.slideChangeTime = null; if (status.isClick) { let moveSize = oldIndex - activeIndex; if (moveSize > 0) { if (moveSize == 1) { objs.colorchipSwiper.slidePrev(); } else if (moveSize == 3) { objs.colorchipSwiper.slidePrev(0); objs.colorchipSwiper.slidePrev(0); self.slidePrev(); } else { objs.colorchipSwiper.slidePrev(0); self.slidePrev(); } } else { if (moveSize == -1) { objs.colorchipSwiper.slideNext(); } else if (moveSize == -3) { objs.colorchipSwiper.slideNext(0); objs.colorchipSwiper.slideNext(0); self.slideNext(); } else { objs.colorchipSwiper.slideNext(0); self.slideNext(); } } self.slides[self.activeIndex].querySelector("button").focus(); clearTimeout(objs.slideChangeTime); objs.slideChangeTime = setTimeout(function () { self.slides[self.activeIndex].querySelector("button").focus(); }, 200); status.isClick = false; } }, setPopupBtnColor: function (target) { els.popupBtn.setAttribute( "data-model-color", target.getAttribute("id") ); }, }; const accessibility = { slide: { top: function (swiperObjs) { for (let i = 0; i < swiperObjs.slides.length; i++) { if (i != swiperObjs.activeIndex) { utils.onAccessibility(swiperObjs.slides[i]); } else { utils.offAccessibility(swiperObjs.slides[i]); } } }, colorchip: function (swiperObjs) { let isNotActivedColorchips = null; for (let i = 0; i < swiperObjs.slides.length; i++) { if (currDevice.indexOf("mobile") > -1) { isNotActivedColorchips = (i != swiperObjs.activeIndex && i > swiperObjs.activeIndex + 2) || i < swiperObjs.activeIndex - 2; } else { isNotActivedColorchips = (i != swiperObjs.activeIndex && i > swiperObjs.activeIndex + 3) || i < swiperObjs.activeIndex - 3; } if (isNotActivedColorchips) { utils.onAccessibility(swiperObjs.slides[i]); } else { utils.offAccessibility(swiperObjs.slides[i]); } } }, }, pagination: { tagging: function (pagination) { const tagging = { "data-omni-type": "microsite_gallery", "data-omni": "galaxy-s24:highlights:design^colors:index:", "ga-ca": "gallery", "ga-ac": "feature gallery", "ga-la": "galaxy-s24:highlights:design^colors:index:", }; if (!!pagination) { for (let i = 0; i < pagination.length; i++) { Object.keys(tagging).forEach((key) => { if (key == "data-omni" || key == "ga-la") { pagination[i].setAttribute(key, tagging[key] + (i + 1)); } else { pagination[i].setAttribute(key, tagging[key]); } }); } } }, label: function (bullets) { for (let i = 0; i < bullets.length; i++) { let isExclusive = objs.topSwiper.slides[i].getAttribute("data-colortype") == "true" ? true : false; let slideName; if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) { slideName = !!isExclusive ? LOCAL_VARI.exclusive : LOCAL_VARI.default; if (i === objs.topSwiper.realIndex) { bullets[i].setAttribute( "aria-label", `${LOCAL_VARI.slide}${i + 1 }: ${slideName} ${LOCAL_VARI.selected.toLowerCase()}` ); } else { bullets[i].setAttribute( "aria-label", `${LOCAL_VARI.slide}${i + 1}: ${slideName}` ); } } else { slideName = !!isExclusive ? "online exclusive color" : "default color"; if (i === objs.topSwiper.realIndex) { bullets[i].setAttribute( "aria-label", `Slide${i + 1}: ${slideName} selected` ); } else { bullets[i].setAttribute( "aria-label", `Slide${i + 1}: ${slideName}` ); } } } }, }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.dayPopup = (function () { const utils = window.flagship.common.utils; const common = window.flagship.highlights.common; let els = {}; let objs = {}; let status = {}; const init = function () { els.section = document.querySelector(".highlights-super-hdr"); els.layerPopup = document.querySelector(".highlights-day-popup"); if (!!els.layerPopup && !!els.section) { setElements(); setStatus(); objList.setPopup(); bindEvents(); } }; const setElements = function () { status.isGlobal = document.documentElement.classList.contains("global"); els.contents = document.querySelector("#contents"); els.openCta = els.section.querySelector( ".highlights-super-hdr__cta button" ); els.innerWrap = els.layerPopup.querySelector( ".common-popup__inner-wrapper" ); els.closeCtas = els.layerPopup.querySelectorAll( ".common-popup__close-cta" ); els.dimmed = els.layerPopup.querySelector(".common-popup__dimmed"); els.supClicker = els.layerPopup.querySelectorAll("a.click_sup"); els.videoWrap = els.layerPopup.querySelector( ".common-video.js-scroll-video" ); els.videoWrap.video = els.videoWrap.querySelector( ".common-video__video" ); els.videoWrap.controller = els.videoWrap.querySelector( ".common-video__control" ); els.videoWrap.controller.video = els.videoWrap.video; els.hashPopupOpener = null; }; const setStatus = function () { status.isHash = false; }; const bindEvents = function () { els.videoWrap.controller.addEventListener( "click", handlerList.videoCta ); for (let i = 0; i < els.supClicker.length; i++) { els.supClicker[i].addEventListener("click", handlerList.onClickSup); } }; const objList = { setPopup: function () { utils.layerPopup({ layerPopup: els.layerPopup, layerPopupClass: ".highlights-day-popup", openerEvent: { element: els.openCta, }, closeCtas: [els.closeCtas[0], els.closeCtas[1]], dimmed: els.dimmed, moveTarget: document.documentElement, contents: els.contents, show: { start: function (target) { els.innerWrap.scrollTop = 0; els.layerPopup.classList.add("is-init"); target.openerCta.blur(); setPopupLazyLoader.image(); setPopupLazyLoader.video(); objList.setVideo(); if ( `#${els.openCta.getAttribute("data-hash")}` == window.location.hash ) { status.isHash = true; els.hashPopupOpener = els.openCta; } }, end: function () { if (utils.detector.isIosDevice) els.layerPopup.style.display = "block"; els.layerPopup.classList.add("is-open"); }, }, hide: { start: function (target) { target.openerCta.focus(); els.layerPopup.classList.remove("is-open"); }, end: function () { setTimeout(function () { els.layerPopup.classList.remove("is-init"); }, 300); els.videoWrap.video.pause(); els.videoWrap.video.currentTime = 0; if (status.isHash && els.hashPopupOpener) { els.hashPopupOpener.focus(); setTimeout(function () { els.hashPopupOpener.focus(); status.isHash = false; els.hashPopupOpener = null; }, 300); } }, }, }); }, setVideo: function () { objs.scrollVideo = ANIUTIL.videoHandler({ wrap: els.videoWrap, video: els.videoWrap.video, controller: els.videoWrap.controller, resetCallback: function () { if (this.wrap.classList.contains("is-completed")) { this.wrap.classList.remove("is-completed"); } }, playCallback: function () { setTagging.pause(this.controller); }, pauseCallback: function () { setTagging.play(this.controller); }, endCallback: function () { if (!this.wrap.classList.contains("is-completed")) { this.wrap.classList.add("is-completed"); } }, }); }, }; const handlerList = { videoCta: function (e) { if (e.target == e.currentTarget) { if (e.currentTarget.video.paused) { e.currentTarget.video.play(); } else { e.currentTarget.video.pause(); } } }, onClickSup: function (e) { e.preventDefault(); e.stopPropagation(); els.layerPopup.hide(); let targetIndex = parseFloat(e.target.innerText), disclaimer = document.querySelectorAll("#desc-section li")[targetIndex - 1], disclaimerText = disclaimer.innerText, activeBlock = '' + disclaimerText + ""; setTimeout(() => { disclaimer.innerHTML = activeBlock; disclaimer.querySelector("a").focus(); }, 500); const eventList = { focusIn: function () { common.centeredFocus.call(disclaimer.querySelector("a")); disclaimer.removeEventListener("focusin", eventList.focusIn); }, focusOut: function () { disclaimer.innerHTML = disclaimerText; disclaimer.removeAttribute("tabindex"); disclaimer.removeEventListener("focusout", eventList.focusOut); }, }; disclaimer.addEventListener("focusin", eventList.focusIn); disclaimer.addEventListener("focusout", eventList.focusOut); }, }; const setPopupLazyLoader = { image: function () { objs.imageLoader = ANIUTIL.mediaLoader({ lazyClass: ".js-day-popup-img-src", responsiveClass: ".js-day-popup-res-img", preset: status.isGlobal ? "" : "?imbypass=true", innerScroll: { use: true, wrap: els.layerPopup, }, loadOption: [ { resolution: 1920, attribute: "data-src-pc", }, { resolution: 1023, attribute: "data-src-tb", }, { resolution: 767, attribute: "data-src-mo", }, { resolution: 360, attribute: "data-src-mo-s", }, ], visiblePoint: 2, }); window.popupBgLoader = ANIUTIL.mediaLoader({ type: "bgImage", lazyClass: ".js-day-popup-bg-img", innerScroll: { use: true, wrap: els.layerPopup, }, loadOption: [ { resolution: 1920, attribute: "", bgOpts: "", }, ], visiblePoint: 1, }); }, video: function () { objs.videoLoader = ANIUTIL.mediaLoader({ type: "video", lazyClass: ".js-day-popup-video-src", responsiveClass: ".js-day-popup-res-video", preset: status.isGlobal ? "" : "?imbypass=true", innerScroll: { use: true, wrap: els.layerPopup, }, loadOption: [ { resolution: 1920, attribute: "data-video-src-pc", }, { resolution: 1023, attribute: "data-video-src-tb", }, { resolution: 767, attribute: "data-video-src-mo", }, { resolution: 360, attribute: "data-video-src-mo-s", }, ], visiblePoint: 1, endCallback: function (video) { if ( video.videoWrap && !video.videoWrap.classList.contains("is-loaded") ) { video.videoWrap.classList.add("is-loaded"); } }, }); }, }; const setTagging = { play: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("pause", "play") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("pause", "play") ); } }, pause: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("play", "pause") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("play", "pause") ); } }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.designSpecPopup = (function () { const utils = window.flagship.common.utils; const common = window.flagship.highlights.common; let els = {}; let objs = {}; let status = {}; const init = function () { els.section = document.querySelector(".highlights-design-display"); els.layerPopup = document.querySelector( ".highlights-design-spec-popup" ); if (!!els.layerPopup) { setElements(); setStatus(); bindEvents(); setPopup(); } }; const setElements = function () { status.isGlobal = document.documentElement.classList.contains("global"); els.contents = document.querySelector("#contents"); els.innerWrap = els.layerPopup.querySelector( ".common-popup__inner-wrapper" ); els.openCta = els.section.querySelector( ".highlights-design-display__cta button" ); els.closeCtas = els.layerPopup.querySelectorAll( ".common-popup__close-cta" ); els.dimmed = els.layerPopup.querySelector(".common-popup__dimmed"); els.supClicker = els.layerPopup.querySelectorAll("a.click_sup"); els.hashPopupOpener = null; }; const setStatus = function () { status.isHash = false; }; const bindEvents = function () { for (let i = 0; i < els.supClicker.length; i++) { els.supClicker[i].addEventListener("click", onClickSup); } }; const setPopup = function () { utils.layerPopup({ layerPopup: els.layerPopup, layerPopupClass: ".highlights-design-spec-popup", openerEvent: { element: els.openCta, }, closeCtas: [els.closeCtas[0], els.closeCtas[1]], dimmed: els.dimmed, moveTarget: document.documentElement, contents: els.contents, show: { start: function (target) { els.innerWrap.scrollTop = 0; els.layerPopup.classList.add("is-init"); target.openerCta.blur(); setPopupLazyLoader.image(); if ( `#${els.openCta.getAttribute("data-hash")}` == window.location.hash ) { status.isHash = true; els.hashPopupOpener = els.openCta; } }, end: function () { if (utils.detector.isIosDevice) els.layerPopup.style.display = "block"; els.layerPopup.classList.add("is-open"); }, }, hide: { start: function (target) { target.openerCta.focus(); els.layerPopup.classList.remove("is-open"); }, end: function () { setTimeout(function () { els.layerPopup.classList.remove("is-init"); }, 300); if (status.isHash && els.hashPopupOpener) { els.hashPopupOpener.focus(); setTimeout(function () { els.hashPopupOpener.focus(); status.isHash = false; els.hashPopupOpener = null; }, 300); } }, }, }); }; const onClickSup = function (e) { e.preventDefault(); e.stopPropagation(); els.layerPopup.hide(); let targetIndex = parseFloat(e.target.innerText), disclaimer = document.querySelectorAll("#desc-section li")[targetIndex - 1], disclaimerText = disclaimer.innerText, activeBlock = '' + disclaimerText + ""; setTimeout(() => { disclaimer.innerHTML = activeBlock; disclaimer.querySelector("a").focus(); }, 500); const eventList = { focusIn: function () { common.centeredFocus.call(disclaimer.querySelector("a")); disclaimer.removeEventListener("focusin", eventList.focusIn); }, focusOut: function () { disclaimer.innerHTML = disclaimerText; disclaimer.removeAttribute("tabindex"); disclaimer.removeEventListener("focusout", eventList.focusOut); }, }; disclaimer.addEventListener("focusin", eventList.focusIn); disclaimer.addEventListener("focusout", eventList.focusOut); }; const setPopupLazyLoader = { image: function () { objs.imageLoader = ANIUTIL.mediaLoader({ lazyClass: ".js-design-spec-popup-img-src", responsiveClass: ".js-design-spec-popup-res-img", preset: status.isGlobal ? "" : "?imbypass=true", innerScroll: { use: true, wrap: els.layerPopup, }, loadOption: [ { resolution: 1920, attribute: "data-src-pc", }, { resolution: 1023, attribute: "data-src-tb", }, { resolution: 767, attribute: "data-src-mo", }, { resolution: 360, attribute: "data-src-mo-s", }, ], visiblePoint: 2, }); window.popupBgLoader = ANIUTIL.mediaLoader({ type: "bgImage", lazyClass: ".js-design-spec-popup-bg-img", innerScroll: { use: true, wrap: els.layerPopup, }, loadOption: [ { resolution: 1920, attribute: "", bgOpts: "", }, ], visiblePoint: 1, }); }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.experiences = (function () { const utils = window.flagship.common.utils; const resize = window.flagship.common.resize; let els = {}, objs = {}, status = {}, prevDevice = null, currDevice = resize.checkResolution(); const init = function () { els.section = document.querySelector(".highlights-galaxy-offers"); if (!!els.section) { els.offersItems = els.section.querySelectorAll( ".highlights-galaxy-offers__card-item" ); if (!!els.offersItems && els.offersItems.length > 1) { setElements(); bindEvents(); } } }; const setElements = function () { els.swiperContainer = els.section.querySelector( ".highlights-galaxy-offers__card-container" ); els.nextArrow = els.section.querySelector( ".highlights-galaxy-offers__arrow--next" ); els.prevArrow = els.section.querySelector( ".highlights-galaxy-offers__arrow--prev" ); }; const bindEvents = function () { window.addEventListener("DOMContentLoaded", handlerList.onLoad, { once: true, }); resize.add(handlerList.onResize); els.nextArrow.addEventListener("click", handlerList.onClickArrow); els.nextArrow.addEventListener("keydown", handlerList.onClickArrow); els.prevArrow.addEventListener("click", handlerList.onClickArrow); els.prevArrow.addEventListener("keydown", handlerList.onClickArrow); }; const objList = { swiper: function () { if (objs.swiper == null) { objs.swiper = new Swiper(els.swiperContainer, { init: false, navigation: { nextEl: els.nextArrow, prevEl: els.prevArrow, }, loop: false, slidesPerView: "auto", centeredSlides: false, }); } }, }; const handlerList = { onLoad: function () { if (currDevice.indexOf("mobile") > -1) { setSwiper(); } }, onResize: function (currRes) { currDevice = currRes; if (currDevice != prevDevice) { handlerList.onResponsive(); prevDevice = currDevice; } }, onResponsive: function () { if (currDevice.indexOf("mobile") > -1) { setSwiper(); } else { swiperEvents.destroy(); } }, onClickArrow: function (e) { status.arrowTimeout = null; status.arrowStyleTimeout = null; if ((e.type == "keydown" && e.keyCode == 13) || e.type == "click") { e.preventDefault(); if (objs.swiper.isBeginning && !objs.swiper.isEnd) { els.nextArrow.style.setProperty( "display", "block", "important" ); clearTimeout(status.arrowTimeout); status.arrowTimeout = setTimeout(function () { els.prevArrow.focus(); }, 300); clearTimeout(status.arrowStyleTimeout); status.arrowStyleTimeout = setTimeout(function () { els.nextArrow.style.display = ""; }, 400); } else if (!objs.swiper.isBeginning && objs.swiper.isEnd) { els.prevArrow.style.setProperty( "display", "block", "important" ); clearTimeout(status.arrowTimeout); status.arrowTimeout = setTimeout(function () { els.nextArrow.focus(); }, 300); clearTimeout(status.arrowStyleTimeout); status.arrowStyleTimeout = setTimeout(function () { els.prevArrow.style.display = ""; }, 400); } } }, }; const setSwiper = function () { objList.swiper(); objs.swiper.on("init", swiperEvents.init); objs.swiper.on("slideChange", swiperEvents.slideChange); objs.swiper.init(); }; const swiperEvents = { init: function () { let notification = this.el.querySelector(".swiper-notification"); if (!!notification) this.el.removeChild(notification); accessibility.slide(); }, slideChange: function () { accessibility.slide(); }, destroy: function () { if (objs.swiper != null) { objs.swiper.navigation.destroy(true); objs.swiper.destroy(true); objs.swiper = null; } }, }; const accessibility = { slide: function () { for (let i = 0; i < objs.swiper.slides.length; i++) { if (i != objs.swiper.activeIndex) { utils.onAccessibility(objs.swiper.slides[i]); } else { utils.offAccessibility(objs.swiper.slides[i]); } } }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.faq = (function () { const utils = window.flagship.common.utils; const resize = window.flagship.common.resize; let els = {}; let objs = {}; let prevDevice = null; let currDevice = resize.checkResolution(); const init = function () { els.section = document.querySelector(".highlights-faq"); if (!!els.section) { setElements(); bindEvents(); } }; const setElements = function () { els.faqList = els.section.querySelector(".highlights-faq__list"); }; const bindEvents = function () { resize.add(onResizeHandler); setAccordion(); }; const onResizeHandler = function (currRes) { currDevice = currRes; if (currDevice != prevDevice) { onResponsiveHandler(); prevDevice = currDevice; } }; const onResponsiveHandler = function () { let isOpenedItems = els.faqList.querySelectorAll( ".highlights-faq__item.is-open" ); if (isOpenedItems.length > 0) { for (let i = 0; i < isOpenedItems.length; i++) { let isOpenedItemContent = isOpenedItems[i].querySelector( ".highlights-faq__answer" ); let clientHeight = isOpenedItemContent.children[0].clientHeight; isOpenedItemContent.style.height = `${clientHeight}px`; } } }; const setAccordion = function () { objs.accordion = new window.flagship.common.accordion({ wrap: els.faqList, classList: { item: "highlights-faq__item", button: "highlights-faq__question-arrow", contents: "highlights-faq__answer", activeClass: "is-open", }, open: { start: function (target) { let targetInnerCta = target.querySelector( ".highlights-faq__cta" ); if (targetInnerCta) targetInnerCta.addEventListener("click", onClickFaqCta); }, }, }); objs.accordion.init(); }; const onClickFaqCta = function (e) { if (this.getAttribute("href").indexOf("#") == 0) { e.preventDefault(); let sectionId = this.getAttribute("href"); let section = document.querySelector(sectionId); let sectionTop = section.getBoundingClientRect().top; let movePosition = sectionTop + window.pageYOffset - utils.getNavHeight(); let clickable = section.querySelectorAll("a, button"); let title = sectionId == "#galaxy-ai" ? section.querySelector(".common-headline") : section.querySelector("h2"); if (title.classList.contains("common-display-mo")) { if (resize.checkResolution().indexOf("mobile") > -1) { title = section.querySelector("h2.common-display-mo"); } else { title = section.querySelector("h2.common-display-pc"); } } if (!!title) { let _focusOut = function () { title.removeAttribute("tabindex"); title.removeEventListener("focusout", _focusOut); }; title.addEventListener("focusout", _focusOut); title.setAttribute("tabindex", 0); title.focus(); } else { clickable[0].focus(); } window.scrollTo(0, movePosition); } }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.generativeEditTutorial = (function () { const utils = window.flagship.common.utils; const common = window.flagship.highlights.common; let els = {}; let objs = {}; let stepInfo = []; let status = {}; const init = function () { els.section = document.querySelector( ".highlights-generative-edit-tutorial" ); if (!!els.section) { setElements(); bindEvents(); } }; const setElements = function () { els.tutorialVideoContainer = els.section.querySelector( ".common-tutorial__main-video" ); els.videoList = els.tutorialVideoContainer.querySelectorAll( ".common-tutorial__video" ); els.videoWrap = els.tutorialVideoContainer.querySelectorAll( ".common-tutorial__video .common-video" ); els.videos = els.tutorialVideoContainer.querySelectorAll( ".common-tutorial__video .common-video__video" ); els.coverImages = els.tutorialVideoContainer.querySelectorAll( ".common-tutorial__video .common-video__cover-image" ); els.tooltipCta = els.tutorialVideoContainer.querySelectorAll( ".js-tutorial-tooltip-cta" ); els.generativeCta = els.tutorialVideoContainer.querySelector( ".js-tutorial-generative-cta" ); els.tutorialReplay = els.tutorialVideoContainer.querySelector( ".common-tutorial__replay-cta" ); }; const setProperty = function (el, index) { el.video = el.querySelector("video"); el.controller = el.querySelector(".common-video__control"); el.controller.video = el.querySelector("video"); el.alert = el.parentElement.querySelector(".common-tutorial__alert"); el.tooltip = el.parentElement.querySelector(".js-tutorial-tooltip"); el.tooltipCta = el.parentElement.querySelector( ".js-tutorial-tooltip-cta" ); el.video.playIndex = index; }; const setStepStatus = function (el) { stepInfo.push({ alert: el.getAttribute("data-alert"), tooltip: el.getAttribute("data-tooltip"), }); }; const eventList = { videoController: function () { for (let i = 0; i < objs.videos.length; i++) { objs.videos[i].controller.addEventListener("click", function () { if (this.video.paused) { this.video.play(); } else { this.video.pause(); } }); } }, nextVideoPlay: function (index) { if (!!els.videoList[index].tooltip) { utils.onAccessibility(els.videoList[index].tooltip); } els.videoList[index + 1].classList.add("is-visible"); utils.onAccessibility(els.videoList[index]); if (els.videos[index + 1].readyState > 3) { els.videos[index + 1].play(); } else { els.videos[index + 1].addEventListener("canplay", function () { if (this.paused) this.play(); }); } setTimeout(()=>{els.videoList[index].classList.remove('is-visible');if (!!els.videoList[index].tooltipCta) {els.videoList[index].tooltipCta.blur();}els.videos[index + 1].videoWrap.controller.focus();}, 200); }, click: function () { let self = this; els.tooltipCta[0].addEventListener("click", function () { if (els.videos[2].readyState < 4) { imageLoader.setResponsiveMedia([ els.coverImages[2], els.coverImages[3], els.coverImages[4], ]); videoLoader.setResponsiveMedia([ els.videos[2], els.videos[3], els.videos[4], ]); } self.nextVideoPlay(0); }); els.tooltipCta[1].addEventListener("click", function () { self.nextVideoPlay(1); }), els.generativeCta.addEventListener("click", function () { this.setAttribute("disabled", ""); utils.onAccessibility(els.generativeCta); this.parentElement.classList.remove("is-visible"); self.nextVideoPlay(5); }); }, endCallback: function () {let autoplay = this.video.playIndex == 2 ||this.video.playIndex == 6;if (stepInfo[this.video.playIndex].tooltip == 'true') {if (this.video.playIndex != 5) this.wrap.tooltipCta.removeAttribute('disabled');this.wrap.tooltip.classList.add('is-visible');} if (stepInfo[this.video.playIndex].alert == "true") { this.wrap.alert.classList.add("is-visible"); } if (autoplay) { eventList.nextVideoPlay(this.video.playIndex); } let self = this; switch (this.video.playIndex) { case 2: if ( !els.generativeCta.classList.contains("is-bg-load-complete") ) { els.generativeCta.classList.add("is-bg-load-complete"); } els.generativeCta.parentElement.classList.add("is-visible"); break; case 3: if (els.videos[5].readyState < 4) { imageLoader.setResponsiveMedia([els.coverImages[5]]); videoLoader.setResponsiveMedia([els.videos[5]]); } (function (wrap, video) { setTimeout(() => { self.wrap.alert.classList.remove("is-visible"); eventList.nextVideoPlay(video.playIndex); }, 3000); })(this.wrap, this.video); break; case 4: if (els.videos[6].readyState < 4) { imageLoader.setResponsiveMedia([ els.coverImages[6], els.coverImages[7], ]); videoLoader.setResponsiveMedia([ els.videos[6], els.videos[7], ]); } (function (wrap, video) { setTimeout(() => { self.wrap.alert.classList.remove("is-visible"); eventList.nextVideoPlay(video.playIndex); }, 3000); })(this.wrap, this.video); break; case 5: els.generativeCta.removeAttribute("disabled"); utils.offAccessibility(els.generativeCta); break; case 7: els.generativeCta.parentElement.classList.add("is-visible"); els.generativeCta.classList.add("is-tutorial-end"); break; default: break; } if (!this.wrap.classList.contains("is-completed")) { this.wrap.classList.add("is-completed"); this.controller.style.display = "none"; } if (els.videos.length - 1 == this.video.playIndex) { els.tutorialReplay.style.display = "block"; els.tutorialReplay.removeAttribute("tabindex"); els.tutorialReplay.removeAttribute('aria-hidden');els.tutorialReplay.focus();}}}const setVideos = function(){objs.videos = [];for (let i = 0; i < els.videoWrap.length; i++) {let isVideoWrap = els.videoWrap[i];objs.videos.push(ANIUTIL.videoHandler({wrap: isVideoWrap,video: isVideoWrap.video,controller: isVideoWrap.controller,resetCallback: function () {if (this.wrap.classList.contains('is-completed')) {this.wrap.classList.remove('is-completed');if (this.controller.style.display = 'none') this.controller.style.display = '';}},playCallback: function () {els.videoList[this.video.playIndex].removeAttribute('tabindex');els.videoList[this.video.playIndex].removeAttribute('aria-hidden');this.controller.style.display = 'block';utils.offAccessibility(this.controller);setTagging.pause(this.controller);switch (this.video.playIndex) {case 2:videoLoader.setResponsiveMedia([els.videos[3], els.videos[4]]);break;default:break;}},pauseCallback: function () {setTagging.play(this.controller);},endCallback: function () {if (!!this.wrap.tooltip) {let self = this;utils.offAccessibility(this.wrap.tooltip);setTimeout(function () {self.wrap.tooltipCta.focus();}, 200);}this.controller.style.display = 'none !important';eventList.endCallback.call(this);if ((els.videos.length -1) == this.video.playIndex) {els.tutorialReplay.style.display = 'block';els.tutorialReplay.removeAttribute('tabindex');els.tutorialReplay.removeAttribute('aria-hidden');els.tutorialReplay.focus();}}}));}};const setTagging = { play: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("pause", "play") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("pause", "play") ); } }, pause: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("play", "pause") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("play", "pause") ); } }, }; const bindEvents = function () { for (let i = 0; i < els.videoWrap.length; i++) { setProperty(els.videoWrap[i], i); setStepStatus(els.videoList[i]); } setVideos(); eventList.videoController(); eventList.click(); }; return {init: init,}})();})();(function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.innerPopup = (function () { let els = {}; const utils = window.flagship.common.utils; const innerPopup = function (opts) {let els = {};let show = {},hide = {};const init = function () {setElements();setOpts();bindEvent();};const setElements = function () {els.outPopup = opts.openerEvent.element.closest('.common-popup');els.innerPopup = opts.layerPopup;els.closeCtas = opts.closeCtas;els.moveTarget = opts.moveTarget;els.dimmed = !!!opts.dimmed ? '' : opts.dimmed;els.contents = opts.contents;els.innerPopupClass = opts.layerPopupClass;};const setOpts = function () {show.start = (!!!opts.show) ? undefined : opts.show.start;show.end = (!!!opts.show) ? undefined : opts.show.end;hide.start = (!!!opts.hide) ? undefined : opts.hide.start;hide.end = (!!!opts.hide) ? undefined : opts.hide.end;}const bindEvent = function () {opts.openerEvent.element.addEventListener('click', showLayer);els.innerPopup.show = showLayer;els.innerPopup.hide = hideLayer;};const showLayer = function (e) {if (opts.openerEvent.proxy) {if (opts.openerEvent.parent) {if (e.target.parentElement.classList.contains(opts.openerEvent.class)) {els.openerCta = e.target.parentElement;}} else {if (e.target.classList.contains(opts.openerEvent.class)) {els.openerCta = e.target;}}} else {els.openerCta = this;}els.innerPopup.opener = els.openerCta;if (show.start) show.start(els);els.outPopup.classList.add('is-layer-open');if (utils.detector.isIosDevice) {els.innerPopup.opener.blur();els.openerCta.style.display = 'none';}els.closeCtas[0].focus();setTimeout(function () {els.closeCtas[0].focus();accessibility.on();}, 300);for (let i = 0 ; i < els.closeCtas.length; i++) {els.closeCtas[i].addEventListener('click', hideLayer);}if (els.dimmed) els.dimmed.addEventListener('click', onClickDimmed);if (show.end) show.end(els);};const hideLayer = function () {if (utils.detector.isIosDevice) els.openerCta.style.display = '';if (hide.start) hide.start(els);for (let i = 0 ; i < els.closeCtas.length; i++) {els.closeCtas[i].removeEventListener('click', hideLayer);}if (els.dimmed) els.dimmed.removeEventListener('click', onClickDimmed);accessibility.off();els.outPopup.classList.remove('is-layer-open');if (!!!els.openerCta) {els.innerPopup.opener.focus();} else {els.openerCta.focus();}setTimeout(function () {if (!!!els.openerCta) {els.innerPopup.opener.focus();} else {els.openerCta.focus();}}, 300);if (hide.end) hide.end(els);};const onClickDimmed = function (e) {if (e.currentTarget == e.target) {hideLayer();}};const accessibility = {on: function () {utils.onPopupAccessibility(els.outPopup);utils.offAccessibility(els.innerPopup);},off: function () {utils.offPopupAccessibility(els.outPopup);utils.onAccessibility(els.innerPopup);}};return init();}; const init = function () { els.layerPopup = document.querySelector('.common-youtube-popup'); if(!!els.layerPopup) { setElements(); setPopup(); } }; const setElements = function () {els.contents = document.querySelector('#contents'); els.openCta = document.querySelector('.js-inner-popup'); els.closeCta = document.querySelector('.common-youtube-popup__close-cta'); els.ytIframe = els.layerPopup.querySelector('.common-youtube-popup__iframe > iframe'); els.ytDesc = els.layerPopup.querySelector('.youtube-player__desc'); els.dimmed = els.layerPopup.querySelector('.common-youtube-popup__close-area'); }; const setPopup = function () { innerPopup({ layerPopup: els.layerPopup, layerPopupClass: '.common-yotube-popup', openerEvent: { element: els.openCta, }, closeCtas: [els.closeCta],dimmed: els.dimmed,moveTarget: document.documentElement,contents: els.contents,show: {start: function () {els.layerPopup.classList.add('is-yt-open');},end: function (target) {eventList.setYoutube(target);}},hide: {start: function () {els.layerPopup.classList.remove('is-yt-open');},end: function (target) {eventList.clearYoutube();}} }); }; const eventList = { setYoutube: function (target) { let opener = target.openerCta, ytSrc = 'htt' + 'ps://www.youtube.com/embed/' + opener.getAttribute('data-youtube-id') + '?wmode=opaque&rel=0&enablejsapi=1&version=3&autoplay=1', ytTitle = opener.getAttribute('data-youtube-title'), ytBlind = opener.querySelector('.blind').innerHTML; els.ytIframe.setAttribute('src', ytSrc); els.ytIframe.setAttribute('title', ytTitle); els.ytDesc.innerHTML = ytBlind; els.OpenerTarget = opener; }, clearYoutube: function () { els.ytIframe.removeAttribute('src'); els.ytDesc.innerHTML = ''; } }; return { init: init, } })();})();(function () {window.flagship = window.flagship || {};window.flagship.highlights = window.flagship.highlights || {};window.flagship.highlights.liveTranslateTutorial = (function () {const utils = window.flagship.common.utils;const common = window.flagship.highlights.common;let els = {};let objs = {};let stepInfo = [];let status = {};const init = function () {els.section = document.querySelector('.highlights-live-translate-tutorial');if (!!els.section) {setElements();bindEvents();}};const setElements = function () {els.tutorialVideoContainer = els.section.querySelector('.common-tutorial__main-video');els.videoList = els.tutorialVideoContainer.querySelectorAll('.common-tutorial__video');els.videoWrap = els.tutorialVideoContainer.querySelectorAll('.common-tutorial__video .common-video');els.videos = els.tutorialVideoContainer.querySelectorAll('.common-tutorial__video .common-video__video');els.tooltipCta = els.tutorialVideoContainer.querySelectorAll('.js-tutorial-tooltip-cta');els.tutorialReplay = els.tutorialVideoContainer.querySelector('.common-tutorial__replay-cta');els.muteCtas = els.section.querySelectorAll('.common-mute-button');};const setProperty = function(el, index){el.video = el.querySelector('video');el.controller = el.querySelector('.common-play-button');el.controller.video = el.querySelector('video');el.alert = el.parentElement.querySelector('.common-tutorial__alert');el.tooltip = el.parentElement.querySelector('.js-tutorial-tooltip');el.tooltipCta = el.parentElement.querySelector('.js-tutorial-tooltip-cta');el.videoMuteCta = el.querySelector('.common-mute-button');el.video.playIndex = index;} const setStepStatus = function (el) { stepInfo.push({ alert: el.getAttribute("data-alert"), tooltip: el.getAttribute("data-tooltip"), }); }; const eventList = {videoController: function(){for (let i = 0; i < objs.videos.length; i++) {objs.videos[i].controller.addEventListener('click', function(){if (this.video.paused) {this.video.play();} else {this.video.pause();}});}},nextVideoPlay: function(index){if (!!els.videoList[index].tooltip) {utils.onAccessibility(els.videoList[index].tooltip);}els.videoList[index + 1].classList.add('is-visible');utils.onAccessibility(els.videoList[index]);if (els.videos[index + 1].readyState > 3) {els.videos[index + 1].play();} else {els.videos[index + 1].addEventListener('canplay', function(){if (this.paused) this.play();});}setTimeout(()=>{els.videoList[index].classList.remove('is-visible');if (!!els.videoList[index].tooltipCta) {els.videoList[index].tooltipCta.blur();}els.videos[index + 1].videoWrap.videoMuteCta.focus();}, 200);},click: function(){ let self = this; els.tooltipCta[0].addEventListener("click", function () { self.nextVideoPlay(0); }); }, endCallback: function () { if (stepInfo[this.video.playIndex].tooltip == "true") { if ( !this.wrap.tooltipCta.classList.contains("is-bg-load-complete") ) { this.wrap.tooltipCta.classList.add("is-bg-load-complete"); } this.wrap.tooltipCta.removeAttribute("disabled"); this.wrap.tooltip.classList.add("is-visible"); } if (stepInfo[this.video.playIndex].alert == "true") { this.wrap.alert.classList.add("is-visible"); } if (!this.wrap.classList.contains("is-completed")) { this.wrap.classList.add("is-completed"); this.controller.style.display = 'none';}},onClickMute: function () {for (let i = 0; i < els.muteCtas.length; i++) {els.muteCtas[i].video = els.muteCtas[i].parentElement.parentElement.video;els.muteCtas[i].addEventListener('click', function () {let isMute = this.video.muted;if (!!isMute) {this.classList.add('is-unmuted');this.video.muted = false;this.blind.innerText = this.getAttribute('data-mute');setTagging.mute(this);} else {this.classList.remove('is-unmuted');this.video.muted = true;this.blind.innerText = this.getAttribute('data-unmute');setTagging.unmute(this);}});}},setMuteBlindText: function () {for (let i = 0; i < els.muteCtas.length; i++) {els.muteCtas[i].blind = els.muteCtas[i].querySelector('.blind');els.muteCtas[i].blind.innerText = els.muteCtas[i].getAttribute('data-unmute');}}}const setVideos = function(){ objs.videos = []; for (let i = 0; i < els.videoWrap.length; i++) { let isVideoWrap = els.videoWrap[i]; objs.videos.push( ANIUTIL.videoHandler({ wrap: isVideoWrap, video: isVideoWrap.video, controller: isVideoWrap.controller, resetCallback: function () { if (this.wrap.classList.contains("is-completed")) { this.wrap.classList.remove("is-completed"); if ((this.controller.style.display = "none")) this.controller.style.display = ""; } }, playCallback: function () {els.videoList[this.video.playIndex].removeAttribute('tabindex');els.videoList[this.video.playIndex].removeAttribute('aria-hidden');utils.offAccessibility(this.wrap.videoMuteCta);if (this.video.playIndex == 0) {let self = this;clearTimeout(status.videoFocusTimeout);status.videoFocusTimeout = setTimeout(function () {self.wrap.videoMuteCta.focus();status.videoFocusTimeout = null;}, 400);}if (!this.video.muted) {this.wrap.videoMuteCta.classList.remove('is-unmuted');this.wrap.videoMuteCta.video.muted = true;this.wrap.videoMuteCta.blind.innerText = this.wrap.videoMuteCta.getAttribute('data-unmute');setTagging.unmute(this.wrap.videoMuteCta);}this.controller.style.display = 'block';utils.offAccessibility(this.controller);setTagging.pause(this.controller);},pauseCallback: function () {setTagging.play(this.controller);},endCallback: function () {if (!!this.wrap.tooltip) {let self = this;utils.offAccessibility(this.wrap.tooltip);setTimeout(function () {self.wrap.tooltipCta.focus();}, 200);}this.controller.style.display = 'none !important';eventList.endCallback.call(this);if ((els.videos.length -1) == this.video.playIndex) {els.tutorialReplay.style.display = 'block';els.tutorialReplay.removeAttribute('tabindex');els.tutorialReplay.removeAttribute('aria-hidden');els.tutorialReplay.focus();}}}));}};const setTagging = { play: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("pause", "play") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("pause", "play") ); } }, pause: function (targetController) { if (targetController.hasAttribute('data-omni')) { let dataOmni = targetController.getAttribute('data-omni').toLowerCase(); targetController.setAttribute('data-omni', dataOmni.replace('play', 'pause')); } if (targetController.hasAttribute('ga-la')) { let gaLa = targetController.getAttribute('ga-la').toLowerCase(); targetController.setAttribute('ga-la', gaLa.replace('play', 'pause')); } },mute: function (targetCta) { if (targetCta.hasAttribute('data-omni')) { let dataOmni = targetCta.getAttribute('data-omni').toLowerCase(); targetCta.setAttribute('data-omni', dataOmni.replace('unmute', 'mute')); } if (targetCta.hasAttribute('ga-la')) { let gaLa = targetCta.getAttribute('ga-la').toLowerCase(); targetCta.setAttribute('ga-la', gaLa.replace('unmute', 'mute')); } },unmute: function (targetCta) { if (targetCta.hasAttribute('data-omni')) { let dataOmni = targetCta.getAttribute('data-omni').toLowerCase(); targetCta.setAttribute('data-omni', dataOmni.replace('mute', 'unmute')); } if (targetCta.hasAttribute('ga-la')) { let gaLa = targetCta.getAttribute('ga-la').toLowerCase(); targetCta.setAttribute('ga-la', gaLa.replace('mute', 'unmute')); } }, };const bindEvents = function () {for (let i = 0; i < els.videoWrap.length; i++) {setProperty(els.videoWrap[i], i);setStepStatus(els.videoList[i])}setVideos();eventList.setMuteBlindText();eventList.videoController();eventList.click();eventList.onClickMute();};return {init: init,}})();})();(function () {window.flagship = window.flagship || {};window.flagship.highlights = window.flagship.highlights || {};window.flagship.highlights.liveTranslatePopup = (function () { const utils = window.flagship.common.utils; const common = window.flagship.highlights.common; let els = {}; let objs = {}; let status = {}; const init = function () { els.layerPopup = document.querySelector( ".highlights-live-translate-popup" ); if (!!els.layerPopup) { setElements(); setStatus(); objList.setPopup(); bindEvents(); } }; const setElements = function () { status.isGlobal = document.documentElement.classList.contains("global"); els.contents = document.querySelector("#contents"); els.openCta = document.querySelector( ".highlights-live-translate__cta button" ); els.innerWrap = els.layerPopup.querySelector( ".common-popup__inner-wrapper" ); els.closeCtas = els.layerPopup.querySelectorAll( ".common-popup__close-cta" ); els.dimmed = els.layerPopup.querySelector(".common-popup__dimmed"); els.supClicker = els.layerPopup.querySelectorAll("a.click_sup"); els.videoWrap = els.layerPopup.querySelector( ".common-video.js-scroll-video" ); els.videoWrap.video = els.videoWrap.querySelector( ".common-video__video" ); els.videoWrap.controller = els.videoWrap.querySelector( ".common-video__control" ); els.videoWrap.controller.video = els.videoWrap.video; els.hashPopupOpener = null; }; const setStatus = function () { status.isHash = false; }; const bindEvents = function () { els.videoWrap.controller.addEventListener( "click", handlerList.videoCta ); for (let i = 0; i < els.supClicker.length; i++) { els.supClicker[i].addEventListener("click", handlerList.onClickSup); } }; const objList = { setPopup: function () { utils.layerPopup({ layerPopup: els.layerPopup, layerPopupClass: ".highlights-live-translate-popup", openerEvent: { element: els.openCta, }, closeCtas: [els.closeCtas[0], els.closeCtas[1]], dimmed: els.dimmed, moveTarget: document.documentElement, contents: els.contents, show: { start: function (target) { els.innerWrap.scrollTop = 0; els.layerPopup.classList.add("is-init"); target.openerCta.blur(); setPopupLazyLoader.image(); setPopupLazyLoader.video(); objList.setVideo(); if ( `#${els.openCta.getAttribute("data-hash")}` == window.location.hash ) { status.isHash = true; els.hashPopupOpener = els.openCta; } }, end: function () {if (utils.detector.isIosDevice) els.layerPopup.style.display = 'block';els.layerPopup.classList.add('is-open');if(els.contents.querySelector('.common-youtube-popup')) {document.documentElement.appendChild(els.contents.querySelector('.common-youtube-popup'));}}}, hide: { start: function (target) { target.openerCta.focus(); els.layerPopup.classList.remove("is-open"); }, end: function () { setTimeout(function () { els.layerPopup.classList.remove("is-init"); }, 300); els.videoWrap.video.pause(); els.videoWrap.video.currentTime = 0; if (status.isHash && els.hashPopupOpener) { els.hashPopupOpener.focus(); setTimeout(function () { els.hashPopupOpener.focus(); status.isHash = false; els.hashPopupOpener = null; }, 300); } els.openCta.focus(); setTimeout(() => { els.openCta.focus(); }, 300); }, }, }); }, setVideo: function () { objs.video = ANIUTIL.videoHandler({ wrap: els.videoWrap, video: els.videoWrap.video, controller: els.videoWrap.controller, resetCallback: function () { if (this.wrap.classList.contains("is-completed")) { this.wrap.classList.remove("is-completed"); } }, playCallback: function () { setTagging.pause(this.controller); }, pauseCallback: function () { setTagging.play(this.controller); }, endCallback: function () { if (!this.wrap.classList.contains("is-completed")) { this.wrap.classList.add("is-completed"); } }, }); }, }; const handlerList = { videoCta: function (e) { if (e.target == e.currentTarget) { if (e.currentTarget.video.paused) { e.currentTarget.video.play(); } else { e.currentTarget.video.pause(); } } }, onClickSup: function (e) { e.preventDefault(); e.stopPropagation(); els.layerPopup.hide(); let targetIndex = parseFloat(e.target.innerText), disclaimer = document.querySelectorAll("#desc-section li")[targetIndex - 1], disclaimerText = disclaimer.innerText, activeBlock = '' + disclaimerText + ""; setTimeout(() => { disclaimer.innerHTML = activeBlock; disclaimer.querySelector("a").focus(); }, 500); const eventList = { focusIn: function () { common.centeredFocus.call(disclaimer.querySelector("a")); disclaimer.removeEventListener("focusin", eventList.focusIn); }, focusOut: function () { disclaimer.innerHTML = disclaimerText; disclaimer.removeAttribute("tabindex"); disclaimer.removeEventListener("focusout", eventList.focusOut); }, }; disclaimer.addEventListener("focusin", eventList.focusIn); disclaimer.addEventListener("focusout", eventList.focusOut); }, }; const setPopupLazyLoader = { image: function () { objs.imageLoader = ANIUTIL.mediaLoader({ lazyClass: ".js-live-translate-popup-img-src", responsiveClass: ".js-live-translate-popup-res-img", preset: status.isGlobal ? "" : "?imbypass=true", innerScroll: { use: true, wrap: els.layerPopup, }, loadOption: [ { resolution: 1920, attribute: "data-src-pc", }, { resolution: 1023, attribute: "data-src-tb", }, { resolution: 767, attribute: "data-src-mo", }, { resolution: 360, attribute: "data-src-mo-s", }, ], visiblePoint: 2, }); window.popupBgLoader = ANIUTIL.mediaLoader({ type: "bgImage", lazyClass: ".js-live-translate-popup-bg-img", innerScroll: { use: true, wrap: els.layerPopup, }, loadOption: [ { resolution: 1920, attribute: "", bgOpts: "", }, ], visiblePoint: 1, }); }, video: function () { objs.videoLoader = ANIUTIL.mediaLoader({ type: "video", lazyClass: ".js-live-translate-popup-video-src", responsiveClass: ".js-live-translate-popup-res-video", preset: status.isGlobal ? "" : "?imbypass=true", innerScroll: { use: true, wrap: els.layerPopup, }, loadOption: [ { resolution: 1920, attribute: "data-video-src-pc", }, { resolution: 1023, attribute: "data-video-src-tb", }, { resolution: 767, attribute: "data-video-src-mo", }, { resolution: 360, attribute: "data-video-src-mo-s", }, ], visiblePoint: 1, endCallback: function (video) { if ( video.videoWrap && !video.videoWrap.classList.contains("is-loaded") ) { video.videoWrap.classList.add("is-loaded"); } }, }); }, }; const setTagging = { play: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("pause", "play") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("pause", "play") ); } }, pause: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("play", "pause") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("play", "pause") ); } }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.nightography = (function () { let els = {}; let status = {}; let objs = {}; const utils = window.flagship.common.utils; const init = function () { els.section = document.querySelector(".highlights-nightography"); if (!!els.section) { setElements(); objList.swiper(); bindEvents(); } }; const setElements = function () { els.swiperContainer = els.section.querySelector(".swiper-container"); els.nextArrow = els.section.querySelector(".swiper-button-next"); els.prevArrow = els.section.querySelector(".swiper-button-prev"); els.pagination = els.section.querySelector(".swiper-pagination"); }; const bindEvents = function () { objs.swiper.on("init", swiperEvents.init); objs.swiper.on("slideChange", swiperEvents.slideChange); objs.swiper.init(); els.nextArrow.addEventListener("click", swiperEvents.onClickArrow); els.nextArrow.addEventListener("keydown", swiperEvents.onClickArrow); els.prevArrow.addEventListener("click", swiperEvents.onClickArrow); els.prevArrow.addEventListener("keydown", swiperEvents.onClickArrow); }; const objList = { swiper: function () { if (objs.swiper == null) { objs.swiper = new Swiper(els.swiperContainer, { init: false, navigation: { nextEl: els.nextArrow, prevEl: els.prevArrow, }, pagination: { el: els.pagination, type: "bullets", clickable: true, renderBullet: function () { return '

      • '; }, }, slidesPerView: "auto", centeredSlides: true, spaceBetween: 10, breakpoints: { 768: { spaceBetween: 100, }, }, }); } }, }; const swiperEvents = { init: function () { let notification = this.el.querySelector(".swiper-notification"); els.bullets = this.pagination.bullets; for (let i = 0; i < els.bullets.length; i++) { els.bullets[i].removeAttribute("role"); els.bullets[i].addEventListener("click", function (e) { e.preventDefault(); e.stopPropagation(); objs.swiper.slideTo(i); }); } if (!!notification) this.el.removeChild(notification); accessibility.slide(); accessibility.pagination.tagging(); accessibility.pagination.label(); els.nextArrow.removeAttribute("aria-label"); els.prevArrow.removeAttribute("aria-label"); }, slideChange: function () { accessibility.slide(); accessibility.pagination.label(); }, onClickArrow: function (e) { status.arrowTimeout = null; status.arrowStyleTimeout = null; if ((e.type == "keydown" && e.keyCode == 13) || e.type == "click") { e.preventDefault(); if (objs.swiper.isBeginning && !objs.swiper.isEnd) { els.prevArrow.style.setProperty( "display", "block", "important" ); clearTimeout(status.arrowTimeout); status.arrowTimeout = setTimeout(function () { els.nextArrow.focus(); }, 300); clearTimeout(status.arrowStyleTimeout); status.arrowStyleTimeout = setTimeout(function () { els.prevArrow.style.display = ""; }, 400); } else if (!objs.swiper.isBeginning && objs.swiper.isEnd) { els.nextArrow.style.setProperty( "display", "block", "important" ); clearTimeout(status.arrowTimeout); status.arrowTimeout = setTimeout(function () { els.prevArrow.focus(); }, 300); clearTimeout(status.arrowStyleTimeout); status.arrowStyleTimeout = setTimeout(function () { els.nextArrow.style.display = ""; }, 400); } } }, }; const accessibility = { slide: function () { for (let i = 0; i < objs.swiper.slides.length; i++) { if (i != objs.swiper.activeIndex) { utils.onAccessibility(objs.swiper.slides[i]); } else { utils.offAccessibility(objs.swiper.slides[i]); } } }, pagination: { tagging: function () { const tagging = { "data-omni-type": "microsite_gallery", "data-omni": "galaxy-s24:highlights:camera^nightography:index:", "ga-ca": "gallery", "ga-ac": "feature gallery", "ga-la": "galaxy-s24:highlights:camera^nightography:index:", }; for (let i = 0; i < els.bullets.length; i++) { Object.keys(tagging).forEach((key) => { if (key == "data-omni" || key == "ga-la") { els.bullets[i].setAttribute(key, tagging[key] + (i + 1)); } else { els.bullets[i].setAttribute(key, tagging[key]); } }); } }, label: function () { for (let i = 0; i < els.bullets.length; i++) { let slideName = objs.swiper.slides[i].getAttribute("data-slide-name"); if (i === objs.swiper.realIndex) { if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) { els.bullets[i].setAttribute( "aria-label", `${LOCAL_VARI.slide}${i + 1 }: ${slideName} ${LOCAL_VARI.selected.toLowerCase()}` ); } else { els.bullets[i].setAttribute( "aria-label", `Slide${i + 1}: ${slideName} selected` ); } } else { if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) { els.bullets[i].setAttribute( "aria-label", `${LOCAL_VARI.slide}${i + 1}: ${slideName}` ); } else { els.bullets[i].setAttribute( "aria-label", `Slide${i + 1}: ${slideName}` ); } } } }, }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.opticalZoom = (function () { const resize = window.flagship.common.resize; let els = {}; let objs = {}; let classList = { isZoom: "is-zoom", isHide: "is-hide", active: "is-active", zoomOutReady: "is-zoom-out-ready", }; let index = {}; let clickActive = false; const init = function () { els.section = document.querySelector(".highlights-optical-zoom"); if (!!els.section) { setElements(); setProperty(); setScene(); bindEvents(); } }; const setElements = function () { els.zoomCtaList = els.section.querySelector( ".highlights-optical-zoom__zoom-button-list" ); els.zoomCta = els.section.querySelectorAll( ".highlights-optical-zoom__zoom-button" ); els.zoomTarget = els.section.querySelector(".js-img-zoom"); els.zoomImages = els.zoomTarget.querySelectorAll("img"); els.tooltip = els.section.querySelector( ".highlights-optical-zoom__zoom-tooltip" ); }; const setProperty = function () { for (let i = 0; i < els.zoomImages.length; i++) { els.zoomImages[i].setAttribute("aria-hidden", true); } els.isActiveCtaWrap = els.zoomCta[0].parentElement; els.oldVisibleImage = els.zoomImages[0]; accessibility.setTitle(els.zoomCta[0]); els.zoomImages[0].setAttribute("aria-hidden", false); els.zoomImages[0].style.transition = "none"; els.zoomImages[0].classList.add(classList.active); els.zoomImages[0].style.transition = ""; els.oldVisibleImage = els.zoomImages[0]; }; const setScene = function () { objs.scene = SCROLLER({ trackElement: els.section, useFixed: false, }); }; const resetImages = function () { setTimeout(() => { els.oldVisibleImage.classList.remove(classList.isZoom); els.oldVisibleImage.classList.remove("is-zoom-out-ready"); els.isvisibleTargetImage.removeEventListener( "transitionend", resetImages ); els.oldVisibleImage.removeEventListener( "transitionend", resetImages ); els.oldVisibleImage = els.isvisibleTargetImage; clickActive = false; }, 200); }; const bindEvents = function () { els.zoomCtaList.addEventListener("click", zoomClickEvent); els.section.addEventListener("keydown", zoomClickEvent); window.addEventListener("scroll", scrollHandler); scrollHandler(); }; const scrollHandler = function () { objs.scene.trackAnimation(function () { let startProgress = resize.checkResolution() == "desktop" ? 40 : 35; if (this.progress > startProgress && this.progress < 70) { let speed = 1000; zoomClickEvent(undefined, els.zoomCta[1]); setTimeout(() => { zoomClickEvent(undefined, els.zoomCta[2]); }, speed); setTimeout(() => { zoomClickEvent(undefined, els.zoomCta[1]); TweenMax.to(els.tooltip, 0.4, { opacity: 1, ease: "linear", delay: 1, }); }, speed * 2); window.removeEventListener("scroll", scrollHandler); } }); }; const zoomClickEvent = function (e, trigger) { if (clickActive) return; let actionableEventStatus; if (e != undefined) { if ( e.type == "click" && e.target.classList.contains( "highlights-optical-zoom__zoom-tooltip-text" ) ) return; let typeCheck = e.type == "click" || e.type == "keydown"; let commonClassCheck = e.target.classList.contains( "highlights-optical-zoom__zoom-button-title" ); let clickClassCheck = e.type == "click" && e.target.classList.contains( "highlights-optical-zoom__zoom-button" ); let keyCodeCheck = e.keyCode == 13; actionableEventStatus = typeCheck && (commonClassCheck || clickClassCheck || keyCodeCheck); } else if (e == undefined && trigger != undefined) { actionableEventStatus = true; } if (actionableEventStatus) { els.isZoomCta = trigger ? trigger : e.target.classList.contains( "highlights-optical-zoom__zoom-button-title" ) ? e.target.parentElement : e.target; els.isZoomCtaWrap = els.isZoomCta.parentElement; index.click = els.isZoomCta.getAttribute("data-index"); if (index.click == index.active) return; clickActive = true; els.isvisibleTargetImage = els.zoomImages[index.click]; if ( !!!trigger && !els.tooltip.classList.contains(classList.isHide) ) { TweenMax.to(els.tooltip, 0.4, { opacity: 0, ease: "linear", onComplete: function () { els.tooltip.style.display = "none"; els.tooltip.setAttribute("aria-hidden", "true"); }, }); els.tooltip.classList.add(classList.isHide); } accessibility.removeTitle(); accessibility.setTitle(els.isZoomCta); els.isActiveCtaWrap.classList.remove(classList.active); els.isZoomCtaWrap.classList.add(classList.active); if (!!!index.active || index.active < index.click) { els.isZoomImage = els.oldVisibleImage; els.oldVisibleImage.addEventListener( "transitionend", resetImages ); els.oldVisibleImage.classList.add(classList.isZoom); els.oldVisibleImage.classList.remove( classList.active, classList.zoomOutReady ); els.isvisibleTargetImage.classList.add(classList.active); } else { els.isZoomImage = els.oldVisibleImage; els.isvisibleTargetImage.classList.add(classList.zoomOutReady); els.isvisibleTargetImage.addEventListener( "transitionend", resetImages ); setTimeout(() => { els.isvisibleTargetImage.classList.add(classList.active); }, 100); setTimeout(() => { els.oldVisibleImage.classList.remove(classList.active); }, 600); } els.oldVisibleImage.setAttribute("aria-hidden", true); els.isvisibleTargetImage.setAttribute("aria-hidden", false); els.isActiveCtaWrap = els.isZoomCtaWrap; index.active = index.click; } }; const accessibility = { removeTitle: function () { for (let i = 0; i < els.zoomCta.length; i++) { els.zoomCta[i].removeAttribute("title"); } }, setTitle: function (cta) { if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) { cta.setAttribute("title", LOCAL_VARI.selected); } else { cta.setAttribute("title", "selected"); } }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.overview = (() => { const utils = window.flagship.common.utils; const resize = window.flagship.common.resize; let els = {}; let objs = {}; let eventFnc = {}; let statusClass = { progress: { active: "js-progress-active", pause: "js-progress-pause", }, video: { load: "is-loaded", complete: "is-video-load-complete", }, navigation: "is-active", info: { visible: "is-visible", active: "is-active", }, }; let status = {currentDevice: resize.checkResolution(),isAuto: true,isClickControl: false, }; const init = () => { els.section = document.querySelector(".highlights-overview"); if (!!els.section) { setElements(); setProperty(); objList.setScene(); bindEvents(); } }; const setElements = () => { els.sectionInner = els.section.querySelector(".common-inner"); els.overviewContents = els.section.querySelector( ".highlights-overview__contents" ); els.swiperContainer = els.section.querySelector( ".js-overview-carousel" ); els.slides = els.section.querySelectorAll( ".highlights-overview__carousel-slide" ); els.videoWrap = els.section.querySelectorAll(".common-video"); els.videos = els.section.querySelectorAll(".common-video__video"); els.videoControlCta = els.section.querySelectorAll( ".common-video__control" ); els.nextArrow = els.section.querySelector(".swiper-button-next"); els.prevArrow = els.section.querySelector(".swiper-button-prev"); els.progressWrap = els.section.querySelectorAll(".js-progress-wrap"); els.progressBar = els.section.querySelectorAll(".js-progress-bar"); els.navigationWrap = els.section.querySelector( ".highlights-overview__navigation" ); els.navigationInner = els.navigationWrap.querySelector( ".highlights-overview__navigation-inner" ); els.navigationList = els.navigationWrap.querySelectorAll( ".highlights-overview__navigation-listitem" ); els.navigationBtn = els.navigationWrap.querySelectorAll( ".highlights-overview__navigation-button-wrap" ); els.infoItem = els.section.querySelectorAll( ".highlights-overview__info-item" ); els.featureCtas = els.section.querySelectorAll('a.common-cta-encased');els.sup = els.section.querySelectorAll('a.click_sup');// tutorial els.tutorialOpenCtas = els.section.querySelectorAll(".js-tutorial-popup"); }; const setProperty = () => { status.navSlideWrapWidth = els.navigationWrap.clientWidth; status.isRtl = document.documentElement.classList.contains("rtl"); for (let i = 0; i < els.videos.length; i++) { els.videos[i].controlCta = els.videoControlCta[i]; els.videos[i].wrap = els.videoWrap[i]; els.videoControlCta[i].video = els.videos[i]; } for (let j = 0; j < els.navigationBtn.length; j++) {els.navigationBtn[j].index = j;els.navigationBtn[j].img = els.navigationBtn[j].querySelectorAll('.highlights-overview__navigation-button-image img');els.navigationBtn[j].img[0].parentWrap = els.navigationBtn[j];els.navigationBtn[j].img[1].parentWrap = els.navigationBtn[j];els.navigationBtn[j].text = els.navigationBtn[j].querySelector('.highlights-overview__navigation-button-text');els.navigationBtn[j].text.parentWrap = els.navigationBtn[j];els.navigationBtn[j].addEventListener('keydown', eventList.onClickNavigation);}}; const objList = { setSwiper: () => { if (objs.swiper == null) { objs.swiper = new Swiper(els.swiperContainer, { navigation: { nextEl: els.nextArrow, prevEl: els.prevArrow, }, init: false, speed: 500, }); objs.swiper.currentIndex = 0; objs.swiper.on("init", function () { let notification = this.el.querySelector( ".swiper-notification" ); this.el.removeChild(notification); els.nextArrow.removeAttribute("aria-label"); els.prevArrow.removeAttribute("aria-label"); objList.setVideo(); eventList.setVideoController(); eventList.scroll(); eventList.animationEnd(); accessibility.slide(); accessibility.setTitle(); }); objs.swiper.on('slideChange', swiperEvent.slideChange);objs.swiper.on('transitionEnd', swiperEvent.transitionEnd);objs.swiper.on('touchMove', swiperEvent.touchMove);objs.swiper.on('touchEnd', swiperEvent.touchEnd);objs.swiper.init(); } }, setVideo: () => { for (let i = 0; i < els.slides.length; i++) { let isSlide = els.slides[i]; let isVideoWrap = isSlide.querySelector(".common-video"); let isVideo = isSlide.querySelector('.common-video__video'); objs[`video_${i}`] = ANIUTIL.videoHandler({ playType: 'scrollPlay', wrap: isVideoWrap, video: isVideo, controller: isVideo.controlCta, startPoint: resize.checkResolution().indexOf('mobile') > -1 ? 25 : 35, reversePoint: resize.checkResolution().indexOf('mobile') > -1 ? 75 : 80, playCallback: function () { status.isAuto = true; if (!!!els.progressBar[i].style['animation-duration']) els.progressBar[i].style['animation-duration'] = `${isVideo.duration}s`; els.progressWrap[i].classList.remove(statusClass.progress.pause); if(isVideo.currentTime == 0) els.progressWrap[i].classList.remove(statusClass.progress.active); setTimeout(() => { els.progressWrap[i].classList.add(statusClass.progress.active); }, 20); accessibility.setTagging.pause(isVideo.controlCta); }, pauseCallback: function () { status.isAuto = false; setTimeout(() => { els.progressWrap[i].classList.add(statusClass.progress.pause); }, 100); accessibility.setTagging.play(isVideo.controlCta); }, endCallback: function () { if (!isVideoWrap.classList.contains('is-completed')) isVideoWrap.classList.add('is-completed'); status.isAuto = true; }, resetCallback: function () { setTimeout(() => { els.progressWrap[i].classList.remove(statusClass.progress.pause); els.progressWrap[i].classList.remove(statusClass.progress.active); }, 100); } }); } }, setScene: () => { objs.scene = SCROLLER({ trackElement: els.overviewContents, useFixed: false, }); }, setNavSwiper: () => { if (objs.navSwiper == null) { objs.navSwiper = new Swiper(els.navigationWrap, { init: false, slidesPerView: "auto", }); objs.navSwiper.on("init", function () { let notification = this.el.querySelector( ".swiper-notification" ); this.el.removeChild(notification); }); objs.navSwiper.on("touchMove", swiperEvent.checkScrollEnd); objs.navSwiper.init(); } }, }; const bindEvents = () => { objList.setSwiper(); window.addEventListener("scroll", eventList.scroll); els.navigationWrap.addEventListener( "click", eventList.onClickNavigation ); els.nextArrow.addEventListener("click", swiperEvent.onClickArrow); els.nextArrow.addEventListener("keydown", swiperEvent.onClickArrow); els.prevArrow.addEventListener("click", swiperEvent.onClickArrow); els.prevArrow.addEventListener("keydown", swiperEvent.onClickArrow); swiperEvent.navInitCheck(); for (let i = 0; i < els.featureCtas.length; i++) { els.featureCtas[i].addEventListener( "click", eventList.clickFeatureCta ); } // tutorialfor (let j = 0; j < els.tutorialOpenCtas.length; j++) {els.tutorialOpenCtas[j].addEventListener('click', eventList.clickTutorialOpenCta);}for(let i=0; i

        { let activeIndex = objs.swiper.activeIndex; let currentIndex = objs.swiper.currentIndex; let slideLength = objs.swiper.slides.length; let loadIndex = activeIndex == slideLength - 1 ? 0 : activeIndex; let loadVideoLength = els.section.querySelectorAll( `.${statusClass.video.load}` ).length; let allSlideloadComplete = els.videos.length == loadVideoLength; let nextIndex = objs.swiper.activeIndex < objs.swiper.slides.length - 1 ? objs.swiper.activeIndex + 1 : 0; if (!allSlideloadComplete && els.videos.length > loadIndex) { if ( !els.videos[activeIndex].classList.contains( statusClass.video.complete ) ) { videoLoader.setResponsiveMedia([els.videos[activeIndex]]); els.videoWrap[activeIndex].classList.add( statusClass.video.load ); } if ( !els.videos[nextIndex].classList.contains( statusClass.video.complete ) ) { videoLoader.setResponsiveMedia([els.videos[nextIndex]]); els.videoWrap[nextIndex].classList.add(statusClass.video.load); } } if (currentIndex != activeIndex) {objs[`video_${currentIndex}`].eventList.reset.call(objs[`video_${currentIndex}`]);objs[`video_${currentIndex}`].video.removeEventListener('canplay', objs[`video_${currentIndex}`].video.play);if(!!utils.isLowNetwork() || !status.isAuto) {els.progressWrap[currentIndex].classList.remove(statusClass.progress.active);els.progressWrap[activeIndex].classList.remove(statusClass.progress.pause);} else {els.progressWrap[currentIndex].classList.remove(statusClass.progress.active);if (objs[`video_${activeIndex}`] != undefined && objs[`video_${activeIndex}`].video.readyState >= 4) {objs[`video_${activeIndex}`].video.play();} else {objs[`video_${activeIndex}`].video.addEventListener('canplay', function () {this.play();});}}if (!els.navigationBtn[activeIndex].classList.contains(statusClass.navigation)) {els.navigationBtn[currentIndex].classList.remove(statusClass.navigation);els.navigationBtn[activeIndex].classList.add(statusClass.navigation);accessibility.setTitle();} if ( !els.infoItem[activeIndex].classList.contains( statusClass.info.visible ) ) { els.infoItem[currentIndex].classList.remove( statusClass.info.visible ); els.infoItem[activeIndex].classList.add( statusClass.info.visible ); } if ( !els.infoItem[activeIndex].classList.contains( statusClass.info.active ) ) { els.infoItem[currentIndex].classList.remove( statusClass.info.active ); els.infoItem[activeIndex].classList.add( statusClass.info.active ); } } if (objs.navSwiper != null) swiperEvent.setNavSwiperXvalue(activeIndex); accessibility.slide(); objs.swiper.currentIndex = activeIndex; }, transitionEnd: function () { if(!!status.isClickControl) return; objs[`video_${objs.swiper.activeIndex}`].video.controlCta.focus(); }, touchMove: function () { objs.swiper.off('transitionEnd', swiperEvent.transitionEnd); }, touchEnd: function () { objs.swiper.on('transitionEnd', swiperEvent.transitionEnd); }, onClickArrow: function (e) { status.arrowTimeout = null; status.arrowStyleTimeout = null; status.accessibilityTimeout = null; if ((e.type == 'keydown' && e.keyCode == 13) || e.type == 'click') { e.preventDefault(); status.isClickControl = true; if (objs.swiper.isBeginning && !objs.swiper.isEnd) { els.prevArrow.style.setProperty('display', 'block', 'important'); clearTimeout(status.arrowTimeout); status.arrowTimeout = setTimeout(function () { els.nextArrow.focus(); }, 300); clearTimeout(status.arrowStyleTimeout); status.arrowStyleTimeout = setTimeout(function () { els.prevArrow.style.display = ""; }, 400); } else if (!objs.swiper.isBeginning && objs.swiper.isEnd) { els.nextArrow.style.setProperty( "display", "block", "important" ); clearTimeout(status.arrowTimeout); status.arrowTimeout = setTimeout(function () { els.prevArrow.focus(); }, 300); clearTimeout(status.arrowStyleTimeout); status.arrowStyleTimeout = setTimeout(function () { els.nextArrow.style.display = ""; }, 400); } else if (!objs.swiper.isBeginning && !objs.swiper.isEnd) { let target = e.target.classList.contains("swiper-button-next") ? els.nextArrow : els.prevArrow; let noTarget = target.classList.contains("swiper-button-next") ? els.prevArrow : els.nextArrow; objs.swiper.slides[objs.swiper.activeIndex].setAttribute( "tabindex", -1 ); objs.swiper.slides[objs.swiper.activeIndex].setAttribute( "aria-hidden", true ); noTarget.setAttribute("tabindex", -1); noTarget.setAttribute("aria-hidden", true); clearTimeout(status.arrowTimeout); status.arrowTimeout = setTimeout(function () { target.focus(); }, 300); clearTimeout(status.accessibilityTimeout); status.accessibilityTimeout = setTimeout(function () { objs.swiper.slides[objs.swiper.activeIndex].removeAttribute( "tabindex" ); objs.swiper.slides[objs.swiper.activeIndex].removeAttribute( "aria-hidden" ); noTarget.removeAttribute("tabindex"); noTarget.removeAttribute("aria-hidden"); }, 400); } eventList.animationEndDestroy(); } }, navInitCheck: () => { let wrapPadding = parseInt(window.getComputedStyle(els.sectionInner).paddingLeft) * 2; let getComputedStyle = window.getComputedStyle( els.navigationList[0] ); let navMargin = !!status.isRtl ? parseInt(getComputedStyle.marginLeft) : parseInt(getComputedStyle.marginRight); let navSlideWidth = els.navigationList[0].clientWidth; let slideWrapWidth = navSlideWidth * els.navigationList.length + navMargin * (els.navigationList.length - 1); status.navSwiperPadding = (status.navSlideWrapWidth - slideWrapWidth) / 2; let contentsWidth = els.sectionInner.clientWidth - wrapPadding - status.navSwiperPadding; status.isNavInit = (status.currentDevice.indexOf("mobile") > -1 && contentsWidth <= slideWrapWidth) || els.navigationList.length > 4; if (!!status.isNavInit) { objList.setNavSwiper(); } else { swiperEvent.destroy(); } }, setNavSwiperXvalue: (activeIndex) => { if (activeIndex === 0 || activeIndex === 1) { status.xValue = 0; } else if (activeIndex > 1) { if (status.navSwiperPadding * 2 < 0) { status.xValue = status.navSlideWrapWidth - els.navigationInner.clientWidth + Math.abs(status.navSwiperPadding * 2); } else { status.xValue = status.navSlideWrapWidth - els.navigationInner.clientWidth; } } if (!status.isRtl) els.navigationInner.style.transform = `translate3d(-${status.xValue}px, 0px, 0px)`; else els.navigationInner.style.transform = `translate3d(${status.xValue}px, 0px, 0px)`; swiperEvent.checkScrollEnd(); }, checkScrollEnd: () => { if (!status.isRtl) { if (objs.navSwiper.getTranslate() < 0) els.navigationWrap.classList.add("is-scroll-end"); else els.navigationWrap.classList.remove("is-scroll-end"); } else { if (objs.navSwiper.getTranslate() < 0) els.navigationWrap.classList.remove("is-scroll-end"); else els.navigationWrap.classList.add("is-scroll-end"); } }, destroy: () => { if (objs.navSwiper != null) { objs.navSwiper.destroy(true); objs.navSwiper = null; } }, }; const eventList = { setVideoController: () => { for (let i = 0; i < els.videoControlCta.length; i++) { els.videoControlCta[i].addEventListener('click', function () { let isVideo = this.video; if (isVideo.paused) { isVideo.play(); } else { isVideo.pause(); } }); } }, scroll: () => { objs.scene.trackAnimation(function () { objs[`video_${objs.swiper.activeIndex}`].scrollActive( this.progress ); }); }, animationEnd: () => { eventFnc.animationEnd = {}; if (!!utils.isLowNetwork()) return; for (let i = 0; i < els.progressBar.length; i++) { eventFnc.animationEnd[i] = function () { if (objs.swiper.activeIndex == (objs.swiper.slides.length - 1)) { status.isAuto = false; els.progressBar[i].removeEventListener('animationend', eventFnc.animationEnd[i]); } else { setTimeout(() => { if(!status.isAuto) return; objs.swiper.slideNext(500); els.progressBar[i].removeEventListener('animationend', eventFnc.animationEnd[i]); }, 800); } }; els.progressBar[i].addEventListener( "animationend", eventFnc.animationEnd[i] ); } }, animationEndDestroy: () => { for (let i = 0; i < els.progressBar.length; i++) { els.progressBar[i].removeEventListener( "animationend", eventFnc.animationEnd[i] ); } }, onClickNavigation: (e) => { if ( e.target.classList.contains("swiper-wrapper") || (e.type == "keydown" && e.keyCode != 13) ) return; let oldTarget = els.navigationWrap.querySelector( `.${statusClass.navigation}` ); let targetMatches = e.target.matches( ".highlights-overview__navigation-button-image img" ) || e.target.matches(".highlights-overview__navigation-button-text"); if (targetMatches) { currentTarget = e.target.parentWrap; } else if ( e.target.classList.contains( "highlights-overview__navigation-button" ) ) { currentTarget = e.target.parentElement; } if (!currentTarget.classList.contains(statusClass.navigation)) {oldTarget.classList.remove(statusClass.navigation);currentTarget.classList.add(statusClass.navigation);objs.swiper.slideTo(currentTarget.index, 500, false);accessibility.setTitle();}status.isClickControl = true;eventList.animationEndDestroy();},clickFeatureCta: (e) => {e.preventDefault();status.isAuto = false;let target = e.target.matches('.common-cta-encased__text') ? e.target.parentElement : e.target; let sectionId = target.getAttribute("href"); let section; if (sectionId == "#transcript-assist") { section = document.querySelector(".highlights-live-translate"); let layerPopup = document.querySelector(sectionId); let sectionTop = section.getBoundingClientRect().top; let movePosition = sectionTop + window.pageYOffset - utils.getNavHeight(); window.scrollTo(0, movePosition); setTimeout(() => { layerPopup.show(); }, 300); } else { section = document.querySelector(sectionId); let sectionTop = section.getBoundingClientRect().top; let movePosition = sectionTop + window.pageYOffset - utils.getNavHeight(); let title = section.querySelector("h2.common-sub-headline"); let clickable = section.querySelectorAll("a, button"); if (!!title) { let _focusOut = function () { title.removeAttribute("tabindex"); title.removeEventListener("focusout", _focusOut); }; title.addEventListener("focusout", _focusOut); title.setAttribute("tabindex", 0); title.focus(); } else { clickable[0].focus(); } window.scrollTo(0, movePosition); } }, onResize: function (currRes) { status.currentDevice = currRes; status.navSlideWrapWidth = els.navigationWrap.clientWidth; swiperEvent.navInitCheck(); }, clickTutorialOpenCta: function () { let hash = this.getAttribute("data-hash"); let tutorialPopup = document.querySelector(`#${hash}`); let tutorialPopupList = document.querySelectorAll(".common-tutorial"); if (tutorialPopup) {status.isAuto = false;tutorialPopup.show();if (utils.detector.isIosDevice || utils.detector.isTouchDevice) this.blur();else this.focus();for (let i = 0; i < tutorialPopupList.length; i++) {tutorialPopupList[i].isOverview = true;tutorialPopupList[i].overviewCta = this;}}},}; const accessibility = { slide: () => { for (let i = 0; i < objs.swiper.slides.length; i++) { if (i != objs.swiper.activeIndex) { utils.onAccessibility(objs.swiper.slides[i]); } else { utils.offAccessibility(objs.swiper.slides[i]); } } }, setTitle: () => { for (let i = 0; i < els.navigationBtn.length; i++) { let button = els.navigationBtn[i].querySelector("button"); button.removeAttribute("title"); if (i == objs.swiper.activeIndex) { if (typeof LOCAL_VARI != "undefined" && !!LOCAL_VARI) { button.setAttribute("title", LOCAL_VARI.selected); } else { button.setAttribute("title", "Selected"); } } } }, setTagging: { play: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("pause", "play") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("pause", "play") ); } }, pause: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("play", "pause") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("play", "pause") ); } }, }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.quote = (function () { const utils = window.flagship.common.utils, resize = window.flagship.common.resize; let els = {}, prevDevice = null, currDevice = resize.checkResolution(); const init = function () { els.section = document.querySelector(".highlights-media-quote"); if (!!els.section) { setElements(); bindEvents(); } }; const setElements = function () { els.swiper = null; els.itemArray = []; els.quoteWrap = els.section.querySelector( ".highlights-media-quote__inner" ); els.quoteContainer = els.section.querySelector( ".highlights-media-quote__list-wrap" ); els.quoteList = els.section.querySelector( ".highlights-media-quote__list" ); els.quoteListItems = els.quoteList.querySelectorAll( ".highlights-media-quote__item" ); els.arrowWrap = els.section.querySelector( ".highlights-media-quote__arrow" ); els.prevArrow = els.section.querySelector(".swiper-button-prev"); els.nextArrow = els.section.querySelector(".swiper-button-next"); els.quotePagination = els.section.querySelector( ".highlights-media-quote__pagination" ); }; const bindEvents = function () { window.addEventListener("DOMContentLoaded", onLodeHandler, { once: true, }); resize.add(onResizeHandler); els.nextArrow.addEventListener("click", swiperEvents.onClickArrow); els.nextArrow.addEventListener("keydown", swiperEvents.onClickArrow); els.prevArrow.addEventListener("click", swiperEvents.onClickArrow); els.prevArrow.addEventListener("keydown", swiperEvents.onClickArrow); }; const onLodeHandler = function () { onResponsiveChange(); }; const onResizeHandler = function (currRes) { currDevice = currRes; if (currDevice != prevDevice) { onResponsiveChange(); prevDevice = currDevice; } }; const onResponsiveChange = function () { if (currDevice.indexOf("mobile") > -1) { setSwiper(); } else { swiperEvents.destroy(); } }; const setSwiper = function () { if (els.swiper === null) { els.quoteWrap.classList.add("js-swiper-initialized"); els.swiper = new Swiper(els.quoteContainer, { init: false, slidesPerView: "auto", centeredSlides: true, navigation: { nextEl: els.nextArrow, prevEl: els.prevArrow, }, pagination: { el: els.quotePagination, type: "bullets", renderBullet: function () { return '
      • '; }, }, }); els.swiper.on("init", swiperEvents.init); els.swiper.on("slideChange", swiperEvents.slideChange); els.swiper.init(); } }; const swiperEvents = { init: function () { let self = this, notification = self.el.querySelector(".swiper-notification"); if (!!notification) self.el.removeChild(notification); setAccessibility.slide(); setAccessibility.arrow(); setPaginationTagging.call(self); setPaginationLabel.call(self); for (let i = 0; i < self.pagination.bullets.length; i++) { (function (idx) { self.pagination.bullets[i].addEventListener( "click", function () { self.slideTo(idx); } ); })(i); } }, slideChange: function () { setAccessibility.slide(); setAccessibility.arrow(); setPaginationLabel.call(this); }, onClickArrow: function (e) { if ( (e.type == "keydown" && e.keyCode == 13) || (e.type == "click" && document.documentElement.classList.contains("isTouchDevice")) ) { e.preventDefault(); clearTimeout(els.arrowTimeout); els.arrowTimeout = setTimeout(function () { if (els.swiper.isBeginning && !els.swiper.isEnd) { els.nextArrow.focus(); } else if (!els.swiper.isBeginning && els.swiper.isEnd) { els.prevArrow.focus(); } }, 300); } }, destroy: function () { if (els.swiper != null) { els.quoteWrap.classList.remove("js-swiper-initialized"); els.swiper.pagination.destroy(true); els.swiper.navigation.destroy(true); els.swiper.destroy(true); els.swiper = null; } }, }; const setPaginationTagging = function () { let bullets = Array.prototype.slice.call(this.pagination.bullets), paginationTagging = { "data-omni-type": "microsite_contentinter", "data-omni": "galaxy-s24:highlights:overview:media-quote:index:", "ga-ca": "indication", "ga-ac": "carousel", "ga-la": "galaxy-s24:highlights:overview:media-quote:index:", }; bullets.forEach(function (ele, idx) { Object.keys(paginationTagging).forEach(function (key) { if (key == "data-omni" || key == "ga-la") { ele.setAttribute(key, paginationTagging[key] + (idx + 1)); } else { ele.setAttribute(key, paginationTagging[key]); } }); }); }; const setPaginationLabel = function () { let self = this, slides = Array.prototype.slice.call(this.slides), bullets = Array.prototype.slice.call(this.pagination.bullets); bullets.forEach(function (bullet, bulletIndex) { let ariaLabelText = slides[bulletIndex].querySelector( ".highlights-media-quote__media" ).innerText; if (self.realIndex == bulletIndex) { bullet.setAttribute("aria-label", ariaLabelText + " Selected"); } else { bullet.setAttribute("aria-label", ariaLabelText); } }); }; const setAccessibility = { slide: function () { for (let i = 0; i < els.swiper.slides.length; i++) { if (i != els.swiper.snapIndex) { utils.onAccessibility(els.swiper.slides[i]); } else { utils.offAccessibility(els.swiper.slides[i]); } } }, arrow: function () { if (els.swiper.isBeginning && !els.swiper.isEnd) { utils.offAccessibility(els.nextArrow); utils.onAccessibility(els.prevArrow); } else if (!els.swiper.isBeginning && els.swiper.isEnd) { utils.offAccessibility(els.prevArrow); utils.onAccessibility(els.nextArrow); } else { utils.offAccessibility(els.nextArrow); utils.offAccessibility(els.prevArrow); } }, }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.resolutionPopup = (function () { const utils = window.flagship.common.utils; const common = window.flagship.highlights.common; let els = {}; let objs = {}; let status = {}; const init = function () { els.section = document.querySelector(".highlights-resolution"); els.layerPopup = document.querySelector( ".highlights-resolution-popup" ); if (!!els.layerPopup) { setElements(); setStatus(); setPopup(); bindEvents(); } }; const setElements = function () { status.isGlobal = document.documentElement.classList.contains("global"); els.contents = document.querySelector("#contents"); els.openCta = els.section.querySelector(".js-layer-popup"); els.innerWrap = els.layerPopup.querySelector( ".common-popup__inner-wrapper" ); els.closeCtas = els.layerPopup.querySelectorAll( ".common-popup__close-cta" ); els.dimmed = els.layerPopup.querySelector(".common-popup__dimmed"); els.supClicker = els.layerPopup.querySelectorAll("a.click_sup"); els.hashPopupOpener = null; }; const setStatus = function () { status.isHash = false; }; const bindEvents = function () { for (let i = 0; i < els.supClicker.length; i++) { els.supClicker[i].addEventListener("click", onClickSup); } }; const setPopup = function () { utils.layerPopup({ layerPopup: els.layerPopup, layerPopupClass: ".highlights-resolution-popup", openerEvent: { element: els.openCta, }, closeCtas: [els.closeCtas[0], els.closeCtas[1]], dimmed: els.dimmed, moveTarget: document.documentElement, contents: els.contents, show: { start: function (target) { els.innerWrap.scrollTop = 0; els.layerPopup.classList.add("is-init"); target.openerCta.blur(); setPopupLazyLoader.image(); if ( `#${els.openCta.getAttribute("data-hash")}` == window.location.hash ) { status.isHash = true; els.hashPopupOpener = els.openCta; } }, end: function () { if (utils.detector.isIosDevice) els.layerPopup.style.display = "block"; els.layerPopup.classList.add("is-open"); }, }, hide: { start: function (target) { target.openerCta.focus(); els.layerPopup.classList.remove("is-open"); }, end: function () { setTimeout(function () { els.layerPopup.classList.remove("is-init"); }, 300); if (status.isHash && els.hashPopupOpener) { els.hashPopupOpener.focus(); setTimeout(function () { els.hashPopupOpener.focus(); status.isHash = false; els.hashPopupOpener = null; }, 300); } }, }, }); }; const setPopupLazyLoader = { image: function () { objs.imageLoader = ANIUTIL.mediaLoader({ lazyClass: ".js-resolution-popup-img-src", responsiveClass: ".js-resolution-popup-res-img", preset: status.isGlobal ? "" : "?imbypass=true", innerScroll: { use: true, wrap: els.layerPopup, }, loadOption: [ { resolution: 1920, attribute: "data-src-pc", }, { resolution: 1023, attribute: "data-src-tb", }, { resolution: 767, attribute: "data-src-mo", }, { resolution: 360, attribute: "data-src-mo-s", }, ], visiblePoint: 2, }); window.popupBgLoader = ANIUTIL.mediaLoader({ type: "bgImage", lazyClass: ".js-resolution-popup-bg-img", innerScroll: { use: true, wrap: els.layerPopup, }, loadOption: [ { resolution: 1920, attribute: "", bgOpts: "", }, ], visiblePoint: 1, }); }, }; const onClickSup = function (e) { e.preventDefault(); e.stopPropagation(); els.layerPopup.hide(); let targetIndex = parseFloat(e.target.innerText), disclaimer = document.querySelectorAll("#desc-section li")[targetIndex - 1], disclaimerText = disclaimer.innerText, activeBlock = '' + disclaimerText + ""; setTimeout(() => { disclaimer.innerHTML = activeBlock; disclaimer.querySelector("a").focus(); }, 500); const eventList = { focusIn: function () { common.centeredFocus.call(disclaimer.querySelector("a")); disclaimer.removeEventListener("focusin", eventList.focusIn); }, focusOut: function () { disclaimer.innerHTML = disclaimerText; disclaimer.removeAttribute("tabindex"); disclaimer.removeEventListener("focusout", eventList.focusOut); }, }; disclaimer.addEventListener("focusin", eventList.focusIn); disclaimer.addEventListener("focusout", eventList.focusOut); }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.tutorial = (function () { const utils = window.flagship.common.utils; const resize = window.flagship.common.resize; const common = window.flagship.highlights.common; const tutorialPopup = window.flagship.highlights.tutorialPopup; let objs = {}; let status = {}; let commonEls = {}; let isDevice = resize.checkResolution(); status.isGlobal = document.documentElement.classList.contains("global"); let sectionList = document.querySelectorAll( "#generative-edit, #circle-to-search, #live-translate, #chat-assist" ); let layerPopup = document.querySelectorAll( "#generative-edit-experience, #circle-to-search-experience, #live-translate-experience, #chat-assist-experience" ); let popupClassList = [ ".highlights-generative-edit-tutorial", ".highlights-circle-to-search-tutorial", ".highlights-live-translate-tutorial", ".highlights-chat-assist-tutorial", ]; let statusClass = { isVisible: "is-visible", isTutorialOpend: "is-tutorial-opened", isTutorialOpenedMo: "is-tutorial-opened-mo", isInfoOpen: "is-info-open", isInfoVisible: "is-info-visible", isTutorialEnd: "is-tutorial-end", isActive: "is-active", isBgLoadComplete: "is-bg-load-complete", isCompleted: "is-completed", isOpen: "is-open", }; const init = function () { status.isHash = false; status.isIos = utils.detector.isIosDevice; status.overview = {};status.overviewStartTimeout = null; commonEls.globalSubNav = document.querySelector("#subnav"); commonEls.globalContents = document.querySelector("#contents"); commonEls.dotcomContents = document.querySelector(".pd-g-floating-nav"); commonEls.overview = document.querySelector(".highlights-overview"); commonEls.gnb = document.querySelector(".nv00-gnb"); commonEls.tooltipWrap = document.querySelectorAll( ".js-tutorial-tooltip" ); if (status.isGlobal) { commonEls.contentsChildren = document.querySelector("#contents").children; commonEls.commonUi = document.querySelectorAll( "#accessibility-navigation, #header, #footer" ); } else { commonEls.wrapChildren = document.querySelector("#wrap").children; commonEls.contentChildren = document.querySelector("#content").children; commonEls.rootChildren = document.querySelector( "#content .root .responsivegrid .aem-Grid--12" ).children; commonEls.flotingNavi = document.querySelector(".pd-g-floating-nav");commonEls.flotingNaviFixedWrap = document.querySelector('.floating-navigation__wrap'); } for (let i = 0; i < sectionList.length; i++) { let opts = { section: sectionList[i], layerPopup: layerPopup[i], popupClass: popupClassList[i], openCta: sectionList[i].querySelector(".js-tutorial-popup"), closeCta: layerPopup[i].querySelector( ".common-tutorial__close-cta--popup" ), moCloseCta: layerPopup[i].querySelector( ".common-tutorial__close-cta--video" ), }; els = getElements(opts); tooltipAccessibility(); setPopup(opts, els); bindEvents(els, i); } }; const getElements = function (opts) { let els = {}; els.openCta = opts.section.querySelector('.js-tutorial-popup');els.layerPopup = opts.layerPopup;els.innerWrapper = opts.layerPopup.querySelector('.common-tutorial__inner-wrapper');els.innerWrap = opts.layerPopup.querySelector('.common-tutorial__inner-wrap');els.textWrap = opts.layerPopup.querySelector('.common-tutorial__text');els.closeCta = opts.layerPopup.querySelector('.common-tutorial__close-cta--popup');els.moCloseCta = opts.moCloseCta; els.infoPopup = opts.layerPopup.querySelector( ".common-tutorial__info-area" ); els.videoContent = opts.layerPopup.querySelector( ".common-tutorial__video-content" ); els.introVideoSection = opts.layerPopup.querySelector( ".common-tutorial__intro-video" ); els.introVideoWrap = opts.layerPopup.querySelector( ".common-tutorial__intro-video .common-video" ); els.introVideo = opts.layerPopup.querySelector( ".common-tutorial__intro-video video" ); els.introCoverImage = opts.layerPopup.querySelector( ".common-tutorial__intro-video .common-video__cover-image" ); if ( opts.layerPopup.classList.contains( "highlights-live-translate-tutorial" ) ) { els.introCta = opts.layerPopup.querySelector( ".common-tutorial__intro-video .js-tutorial-tooltip-cta" ); } els.tutorialContents = opts.layerPopup.querySelector( ".common-tutorial__video-content" ); els.tutorialVideoContainer = opts.layerPopup.querySelector( ".common-tutorial__main-video" ); els.tutorialVideoWrap = opts.layerPopup.querySelectorAll( ".common-tutorial__main-video .common-tutorial__video" ); els.tutorialVideos = opts.layerPopup.querySelectorAll( ".common-tutorial__main-video .common-tutorial__video video" ); els.tutorialCoverImages = opts.layerPopup.querySelectorAll( ".common-tutorial__main-video .common-video__cover-image" ); els.tutorialActiveCta = opts.layerPopup.querySelector( ".common-tutorial__cta--play button" ); els.tutorialDeactiveCta = opts.layerPopup.querySelector( ".common-tutorial__cta--pause button" ); els.tutorialTooltip = opts.layerPopup.querySelectorAll( ".common-tutorial__main-video .js-tutorial-tooltip" ); els.tutorialAlert = opts.layerPopup.querySelectorAll( ".common-tutorial__main-video .js-tutorial-alert" ); els.generativeCta = opts.layerPopup.querySelector( ".js-tutorial-generative-cta" ); els.tutorialFrame = opts.layerPopup.querySelector( ".common-tutorial__main-video.common-video__frame" ); els.tutorialReplay = opts.layerPopup.querySelector( ".common-tutorial__replay-cta" ); els.tutorialNavigation = opts.layerPopup.querySelector( ".common-tutorial__navigation" ); els.navPrev = els.tutorialNavigation.querySelector( ".common-tutorial__navigation-button--prev" ); els.navNext = els.tutorialNavigation.querySelector( ".common-tutorial__navigation-button--next" ); els.tutorialPagination = opts.layerPopup.querySelector( ".common-tutorial__pagination-area" ); els.supClicker = opts.layerPopup.querySelectorAll("a.click_sup"); els.layerPopup.opener = els.openCta; els.layerPopup.targetOpener = opts.openCta; return els; }; const setProperty = function (els) { els.introVideoWrap.video = els.introVideo; els.introVideoWrap.controller = els.introVideoWrap.querySelector( ".common-video__control" ); els.introVideoWrap.controller.video = els.introVideo; }; const tooltipAccessibility = function () { for (let i = 0; i < commonEls.tooltipWrap.length; i++) { utils.onAccessibility(commonEls.tooltipWrap[i]); } }; const eventList = { common: { setMobileVideoWidth: function (els) { if ( els.layerPopup.classList.contains("is-open") && resize.checkResolution().indexOf("mobile") > -1 ) { let containerWidth = window.innerWidth; let containerHeight = window.innerHeight; if (!status.isIos) { let videoHeight = Math.floor(containerWidth * 2.1666); if (videoHeight > containerHeight) { els.tutorialVideoContainer.style.width = `${Math.floor( containerHeight * 0.4615 )}px`; els.tutorialVideoContainer.style.height = `${containerHeight}px`; } else { els.tutorialVideoContainer.style.width = ""; els.tutorialVideoContainer.style.height = `${videoHeight}px`; } } else { els.tutorialVideoContainer.style.width = `${Math.floor( containerHeight * 0.4615 )}px`; } } else if ( resize.checkResolution() != "mobile" && els.tutorialVideoContainer.style.height ) { if (!status.isIos) { els.tutorialVideoContainer.style.width = ""; els.tutorialVideoContainer.style.height = ""; } else { els.tutorialVideoContainer.style.width = ""; } } }, }, resize: { position: function (els) { if (els.layerPopup.classList.contains("is-open")) { if ( isDevice.indexOf("desktop") > -1 && resize.checkResolution().indexOf("desktop") > -1 ) { let isHash = location.hash; if (!status.isGlobal && window.pageYOffset == 0 && !!isHash) { eventList.popup.setPopupPosition(els.layerPopup); } } if (isDevice != resize.checkResolution()) {eventList.popup.setPopupPosition(els.layerPopup);if (els.layerPopup.querySelector('.is-info-open, .is-tutorial-opened')) {eventList.tutorial.deactive(els);eventList.tutorial.reset(els);};isDevice = resize.checkResolution(); } } }, }, tutorial: { videoContentReset: function (els) { els.videoContent.classList.remove(statusClass.isInfoOpen); els.videoContent.classList.remove(statusClass.isInfoVisible); els.videoContent.classList.add(statusClass.isTutorialOpend); }, reset: function (els) { if (els.generativeCta) { els.generativeCta.classList.remove( statusClass.isVisible, statusClass.isTutorialEnd ); els.generativeCta.parentElement.classList.remove( statusClass.isVisible ); } els.tutorialActiveCta.parentElement.classList.add( statusClass.isActive ); els.tutorialDeactiveCta.parentElement.classList.remove( statusClass.isActive ); els.tutorialContents.classList.remove(statusClass.isInfoOpen); els.videoContent.classList.remove(statusClass.isInfoVisible); els.tutorialContents.classList.remove( statusClass.isTutorialOpend ); if (resize.checkResolution().indexOf("mobile") > -1) { els.layerPopup.classList.remove(statusClass.isTutorialOpenedMo); } for (let i = 0; i < els.tutorialVideoWrap.length; i++) { if (els.tutorialVideoWrap[i]) els.tutorialVideoWrap[i].classList.remove( statusClass.isVisible ); if (els.tutorialVideos[i]) { if (!els.tutorialVideos[i].paused) { els.tutorialVideos[i].pause(); } els.tutorialVideos[i].currentTime = 0; } let isComplete = els.tutorialVideoWrap[i].querySelector( `.${statusClass.isCompleted}` ); if (isComplete) els.tutorialVideos[i].videoHandler.resetCallback(); if (els.tutorialTooltip[i]) els.tutorialTooltip[i].classList.remove( statusClass.isVisible ); if (els.tutorialAlert[i]) els.tutorialAlert[i].classList.remove(statusClass.isVisible); clearTimeout(status.infoRemoveTiming); } if (!!els.introCta) {els.introCta.parentElement.classList.remove(statusClass.isVisible);utils.onAccessibility(els.introCta.parentElement);}els.tutorialReplay.style.display = '';if (!els.tutorialReplay.hasAttribute('tabindex')) els.tutorialReplay.setAttribute('tabindex', -1);if (!els.tutorialReplay.hasAttribute('aria-hidden')) els.tutorialReplay.setAttribute('aria-hidden', true);els.introVideoWrap.controller.removeAttribute('tabindex');els.introVideoWrap.controller.removeAttribute('aria-hidden');},videoVisible: function(els) { if (!els.introVideo.paused) { els.introVideo.pause(); } els.videoContent.classList.add(statusClass.isInfoOpen); setTimeout(() => { els.videoContent.classList.add(statusClass.isInfoVisible); }, 0); els.tutorialVideoWrap[0].classList.add(statusClass.isVisible); }, imageLoad: function (els) { if ( !els.tutorialFrame.classList.contains( statusClass.isBgLoadComplete ) ) { els.tutorialFrame.classList.add(statusClass.isBgLoadComplete); } if ( !els.tutorialDeactiveCta.classList.contains( statusClass.isBgLoadComplete ) ) { els.tutorialDeactiveCta.classList.add( statusClass.isBgLoadComplete ); } }, setActiveCta: function (els) { els.tutorialActiveCta.parentElement.classList.remove( statusClass.isActive ); els.tutorialDeactiveCta.parentElement.classList.add( statusClass.isActive ); if (resize.checkResolution().indexOf("mobile") > -1) { els.layerPopup.classList.add(statusClass.isTutorialOpenedMo); } }, activeInfo: function(els) {let self = this;clearTimeout(status.infoRemoveTiming);status.infoRemoveTiming = setTimeout(() => {self.videoContentReset(els);els.tutorialVideos[0].play();utils.offAccessibility(els.tutorialVideoWrap[0]);let tutorialVideoController = els.tutorialVideoWrap[0].querySelector('.common-video__control.common-play-button');tutorialVideoController.focus();if (resize.checkResolution().indexOf('mobile') > -1) {els.layerPopup.classList.add(statusClass.isTutorialOpenedMo);}if (els.tutorialVideos[1].readyState < 4) {imageLoader.setResponsiveMedia([els.tutorialCoverImages[1]]);videoLoader.setResponsiveMedia([els.tutorialVideos[1]]);}els.tutorialVideos[0].focus();status.infoRemoveTiming = null;}, 3000); }, active: function (els) { this.onAccessibility(els); if ( resize.checkResolution().indexOf("mobile") > -1 && !status.isIos ) { document.documentElement.requestFullscreen(); } if (resize.checkResolution().indexOf("mobile") > -1) { setTimeout(function () { els.moCloseCta.focus(); }, 300); } else { setTimeout(function () { els.tutorialDeactiveCta.focus(); }, 300); } status.infoRemoveTiming = null; this.videoVisible(els); this.imageLoad(els); this.setActiveCta(els); this.activeInfo(els); }, videoReset: function(els) {els.introVideo.currentTime = 0;if (isDevice == resize.checkResolution()) {els.introVideo.play();} for (let i = 0; i < els.tutorialVideoWrap.length; i++) {els.tutorialVideoWrap[i].classList.remove(statusClass.isVisible);if (!els.tutorialVideos[i].paused) {els.tutorialVideos[i].pause();els.tutorialVideos[i].currentTime = 0;}}},ctaReset: function(els) {els.tutorialDeactiveCta.parentElement.classList.remove(statusClass.isActive);els.tutorialActiveCta.parentElement.classList.add(statusClass.isActive);if (resize.checkResolution().indexOf('mobile') == -1) {els.layerPopup.classList.remove(statusClass.isTutorialOpenedMo);}if (!!els.introCta) {els.introCta.parentElement.classList.remove(statusClass.isVisible);utils.onAccessibility(els.introCta.parentElement);}},deactive: function(els) {els.videoContent.classList.remove(statusClass.isInfoOpen, statusClass.isInfoVisible, statusClass.isTutorialOpend);this.offAccessibility(els);if (resize.checkResolution().indexOf('mobile') > -1 && !status.isIos) {if (document.fullscreenElement != null) document.exitFullscreen();}setTimeout(function () {els.tutorialActiveCta.focus();}, 300); this.videoReset(els); this.ctaReset(els); for (let i = 0; i < els.tutorialVideoWrap.length; i++) { utils.onAccessibility(els.tutorialVideoWrap[i]); } }, onAccessibility: function(els) {if (resize.checkResolution().indexOf('mobile') > -1) {utils.onPopupAccessibility(els.textWrap);if (!status.isGlobal) {utils.onPopupAccessibility(commonEls.flotingNaviFixedWrap);} else {utils.onPopupAccessibility(commonEls.globalSubNav);}}utils.onPopupAccessibility(els.introVideoSection);},offAccessibility: function(els) {if (resize.checkResolution().indexOf('mobile') > -1) {utils.offPopupAccessibility(els.textWrap);if (!status.isGlobal) {utils.offPopupAccessibility(commonEls.flotingNaviFixedWrap);} else {utils.offPopupAccessibility(commonEls.globalSubNav);}}utils.offPopupAccessibility(els.introVideoSection);}},popup: { setOverviewStatus: function (opts) { if ( opts.openCta.parentElement .getAttribute("class") .indexOf("__tutorial-cta") > -1 ) { let isOverviewVideo = commonEls.overview.querySelector( ".swiper-slide-active video" ); if (!isOverviewVideo.paused) { status.overview = { video: isOverviewVideo, paused: true, }; isOverviewVideo.pause(); } } }, mediaLoad: function (els) { if ( !els.tutorialActiveCta.classList.contains( statusClass.isBgLoadComplete ) ) { els.tutorialActiveCta.classList.add( statusClass.isBgLoadComplete ); } if (els.introVideo.readyState < 4) { imageLoader.setResponsiveMedia([els.introCoverImage]); videoLoader.setResponsiveMedia([els.introVideo]); } if ( !els.navPrev.classList.contains(statusClass.isBgLoadComplete) ) { els.navPrev.classList.add(statusClass.isBgLoadComplete); } if ( !els.navNext.classList.contains(statusClass.isBgLoadComplete) ) { els.navNext.classList.add(statusClass.isBgLoadComplete); } }, playIntroVideo: function(els) {if (els.introVideo.readyState >= 4) {els.introVideo.currentTime = 0;els.introVideo.play();} else {els.introVideo.addEventListener('canplay', function(){if (this.paused) this.play();});}},tutorialIntroImgLoad: function(els) { if ( !!els.introCoverImage && !els.introCoverImage.classList.contains("is-img-load-complete") ) { imageLoader.setResponsiveMedia([els.introCoverImage]); } }, tutorialMediaLoad: function (els) { if (els.tutorialVideos[0].readyState < 4) { imageLoader.setResponsiveMedia([els.tutorialCoverImages[0]]); videoLoader.setResponsiveMedia([els.tutorialVideos[0]]); } if ( !els.tutorialReplay.classList.contains( statusClass.isBgLoadComplete ) ) { els.tutorialReplay.classList.add(statusClass.isBgLoadComplete); } }, setPopupPosition: function (layerPopup) { let isHash = location.hash; let dotcomGnbHeight = 0; if (!status.isGlobal && window.pageYOffset == 0 && !!isHash) { dotcomGnbHeight = document.querySelector(".nv00-gnb").clientHeight; layerPopup.style.top = `${utils.getNavHeight() + dotcomGnbHeight }px`; } else { layerPopup.style.top = `${utils.getNavHeight()}px`; } }, setUiEls: function (opts, els, target) { if (commonEls.globalSubNav) commonEls.globalSubNav.style.opacity = 1; opts.layerPopup.classList.add("is-init"); target.openerCta.blur(); if ( `#${els.openCta.getAttribute("data-hash")}` == window.location.hash ) { let oldOpenPopup = document.querySelector( ".common-tutorial.is-open" ); if (!!oldOpenPopup) { let oldOpenPopupId = oldOpenPopup.getAttribute("id"); if (`#${oldOpenPopupId}` != window.location.hash) { document.querySelector(`#${oldOpenPopupId}`).hide(); } } status.isHash = true; if (!status.isGlobal) commonEls.gnb.style.display = "none"; } if (!!els.introCta) {els.introVideo.addEventListener('ended', function () {utils.offAccessibility(els.introCta.parentElement);setTimeout(function () {els.introCta.parentElement.classList.add(statusClass.isVisible);}, 100);});}},playOverview: function() {if (status.overview.paused) {clearTimeout(status.overviewStartTimeout);status.overviewStartTimeout = setTimeout(function () {status.overview.video.play();status.overview.paused = false;status.overviewStartTimeout = null;}, 300);}},setSubnavi: function(opts) { if (commonEls.globalSubNav) commonEls.globalSubNav.style.opacity = 0.9; opts.layerPopup.classList.remove("is-init"); }, focusHandler: function (opts, els) { let isHash = status.isHash && els.layerPopup.targetOpener; let isOverview = els.layerPopup.isOverview; let isController = els.layerPopup.isController; if (isHash || (!!isController && !!!isOverview)) { els.layerPopup.targetOpener.focus(); els.layerPopup.targetOpener.blur(); setTimeout(function () { els.layerPopup.targetOpener.focus(); if (isHash) { status.isHash = false; history.pushState( "", document.title, window.location.pathname ); if (!status.isGlobal) commonEls.gnb.style.display = ""; } if (!!isController) isController = false; }, 300); } if (!!isOverview) {opts.layerPopup.overviewCta.blur();if (!status.isIos) opts.layerPopup.overviewCta.focus();setTimeout(function () { if (!document.querySelector(".common-tutorial.is-open")) { opts.layerPopup.overviewCta.focus(); for (let i = 0; i < layerPopup.length; i++) { layerPopup[i].isOverview = false; layerPopup[i].overviewCta = null; } } }, 300); } }, onAccessibilityGlobal: function (els) { for (let i = 0; i < commonEls.contentsChildren.length; i++) { let isId = commonEls.contentsChildren[i].getAttribute("id"); if ( (isId != null && isId.indexOf("experience") == -1 && isId.indexOf("subnav") == -1) || isId == null ) { utils.onPopupAccessibility(commonEls.contentsChildren[i]); } } for (let i = 0; i < commonEls.commonUi.length; i++) { utils.onPopupAccessibility(commonEls.commonUi[i]); } }, offAccessibilityGlobal: function (els) { for (let i = 0; i < commonEls.contentsChildren.length; i++) { let isId = commonEls.contentsChildren[i].getAttribute("id"); if ( (isId != null && isId.indexOf("experience") == -1 && isId.indexOf("subnav") == -1) || isId == null ) { utils.offPopupAccessibility(commonEls.contentsChildren[i]); } } for (let i = 0; i < commonEls.commonUi.length; i++) { utils.offPopupAccessibility(commonEls.commonUi[i]); } }, onAccessibilityDotom: function(els) {let staticContent = document.querySelector('.static-content');staticContent.style.zIndex = -1;staticContent.style.position = 'relative';for (let i = 0; i < commonEls.wrapChildren.length; i++) { let isId = commonEls.wrapChildren[i].getAttribute("id"); if ( (isId != null && isId.indexOf("content") == -1) || isId == null ) { utils.onPopupAccessibility(commonEls.wrapChildren[i]); } } for (let i = 0; i < commonEls.contentChildren.length; i++) { let isClass = commonEls.contentChildren[i].getAttribute("class"); if ( (isClass != null && isClass.indexOf("root") == -1) || isClass == null ) { utils.onPopupAccessibility(commonEls.contentChildren[i]); } } for (let i = 0; i < commonEls.rootChildren.length; i++) { let isClass = commonEls.rootChildren[i].getAttribute("class"); if ( (isClass != null && isClass.indexOf("pd-g-floating-nav") == -1) || isClass == null ) { utils.onPopupAccessibility(commonEls.rootChildren[i]); } } }, offAccessibilityDotcom: function(els) {for (let i = 0; i < commonEls.wrapChildren.length; i++) {utils.offPopupAccessibility(commonEls.wrapChildren[i]);}if (!status.isIos) {for (let i = 0; i < commonEls.contentChildren.length; i++) {commonEls.contentChildren[i].removeAttribute('tabindex');commonEls.contentChildren[i].removeAttribute('aria-hidden');}for (let i = 0; i < commonEls.rootChildren.length; i++) {commonEls.rootChildren[i].removeAttribute('tabindex');commonEls.rootChildren[i].removeAttribute('aria-hidden');}} else {for (let i = 0; i < commonEls.contentChildren.length; i++) {utils.offPopupAccessibility(commonEls.contentChildren[i]);}for (let i = 0; i < commonEls.rootChildren.length; i++) {utils.offPopupAccessibility(commonEls.rootChildren[i]);}}setTimeout(function () {let staticContent = document.querySelector('.static-content');staticContent.style.zIndex = '';staticContent.style.position = '';}, 200);},onAccessibility: function(els) {els.closeCta.removeAttribute('tabindex');els.closeCta.removeAttribute('aria-hidden');if (status.isGlobal) {this.onAccessibilityGlobal(els);} else {this.onAccessibilityDotom(els);}},offAccessibility: function(els) {els.closeCta.setAttribute('tabindex', '-1');els.closeCta.setAttribute('aria-hidden', true);if (status.isGlobal) {this.offAccessibilityGlobal(els);} else {this.offAccessibilityDotcom(els);}}}}const eventHandler = { resize: function (els) { window.addEventListener("resize", function () { eventList.resize.position(els); eventList.common.setMobileVideoWidth(els); }); }, infoPopupDeactive: function (els) { els.infoPopup.addEventListener("click", function () { eventList.tutorial.videoContentReset(els); clearTimeout(status.infoRemoveTiming); els.tutorialVideos[0].play();let tutorialVideoController = els.tutorialVideoWrap[0].querySelector('.common-video__control.common-play-button');tutorialVideoController.focus(); if (resize.checkResolution().indexOf("mobile") > -1) { els.layerPopup.classList.add(statusClass.isTutorialOpenedMo); } if (els.tutorialVideos[1].readyState < 4) { imageLoader.setResponsiveMedia([els.tutorialCoverImages[1]]); videoLoader.setResponsiveMedia([els.tutorialVideos[1]]); } status.infoRemoveTiming = null; }); }, tutorialActiveEvent: function (els) { if (!!els.introCta) { els.introCta.addEventListener("click", function () { eventList.tutorial.active(els); }); } els.tutorialActiveCta.addEventListener("click", function () { this.parentElement.classList.remove(statusClass.isActive); eventList.tutorial.active(els); }); }, tutorialDeactiveEvent: function (els) { els.tutorialDeactiveCta.addEventListener("click", function () { eventList.tutorial.deactive(els); eventList.tutorial.reset(els); }); }, reStartTutorial: function (els) { els.tutorialReplay.addEventListener("click", function () { this.style.display = ""; eventList.tutorial.reset(els); eventList.tutorial.active(els); utils.onAccessibility( els.tutorialVideoWrap[els.tutorialVideoWrap.length - 1] ); }); }, videoController: function (index) { objs[`introVideo_${index}`].controller.addEventListener( "click", function () { if (this.video.paused) { this.video.play(); } else { this.video.pause(); } } ); }, onClickMoCloseCta: function (els) { els.moCloseCta.addEventListener("click", function () { eventList.tutorial.deactive(els); eventList.tutorial.reset(els); }); }, onClickController: function (els) { els.tutorialNavigation.addEventListener("click", function (e) { let isNaviBtn = e.target.classList.contains( "common-tutorial__navigation-button" ); if (isNaviBtn) { _controllEvent(e.target); } }); els.tutorialPagination.addEventListener("click", function (e) { let isPaginationBtn = e.target.classList.contains( "common-tutorial__pagination" ); if (isPaginationBtn) { let currOpenPopupId = document .querySelector(".common-tutorial.is-open") .getAttribute("id"); let targetId = e.target.getAttribute("data-hash"); if (targetId != currOpenPopupId) { _controllEvent(e.target); } } }); const _controllEvent = function (target) { let targetPopupId = target.getAttribute("data-hash"); document.querySelector(".common-tutorial.is-open").hide(); document.querySelector(`#${targetPopupId}`).show(); eventList.tutorial.reset(els); document.querySelector(`#${targetPopupId}`).isController = true; }; }, tutorialintroImgLoad: function (els) { window.addEventListener("scroll", function () { if (this.pageYOffset > 0) { eventList.popup.tutorialIntroImgLoad(els); } }); }, moveToTutorialPopup: function (els) {window.addEventListener('DOMContentLoaded', function () {if (!status.isGlobal) {commonEls.flotingNaviFixedWrap.after(els.layerPopup);} else {document.querySelector('#contents').prepend(els.layerPopup);if (status.isIos) commonEls.globalSubNav.after(els.layerPopup);}});},onClickSup: function (els) { for (let i = 0; i < els.supClicker.length; i++) { els.supClicker[i].addEventListener("click", function (e) { e.preventDefault(); e.stopPropagation(); let targetIndex = parseFloat(e.target.innerText), disclaimer = document.querySelectorAll("#desc-section li")[ targetIndex - 1 ], disclaimerText = disclaimer.innerText, activeBlock = '' + disclaimerText + ""; els.layerPopup.hide(); setTimeout(() => { disclaimer.innerHTML = activeBlock; disclaimer.querySelector("a").focus(); }, 500); const eventList = { focusIn: function () { common.centeredFocus.call(disclaimer.querySelector("a")); disclaimer.removeEventListener( "focusin", eventList.focusIn ); }, focusOut: function () { disclaimer.innerHTML = disclaimerText; disclaimer.removeAttribute("tabindex"); disclaimer.removeEventListener( "focusout", eventList.focusOut ); }, }; disclaimer.addEventListener("focusin", eventList.focusIn); disclaimer.addEventListener("focusout", eventList.focusOut); }); } }, }; const setIntroVideo = function (el, index) { objs[`introVideo_${index}`] = ANIUTIL.videoHandler({ wrap: el, video: el.video, controller: el.controller, playCallback: function () { if (el.classList.contains(statusClass.isCompleted)) el.classList.remove(statusClass.isCompleted); setTagging.pause(el.controller); }, pauseCallback: function () { setTagging.play(el.controller); }, endCallback: function () { if (!el.classList.contains(statusClass.isCompleted)) el.classList.add(statusClass.isCompleted); }, }); }; const setPopup = function (opts, els) { tutorialPopup({ tutorialPopup: opts.layerPopup, tutorialPopupClass: opts.popupClass, openerEvent: { element: opts.openCta, }, closeCtas: [opts.closeCta], show: { start: function (target) { eventList.popup.setOverviewStatus(opts); eventList.popup.mediaLoad(els); eventList.popup.playIntroVideo(els); eventList.popup.tutorialMediaLoad(els); eventList.popup.setPopupPosition(opts.layerPopup); eventList.popup.setUiEls(opts, els, target); eventList.popup.onAccessibility(els); }, end: function () {if (status.isIos) opts.layerPopup.style.display = 'block';opts.layerPopup.classList.add('is-open');eventList.common.setMobileVideoWidth(els);}},hide: {start: function (target) {eventList.popup.offAccessibility(els);target.openerCta.focus();opts.layerPopup.classList.remove('is-open');},end: function () {eventList.popup.playOverview();eventList.tutorial.reset(els);els.introVideo.pause();eventList.popup.setSubnavi(opts);eventList.popup.focusHandler(opts, els);els.innerWrapper.scrollTop = 0;}}});};const setTagging = { play: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("pause", "play") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("pause", "play") ); } }, pause: function (targetController) { if (targetController.hasAttribute("data-omni")) { let dataOmni = targetController .getAttribute("data-omni") .toLowerCase(); targetController.setAttribute( "data-omni", dataOmni.replace("play", "pause") ); } if (targetController.hasAttribute("ga-la")) { let gaLa = targetController.getAttribute("ga-la").toLowerCase(); targetController.setAttribute( "ga-la", gaLa.replace("play", "pause") ); } }, }; const bindEvents = function (els, index) { eventHandler.moveToTutorialPopup(els); eventHandler.resize(els); eventHandler.infoPopupDeactive(els); eventHandler.tutorialActiveEvent(els); eventHandler.tutorialDeactiveEvent(els); eventHandler.reStartTutorial(els); eventHandler.onClickMoCloseCta(els); eventHandler.onClickController(els); eventHandler.tutorialintroImgLoad(els); eventHandler.onClickSup(els); // introVideo setProperty(els); setIntroVideo(els.introVideoWrap, index); eventHandler.videoController(index); }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.viewer = (function () { const utils = window.flagship.common.utils; const resize = window.flagship.common.resize; let els = {}, status = {}, currDevice = resize.checkResolution(); const init = function () { els.viewerBtn = document.querySelector(".viewer-btn"); if (!!els.viewerBtn) { setElements(); setStatus(); setPopup(); bindEvents(); } }; const setElements = function () { els.wrapEl = document.querySelector("#wrap"); els.contents = document.querySelector("#contents"); // popup els.popup = document.querySelector(".highlights-viewer"); els.popupContents = els.popup.querySelector( ".highlights-viewer__contents" ); els.popupInner = els.popup.querySelector(".highlights-viewer__inner"); els.popupWrap = els.popup.querySelector(".highlights-viewer__wrap"); els.closeCta = els.popup.querySelector( ".highlights-viewer__close-cta" ); els.viewerWrap = els.popup.querySelector( ".highlights-viewer__contents-wrap" ); els.viewerContainer = els.popup.querySelector( ".highlights-viewer__container" ); els.viewerIframe = els.popup.querySelector( ".highlights-viewer__container-viewer" ); // popup-scroll els.popupScroll = els.popup.querySelector( ".highlights-viewer__scroll" ); els.popupScrollUpBtn = els.popup.querySelector( ".highlights-viewer__scroll-btn--up" ); els.popupScrollDownBtn = els.popup.querySelector( ".highlights-viewer__scroll-btn--down" ); // infoPopup els.infoBtn = els.popup.querySelector( ".highlights-viewer__title-cta" ); els.infoCloseBtn = els.popup.querySelector( ".highlights-viewer__header-close-cta" ); els.infoDimmed = els.popup.querySelector( ".highlights-viewer__dimmed" ); // timeout els.resizeTimeout = null; els.resizeInnerTimeout = null; // viewer els.viewerOpener = null; els.viewerModel = ""; els.viewerColor = ""; }; const setStatus = function () { status.viewerBaseUrl = "//www.samsung.com/global/galaxy/3d-360/viewer/?"; status.defaultParams = "&gesture_guide=0"; status.defaultParams += "&bgcolor=transparent"; status.defaultParams += "&skin=colorlayer"; status.defaultParams += "&theme=roundlayer"; status.defaultParams += "&intro=1"; status.defaultParams += "&ruler=1"; status.defaultParams += "&breakpoint_criteria=outer"; status.defaultParams += "&breakpoint_desktop_width=1024"; status.defaultParams += "&intro_pose=2"; status.defaultParams += "&intro_pose_once=1"; status.defaultParams += "&intro_pose_hold=1"; status.moPoseReady = false; status.isHash = false; }; const bindEvents = function () { window.addEventListener("DOMContentLoaded", onLoadHandler, { once: true, }); window.addEventListener("message", onReceiveV3DMessage, false); //els.popupContents.addEventListener('scroll', onScrollPopupContents); els.viewerIframe.addEventListener( "DOMContentLoaded", viewerEvents.onLoadLayerPopupIframe ); els.popupScroll.addEventListener( "click", layerPopupScrollHandler.onClickLayerScroll ); resize.add(onResizeHandler); }; const onLoadHandler = function () { setViewerWrap.innerWrapHeight(); setViewerWrap.layerScroll(); }; const onResizeHandler = function (currRes) { currDevice = currRes; if (utils.detector.isTouchDevice && !utils.detector.isIosDevice) setViewerWrap.innerWrapHeight(); setViewerWrap.layerScroll(); }; const setViewerWrap = { innerWrapHeight: function () { clearTimeout(els.resizeInnerTimeout); els.resizeInnerTimeout = setTimeout(function () { if (els.popupInner) { els.popupInner.style.height = parseInt(window.innerHeight * 0.9) + "px"; } }, 0); }, layerScroll: function () { clearTimeout(els.resizeTimeout); els.resizeTimeout = setTimeout(function () { layerPopupScrollHandler.setLayerScroll(); }, 300); }, }; const setPopup = function () { utils.layerPopup({ layerPopup: els.popup, layerPopupClass: ".highlights-viewer", openerEvent: { element: els.viewerBtn, }, closeCtas: [els.closeCta], moveTarget: document.documentElement, contents: els.contents, show: { start: function (target) { els.popup.classList.add("is-init"); viewerEvents.show(target.openerCta); }, end: function () { if (utils.detector.isIosDevice) els.popup.style.display = "block"; els.popup.classList.add("is-open"); if (els.popup.classList.contains("is-info-open")) { setTimeout(function () { els.infoCloseBtn.focus(); }, 500); } }, }, hide: { start: function () { els.popup.classList.remove("is-open"); }, end: function () { setTimeout(function () { els.popup.classList.remove("is-init"); }, 300); viewerEvents.hide(); }, }, }); }; const viewerEvents = { show: function (viewerOpener) { if (viewerOpener.classList.contains("viewer-btn")) { status.isHash = false; els.viewerOpener = viewerOpener; } else { status.isHash = true; els.viewerOpener = els.viewerBtn; } els.viewerModel = els.viewerOpener.getAttribute("data-model-name"); els.viewerColor = els.viewerOpener.getAttribute("data-model-color"); els.viewerIframe.setAttribute("src", getViewerUrl()); if (currDevice.indexOf("mobile") > -1 || currDevice == "tablet") { viewerEvents.infoPopupShow(); } els.infoBtn.addEventListener("click", function () { viewerEvents.infoPopupShow(); setTimeout(function () { els.infoCloseBtn.focus(); }, 400); }); els.popupWrap.addEventListener( "click", viewerEvents.onclickViewerDimmed ); }, hide: function () { els.viewerModel = ""; els.viewerIframe.setAttribute("src", "about:blank"); if (status.isHash) { setTimeout(function () { els.viewerOpener.focus(); }, 300); } }, infoPopupShow: function () { if (!els.popup.classList.contains("is-info-open")) { els.popup.classList.add("is-info-open"); els.infoCloseBtn.addEventListener( "click", viewerEvents.infoPopupHide ); els.infoDimmed.addEventListener( "click", viewerEvents.infoPopupHide ); setTimeout(function () { els.closeCta.setAttribute("tabindex", -1); els.closeCta.setAttribute("aria-hidden", true); els.infoBtn.setAttribute("tabindex", -1); els.infoBtn.setAttribute("aria-hidden", true); els.viewerContainer.setAttribute("tabindex", -1); els.viewerContainer.setAttribute("aria-hidden", true); }, 400); } }, infoPopupHide: function () { if (els.popup.classList.contains("is-info-open")) { els.popup.classList.remove("is-info-open"); setTimeout(function () { els.infoBtn.focus(); }, 300); setTimeout(function () { els.closeCta.removeAttribute("tabindex"); els.closeCta.removeAttribute("aria-hidden"); els.infoBtn.removeAttribute("tabindex"); els.infoBtn.removeAttribute("aria-hidden"); els.viewerContainer.removeAttribute("tabindex"); els.viewerContainer.removeAttribute("aria-hidden"); }, 100); } }, onclickViewerDimmed: function (e) { if (e.currentTarget == e.target) { if (utils.detector.isIosDevice) els.viewerOpener.style.display = "block"; els.popup.classList.remove("is-open"); document.documentElement.classList.remove("is-layer-open"); document.documentElement.style.overflow = ""; utils.visibleScroll(); utils.onAccessibility(els.popup); utils.offAccessibility(document.querySelector("#wrap")); setTimeout(function () { els.viewerOpener.focus(); }, 300); els.viewerModel = ""; els.viewerIframe.setAttribute("src", "about:blank"); setTimeout(function () { els.popup.classList.remove("is-init"); }, 300); } }, onLoadLayerPopupIframe: function () { if ( document.documentElement.classList.contains("color_yb") || (utils.getCookie("highContrastMode") != null && utils.getCookie("highContrastMode") == 1) ) { els.viewerIframe.contentWindow.postMessage( "V3D.highContrast.on", "*" ); setTimeout(function () { els.viewerIframe.contentWindow.postMessage( "V3D.highContrast.on", "*" ); }, 300); } }, }; const layerPopupScrollHandler = { setLayerScroll: function () { if (!els.popupContents) return; if ( els.popupContents.scrollHeight > els.popupContents.clientHeight ) { utils.offAccessibility(els.popupScroll); els.popupScroll && els.popupScroll.classList.add("is-scroll-btn"); } else { utils.onAccessibility(els.popupScroll); els.popupScroll && els.popupScroll.classList.remove("is-scroll-btn"); } }, onScrollPopupContents: function () { onUpdateLayerScroll(false); }, onClickLayerScroll: function (e) { e && e.preventDefault(); if (e.target.matches(".highlights-viewer__scroll-btn")) { let scrollDown = e.target.classList.contains( "highlights-viewer__scroll-btn--down" ), $popupContents = $(els.popupContents); if (scrollDown) { $popupContents.stop().animate( { scrollTop: $popupContents.scrollTop() + 100, }, { duration: 300, complete: function () { layerPopupScrollHandler.onUpdateLayerScroll(true); }, } ); } else { $popupContents.stop().animate( { scrollTop: $popupContents.scrollTop() - 100, }, { duration: 300, complete: function () { layerPopupScrollHandler.onUpdateLayerScroll(true); }, } ); } } }, onUpdateLayerScroll: function (isClicked) { const offsetTop = els.popupContents.scrollTop, layerBottom = els.popupContents.scrollHeight - els.popupContents.clientHeight; els.popupScrollUpBtn.removeAttribute("tabindex"); els.popupScrollUpBtn.removeAttribute("aria-hidden"); els.popupScrollUpBtn.removeAttribute("disabled"); els.popupScrollDownBtn.removeAttribute("tabindex"); els.popupScrollDownBtn.removeAttribute("aria-hidden"); els.popupScrollDownBtn.removeAttribute("disabled"); if (offsetTop == 0) { isClicked && els.popupScrollDownBtn && els.popupScrollDownBtn.focus(); els.popupScrollUpBtn.setAttribute("tabindex", "-1"); els.popupScrollUpBtn.setAttribute("aria-hidden", "true"); els.popupScrollUpBtn.setAttribute("disabled", "disabled"); } else if (offsetTop >= layerBottom - 1) { isClicked && els.popupScrollUpBtn && els.popupScrollUpBtn.focus(); els.popupScrollDownBtn.setAttribute("tabindex", "-1"); els.popupScrollDownBtn.setAttribute("aria-hidden", "true"); els.popupScrollDownBtn.setAttribute("disabled", "disabled"); } }, }; const onReceiveV3DMessage = function (e) { if (e.data == "V3D.state.popOpen") { if (currDevice.indexOf("mobile") > -1 || currDevice == "tablet") { if (els.closeCta) { if (!els.popupWrap.classList.contains("is-popup-opened")) els.popupWrap.classList.add("is-popup-opened"); els.closeCta.setAttribute("tabindex", "-1"); els.closeCta.setAttribute("aria-hidden", "true"); els.closeCta.setAttribute("disabled", "disabled"); } if (els.infoBtn) { els.infoBtn.setAttribute("tabindex", "-1"); els.infoBtn.setAttribute("aria-hidden", "true"); } } } else if (e.data == "V3D.state.popClose") { if (currDevice.indexOf("mobile") > -1 || currDevice == "tablet") { if (els.closeCta) { if (els.popupWrap.classList.contains("is-popup-opened")) els.popupWrap.classList.remove("is-popup-opened"); els.closeCta.removeAttribute("tabindex"); els.closeCta.removeAttribute("aria-hidden"); els.closeCta.removeAttribute("disabled"); } if (els.infoBtn) { els.infoBtn.removeAttribute("tabindex"); els.infoBtn.removeAttribute("aria-hidden"); } } } else if (e.data == "V3D.state.introPose.ready") { if (currDevice.indexOf("desktop") > -1) { els.viewerIframe && els.viewerIframe.contentWindow.postMessage( "V3D.introPose.run", "*" ); } status.moPoseReady = true; setTimeout(function () { status.moPoseReady = false; }, 2000); } else if (e.data == "V3D.state.localData.ready") { els.viewerIframe && els.viewerIframe.contentWindow.postMessage( JSON.stringify(V3DLOCALDATA), "*" ); } }; const getViewerUrl = function () { let viewerUrl = status.viewerBaseUrl; let viewerModelList = "galaxy-s24,galaxy-s24-plus"; let isbasicLineShow = !V3DLOCALDATA["galaxy-s24-plus"] || (!!V3DLOCALDATA["galaxy-s24-plus"] && V3DLOCALDATA["galaxy-s24-plus"].color.length == 0); let isPlusLineShow = !V3DLOCALDATA["galaxy-s24"] || (!!V3DLOCALDATA["galaxy-s24"] && V3DLOCALDATA["galaxy-s24"].color.length == 0); if (isbasicLineShow) { viewerModelList = "galaxy-s24"; } else if (isPlusLineShow) { viewerModelList = "galaxy-s24-plus"; } // model_name viewerUrl += "model_name=" + els.viewerModel + "&model_list=" + viewerModelList; if ( document.documentElement.classList.contains("color_yb") || (utils.getCookie("highContrastMode") != null && utils.getCookie("highContrastMode") == 1) ) { viewerUrl += "&highcontrast=1"; } else { viewerUrl += "&highcontrast=0"; } // RTL utils.isRTL() && (viewerUrl += "&rtl=1"); viewerUrl += status.defaultParams; viewerUrl += "#color=" + (els.viewerColor ? els.viewerColor : "null"); return viewerUrl; }; return { init: init, }; })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.ytPopup = (function () { let els = {}; const utils = window.flagship.common.utils; const init = function () { els.layerPopup = document.querySelector(".common-youtube-popup"); if (!!els.layerPopup) { setElements(); setPopup(); } }; const setElements = function () { els.contents = document.querySelector("#contents"); els.openCtas = document.querySelectorAll(".js-youtube-popup"); els.closeCta = document.querySelector( ".common-youtube-popup__close-cta" ); els.ytIframe = els.layerPopup.querySelector( ".common-youtube-popup__iframe > iframe" ); els.ytDesc = els.layerPopup.querySelector(".youtube-player__desc"); els.dimmed = els.layerPopup.querySelector( ".common-youtube-popup__close-area" ); }; const setPopup = function () { for (let i = 0; i < els.openCtas.length; i++) { utils.layerPopup({ layerPopup: els.layerPopup, layerPopupClass: ".common-youtube-popup", openerEvent: { element: els.openCtas[i], }, closeCtas: [els.closeCta], dimmed: els.dimmed, moveTarget: document.documentElement, contents: els.contents, show: { start: function () { els.layerPopup.classList.add("is-yt-open"); }, end: function (target) { eventList.setYoutube(target); }, }, hide: { start: function () { els.layerPopup.classList.remove("is-yt-open"); }, end: function (target) { eventList.clearYoutube(); }, }, }); } }; const eventList = { setYoutube: function (target) { let opener = target.openerCta, ytSrc = "htt" + "ps://www.youtube.com/embed/" + opener.getAttribute("data-youtube-id") + "?wmode=opaque&rel=0&enablejsapi=1&version=3&autoplay=1", ytTitle = opener.getAttribute("data-youtube-title"), ytBlind = opener.querySelector(".blind").innerHTML; els.ytIframe.setAttribute("src", ytSrc); els.ytIframe.setAttribute("title", ytTitle); els.ytDesc.innerHTML = ytBlind; els.OpenerTarget = opener; }, clearYoutube: function () { els.ytIframe.removeAttribute("src"); els.ytDesc.innerHTML = ""; }, }; return { init: init, }; })(); })(); (function () { window.flagship.common.resize.bindEvent(); var initComponents = function () { flagship.highlights.accordion.init(); flagship.highlights.scrollVideo.init(); flagship.highlights.clickToVideo.init(); flagship.highlights.overview.init(); flagship.highlights.quote.init(); flagship.highlights.designSpecPopup.init(); flagship.highlights.color.init(); flagship.highlights.viewer.init(); flagship.highlights.cameraAi.init(); flagship.highlights.resolutionPopup.init(); flagship.highlights.nightography.init(); flagship.highlights.opticalZoom.init(); flagship.highlights.dayPopup.init(); flagship.highlights.liveTranslatePopup.init(); flagship.highlights.aod.init(); flagship.highlights.experiences.init(); flagship.highlights.faq.init(); flagship.highlights.ytPopup.init(); flagship.highlights.tutorial.init(); flagship.highlights.generativeEditTutorial.init(); flagship.highlights.circleToSearchTutorial.init(); flagship.highlights.liveTranslateTutorial.init(); flagship.highlights.chatAssistTutorial.init();flagship.highlights.innerPopup.init(); }; initComponents(); })(); });
      • Galaxy S24 | S24+ | Galaxy AI | Samsung México (2024)
        Top Articles
        Latest Posts
        Article information

        Author: Greg Kuvalis

        Last Updated:

        Views: 6125

        Rating: 4.4 / 5 (55 voted)

        Reviews: 94% of readers found this page helpful

        Author information

        Name: Greg Kuvalis

        Birthday: 1996-12-20

        Address: 53157 Trantow Inlet, Townemouth, FL 92564-0267

        Phone: +68218650356656

        Job: IT Representative

        Hobby: Knitting, Amateur radio, Skiing, Running, Mountain biking, Slacklining, Electronics

        Introduction: My name is Greg Kuvalis, I am a witty, spotless, beautiful, charming, delightful, thankful, beautiful person who loves writing and wants to share my knowledge and understanding with you.