Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (2024)

  • DESIGN
  • GALAXY AI
  • CAMERA
  • PERFORMANCE
  • FAQ

Get up to $600 instant trade-in creditθ

Buy now Reserve now Pre-order now Where to buy

Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (1)

Epic, just like that

Imagine the videos you'll shoot, the pics you'll edit and the connections you make, all elevated to new heights with mobile AI.

Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (2)

A blog page is open in a web browser app. Text on the blog page is circled: Tornado Potato. Search results for tornado potato appear in a popup over the app. The popup is dragged upward into a full screen of Google search results.

Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (3)

A phone call is translated in real time. The dialogue is shown on screen as a text conversation in two languages.

Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (4)

In the Interpreter app, a conversation in two languages is transcribed and translated in real time.

Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (5)

A transcript of a voice recording is shown with dialogue separated by speaker. When the clip is played, the words are highlighted in sync with the audio. Next, an outlined summary of the voice recording is produced.

Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (6)

A photo is edited in the Gallery app. The subject is selected, then resized and moved to another location in the picture. Then, missing areas are filled in.

Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (7)

Circle to Search,

Satisfy your curiosity on the spot.

Live Translate

Get real easy, real-time translations.

Interpreter

Translate face-to-face conversations with ease.

Transcript Assist,

Convert voice recordings to text.

Generative Edit

Take a great pic. Then make it better.

Chat Assist

Find the right words fast.

  • Circle to Search

  • Live Translate

  • Interpreter

  • Transcript Assist

  • Generative Edit

  • Chat Assist

See what experts are saying

Overall

"Bigger batteries, brighter screens, and smarter AI"

CNET

Galaxy AI

"The new era of AI-enhanced smartphones"

GQ

Galaxy AI

"Galaxy AI actually feels like the future of phones"

