Galaxy S24 | S24+
- ESPECIFICACIONES
- SOPORTE
- RESEÑAS
Comprar ahora
- Destacados
- Switch to Galaxy
- Accesorios
- ESPECIFICACIONES
- SOPORTE
- RESEÑAS
Galaxy Canje + Hasta 12 MSI + Envio gratis + Samsung Rewards
Comprar ahora Compra en Pre-venta Compra en Pre-venta ahora Dónde comprar
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.
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 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
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+.
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 6.2 pulgadas 6.7pulgadas
Resolución FHD+ QHD+
Batería (típica) 4000 mAh 4900 mAh
Memoria 8GB 12 GB
Banda ultraancha - no disponible UWB
Colores inspirados en minerales
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.
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.
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.
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.
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.
Exclusivo en línea
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.
Exclusivo en línea
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.
Exclusivo en línea
Disponible solo en Samsung.com/mx
Reforzado con Armor Aluminium
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
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
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
Captura a distancia. Incluso en la oscuridad.
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
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
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.
Gira tu foto y deja que el relleno de fondo complete las esquinas faltantes para que se ajusten al marco.
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
Pulse aquí
Pulse aquí
Pulse o trace para seleccionar
Mover la selección
Pulse aquí
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.
Vistas previas de Super HDR. Mejoradas con AI incluso antes de que las captures
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.
Una nueva forma de crear con Galaxy AI, ahora en One UI
Sketch to Image
Dibuja desde cero o en cualquier foto. Usa AI para transformar ese boceto en una imagen.
Live Effect
Agrega profundidad para dar una nueva vida a tus fotos.
Enciérralo en un círculo y encuéntralo. Así de fácil
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.
Circle to Search
Enciérrelo en un círculo, Encuéntrelo
Mantenga pulsado el botón Inicio
Encierre en un círculo o pulse para buscar.
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.
Live Translate
Comunícate
de inmediato
en otro idioma
Pulsar para llamar
Pulsar para traducir
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.
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.
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.
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.
Chat assist
Traducciones de texto en tiempo real al alcance de la mano
Pulse aquí
Pulse aquí
Pulse aquí
Pulse aquí
Chat assist
Mejore su comunicación traduciendo chats y mensajes de texto.
Vapor Chamber más fuerte. Es hora de jugar
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.
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
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.
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
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.
Tu privacidad. Protegida.
La privacidad del usuario sigue siendo nuestra prioridad en la era de la AI. Con el lanzamiento de Galaxy AI en la serie Galaxy S24, puedes estar seguro de que no almacenaremos ni usaremos tus datos personales para ningún propósito sin tu consentimiento.
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.
Cambia el Smartphone que tienes y ahorra
Canjea tu teléfono anterior para ahorrar en tu nuevo Galaxy S24 o Galaxy S24+.
Hasta 512 GB de almacenamiento
Almacena todo con opciones de 256 GB y 512 GB. O elige 128 GB en el Galaxy S24.
Accesorios para la próxima era
Explorar más
Preguntas frecuentes
-
Los Galaxy S24 y S24+ están disponibles en Violeta, Amarillo Ámbar, Negro Ónix y Gris Mármol. Verde Jade, Azul Zafiro y Naranja son colores exclusivos disponibles solo en Samsung.com.
Ir a colores
-
Con 6.2 pulgadas y 6.7 pulgadas, los tamaños de pantalla del Galaxy S24 y el S24+ aumentaron 0.1 pulgadas en comparación con el Galaxy S23 y el S23+. Sin embargo, el Galaxy S24+ tiene una pantalla QHD+, mientras que la pantalla del Galaxy S23 sigue siendo FHD+. El Galaxy S24+ tiene una mayor duración de la batería que el Galaxy S24. En comparación con sus predecesores, la batería de 4000 mAh (típica) del Galaxy S24 tiene 100 mAh más que el Galaxy S23. Y la batería de 4900 mAh (típica) del Galaxy S24+ tiene 200 mAh más que el Galaxy S23+.
Ir a comparar
-
Galaxy S24 y S24+ tienen una cámara de selfie de 12 MP y una Cámara Trasera triple que consta de una Cámara Gran Angular de 50 MP con zoom de calidad óptica de 2x, una Cámara Ultra Gran Angular de 12 MP y una Cámara de Zoom Óptico de 3x de 10 MP., Puedes usar el modo de retrato en zoom de 2x y 3x para tomar acercamientos dinámicos. Incluso con poca luz, puedes tomar fotografías con ruido reducido gracias a Nightography. Y el nuevo Provisual engine mejora los detalles y el color para obtener fotos claras y vibrantes de alta resolución, incluso a distancias de zoom digital.,
Ir a la cámara
-
Sí, los Galaxy S24 y S24+ están equipados con Nightography. No solo está en la cámara trasera. Gracias a un bloque ISP dedicado, puedes tomar fotos y videos increíbles con Nightography en la cámara de selfie. Además, el ProVisual engine aprovecha la potencia de la AI para el zoom, lo cual ofrece fotos y videos nítidos y a poca luz con menos ruido y detalles mejorados.
Ir a zoom con poca luz
-
Los Galaxy S24 y S24+ aprovechan la potencia de la AI en muchas aplicaciones y experiencias. Por ejemplo, la cámara utiliza el zoom de AI para tomar mejores fotos de zoom. Puedes usar la AI para editar imágenes, como Generative Edit, que puede rellenar fondos y mover, cambiar el tamaño o borrar objetos. Live Translate te permite comunicarte en otros idiomas por teléfono.
Ir a Galaxy AI
-
Sí, puedes transferir fácilmente tus datos desde iOS u otro Android a tu nuevo dispositivo Galaxy con Smart Switch.,,
Ir a Smart Switch
Galaxy S24Ultra
Conoce más
Descubre formas inteligentes de obtener tu Galaxy S24|S24+
Comprar ahora Compra en Pre-venta Compra en Pre-venta ahora Dónde comprar
Life opens up with Galaxy
Ver más
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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Comparación entre Galaxy S24+ y Galaxy S24.
- En comparación con los Galaxy S23 y S23+.
- 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.
- 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.
- La disponibilidad de los colores puede variar según el proveedor de servicio.
- El marco no incluye teclas de volumen y laterales ni bandeja de SIM.
- El zoom de calidad óptica está habilitado por el sensor de pixeles adaptables.
- 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.
- 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.
- 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.
- AI Zoom se aplica a distancias entre longitudes de zoom digitales. No se garantiza la precisión de los resultados.
- Es posible que algunas aplicaciones de redes sociales no sean compatibles con Super HDR. No se garantiza la precisión de los resultados.
- La calidad HDR es compatible con fotos subidas como publicaciones de Instagram y videos cargados como reels.
- La función Sketch to Image requiere una conexión de red e inicio de sesión en una Samsung Account. La edición con Sketch to Image da como resultado una foto de tamaño modificado de hasta 12MP. Se superpone una marca de agua visible en la imagen generada al guardarla para indicar que la imagen es generada por AI. No se garantiza la precisión y confiabilidad del resultado generado.
- La función Live Effect para Photo Assist es compatible con archivos JPG, HEIC (HEIF), BMP, PNG y WebP. Es posible que no esté disponible para ciertas fotos. No se garantiza la precisión ni la fiabilidad del resultado generado.
- 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.
- 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.
- 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.
- ©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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Se recomienda utilizar una conexión con cable al transferir diversos bloques de datos a la vez.
- Galaxy Buds2 Pro, Galaxy Watch6 y Galaxy Tab S9 se venden por separado.
- 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.
- Galaxy Tab S9 se vende por separado.
- 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.
- Knox Matrix es compatible con smarphones y tabletas Galaxy One UI 6.0 ó superior. La disponibilidad puede variar según proveedor de servicio.
- 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
- 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.
- Todos los accesorios se venden por separado.
- 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.
- 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.
- 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(); }, 400); 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'); els.tutorialCloseCtas = document.querySelectorAll('.common-tutorial__close-cta'); }; 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 ); } // tutorial for (let j = 0; j < els.tutorialOpenCtas.length; j++) { els.tutorialOpenCtas[j].addEventListener('click', eventList.clickTutorialOpenCta); } // tutorial close for (let i = 0; i < els.tutorialCloseCtas.length; i++) { els.tutorialCloseCtas[i].addEventListener('click', function () { if (!status.activeVideoPaused) status.activeVideo.play(); }) } for (let i = 0; i < els.sup.length; i++) { els.sup[i].addEventListener('click', function () { status.isAuto = false; }); } resize.add(eventList.onResize); }; const swiperEvent = { slideChange: () => { 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; status.activeVideo = objs[`video_${objs.swiper.activeIndex}`].video; status.activeVideoPaused = status.activeVideo.paused; 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); }); } }, 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.blur(); if (!status.isIos) els.layerPopup.targetOpener.focus(); 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.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(); })(); });