Inverse

    DESIGN

    Embrace every curve

    With their unified design and satin finish, Galaxy S24 and S24+ feel as smooth as they look.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (8)

    Extreme close-ups of the corners of Galaxy S24 plus. The device turns slowly. Next, a close up shot starts with the side keys and rotates to the rear panel. Next, the device seen in full from the rear.

    Ultimate upgrades

    More screen. More battery. More processing power. Galaxy S24+ comes with QHD+, the highest screen resolution on a Galaxy smartphone.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (9)

    Pick your epic

    Two ways to step up your game. See how Galaxy S24 and S24+ stack up to one another.

    Galaxy S24 Galaxy S24+

    Size Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (10) 6.2" Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (11) 6.7"

    Resolution Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (12) FHD+ Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (13) QHD+

    Battery (typical) Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (14) 4000mAh Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (15) 4900mAh

    Memory Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (16) 8GB Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (17) 12GB

    Ultra Wide Band - not available Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (18) UWB

    Mineral-inspired online exclusive palette

    Jade Green Sapphire Blue Sandstone Orange Cobalt Violet Amber Yellow Onyx Black Marble Gray

    Two Galaxy S24 series devices in Jade Green. One stands upright and is seen from the rear. The other phone is seen from the side to show the frame's edges.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (19)

    Online Exclusive

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (20)

    Available only on Samsung.com

    Two Galaxy S24 series devices in Sapphire Blue. One stands upright and is seen from the rear. The other phone is seen from the side to show the frame's edges.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (21)

    Online Exclusive

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (22)

    Available only on Samsung.com

    Two Galaxy S24 series devices in Sandstone Orange. One stands upright and is seen from the rear. The other phone is seen from the side to show the frame's edges.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (23)

    Online Exclusive

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (24)

    Available only on Samsung.com

    Two Galaxy S24 series devices in Cobalt Violet. One stands upright and is seen from the rear. The other phone is seen from the side to show the frame's edges.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (25)

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (26)

    Two Galaxy S24 series devices in Amber Yellow. One stands upright and is seen from the rear. The other phone is seen from the side to show the frame's edges.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (27)

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (28)

    Two Galaxy S24 series devices in Onyx Black. One stands upright and is seen from the rear. The other phone is seen from the side to show the frame's edges.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (29)

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (30)

    Two Galaxy S24 series devices in Marble Gray. One stands upright and is seen from the rear. The other phone is seen from the side to show the frame's edges.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (31)

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (32)

    Fortified with Armor Aluminum

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (33)

    New space-grade Armor Aluminum keeps you protected. And with IP68 dust and water resistance, the fun doesn't stop with a drop.

    GALAXY AI

    Epic, just
    like that

    CIRCLE TO SEARCH

    Circle it, find it

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (34)

    A blog page is open in a web browser app. Text on the blog page is circled: Tornado Potato. Search results for tornado potato appear in a popup over the app. The popup is dragged upward into a full screen of Google search results.

    Search like never before with Circle to Search., Simply circle an object to get Google Search results.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (35)

    Circle to Search

    Circle it, Find it

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (36)

    A video posted to a social media app plays on the display of Galaxy S24. It shows a panning view of a freshly decorated living room. Circle to Search with Google. The shot zooms in to a framed poster on the wall. The home button is long-pressed. A Google Search bar appears at the bottom of the screen. A circle is traced around the poster. The poster is identified and similar Google Results appear in a pop-up window over the social media app. Circle to Search with Google.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (37)

    A social media app plays a video post. The social media post shows a panning view of a freshly decorated living room.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (38)

    Long press the home button

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (39)

    A dotted circle is drawn around a framed poster on the wall.

    Circle or tap to search.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (40)

    Google is written at the top of the frame and a Google search bar appears at the bottom. A circle is traced around the poster. The poster is identified and similar Google Results appear in a pop-up window over the social media app.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (41)

    Circle to Search

    Search anything without switching apps.

    Circle to Search

    Circle it, Find it

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (42)

    A video posted to a social media app plays on the display of Galaxy S24. It shows a panning view of a freshly decorated living room. Circle to Search with Google. The shot zooms in to a framed poster on the wall. The home button is long-pressed. A Google Search bar appears at the bottom of the screen. A circle is traced around the poster. The poster is identified and similar Google Results appear in a pop-up window over the social media app. Circle to Search with Google.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (43)

    A social media app plays a video post. The social media post shows a panning view of a freshly decorated living room.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (44)

    Long press the home button

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (45)

    A dotted circle is drawn around a framed poster on the wall.

    Circle or tap to search.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (46)

    Google is written at the top of the frame and a Google search bar appears at the bottom. A circle is traced around the poster. The poster is identified and similar Google Results appear in a pop-up window over the social media app.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (47)

    Circle to Search

    Search anything without switching apps.

    LIVE TRANSLATE

    Goodbye, language barriers

    Speak foreign languages on the spot using Live Translate with Galaxy AI. Unlock the power of convenient communication with near-real-time voice translations right through your Samsung Phone app.,

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (48)

    A phone call is interpreted in real time. The dialogue is shown on screen as a text conversation in two languages.

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (49)

    CHAT ASSIST

    Put your best text forward

    Get real-time tone suggestions to make your writing sound more professional or conversational.,

    Epic for business, just like that

    Elevate your work with the most epic Galaxy yet, featuring the game-changing power of Galaxy AI. From researching on the spot to capturing every detail of your projects day or night, unleash new ways to stay productive, collaborate and more.

    Buy now for Business

    Learn more

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (50)

    CAMERA

    Capture the detail with ProVisual engine

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (51)

    Captured by Galaxy S24+#withGalaxy

    Mega megapixels

    Snap high-res pics that will look great for years to come, captured with a 50MP multi-camera system where each lens is a powerhouse.

    Capture. Share. Impress.

    Whether you're taking a selfie, shooting wide angle pics or zooming in, get a pixel-perfect shot every time.

    rear camera

    10MP 3x Optical Zoom

    50MP Wide-angle & 2x Optical Quality Zoom

    12MP Ultra Wide

    front camera

    12MP Selfie Camera

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (52)

    Bring your night into the light

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (53)

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (54)

    Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (55)

    Captured by Galaxy S24+#withGalaxy

      Capture the nighttime portraits you've been dreaming of with Nightography. Zoom in up to 3x and retain detail and vibrancy, even in low light.

      Get closer with every tap

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (56) Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (57) Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (58)

      Tap to zoom

      Captured by Galaxy S24+#withGalaxy

      Go from 1x to 2x or even 3x. AI keeps pictures crisp, clear and super sharp.,,,

      Don't miss the moment with enhanced zoom

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (59)

      The view finder of the Camera app shows a woman posing in front of a scenic background. The camera zooms in from 1x to 2x and then 3x. Next, a clear photo of a subject with a scenic background at 2.5x zoom appears.

      Captured by Galaxy S24+#withGalaxy

      Capture stunning shots with vivid detail as though you have the best seats in the house.

      Resize it, retouch it. Just like that

      Unlock the magic of AI-powered photo editing. Generative Edit fills in backgrounds and makes unwanted objects disappear.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (60)

      A photo is edited in the Gallery app. To straighten it, the photo is rotated and empty corners appear in the frame. Then, missing areas and background are filled in.

      Rotate your photo and let background fill complete the missing corners to fit the frame.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (61)

      A photo is being edited. The subject is selected, then resized and moved to another location in the picture. Then, missing areas are filled in.

      Select and move an object in your photo and AI will fill in the space it leaves behind like it was never there.

      Photo Assist

      Resize and retouch photo with Photo Assist

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (62)

      A photo of a skateboarder performing at a skateboard park is shown on the display of Galaxy S24. The edit button is selected. Then, the Galaxy AI stars button. The skateboarder is traced then moved higher. The “Generate” button is tapped. The photo is processed and the missing area where the subject used to be is completed. A before and after is shown.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (63)

      In the Gallery app, a photo of a skateboarder performing at a skateboard park is open.

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (64)

      The photo is now in the Gallery app’s edit mode.

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (65)
      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (66)

      Tap or draw for selection

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (67)

      Move the selection

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (68)

      The skateboarder is then moved higher in the photo.

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (69)
      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (70)

      Photo Assist

      Reimagine images by repositioning people or objects and filling backgrounds.

      Photo Assist

      Resize and retouch photo with Photo Assist

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (71)

      A photo of a skateboarder performing at a skateboard park is shown on the display of Galaxy S24. The edit button is selected. Then, the Galaxy AI stars button. The skateboarder is traced then moved higher. The “Generate” button is tapped. The photo is processed and the missing area where the subject used to be is completed. A before and after is shown.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (72)

      In the Gallery app, a photo of a skateboarder performing at a skateboard park is open.

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (73)

      The photo is now in the Gallery app’s edit mode.

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (74)
      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (75)

      Tap or draw for selection

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (76)

      Move the selection

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (77)

      The skateboarder is then moved higher in the photo.

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (78)
      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (79)

      Photo Assist

      Reimagine images by repositioning people or objects and filling backgrounds.

      INSTANT SLOW-MO

      Bend time with Instant Slow-Mo

      Bend time with Instant Slow-Mo

      Using Instant Slow-Mo with Galaxy AI, just tap and hold to relive any moment in epic slow motion.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (80)

      A video of a runner plays at normal speed on the display of Galaxy S24 plus. As the camera approaches the runner from behind, the video drops into slow motion.

      SUPER HDR

      Super HDR previews. Enhanced before you even snap.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (81)

      In the Camera app's preview window, a photo is taken. Then, the Gallery button is tapped to open the most recent photo in the Gallery. The share button is tapped. A photo is selected to be shared. Then, a social media app is selected. The photo appears in the social media app to be uploaded as a new post. The photo is then seen as an uploaded post in the app's feed.

      Captured by Galaxy S24+#withGalaxy

      With our latest Super HDR upgrade, you can capture vivid shots the way you see them, from preview to posting. It even works when you shoot with Instagram.

      See a Super HDR preview before you even hit the shutter, and get the same show-stopping HDR quality in your Gallery and in your feed.

      Live Translate

      Communicate in a foreign language

      Tap to call

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (82)

      A phone call is in progress on the display of Galaxy S24.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (83)

      A phone call is in progress on the display of Galaxy S24. A drop-down language menu is at the top of the conversation.

      Tap to translate

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (84)

      The spoken dialogue from the phone call is transcribed on the screen in the original spoken language, then the translated language appears below the original transcription.

      Live Translate

      You left your wallet in a taxi while traveling! How should you talk to a foreign taxi driver?

      Live Translate

      Communicate in a foreign language

      Tap to call

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (85)

      A phone call is in progress on the display of Galaxy S24.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (86)

      A phone call is in progress on the display of Galaxy S24. A drop-down language menu is at the top of the conversation.

      Tap to translate

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (87)

      The spoken dialogue from the phone call is transcribed on the screen in the original spoken language, then the translated language appears below the original transcription.

      Live Translate

      You left your wallet in a taxi while traveling! How should you talk to a foreign taxi driver?

      TRANSCRIPT ASSIST

      Note-taking made easy

      Be present in meetings and let Transcript Assist with Galaxy AI take notes for you. Create fast and easy transcripts of recorded meetings and summarize them instantly.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (88)

      A transcript of a voice recording is shown with dialogue separated by speaker. When the clip is played, the words are highlighted in sync with the audio. Next, an outlined summary of the voice recording is produced.

      Chat Assist

      Real-time text translations

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (89)

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

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (90)

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (91)

      The conversation opens to show a dialogue in a foreign language. A popup bubble that says “tap to translate” appears.

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (92)

      The drop-down input and output language menu shows Auto and English respectively. Each message bubble now shows both the original message and its English translation. The output language menu is tapped. The output language menu is tapped

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (93)

      English is changed to French on the output menu.

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (94)

      Now the messages are translated into French.

      Chat Assist

      Enhance your communication by translating chats and text messages.

      Chat Assist

      Real-time text translations

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (95)

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

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (96)

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (97)

      The conversation opens to show a dialogue in a foreign language. A popup bubble that says “tap to translate” appears.

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (98)

      The drop-down input and output language menu shows Auto and English respectively. Each message bubble now shows both the original message and its English translation. The output language menu is tapped. The output language menu is tapped

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (99)

      English is changed to French on the output menu.

      Tap Here

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (100)

      Now the messages are translated into French.

      Chat Assist

      Enhance your communication by translating chats and text messages.

      PERFORMANCE

      Game on with a larger Vapor Chamber

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (101)

      Gameplay scene from Gameloft is depicted on the display of Galaxy S24 plus. The details are clear and the content is smooth.

      Our latest Vapor Chamber is bigger than before, with an improved heat dissipation system to keep you gaming at peak performance.

      Vapor Chamber

      over 1.5x bigger

      Go bigger,
      go brighter

      The 6.2" FHD+ display on Galaxy S24 and the 6.7" QHD+ display on Galaxy S24+ offer more screen real estate than ever before. Enjoy optimal color and contrast with Vision Booster, even on bright days.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (102)

      INTERPRETER

      Get lost in conversation, not in translation

      Wish you always had an interpreter on hand? Now you do with Galaxy AI. Simply hold up your phone during face-to-face conversations and receive real-time translations.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (103)

      In the Interpreter app, a conversation in two languages is transcribed and translated in real time.

      Must-haves at your fingertips

      Customize your daily experience with widgets on your lock screen and Always On Display. From important reminders to your local air quality, get the info you need at a glance.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (104)

      A lock screen dims to an Always On Display with weather, time and alarm widgets with a music player control panel.

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (105)

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (106)

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (107)

      Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (108)

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (109)

        A smarter all-day battery

        Power on. Galaxy S24 and S24+ have an intelligent battery that gives you more game time, watch time and you time.

        • Watch videos up to

          29 hrs Galaxy S24

          31 hrs Galaxy S24+

        • Listen to music up to

          78 hrs Galaxy S24

          92 hrs Galaxy S24+

        Switching to Galaxy is easy

        Switch effortlessly from iOS

        Keep your photos, videos, contacts, calendar and apps with Smart Switch — even if you switch from iOS.,,

        Go to Smart Switch

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (110)

        Trailblaze the AI frontier

        Switch to Galaxy and join the new era of mobile.

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (111)

        Forget barriers between devices

        Switch to Galaxy to open up seamless ways to work, play and live across your devices.

        Go to Galaxy Connected Experience

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (112)

        Try Galaxy AI on your phone

        Simply scan the QR code and download to experience Galaxy AI on your device.

        Simply scan the QR code and download to experience Galaxy AI on your device.

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (113)

        Your privacy. Secured.

        User privacy continues to be our priority in the AI era. With the launch of Galaxy AI on the Galaxy S24 Series, you can rest assured that we will not store or use your personal data for any purpose without your consent.

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (114)

        Samsung Knox

        Changes start from small steps

        We're moving toward a sustainable future, step by step. We believe in building a sustainable journey through small changes that could make a big difference.

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (115)

        Up to 512GB storage

        Store it all with 256GB and 512GB options. Or go for 128GB on Galaxy S24.

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (116)

        Trade in and save

        Trade in your old phone to save on your new Galaxy S24 or Galaxy S24+.

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (117)

        Accessorize your Galaxy

        Shop all

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (118)

        Frequently Asked Questions

        Galaxy S24 | S24+

        Buy now Reserve now Pre-order now Where to buy

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (119)

        Galaxy S24 | S24+ for business

        Buy now

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (120)

        Galaxy S24 Ultra

        Learn more

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (121)

        Life opens up with Galaxy

        Explore more

        Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (122)

        See in 360°

        Take it for a spin

        *Online exclusive colors only available on Samsung.com.

        *Images simulated for illustrative purposes. Sequences shortened and simulated. Actual UI may be different. All specifications and descriptions provided herein may be different from the actual specifications and descriptions for the product. Samsung reserves the right to make changes to this document and the product described herein, at anytime, without obligation on Samsung to provide notification of such change. All functionality, features, specifications, GUI and other product information provided in this document including, but not limited to, the benefits, design, pricing, components, performance, availability and capabilities of the product are subject to change without notice or obligation. The contents within the screen are simulated images and are for demonstration purposes only.

        V5/28/2024 – 6/3/2024, while supplies last, purchase a Samsung Galaxy S24+ device ("Qualifying Purchase") on Samsung.com or in the Shop Samsung App and get a Anti Reflecting Screen protector (“Gift”). Must be logged in to your Samsung offer program when making the Qualifying purchase; gift will be automatically added to cart. The Gift is non-transferable and limited to 1 per Qualifying Purchase. If you return or cancel your purchase, the discount will be forfeit. Void where prohibited or restricted by law.

        1. Galaxy AI features by Samsung will be provided for free until the end of 2025 on supported Samsung Galaxy devices.
        2. Requires internet connection; results may vary by uniqueness, clarity and framing of circled image and related factors. Samsung does not make any promises, assurances or guarantees as to the accuracy, completeness or reliability of the output provided by AI features.
        3. Samsung account log-in required. Calls must be made using the native Samsung phone app.Samsung does not make any promises, assurances or guarantees as to the accuracy, completeness or reliability of the output provided by AI features.
        4. For text in Samsung Notes only (200-4000 characters); requires Samsung account log-in and internet connection. Samsung does not make any promises, assurances or guarantees as to the accuracy, completeness or reliability of the output provided by AI features.
        5. Requires Samsung account log-in and internet connection. Samsung does not make any promises, assurances or guarantees as to the accuracy, completeness or reliability of the output provided by AI features.
        6. Compared to Galaxy S23 and S23+.
        7. Measured diagonally, Galaxy S24's screen size is 6.2 inches in the full rectangle and 6 inches accounting for the rounded corners and Galaxy S24+'s screen size is 6.7 inches in the full rectangle and 6.5 inches accounting for the rounded corners; actual viewable area is less due to the rounded corners and camera hole.
        8. Typical value tested under third-party laboratory condition. Typical value is the estimated average value considering the deviation in battery capacity among the battery samples tested under IEC 61960 standard. Rated capacity is 3880mAh for Galaxy S24, 4755mAh for Galaxy S24+ and 4855mAh for Galaxy S24 Ultra. Actual battery life may vary depending on network environment, usage patterns and other factors.
        9. Color availability may vary depending on country or carrier.
        10. Frame does not include volume and side keys or SIM tray.
        11. Translating feature in Chat Assist may require Samsung Account login. Some chat applications may not support this feature. Certain languages may require language pack download. Service availability may vary by language. This feature is activated when a translatable language is detected. Accuracy of results is not guaranteed.
        12. Tone suggesting feature in Chat Assist requires a network connection and Samsung Account login. Must meet length requirements to activate feature. Service availability may vary by language. Accuracy of results is not guaranteed.
        13. 12MP 2x optical quality zoom is enabled by the Adaptive Pixel sensor.
        14. Results may vary depending on light condition and/or shooting conditions including multiple subjects, being out of focus or moving subjects.
        15. 30X Space Zoom includes 3x optical zoom and 30x digital zoom with Super Resolution technology. Zoom distances past 3x zoom may express some image deterioration.
        16. AI Zoom is applied to distances between digital zoom lengths. Accuracy of results is not guaranteed.
        17. Some social media apps may not support Super HDR. Accuracy of results is not guaranteed.
        18. HDR quality is supported on photos uploaded as Instagram feed posts and videos uploaded as reels.
        19. Optical quality zoom is enabled by the Adaptive Pixel sensor.
        20. 2x zoom must be enabled in the Camera Assistant app settings. Camera Assistant can be downloaded from the Galaxy Store.
        21. ©2024 Gameloft. All Rights Reserved. Gameloft, the Gameloft logo and Asphalt are trademarks of Gameloft in the US and/or other countries. All manufacturers, cars, names, brands and associated imagery are trademarks and/or copyrighted materials of their respective owners.
        22. Actual battery life varies by network environment, features and apps used, frequency of calls and messages, the number of times charged, and many other factors. Estimated against the average usage profile compiled by UX Connect Research. Typical tested battery life of at least 60 hours estimated against the average usage profile. Independently assessed by UX Connect research between 2023.11.25-2023.12.15 in US and UK with pre-release versions of SM-S921, SM-S926 and SM-S928 under default setting using LTE and 5G Sub6 networks. NOT tested under 5G mmWave network.
        23. Based on Samsung internal lab test conditions with pre-release version of given model connected to earphone via Bluetooth under default settings over LTE. Estimated against battery capacity and measured current over battery power consumption during video playback (video file resolution 720p, saved on device) and audio playback (mp3 file, 192kbps, saved on device with LCD display turned off), respectively. Actual video and audio playback times vary by network connection, settings, file format, screen brightness, battery.
        24. Wired transfers from Android™ devices require the receiving device to have Android™ 4.3 or later and the sending device to have Android 4.3™ or later. Transfers can be completed without a cable through a wireless connection. For wireless connections, the receiving device must have Android™ 4.0 or later and the sending device must have Android™ 4.0 or later. Open Smart Switch Mobile in “Settings” on the receiving Galaxy device or download the Smart Switch Mobile app from the Galaxy Store. Data and content available for transfer may vary by transmission method.
        25. Wired transfers from iOS require the receiving device to have Android™ 4.3 or later and the sending device to have iOS 5 or later. Transfers can be completed without a cable through a wireless connection or iCloud. For wireless connections, the receiving device must have Android™ 4.0 or later and the sending device must have iOS 12 or later. iCloud transfers require the receiving device to have Android™ 4.0 or later and the sending device to have iOS 5 or later. Open Smart Switch Mobile in “Settings” on the receiving Galaxy device or download the Smart Switch Mobile app from the Galaxy Store. For wireless transfers, download Smart Switch for iOS from the App Store on your iPhone or iPad. Data and content available for transfer may vary by transmission method.
        26. It is recommended to use a wired connection when transferring diverse sets of data at once.
        27. Quick Share between Galaxy devices available with the following OS: smartphones and tablets with Android OS version 10.0 (Q) and One UI 2.1 or above, PCs running Windows 10 or later. Requires Samsung account and Wi-Fi and Bluetooth connection. Quick Share to iOS and Android devices available by sending shared link: individual files shared cannot exceed 3GB (for a total of 5GB per day) and link will expire after two days; requires a Samsung account and internet connection.
        28. All accessories sold separately.
        29. Instant Slow-Mo available only with videos saved in the Samsung Gallery app, recorded at up to 4K@60 fps (not available with HDR10+ videos).
        30. Instant Slow-mo is only available on the pre-installed Samsung Video Player and Samsung Gallery app. Service availability may differ by the video spec.
        31. Interpreter requires Samsung Account login and language preset (English and Spanish pre-installed; other languages require free download). Results may vary.
        32. Transcript Assist available only with audio files under 3 hours and recorded using the Samsung Voice Recorder app. Summarizing feature available for text in Samsung Notes only (200-4,000 characters). Translation feature requires language preset (English and Spanish pre-installed; other languages require free download. Samsung account login and internet connection required.

        θFor a limited time only, on Samsung.com/Shop Samsung App, or purchase a new qualifying Galaxy device (“Qualifying Purchase”), send in your qualifying trade-in device to Samsung through the Samsung Trade-In Program, and if Samsung determines your trade-in device meets all eligibility requirements, you will receive a trade-in credit specific to your qualifying trade-in device to apply toward your Qualifying Purchase. Device models that currently qualify for trade-in and trade-in credit amounts associated with those models are available on Samsung.com and the Shop Samsung App; eligible models and amounts may change at Samsung's sole discretion. To be eligible for trade-in, your qualifying device must meet all Trade-In Program eligibility requirements, which include, but are not limited to, that the device powers on, holds a charge, and does not power off unexpectedly; has a functioning display; has no breaks or cracks in the screen (unless a cracked screen offer applies); has no breaks or cracks in the case; has no liquid damage (whether visible or not); has no other defects that go beyond normal wear and tear; is not on a black list; has a verified FCC ID; has been reset to factory settings; has all personal information removed; has all software locks disabled; and is owned by you (leased devices are not eligible). Anticipated trade-in value will be applied as a credit at time of purchase, but, if you do not send in your trade-in device within 15 days of receipt of your Qualifying Purchase, you will be charged back for the trade-in credit applied to your purchase, or if you send in your trade-in device within 15 days of receipt of your Qualifying Purchase but Samsung determines your device does not meet all eligibility requirements, you will be charged back for the trade-in credit applied to your purchase minus $25. Participation in this program does not excuse you from contracts with your carrier or retailer (or any related payments or fees) for the device that was traded in. Limit 1 trade-in per Qualifying Purchase. Samsung reserves the right to modify or discontinue this offer at any time. The Trade-In Program cannot be combined with any other Samsung, carrier or retailer promotions, discounts, or offers unless specifically provided for in the terms and conditions of such offers. Additional terms, including terms that govern the resolution of disputes, apply. Click here to learn more.

        ')); } } }; 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 () { console.log('window.location.hash', window.location.hash) 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.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.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.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-la': 'galaxy-s24:highlights:galaxy-ai^aod-lockscreen:index:', 'an-ca': 'content click', 'an-la': '', 'an-ac': 'galaxy-ai^aod-lockscreen>', 'an-tr': 'galaxy s24 ultra:highlights:stk-bar:page:' }; for (let i = 0; i < els.bullets.length; i++) { Object.keys(tagging).forEach(key => { if (key == 'data-omni' || key == 'ga-la' || key == "an-la" || key == "an-ac" || key == "an-tr") { 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.overviewChatAssistTutorial = (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('#overview-chat-assist-experience'); 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'); 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.overviewCircleToSearchTutorial = (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('#overview-circle-to-search-experience'); 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'); 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.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:', 'an-ac': 'gallery', 'an-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 && !!els.section) { 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); }, pauseCallback: function () { setTagging.play(this.controller); }, endCallback: function () { if (!!this.wrap.tooltip) { let self = this; if (this.video.playIndex != 5) { utils.offAccessibility(this.wrap.tooltip); setTimeout(function () { self.wrap.tooltipCta.focus(); }, 200); } } if (this.video.playIndex == (els.videos.length - 3)) { setTimeout(function () { els.generativeCta.focus(); }, 200); } this.controller.style.display = 'none !important'; eventList.endCallback.call(this) } })); } }; 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.overviewGenerativeEditTutorial = (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('#overview-generative-edit-experience'); 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); }, pauseCallback: function () { setTagging.play(this.controller); }, endCallback: function () { if (!!this.wrap.tooltip) { let self = this; if (this.video.playIndex != 5) { utils.offAccessibility(this.wrap.tooltip); setTimeout(function () { self.wrap.tooltipCta.focus(); }, 200); } } if (this.video.playIndex == (els.videos.length - 3)) { setTimeout(function () { els.generativeCta.focus(); }, 200); } this.controller.style.display = 'none !important'; eventList.endCallback.call(this) } })); } }; 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'); status.ismuted = false; }; 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; status.ismuted = false; this.blind.innerText = this.getAttribute('data-mute'); setTagging.mute(this); } else { this.classList.remove('is-unmuted'); this.video.muted = true; status.ismuted = 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 (!status.ismuted) { this.wrap.videoMuteCta.classList.add('is-unmuted'); this.wrap.videoMuteCta.video.muted = false; this.wrap.videoMuteCta.blind.innerText = this.wrap.videoMuteCta.getAttribute('data-mute'); setTagging.mute(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.overviewLiveTranslateTutorial = (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('#overview-live-translate-experience'); 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'); status.ismuted = true; }; 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; status.ismuted = false; this.blind.innerText = this.getAttribute('data-mute'); setTagging.mute(this); } else { this.classList.remove('is-unmuted'); this.video.muted = true; status.ismuted = 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 (!status.ismuted) { this.wrap.videoMuteCta.classList.add('is-unmuted'); this.wrap.videoMuteCta.video.muted = false; this.wrap.videoMuteCta.blind.innerText = this.wrap.videoMuteCta.getAttribute('data-mute'); setTagging.mute(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-la': 'galaxy-s24:highlights:camera^nightography:index:', 'an-ca': 'content click', 'an-la': '', 'an-ac': 'nightography>', 'an-tr': 'galaxy s24 ultra:highlights:stk-bar:page:' }; for (let i = 0; i < els.bullets.length; i++) { Object.keys(tagging).forEach(key => { if (key == 'data-omni' || key == 'ga-la' || key == "an-la" || key == "an-ac" || key == "an-tr") { 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(), isPaused: false, 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'); }; 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); } 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) { if ((currentIndex != status.imageSlideIndex)) { objs[`video_${currentIndex}`].video.pause(); objs[`video_${currentIndex}`].video.currentTime = 0; } objs[`video_${currentIndex}`].video.removeEventListener('canplay', objs[`video_${currentIndex}`].video.play); if (!!utils.isLowNetwork() || !!status.isPaused) { els.progressWrap[currentIndex].classList.remove(statusClass.progress.active); els.progressWrap[activeIndex].classList.remove(statusClass.progress.pause); } else { if (activeIndex != status.imageSlideIndex) { 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(); }); } } else { els.progressWrap[currentIndex].classList.remove(statusClass.progress.active); els.progressWrap[activeIndex].classList.remove(statusClass.progress.pause); els.progressWrap[activeIndex].classList.add(statusClass.progress.active); } } 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; }, onClickArrow: function (e) { status.arrowTimeout = null; status.arrowStyleTimeout = null; status.accessibilityTimeout = 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); } 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 = els.navigationList ? 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) { status.isPaused = false; isVideo.play(); } else { status.isPaused = true; 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)) { els.progressBar[i].removeEventListener('animationend', eventFnc.animationEnd[i]); } else { setTimeout(() => { 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) } eventList.animationEndDestroy(); accessibility.setTitle(); }, clickFeatureCta: (e) => { e.preventDefault(); 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(); } }; 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'); const sections = ["#generative-edit", "#circle-to-search", "#live-translate", "#chat-assist", "#overview-generative-edit", "#overview-circle-to-search", "#overview-live-translate", "#overview-chat-assist"] const layers = ["#generative-edit-experience", "#circle-to-search-experience", "#live-translate-experience", "#chat-assist-experience", "#overview-generative-edit-experience", "#overview-circle-to-search-experience", "#overview-live-translate-experience", "#overview-chat-assist-experience"] let sectionList = [] let layerPopup = [] for (let i = 0; i < sections.length; i++) { sectionList.push(document.querySelector(sections[i])) } for (let i = 0; i < layers.length; i++) { layerPopup.push(document.querySelector(layers[i])) } 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 = {}; 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.closeCtas = opts.layerPopup.querySelectorAll('.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()) { if (els.layerPopup.querySelector('.is-info-open, .is-tutorial-opened')) { eventList.popup.setPopupPosition(els.layerPopup); 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.flotingNavi); } 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.flotingNavi); } 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.introCta) { els.introVideo.addEventListener('ended', function () { utils.offAccessibility(els.introCta.parentElement); setTimeout(function () { els.introCta.parentElement.classList.add(statusClass.isVisible); }, 100); }); } }, 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 () { els.introCta.parentElement.classList.add(statusClass.isVisible); }); } }, setSubnavi: function (opts) { if (commonEls.globalSubNav) commonEls.globalSubNav.style.opacity = .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) { if (status.isGlobal) { this.onAccessibilityGlobal(els); } else { this.onAccessibilityDotom(els); } }, offAccessibility: function (els) { if (status.isGlobal) { this.offAccessibilityGlobal(els); } else { this.offAccessibilityDotcom(els); } } } } const eventHandler = { resize: function (els) { window.addEventListener('resize', function () { eventList.resize.position(els); eventList.common.setMobileVideoWidth(els); }); }, infoPopupDeactive: function (els) { els.infoPopup.addEventListener('click', function () { eventList.tutorial.videoContentReset(els); clearTimeout(status.infoRemoveTiming); els.tutorialVideos[0].play(); let tutorialVideoController = els.tutorialVideoWrap[0].querySelector('.common-video__control.common-play-button'); tutorialVideoController.focus(); if (resize.checkResolution().indexOf('mobile') > -1) { els.layerPopup.classList.add(statusClass.isTutorialOpenedMo); } if (els.tutorialVideos[1].readyState < 4) { imageLoader.setResponsiveMedia([els.tutorialCoverImages[1]]); videoLoader.setResponsiveMedia([els.tutorialVideos[1]]); } status.infoRemoveTiming = null; }); }, tutorialActiveEvent: function (els) { if (!!els.introCta) { els.introCta.addEventListener('click', function () { eventList.tutorial.active(els); }); } els.tutorialActiveCta.addEventListener('click', function () { this.parentElement.classList.remove(statusClass.isActive); eventList.tutorial.active(els); }); }, tutorialDeactiveEvent: function (els) { els.tutorialDeactiveCta.addEventListener('click', function () { eventList.tutorial.deactive(els); eventList.tutorial.reset(els); }); }, reStartTutorial: function (els) { els.tutorialReplay.addEventListener('click', function () { this.style.display = ''; eventList.tutorial.reset(els); eventList.tutorial.active(els); utils.onAccessibility(els.tutorialVideoWrap[els.tutorialVideoWrap.length - 1]); }); }, videoController: function (index) { objs[`introVideo_${index}`].controller.addEventListener('click', function () { if (this.video.paused) { this.video.play(); } else { this.video.pause(); } }); }, onClickMoCloseCta: function (els) { els.moCloseCta.addEventListener('click', function () { eventList.tutorial.deactive(els); eventList.tutorial.reset(els); }); }, onClickController: function (els) { els.tutorialNavigation.addEventListener('click', function (e) { let isNaviBtn = e.target.classList.contains('common-tutorial__navigation-button'); if (isNaviBtn) { _controllEvent(e.target); } }); els.tutorialPagination.addEventListener('click', function (e) { let isPaginationBtn = e.target.classList.contains('common-tutorial__pagination'); if (isPaginationBtn) { let currOpenPopupId = document.querySelector('.common-tutorial.is-open').getAttribute('id'); let targetId = e.target.getAttribute('data-hash'); if (targetId != currOpenPopupId) { _controllEvent(e.target); } } }); const _controllEvent = function (target) { let targetPopupId = target.getAttribute('data-hash'); document.querySelector('.common-tutorial.is-open').hide(); document.querySelector(`#${targetPopupId}`).show(); eventList.tutorial.reset(els); document.querySelector(`#${targetPopupId}`).isController = true; }; }, tutorialintroImgLoad: function (els) { window.addEventListener('scroll', function () { if (this.pageYOffset > 0) { eventList.popup.tutorialIntroImgLoad(els); } }) }, moveToTutorialPopup: function (els) { window.addEventListener('DOMContentLoaded', function () { if (!status.isGlobal) { commonEls.flotingNaviFixedWrap.after(els.layerPopup); } else { document.querySelector('#contents').prepend(els.layerPopup); if (status.isIos) commonEls.globalSubNav.after(els.layerPopup); } }); }, onClickSup: function (els) { for (let i = 0; i < els.supClicker.length; i++) { els.supClicker[i].addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); let targetIndex = parseFloat(e.target.innerText), disclaimer = document.querySelectorAll('#desc-section li')[targetIndex - 1], disclaimerText = disclaimer.innerText, activeBlock = '' + disclaimerText + ''; els.layerPopup.hide(); setTimeout(() => { disclaimer.innerHTML = activeBlock; disclaimer.querySelector('a').focus(); }, 500); const eventList = { focusIn: function () { common.centeredFocus.call(disclaimer.querySelector('a')); disclaimer.removeEventListener('focusin', eventList.focusIn); }, focusOut: function () { disclaimer.innerHTML = disclaimerText; disclaimer.removeAttribute('tabindex'); disclaimer.removeEventListener('focusout', eventList.focusOut); }, }; disclaimer.addEventListener('focusin', eventList.focusIn); disclaimer.addEventListener('focusout', eventList.focusOut); }); } } } const setIntroVideo = function (el, index) { objs[`introVideo_${index}`] = ANIUTIL.videoHandler({ wrap: el, video: el.video, controller: el.controller, playCallback: function () { if (el.classList.contains(statusClass.isCompleted)) el.classList.remove(statusClass.isCompleted); setTagging.pause(el.controller); }, pauseCallback: function () { setTagging.play(el.controller); }, endCallback: function () { if (!el.classList.contains(statusClass.isCompleted)) el.classList.add(statusClass.isCompleted); } }); }; const setPopup = function (opts, els) { tutorialPopup({ tutorialPopup: opts.layerPopup, tutorialPopupClass: opts.popupClass, openerEvent: { element: opts.openCta, }, closeCtas: [opts.closeCta], show: { start: function (target) { eventList.popup.setOverviewStatus(opts); eventList.popup.mediaLoad(els); eventList.popup.playIntroVideo(els); eventList.popup.tutorialMediaLoad(els); eventList.popup.setPopupPosition(opts.layerPopup); eventList.popup.setUiEls(opts, els, target); eventList.popup.onAccessibility(els); }, end: function () { if (status.isIos) opts.layerPopup.style.display = 'block'; opts.layerPopup.classList.add('is-open'); eventList.common.setMobileVideoWidth(els); } }, hide: { start: function (target) { eventList.popup.offAccessibility(els); target.openerCta.focus(); opts.layerPopup.classList.remove('is-open'); }, end: function () { // eventList.popup.playOverview(); eventList.tutorial.reset(els); els.introVideo.pause(); eventList.popup.setSubnavi(opts); eventList.popup.focusHandler(opts, els); els.innerWrapper.scrollTop = 0; } } }); }; const setTagging = { play: function (targetController) { if (targetController.hasAttribute('data-omni')) { let dataOmni = targetController.getAttribute('data-omni').toLowerCase(); targetController.setAttribute('data-omni', dataOmni.replace('pause', 'play')); } if (targetController.hasAttribute('ga-la')) { let gaLa = targetController.getAttribute('ga-la').toLowerCase(); targetController.setAttribute('ga-la', gaLa.replace('pause', 'play')); } }, pause: function (targetController) { if (targetController.hasAttribute('data-omni')) { let dataOmni = targetController.getAttribute('data-omni').toLowerCase(); targetController.setAttribute('data-omni', dataOmni.replace('play', 'pause')); } if (targetController.hasAttribute('ga-la')) { let gaLa = targetController.getAttribute('ga-la').toLowerCase(); targetController.setAttribute('ga-la', gaLa.replace('play', 'pause')); } } }; const bindEvents = function (els, index) { eventHandler.moveToTutorialPopup(els); eventHandler.resize(els); eventHandler.infoPopupDeactive(els); eventHandler.tutorialActiveEvent(els); eventHandler.tutorialDeactiveEvent(els); eventHandler.reStartTutorial(els); eventHandler.onClickMoCloseCta(els); eventHandler.onClickController(els); eventHandler.tutorialintroImgLoad(els); eventHandler.onClickSup(els); // introVideo setProperty(els); setIntroVideo(els.introVideoWrap, index); eventHandler.videoController(index); }; return { init: init, } })(); })(); ; (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.viewer = (function () { const utils = window.flagship.common.utils; const resize = window.flagship.common.resize; let els = {}, status = {}, currDevice = resize.checkResolution(); const init = function () { els.viewerBtn = document.querySelector('.viewer-btn'); if (!!els.viewerBtn) { setElements(); setStatus(); setPopup(); bindEvents(); } }; const setElements = function () { els.wrapEl = document.querySelector('#wrap'); els.contents = document.querySelector('#contents'); // popup els.popup = document.querySelector('.highlights-viewer'); els.popupContents = els.popup.querySelector('.highlights-viewer__contents'); els.popupInner = els.popup.querySelector('.highlights-viewer__inner'); els.popupWrap = els.popup.querySelector('.highlights-viewer__wrap'); els.closeCta = els.popup.querySelector('.highlights-viewer__close-cta'); els.viewerWrap = els.popup.querySelector('.highlights-viewer__contents-wrap'); els.viewerContainer = els.popup.querySelector('.highlights-viewer__container'); els.viewerIframe = els.popup.querySelector('.highlights-viewer__container-viewer'); // popup-scroll els.popupScroll = els.popup.querySelector('.highlights-viewer__scroll'); els.popupScrollUpBtn = els.popup.querySelector('.highlights-viewer__scroll-btn--up'); els.popupScrollDownBtn = els.popup.querySelector('.highlights-viewer__scroll-btn--down'); // infoPopup els.infoBtn = els.popup.querySelector('.highlights-viewer__title-cta'); els.infoCloseBtn = els.popup.querySelector('.highlights-viewer__header-close-cta'); els.infoDimmed = els.popup.querySelector('.highlights-viewer__dimmed'); // timeout els.resizeTimeout = null; els.resizeInnerTimeout = null; // viewer els.viewerOpener = null; els.viewerModel = ''; els.viewerColor = ''; }; const setStatus = function () { status.viewerBaseUrl = '//www.samsung.com/global/galaxy/3d-360/viewer/?'; status.defaultParams = '&gesture_guide=0'; status.defaultParams += '&bgcolor=transparent'; status.defaultParams += '&skin=colorlayer'; status.defaultParams += '&theme=roundlayer'; status.defaultParams += '&intro=1'; status.defaultParams += '&ruler=1'; status.defaultParams += '&breakpoint_criteria=outer'; status.defaultParams += '&breakpoint_desktop_width=1024'; status.defaultParams += '&intro_pose=2'; status.defaultParams += '&intro_pose_once=1'; status.defaultParams += '&intro_pose_hold=1'; status.moPoseReady = false; status.isHash = false; }; const bindEvents = function () { window.addEventListener('DOMContentLoaded', onLoadHandler, { once: true }); window.addEventListener('message', onReceiveV3DMessage, false); //els.popupContents.addEventListener('scroll', onScrollPopupContents); els.viewerIframe.addEventListener('DOMContentLoaded', viewerEvents.onLoadLayerPopupIframe); els.popupScroll.addEventListener('click', layerPopupScrollHandler.onClickLayerScroll); resize.add(onResizeHandler); }; const onLoadHandler = function () { setViewerWrap.innerWrapHeight(); setViewerWrap.layerScroll(); }; const onResizeHandler = function (currRes) { currDevice = currRes; if (utils.detector.isTouchDevice && !utils.detector.isIosDevice) setViewerWrap.innerWrapHeight(); setViewerWrap.layerScroll(); }; const setViewerWrap = { innerWrapHeight: function () { clearTimeout(els.resizeInnerTimeout); els.resizeInnerTimeout = setTimeout(function () { if (els.popupInner) { els.popupInner.style.height = parseInt(window.innerHeight * 0.9) + 'px'; } }, 0); }, layerScroll: function () { clearTimeout(els.resizeTimeout); els.resizeTimeout = setTimeout(function () { layerPopupScrollHandler.setLayerScroll(); }, 300); } }; const setPopup = function () { utils.layerPopup({ layerPopup: els.popup, layerPopupClass: '.highlights-viewer', openerEvent: { element: els.viewerBtn, }, closeCtas: [els.closeCta], moveTarget: document.documentElement, contents: els.contents, show: { start: function (target) { els.popup.classList.add('is-init'); viewerEvents.show(target.openerCta); }, end: function () { if (utils.detector.isIosDevice) els.popup.style.display = 'block'; els.popup.classList.add('is-open'); if (els.popup.classList.contains('is-info-open')) { setTimeout(function () { els.infoCloseBtn.focus(); }, 500); } } }, hide: { start: function () { els.popup.classList.remove('is-open'); }, end: function () { setTimeout(function () { els.popup.classList.remove('is-init'); }, 300); viewerEvents.hide(); } } }); }; const viewerEvents = { show: function (viewerOpener) { if (viewerOpener.classList.contains('viewer-btn')) { status.isHash = false; els.viewerOpener = viewerOpener; } else { status.isHash = true; els.viewerOpener = els.viewerBtn; } els.viewerModel = els.viewerOpener.getAttribute('data-model-name'); els.viewerColor = els.viewerOpener.getAttribute('data-model-color'); els.viewerIframe.setAttribute('src', getViewerUrl()); if (currDevice.indexOf('mobile') > -1 || currDevice == 'tablet') { viewerEvents.infoPopupShow(); } els.infoBtn.addEventListener('click', function () { viewerEvents.infoPopupShow(); setTimeout(function () { els.infoCloseBtn.focus(); }, 400); }); els.popupWrap.addEventListener('click', viewerEvents.onclickViewerDimmed); }, hide: function () { els.viewerModel = ''; els.viewerIframe.setAttribute('src', 'about:blank'); if (status.isHash) { setTimeout(function () { els.viewerOpener.focus(); }, 300); } }, infoPopupShow: function () { if (!els.popup.classList.contains('is-info-open')) { els.popup.classList.add('is-info-open'); els.infoCloseBtn.addEventListener('click', viewerEvents.infoPopupHide); els.infoDimmed.addEventListener('click', viewerEvents.infoPopupHide); setTimeout(function () { els.closeCta.setAttribute('tabindex', -1); els.closeCta.setAttribute('aria-hidden', true); els.infoBtn.setAttribute('tabindex', -1); els.infoBtn.setAttribute('aria-hidden', true); els.viewerContainer.setAttribute('tabindex', -1); els.viewerContainer.setAttribute('aria-hidden', true); }, 400); } }, infoPopupHide: function () { if (els.popup.classList.contains('is-info-open')) { els.popup.classList.remove('is-info-open'); setTimeout(function () { els.infoBtn.focus(); }, 300); setTimeout(function () { els.closeCta.removeAttribute('tabindex'); els.closeCta.removeAttribute('aria-hidden'); els.infoBtn.removeAttribute('tabindex'); els.infoBtn.removeAttribute('aria-hidden'); els.viewerContainer.removeAttribute('tabindex'); els.viewerContainer.removeAttribute('aria-hidden'); }, 100); } }, onclickViewerDimmed: function (e) { if (e.currentTarget == e.target) { if (utils.detector.isIosDevice) els.viewerOpener.style.display = 'block'; els.popup.classList.remove('is-open'); document.documentElement.classList.remove('is-layer-open'); document.documentElement.style.overflow = ''; utils.visibleScroll(); utils.onAccessibility(els.popup); utils.offAccessibility(document.querySelector('#wrap')); setTimeout(function () { els.viewerOpener.focus(); }, 300); els.viewerModel = ''; els.viewerIframe.setAttribute('src', 'about:blank'); setTimeout(function () { els.popup.classList.remove('is-init'); }, 300); } }, onLoadLayerPopupIframe: function () { if (document.documentElement.classList.contains('color_yb') || (utils.getCookie('highContrastMode') != null && utils.getCookie('highContrastMode') == 1)) { els.viewerIframe.contentWindow.postMessage('V3D.highContrast.on', '*'); setTimeout(function () { els.viewerIframe.contentWindow.postMessage('V3D.highContrast.on', '*'); }, 300); } } }; const layerPopupScrollHandler = { setLayerScroll: function () { if (!els.popupContents) return; if (els.popupContents.scrollHeight > els.popupContents.clientHeight) { utils.offAccessibility(els.popupScroll); els.popupScroll && els.popupScroll.classList.add('is-scroll-btn'); } else { utils.onAccessibility(els.popupScroll); els.popupScroll && els.popupScroll.classList.remove('is-scroll-btn'); } }, onScrollPopupContents: function () { onUpdateLayerScroll(false); }, onClickLayerScroll: function (e) { e && e.preventDefault(); if (e.target.matches('.highlights-viewer__scroll-btn')) { let scrollDown = e.target.classList.contains('highlights-viewer__scroll-btn--down'), $popupContents = $(els.popupContents); if (scrollDown) { $popupContents.stop().animate({ scrollTop: $popupContents.scrollTop() + 100 }, { duration: 300, complete: function () { layerPopupScrollHandler.onUpdateLayerScroll(true); } }); } else { $popupContents.stop().animate({ scrollTop: $popupContents.scrollTop() - 100 }, { duration: 300, complete: function () { layerPopupScrollHandler.onUpdateLayerScroll(true); } }); } } }, onUpdateLayerScroll: function (isClicked) { const offsetTop = els.popupContents.scrollTop, layerBottom = els.popupContents.scrollHeight - els.popupContents.clientHeight; els.popupScrollUpBtn.removeAttribute('tabindex'); els.popupScrollUpBtn.removeAttribute('aria-hidden'); els.popupScrollUpBtn.removeAttribute('disabled'); els.popupScrollDownBtn.removeAttribute('tabindex'); els.popupScrollDownBtn.removeAttribute('aria-hidden'); els.popupScrollDownBtn.removeAttribute('disabled'); if (offsetTop == 0) { isClicked && els.popupScrollDownBtn && els.popupScrollDownBtn.focus(); els.popupScrollUpBtn.setAttribute('tabindex', '-1'); els.popupScrollUpBtn.setAttribute('aria-hidden', 'true'); els.popupScrollUpBtn.setAttribute('disabled', 'disabled'); } else if (offsetTop >= layerBottom - 1) { isClicked && els.popupScrollUpBtn && els.popupScrollUpBtn.focus(); els.popupScrollDownBtn.setAttribute('tabindex', '-1'); els.popupScrollDownBtn.setAttribute('aria-hidden', 'true'); els.popupScrollDownBtn.setAttribute('disabled', 'disabled'); } } }; const onReceiveV3DMessage = function (e) { if (e.data == 'V3D.state.popOpen') { if (currDevice.indexOf('mobile') > -1 || currDevice == 'tablet') { if (els.closeCta) { if (!els.popupWrap.classList.contains('is-popup-opened')) els.popupWrap.classList.add('is-popup-opened'); els.closeCta.setAttribute('tabindex', '-1'); els.closeCta.setAttribute('aria-hidden', 'true'); els.closeCta.setAttribute('disabled', 'disabled'); } if (els.infoBtn) { els.infoBtn.setAttribute('tabindex', '-1'); els.infoBtn.setAttribute('aria-hidden', 'true'); } } } else if (e.data == 'V3D.state.popClose') { if (currDevice.indexOf('mobile') > -1 || currDevice == 'tablet') { if (els.closeCta) { if (els.popupWrap.classList.contains('is-popup-opened')) els.popupWrap.classList.remove('is-popup-opened'); els.closeCta.removeAttribute('tabindex'); els.closeCta.removeAttribute('aria-hidden'); els.closeCta.removeAttribute('disabled'); } if (els.infoBtn) { els.infoBtn.removeAttribute('tabindex'); els.infoBtn.removeAttribute('aria-hidden'); } } } else if (e.data == 'V3D.state.introPose.ready') { if (currDevice.indexOf('desktop') > -1) { els.viewerIframe && els.viewerIframe.contentWindow.postMessage('V3D.introPose.run', '*'); } status.moPoseReady = true; setTimeout(function () { status.moPoseReady = false; }, 2000); } else if (e.data == 'V3D.state.localData.ready') { els.viewerIframe && els.viewerIframe.contentWindow.postMessage(JSON.stringify(V3DLOCALDATA), '*'); } }; const getViewerUrl = function () { let viewerUrl = status.viewerBaseUrl; let viewerModelList = 'galaxy-s24,galaxy-s24-plus'; let isbasicLineShow = (!V3DLOCALDATA['galaxy-s24-plus']) || (!!V3DLOCALDATA['galaxy-s24-plus'] && V3DLOCALDATA['galaxy-s24-plus'].color.length == 0); let isPlusLineShow = (!V3DLOCALDATA['galaxy-s24']) || (!!V3DLOCALDATA['galaxy-s24'] && V3DLOCALDATA['galaxy-s24'].color.length == 0); if (isbasicLineShow) { viewerModelList = 'galaxy-s24'; } else if (isPlusLineShow) { viewerModelList = 'galaxy-s24-plus'; } // model_name viewerUrl += 'model_name=' + els.viewerModel + '&model_list=' + viewerModelList; if (document.documentElement.classList.contains('color_yb') || (utils.getCookie('highContrastMode') != null && utils.getCookie('highContrastMode') == 1)) { viewerUrl += '&highcontrast=1'; } else { viewerUrl += '&highcontrast=0'; } // RTL utils.isRTL() && (viewerUrl += '&rtl=1'); viewerUrl += status.defaultParams; viewerUrl += '#color=' + (els.viewerColor ? els.viewerColor : 'null'); return viewerUrl; }; return { init: init } })(); })(); (function () { window.flagship = window.flagship || {}; window.flagship.highlights = window.flagship.highlights || {}; window.flagship.highlights.ytPopup = (function () { let els = {}; const utils = window.flagship.common.utils; const init = function () { els.layerPopup = document.querySelector('.common-youtube-popup'); if (!!els.layerPopup) { setElements(); setPopup(); } }; const setElements = function () { els.contents = document.querySelector('#contents'); els.openCtas = document.querySelectorAll('.js-youtube-popup'); els.closeCta = document.querySelector('.common-youtube-popup__close-cta'); els.ytIframe = els.layerPopup.querySelector('.common-youtube-popup__iframe > iframe'); els.ytDesc = els.layerPopup.querySelector('.youtube-player__desc'); els.dimmed = els.layerPopup.querySelector('.common-youtube-popup__close-area'); }; const setPopup = function () { for (let i = 0; i < els.openCtas.length; i++) { utils.layerPopup({ layerPopup: els.layerPopup, layerPopupClass: '.common-youtube-popup', openerEvent: { element: els.openCtas[i], }, closeCtas: [els.closeCta], dimmed: els.dimmed, moveTarget: document.documentElement, contents: els.contents, show: { start: function () { els.layerPopup.classList.add('is-yt-open'); }, end: function (target) { eventList.setYoutube(target); } }, hide: { start: function () { els.layerPopup.classList.remove('is-yt-open'); }, end: function (target) { eventList.clearYoutube(); } } }); } }; const eventList = { setYoutube: function (target) { let opener = target.openerCta, ytSrc = 'htt' + 'ps://www.youtube.com/embed/' + opener.getAttribute('data-youtube-id') + '?wmode=opaque&rel=0&enablejsapi=1&version=3&autoplay=1', ytTitle = opener.getAttribute('data-youtube-title'), ytBlind = opener.querySelector('.blind').innerHTML; els.ytIframe.setAttribute('src', ytSrc); els.ytIframe.setAttribute('title', ytTitle); els.ytDesc.innerHTML = ytBlind; els.OpenerTarget = opener; }, clearYoutube: function () { els.ytIframe.removeAttribute('src'); els.ytDesc.innerHTML = ''; } }; return { init: init, } })(); })(); (function () { window.flagship.common.resize.bindEvent(); var initComponents = function () { flagship.highlights.accordion.init(); flagship.highlights.scrollVideo.init(); flagship.highlights.clickToVideo.init(); flagship.highlights.overview.init(); flagship.highlights.quote.init(); flagship.highlights.designSpecPopup.init(); flagship.highlights.color.init(); flagship.highlights.viewer.init(); flagship.highlights.cameraAi.init(); flagship.highlights.resolutionPopup.init(); flagship.highlights.nightography.init(); flagship.highlights.opticalZoom.init(); flagship.highlights.dayPopup.init(); flagship.highlights.liveTranslatePopup.init(); flagship.highlights.aod.init(); flagship.highlights.experiences.init(); flagship.highlights.faq.init(); flagship.highlights.ytPopup.init(); flagship.highlights.tutorial.init(); flagship.highlights.generativeEditTutorial.init(); flagship.highlights.overviewGenerativeEditTutorial.init() flagship.highlights.circleToSearchTutorial.init(); flagship.highlights.overviewCircleToSearchTutorial.init() flagship.highlights.liveTranslateTutorial.init(); flagship.highlights.overviewLiveTranslateTutorial.init() flagship.highlights.chatAssistTutorial.init(); flagship.highlights.overvniewChatAssistTutorial.init(); flagship.highlights.innerPopup.init(); }; initComponents(); })(); });

      • Samsung Galaxy S24 & S24+ | Features & Highlights | Samsung US (2024)

        References

        Top Articles
        Latest Posts
        Article information

        Author: Lakeisha Bayer VM

        Last Updated:

        Views: 5915

        Rating: 4.9 / 5 (49 voted)

        Reviews: 88% of readers found this page helpful

        Author information

        Name: Lakeisha Bayer VM

        Birthday: 1997-10-17

        Address: Suite 835 34136 Adrian Mountains, Floydton, UT 81036

        Phone: +3571527672278

        Job: Manufacturing Agent

        Hobby: Skimboarding, Photography, Roller skating, Knife making, Paintball, Embroidery, Gunsmithing

        Introduction: My name is Lakeisha Bayer VM, I am a brainy, kind, enchanting, healthy, lovely, clean, witty person who loves writing and wants to share my knowledge and understanding with you.