Elio

Elio is a charming and visually gorgeous Pixar adventure held back by rushed storytelling and a surprisingly small sense of scale.
82/1001239641
Starring
Yonas Kibreab, Zoe Saldana, Brad Garrett
Directors
Adrian Molina, Madeline Sharafian, Domee Shi
Rating
PG
Genre
Adventure, Animation, Comedy, Drama, Family, Fantasy, Sci-Fi
Release date
June 13, 2025
Overall Score
Rating Overview
Story/Plot/Script
Visuals/Cinematography
Performance
Direction
Age Appropriate
Parent Appeal
Non-Wokeness
Rating Summary
Its somewhat undercooked narrative rushes the film's various storylines too much for it to become a classic, but Elio is a safe family adventure with a touch of heart and a dash of whimsy. It's the best family film of the summer... so far.

In Disney and Pixar’s Elio, an 11-year-old boy named Elio Solis, a space enthusiast with a vivid imagination, is accidentally beamed up to the Communiverse, an interplanetary organization of alien representatives. Mistakenly identified as Earth’s ambassador, Elio must navigate a galactic crisis, form bonds with eccentric alien lifeforms, including his new friend Glordon, and discover his true place in the universe.

Elio REVIEW

It's been a long time since Disney's won hearts and minds with its... well, anything. Year after year, they lose millions on their films, alienate massive swaths of lifelong fans of classic franchises, and generally screw up everything they touch. Other than that, everything's going fine. Elio might not be a radical shift that rights the ship, but it ain't half bad, either.

Pixar's 29th feature-length film is a briskly paced 1 hour and 39 minutes, with sufficient heart to keep parents more or less engaged and enough cartoon action to satisfy the kiddos. Truth be told, Elio had enough story just sitting there between the lines to warrant another twenty minutes, and its truncated runtime is its greatest weakness.

Elio limits itself to only two subplots, each of which, defying what's become modern convention, actually bolsters and enriches the main story arc. However, all three of these stories (including the primary one) are needlessly rushed, giving us relationships that feel, perhaps not hollow, but more tenuous than what's needed to truly move and capture audiences like The Incredibles and other early Pixar films. Furthermore, the resolutions to various problems are equally hasty and subsequently fail to raise one's heart rate as much as the filmmakers might hope.

That doesn't mean that you won't connect at all. Several of the main themes are so ingrained within our DNA that, for many, it won't take much to bridge the empathic gap—the need to feel loved and wanted by parents, the importance of a loving father, and the salience of platonic male friendships.

The voice acting is mostly top-notch, though Zoe Saldaña must stop getting cast just because she's latina. She's a decent enough actress who delivers an adequate vocal performance in this, just as she has in the Avatar films. However, when compared to Brad Garrett's (Lord Grigon) villainous sonority or even relative newcomer Yonas Kibreab's (Elio) vulnerable sincerity, Saldaña comes up a tad short. True, she's helped little by a script that doesn't entirely know what to do with her, nor by a role that was almost certainly intended initially for a man.

As has been the case many times before, the technical excellence of Pixar's animators and artists is this film's greatest achievement. Elio is an exquisitely animated film that, despite being generated in a soulless machine, feels emotionally real and tactile. The beautifully soothing color palette is a joy, and the detail in every inch of every frame is surely beyond the dreams of the studio's early animators. Regrettably, despite this artistry, the hurried story needlessly restricts the scope and impact of the visuals. The advanced technology isn't really explored, the vastness of space is an afterthought, and the locales are surprisingly limited.

When the quantum torpedoes are exhausted and the phaser banks are powered down, this Disney space adventure falls short of its epic potential, giving us instead a safe and serviceable film that doesn't quite meet our standards of what's Worth it. Still, it's good enough that I'll take my family to see it, and better than anything else original that Disney has put out in a shamefully long time.

Parental Notes

PARENTAL NOTES

Important Information for Parents

Our Parental Notes flag the material parents may want to know about before pressing play, including profanity, blasphemy, adult content, extreme violence, frightening intensity, hyper-stimulating sequences, and other family-content concerns.

UNLOCK PARENTAL NOTES.Profanity, blasphemy, adult content, extreme violence, hyper-stimulating intensity, and more.
Woke Report

WOKE REPORT

You're Only Getting Half the Picture.

This section is our site's secret sauce, and what truly separates us from the rest. If you don't read it, you haven't read our review.

Have the filmmakers chosenradical progressive messaging over story?
Unlock the insightsthat could change your viewing experience and protect your family.

James Carrick

James Carrick is a passionate film enthusiast with a degree in theater and philosophy. James approaches dramatic criticism from a philosophic foundation grounded in aesthetics and ethics, offering insight and analysis that reveals layers of cinematic narrative with a touch of irreverence and a dash of snark.

Leave a Review
  1. The Critic June 24, 2025 at

    Thanks for reviewing this! I was wondering about this movie after my kid got the McDonalds toy for it.

  2. Jerry June 25, 2025 at

    What kind of website is this tf

    5
    17
  3. tbird2249 June 27, 2025 at

    What about LGBTQ?

    3
    8
    1. James Carrick June 27, 2025 at

      What about it? Did we miss something?

      9
      2
  4. Sweet Deals July 1, 2025 at

    I recently read that Pixar originally intended Elio to be a sissy boy, but that proved unpopular with test audiences so they scrubbed that out of his character early on. Turns out that woke isn’t as cool in the mainstream as many of their animators think it is in their southern California bubble.

    I’m going to refrain from judgment until the movie goes to streaming. Until then, I might dust off my old copy of Can of Worms (2000) and watch that again instead.

  5. KirbyRancher99 July 1, 2025 at

    I think what Pixar did was the right thing, because I think it would made this movie more woke. So I am glad they took that out, plus I had been looking forward to this movie for a long time. I’m waiting for it to come out on home media, as I don’t have a theater in my area sadly.

  6. Leela July 4, 2025 at

    Obrigada, mas o fato de partes mais aprofundadas estarem behind a pay wall was a turn off for me.

    1. James Carrick July 4, 2025 at

      The Woke Elements of our free reviews are viewable with our Free membership.

  7. TG July 11, 2025 at

    I just want to sincerely thank you for doing this. As of the last few years, before we take our son to a movie, I find myself scouring the internet to make sure there’s nothing in it that goes against our values. Sad that I even have to, but this Is exactly what I needed. A fantastic website! You’re doing the Lord’s work! Thank you, again.

  8. ArenaTuvian July 11, 2025 at

    We, too, make sure we fully vet a movie before taking the kidlets to see it. Sadly, despite the fact that they scrubbed all the LGBTQ elements out of it, what was left is the barest scraps of a film, and we’re going to skip it anyway. From what I’ve read, they didn’t rewrite the movie, they just erased all the queer positive elements from it, leaving behind a movie that doesn’t really resonate with anyone.

    Hopefully, after all the woke movies that were already in production pre-2025 have been released, film companies will finally start releasing better films that aren’t just about checking boxes in lieu of having an actual story.

  9. Sweet Deals November 1, 2025 at

    Now that I did watch the movie, I have a clear opinion on it. Despite the near-constant action leaving little air and space to breathe, Elio is a movie about nothing featuring characters who don’t really do anything.

    Compare Lilo from the Disney classic Lilo and Stitch. Lilo is a young Hawaiian girl who goes free-diving to give sandwiches to her favorite fish. She hula dances. She takes photographs of weird tourists. She sews her own dolls and listens to Elvis records. She’s a cool and interesting kid who does a lot of different things. She struggles to make friends with other girls in her hula class, but it’s clear that she puts in the effort. What does Elio do? Besides wearing ugly capes decorated with garbage, nothing. He lies in the sand on the beach all day waiting for aliens to pick him up and mopes about the house eating cold pizza at night because his aunt has to work. If he was an obsessive collector of Buzz Lightyear toys and had a bad habit of yelling a lot and saying the wrong thing at the wrong time, he’d be annoying but at least then he’d be more amusing to watch. He doesn’t even put in any effort to contacting aliens or making friends: he puts out an ad for someone to join his club as a false pretense to steal his HAM radio (and later hijack the army’s radio) rather than trying to build his own or trying to find a genuinely like-minded friend. He complains to his aunt suggesting that she never wanted him, but in my observations the opposite is true: Elio’s aunt works very hard to try to relate to her nephew and he’s the one who keeps pushing her away. If you’re not an alien, then Elio doesn’t want anything to do with you. He comes across as a self-centered space case.

    Moving on, the Communiverse is a world of disorienting alien geometry with no air, heat or sense of gravity, because every alien there has to wear a forcefield bubble for life-support. The Galactic Federation in Lilo and Stitch had some serious teeth: they held a trial to put the dangerous mad scientist Jumba Jookiba in maximum security prison, they used maximum security quarantine protocols to transport Stitch (which he was clever and strong enough to evade), and they were totally willing to destroy Earth in order to ensure Stitch wouldn’t survive had Pleakley and Cobra Bubbles not obstructed them. By contrast, most of the aliens in the Communiverse are spineless, gutless, floating blob things who look gentle and happy, but don’t really do that much besides recite bad poetry, drink purple glop and flush themselves down the toilet rather than involve themselves in serious galactic affairs. As soon as Lord Grogar appears and postures up to them, their response is to cower and hide from him despite the fact that he hasn’t really done anything other than look tough. And although one of the aliens in the Communiverse has the power to read minds, they all fall for Elio’s lies about being an experienced space ambassador without even bothering to take the time to vet him and confirm that what he’s telling them is true. I hereby decree that the Communiverse is lame.

    Even Lord Grogar, storied and frightening as he appears, is also a villain who doesn’t do anything. I think the reason why he wears such an imposing, heavily-armed carapace and never takes it off is because he’s too ashamed to admit that underneath, he’s just as soft and spineless as the rest of the Communiverse aliens. He has weapons but doesn’t really point them at anything other than skeet targets, and his threats to destroy the Communiverse sound empty and childish. His son Glordon says he doesn’t want to put on a carapace and never take it off because it would prevent him from doing the fun things he enjoys, but we never see him doing any of that stuff; he just sits in his room swaddling himself in webbing. Combine all this with a plot where Elio’s greatest successes mostly happen by accident, through the use of technology that he didn’t create that automatically does everything for him, or relying on other characters’ abilities to do the heavy lifting for him instead of solving the problem himself, and the result is a boring, selfish character whom I have no reason to root for in a plot where most of the tension feels completely fake.

    If you’d like to see a better version of a movie about a boy who makes contact with bad aliens, I’d like to recommend The Adventures of Jimmy Neutron, Boy Genius. While this Nickelodeon film is not as emotional or visually polished as a Pixar flick, Jimmy Neutron is a genius inventor who is always trying to stretch the boundaries of his knowledge. He builds his own rockets and his own communication devices, much to the chagrin of his (very understanding) parents who don’t want him doing things that may endanger him. Jimmy Neutron is wise enough to know what’s right but young and foolish enough not to choose it. It’s a very silly movie whose characters are very aware of their own silliness and embrace it without being sarcastic or hostile. It straddles a careful balance between “Your parents love you and they place limits for a reason” and “Children need to be free to make their own mistakes”. It’s a lot more fun and creative than this piece of extruded green slime posing as a pandering movie.

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  1. Sweet Deals April 1, 2026 at Audience Review Edited
    Not Worth ItMostly NOT WokeC

    Now that I did watch the movie, I have a clear opinion on it. Despite the near-constant action leaving little air and space to breathe, Elio is a movie about nothing featuring characters who don’t really do anything.

    Compare Lilo from the Disney classic Lilo and Stitch. Lilo is a young Hawaiian girl who goes free-diving to give sandwiches to her favorite fish. She hula dances. She takes photographs of weird tourists. She sews her own dolls and listens to Elvis records. She’s a cool and interesting kid who does a lot of different things. She struggles to make friends with other girls in her hula class, but it’s clear that she puts in the effort. What does Elio do? Besides wearing ugly capes decorated with garbage, nothing. He lies in the sand on the beach all day waiting for aliens to pick him up and mopes about the house eating cold pizza at night because his aunt has to work. If he was an obsessive collector of Buzz Lightyear toys and had a bad habit of yelling a lot and saying the wrong thing at the wrong time, he’d be annoying but at least then he’d be more amusing to watch. He doesn’t even put in any effort to contacting aliens or making friends: he puts out an ad for someone to join his club as a false pretense to steal his HAM radio (and later hijack the army’s radio) rather than trying to build his own or trying to find a genuinely like-minded friend. He complains to his aunt suggesting that she never wanted him, but in my observations the opposite is true: Elio’s aunt works very hard to try to relate to her nephew and he’s the one who keeps pushing her away. If you’re not an alien, then Elio doesn’t want anything to do with you. He comes across as a self-centered space case.

    Moving on, the Communiverse is a world of disorienting alien geometry with no air, heat or sense of gravity, because every alien there has to wear a forcefield bubble for life-support. The Galactic Federation in Lilo and Stitch had some serious teeth: they held a trial to put the dangerous mad scientist Jumba Jookiba in maximum security prison, they used maximum security quarantine protocols to transport Stitch (which he was clever and strong enough to evade), and they were totally willing to destroy Earth in order to ensure Stitch wouldn’t survive had Pleakley and Cobra Bubbles not obstructed them. By contrast, most of the aliens in the Communiverse are spineless, gutless, floating blob things who look gentle and happy, but don’t really do that much besides recite bad poetry, drink purple glop and flush themselves down the toilet rather than involve themselves in serious galactic affairs. As soon as Lord Grogar appears and postures up to them, their response is to cower and hide from him despite the fact that he hasn’t really done anything other than look tough. And although one of the aliens in the Communiverse has the power to read minds, they all fall for Elio’s lies about being an experienced space ambassador without even bothering to take the time to vet him and confirm that what he’s telling them is true. I hereby decree that the Communiverse is lame.

    Even Lord Grogar, storied and frightening as he appears, is also a villain who doesn’t do anything. I think the reason why he wears such an imposing, heavily-armed carapace and never takes it off is because he’s too ashamed to admit that underneath, he’s just as soft and spineless as the rest of the Communiverse aliens. He has weapons but doesn’t really point them at anything other than skeet targets, and his threats to destroy the Communiverse sound empty and childish. His son Glordon says he doesn’t want to put on a carapace and never take it off because it would prevent him from doing the fun things he enjoys, but we never see him doing any of that stuff; he just sits in his room swaddling himself in webbing. Combine all this with a plot where Elio’s greatest successes mostly happen by accident, through the use of technology that he didn’t create that automatically does everything for him, or relying on other characters’ abilities to do the heavy lifting for him instead of solving the problem himself, and the result is a boring, selfish character whom I have no reason to root for in a plot where most of the tension feels completely fake.

    If you’d like to see a better version of a movie about a boy who makes contact with bad aliens, I’d like to recommend The Adventures of Jimmy Neutron, Boy Genius. While this Nickelodeon film is not as emotional or visually polished as a Pixar flick, Jimmy Neutron is a genius inventor who is always trying to stretch the boundaries of his knowledge. He builds his own rockets and his own communication devices, much to the chagrin of his (very understanding) parents who don’t want him doing things that may endanger him. Jimmy Neutron is wise enough to know what’s right but young and foolish enough not to choose it. It’s a very silly movie whose characters are very aware of their own silliness and embrace it without being sarcastic or hostile. It straddles a careful balance between “Your parents love you and they place limits for a reason” and “Children need to be free to make their own mistakes”. It’s a lot more fun and creative than this piece of extruded green slime posing as a pandering movie.

 

 

 

'; win.document.open(); win.document.write(html); win.document.close(); return true; } function escapeHtml(str){ return String(str || '').replace(/[&<>"']/g, function(ch){ return ({'&':'&','<':'<','>':'>','"':'"',"'":'''})[ch] || ch; }); } function renderShareOptionsWindow(win, landscapeUrl, squareUrl, shareUrl, heading){ if (!win || win.closed) return false; var safeHeading = escapeHtml(heading || 'Share options'); var safeLandscape = escapeHtml(landscapeUrl || ''); var safeSquare = escapeHtml(squareUrl || ''); var safeUrl = escapeHtml(shareUrl || ''); // Keep this HTML script-free. A nested script tag inside this inline footer script can break under Cloudflare Rocket Loader. var html = '' + safeHeading + '' + '' + '

' + safeHeading + '

'; win.document.open(); win.document.write(html); win.document.close(); try { var doc = win.document; var btn = doc.getElementById('copyLinkBtn'); var status = doc.getElementById('shareStatus'); var field = doc.getElementById('shareUrlField'); var urlToCopy = String(shareUrl || ''); function setCopied(){ if (status) status.textContent = 'Link copied.'; if (btn) { btn.textContent = 'Copied!'; win.setTimeout(function(){ btn.textContent = 'Copy link'; }, 1500); } } function focusField(){ if (!field) return; field.removeAttribute('readonly'); field.focus(); field.select(); field.setSelectionRange(0, field.value.length); field.setAttribute('readonly','readonly'); } function legacyCopy(text){ var ta = doc.createElement('textarea'); ta.value = text; ta.setAttribute('readonly','readonly'); ta.style.position='fixed'; ta.style.top='0'; ta.style.left='0'; ta.style.opacity='0.01'; ta.style.pointerEvents='none'; doc.body.appendChild(ta); ta.focus(); ta.select(); ta.setSelectionRange(0, ta.value.length); var ok=false; try{ ok=!!doc.execCommand('copy'); }catch(err){} doc.body.removeChild(ta); return ok; } win.__wiowCopyShareLink = async function(){ if (!urlToCopy) { if (status) status.textContent='No share URL available.'; return false; } focusField(); try { if (win.navigator && win.navigator.clipboard && typeof win.navigator.clipboard.writeText === 'function') { await win.navigator.clipboard.writeText(urlToCopy); setCopied(); return false; } } catch(err) {} if (legacyCopy(urlToCopy)) { setCopied(); return false; } if (status) status.textContent='Press Ctrl+C or Cmd+C to copy the selected link.'; focusField(); return false; }; if (btn) btn.addEventListener('click', function(e){ e.preventDefault(); win.__wiowCopyShareLink(); }); var nextBtn = doc.getElementById('nextComboBtn'); if (nextBtn) nextBtn.addEventListener('click', function(e){ e.preventDefault(); if (win.opener && win.opener.__wiowRefreshShareOptions) win.opener.__wiowRefreshShareOptions(win); }); var mainBtn = doc.getElementById('mainComboBtn'); if (mainBtn) mainBtn.addEventListener('click', function(e){ e.preventDefault(); if (win.opener && win.opener.__wiowResetShareOptions) win.opener.__wiowResetShareOptions(win); }); Array.prototype.slice.call(doc.querySelectorAll('.preview-frame img')).forEach(function(img){ img.addEventListener('click', function(){ var overlay=doc.createElement('div'); overlay.className='overlay'; var full=doc.createElement('img'); full.src=img.getAttribute('data-full') || img.src; full.alt='Preview'; overlay.appendChild(full); overlay.addEventListener('click', function(){ overlay.remove(); }); doc.body.appendChild(overlay); }); }); } catch(err) {} return true; } async function buildShareImage(container, options){ options = options || {}; var postId = container.getAttribute('data-post-id'); var sharePage = container.getAttribute('data-share-page'); var kind = (container.getAttribute('data-share-kind') || 'critics').toLowerCase(); var posterUrl = container.getAttribute('data-poster-url') || findPosterUrl(); if (!posterUrl){ posterUrl = ''; } var isRatings = (kind === 'ratings' || kind === 'ratings-admin' || kind === 'ratings-question'); var isAudience = (kind === 'audience' || kind === 'audience-teaser' || kind === 'audience-question'); var action = isRatings ? 'wiow_build_ratings_share_image' : (isAudience ? 'wiow_build_audience_share_image' : 'wiow_build_share_image'); var payload = new URLSearchParams(); payload.append('action', action); payload.append('post_id', String(postId)); payload.append('poster_url', posterUrl); payload.append('share_context', kind); if (options.force) { payload.append('force', '1'); } if (options.reset) { payload.append('reset_combo', '1'); } if (kind === 'ratings-admin') { payload.append('admin', '1'); } if (kind === 'ratings-question' || kind === 'audience-question' || kind === 'critics-question') { payload.append('questions', '1'); payload.append('mode', 'questions'); } if (kind === 'audience-teaser' || kind === 'critics-teaser') { payload.append('mode', 'teaser'); } var res = await fetch('https://worthitorwoke.com/wp-admin/admin-ajax.php', { method: 'POST', credentials: 'same-origin', headers: {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}, body: payload.toString() }); var data = await res.json(); if (!data || !data.success || !data.data){ throw new Error((data && data.data && data.data.message) ? data.data.message : 'Share build failed.'); } return { image_url: data.data.image_url, share_url: data.data.share_url || sharePage, cycle_image_url: data.data.cycle_image_url || '', poster_url: data.data.poster_url || posterUrl || '' }; } async function buildShareSquareImage(container, cycleImageUrl, posterUrl, options){ options = options || {}; var postId = container.getAttribute('data-post-id'); var sharePage = container.getAttribute('data-share-page'); var kind = (container.getAttribute('data-share-kind') || 'critics').toLowerCase(); var isRatings = (kind === 'ratings' || kind === 'ratings-admin' || kind === 'ratings-question'); var isAudience = (kind === 'audience' || kind === 'audience-teaser' || kind === 'audience-question'); var action = isRatings ? 'wiow_build_ratings_share_image_square' : (isAudience ? 'wiow_build_audience_share_image_square' : 'wiow_build_share_image_square'); var payload = new URLSearchParams(); payload.append('action', action); payload.append('post_id', String(postId)); payload.append('share_context', kind); if (kind === 'ratings-admin') { payload.append('admin', '1'); } if (kind === 'ratings-question' || kind === 'audience-question' || kind === 'critics-question') { payload.append('questions', '1'); payload.append('mode', 'questions'); } if (kind === 'audience-teaser' || kind === 'critics-teaser') { payload.append('mode', 'teaser'); } if (cycleImageUrl) { payload.append('cycle_image_url', cycleImageUrl); } if (posterUrl) { payload.append('poster_url', posterUrl); } if (options.force) { payload.append('force', '1'); } if (options.reset) { payload.append('reset_combo', '1'); } var res = await fetch('https://worthitorwoke.com/wp-admin/admin-ajax.php', { method: 'POST', credentials: 'same-origin', headers: {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}, body: payload.toString() }); var data = await res.json(); if (!data || !data.success || !data.data){ throw new Error((data && data.data && data.data.message) ? data.data.message : 'Square share build failed.'); } return { image_url: data.data.image_url, share_url: data.data.share_url || sharePage, cycle_image_url: data.data.cycle_image_url || cycleImageUrl || '', poster_url: data.data.poster_url || posterUrl || '' }; } window.__wiowRefreshShareOptions = async function(win){ if (!wiowCanAdminNext || !window.__wiowLastShareOptionsContext || !window.__wiowLastShareOptionsContext.row) return false; var ctx = window.__wiowLastShareOptionsContext; var row = ctx.row; var heading = ctx.heading || 'Share options'; var targetWin = win || ctx.win; try { renderShareOptionsLoadingWindow(targetWin, heading); var built = await buildShareImage(row, { force:true }); var builtSquare = await buildShareSquareImage(row, built.cycle_image_url || '', built.poster_url || '', { force:true }); if (!built || !built.image_url || !builtSquare || !builtSquare.image_url) throw new Error('Share build failed.'); window.__wiowLastShareOptionsContext = { row: row, heading: heading, win: targetWin }; renderShareOptionsWindow(targetWin, built.image_url, builtSquare.image_url, built.share_url || row.getAttribute('data-share-page') || '', heading); } catch(err) { if (targetWin && !targetWin.closed) { var msg = (err && err.message) ? err.message : 'Could not build next combo.'; targetWin.document.open(); targetWin.document.write('

Could not build next combo

' + escapeHtml(msg) + '

'); targetWin.document.close(); } } return false; }; window.__wiowResetShareOptions = async function(win){ if (!wiowCanAdminNext || !window.__wiowLastShareOptionsContext || !window.__wiowLastShareOptionsContext.row) return false; var ctx = window.__wiowLastShareOptionsContext; var row = ctx.row; var heading = ctx.heading || 'Share options'; var targetWin = win || ctx.win; try { renderShareOptionsLoadingWindow(targetWin, heading); var built = await buildShareImage(row, { force:true, reset:true }); var builtSquare = await buildShareSquareImage(row, built.cycle_image_url || '', built.poster_url || '', { force:true, reset:true }); if (!built || !built.image_url || !builtSquare || !builtSquare.image_url) throw new Error('Share build failed.'); window.__wiowLastShareOptionsContext = { row: row, heading: heading, win: targetWin }; renderShareOptionsWindow(targetWin, built.image_url, builtSquare.image_url, built.share_url || row.getAttribute('data-share-page') || '', heading); } catch(err) { if (targetWin && !targetWin.closed) { var msg = (err && err.message) ? err.message : 'Could not build main combo.'; targetWin.document.open(); targetWin.document.write('

Could not build main combo

' + escapeHtml(msg) + '

'); targetWin.document.close(); } } return false; }; // Unified capture-phase share handler. Chrome incognito can allow the visual // pointer animation while another script prevents the later bubbling click // handler from ever running. Handle all top-level share buttons here first. document.addEventListener('click', async function(e){ var targetEl = e.target && e.target.nodeType === 1 ? e.target : (e.target && e.target.parentElement ? e.target.parentElement : null); var btn = targetEl && targetEl.closest ? targetEl.closest('.wiow-share-btn') : null; if (!btn) return; // Ignore the Audience modal "Rate" button (it also has wiow-share-btn class in your CSS usage) if (btn.hasAttribute('data-wiow-audience-open')) return; var row = btn.closest('[data-wiow-share="1"], .wiow-share-row'); if (!row) return; var platform = btn.getAttribute('data-platform'); // Public top-level controls must work even when AJAX generation or membership-gated data is unavailable. // Options still uses the full image-builder path below. if (platform === 'x' || platform === 'link') { e.preventDefault(); e.stopPropagation(); var quickStatus = row.querySelector('.wiow-share-status'); var quickUrl = btn.getAttribute('data-copy-url') || row.getAttribute('data-share-page') || row.getAttribute('data-post-url') || wiowShareFallbackUrl(row); if (!quickUrl) { if (quickStatus) quickStatus.textContent = 'No share URL available.'; return; } if (platform === 'x') { openPopup(btn.getAttribute('href') || btn.getAttribute('data-wiow-x-intent') || wiowShareXIntentUrl(row)); if (quickStatus) quickStatus.textContent = ''; return; } if (quickStatus) quickStatus.textContent = 'Copying link…'; var copiedQuick = await wiowCopyShareText(quickUrl); var quickLabel = btn.querySelector('.wiow-share-btn__label'); var quickOriginal = quickLabel ? quickLabel.textContent : 'Copy link'; if (copiedQuick) { if (quickStatus) quickStatus.textContent = 'Link copied.'; if (quickLabel) { quickLabel.textContent = 'Copied!'; window.setTimeout(function(){ quickLabel.textContent = quickOriginal || 'Copy link'; }, 1500); } } else { if (quickStatus) quickStatus.textContent = 'Could not copy link.'; } return; } e.preventDefault(); var previewWin = null; if (platform === 'copy') { previewWin = openShareOptionsWindow(); var preloadKind = (row.getAttribute('data-share-kind') || 'critics').trim().toLowerCase(); var preloadHeading = (preloadKind === 'audience' || preloadKind === 'audience-teaser' || preloadKind === 'audience-question') ? 'Audience share options' : ((preloadKind === 'ratings' || preloadKind === 'ratings-admin' || preloadKind === 'ratings-question') ? 'Ratings share options' : 'Critic share options'); renderShareOptionsLoadingWindow(previewWin, preloadHeading); } var statusEl = row.querySelector('.wiow-share-status'); if (statusEl) statusEl.textContent = (platform === 'link') ? 'Copying link…' : 'Preparing share…'; try { var publicShareUrl = wiowShareFallbackUrl(row); var publicPostTitle = (row.getAttribute('data-post-title') || '').trim(); if (!publicPostTitle) publicPostTitle = 'this'; var publicShareKind = (row.getAttribute('data-share-kind') || 'critics').trim().toLowerCase(); var publicUpperTitle = publicPostTitle.toUpperCase(); var publicLineTwo = (publicShareKind === 'audience' || publicShareKind === 'audience-teaser' || publicShareKind === 'audience-question') ? 'See what the audience is saying.' : ((publicShareKind === 'ratings' || publicShareKind === 'ratings-admin' || publicShareKind === 'ratings-question') ? 'See the Worth it or Woke score.' : 'See what sane critics say.'); var publicBaseText = 'Is ' + publicUpperTitle + ' Worth it or Woke?\n\n' + publicLineTwo + '\n\nFollow @worthitorwoke for more.'; // Public top-level X and Copy Link controls should not depend on AJAX image generation. // The share URL itself carries the OG/Twitter metadata; scrapers can generate/fetch the image from that URL. if ((platform === 'x' || platform === 'link') && publicShareUrl) { if (platform === 'link') { var copiedPublicLink = await wiowCopyShareText(publicShareUrl); var publicLabel = btn.querySelector('.wiow-share-btn__label'); var publicOriginalLabel = publicLabel ? publicLabel.textContent : ''; if (copiedPublicLink) { if (statusEl) statusEl.textContent = 'Link copied.'; if (publicLabel) { publicLabel.textContent = 'Copied!'; window.setTimeout(function(){ publicLabel.textContent = publicOriginalLabel || 'Copy link'; }, 1500); } } else { if (statusEl) statusEl.textContent = 'Could not copy link.'; } return; } openPopup('https://twitter.com/intent/tweet?text=' + encodeURIComponent(publicBaseText) + '&url=' + encodeURIComponent(publicShareUrl)); if (statusEl) statusEl.textContent = ''; return; } var built; var builtSquare = null; if (platform === 'copy') { // Build the landscape first so it chooses exactly one featured/gallery cycle image, // then pass that same image to the square builder. This prevents two square // outputs or mismatched gallery states in the Share Options window. built = await buildShareImage(row, { force:true }); builtSquare = await buildShareSquareImage(row, built.cycle_image_url || '', built.poster_url || '', { force:true }); if (!built || !built.image_url) { throw new Error('Landscape share build failed.'); } if (!builtSquare || !builtSquare.image_url) { throw new Error('Square share build failed.'); } } else { built = await buildShareImage(row); } var shareUrl = built.share_url; var postUrl = (row.getAttribute('data-post-url') || '').trim() || shareUrl; var postTitle = (row.getAttribute('data-post-title') || '').trim(); if (!postTitle) postTitle = 'this'; var shareKind = (row.getAttribute('data-share-kind') || 'critics').trim().toLowerCase(); var upperTitle = postTitle.toUpperCase(); var lineTwo = (shareKind === 'audience' || shareKind === 'audience-teaser' || shareKind === 'audience-question') ? 'See what the audience is saying.' : ((shareKind === 'ratings' || shareKind === 'ratings-admin' || shareKind === 'ratings-question') ? 'See the Worth it or Woke score.' : 'See what sane critics say.'); var baseText = 'Is ' + upperTitle + ' Worth it or Woke?\n\n' + lineTwo + '\n\nFollow @worthitorwoke for more.'; var textWithUrl = baseText + '\n\n' + shareUrl; var postTextWithUrl = baseText + '\n\n' + postUrl; var encodedUrl = encodeURIComponent(shareUrl); var encodedBaseText = encodeURIComponent(baseText); var encodedTextWithUrl = encodeURIComponent(textWithUrl); if (platform === 'link') { var copiedLink = await wiowCopyShareText(shareUrl); var label = btn.querySelector('.wiow-share-btn__label'); var originalLabel = label ? label.textContent : ''; if (copiedLink) { if (statusEl) statusEl.textContent = 'Link copied.'; if (label) { label.textContent = 'Copied!'; window.setTimeout(function(){ label.textContent = originalLabel || 'Copy link'; }, 1500); } } else { if (statusEl) statusEl.textContent = 'Could not copy link.'; } return; } if (platform === 'x'){ // X gets the URL through the intent URL parameter, so do not also duplicate it in the tweet text. openPopup('https://twitter.com/intent/tweet?text=' + encodedBaseText + '&url=' + encodedUrl); } else if (platform === 'facebook'){ // Facebook sharing has been intentionally removed from this plugin flow. if (statusEl) statusEl.textContent = 'Facebook sharing is currently disabled.'; } else if (platform === 'copy'){ var heading = (shareKind === 'audience' || shareKind === 'audience-teaser' || shareKind === 'audience-question') ? 'Audience share options' : ((shareKind === 'ratings' || shareKind === 'ratings-admin' || shareKind === 'ratings-question') ? 'Ratings share options' : 'Critic share options'); window.__wiowLastShareOptionsContext = { row: row, heading: heading, win: previewWin }; var shown = renderShareOptionsWindow(previewWin, built.image_url, (builtSquare ? builtSquare.image_url : ''), shareUrl, heading); if (!shown) { var copied = false; if (navigator.clipboard && window.isSecureContext && navigator.clipboard.writeText){ try { await navigator.clipboard.writeText(shareUrl); copied = true; } catch (copyErr) {} } if (!copied) { var ta = document.createElement('textarea'); ta.value = shareUrl; ta.setAttribute('readonly', 'readonly'); ta.style.position = 'fixed'; ta.style.opacity = '0'; document.body.appendChild(ta); ta.focus(); ta.select(); ta.setSelectionRange(0, ta.value.length); copied = !!document.execCommand('copy'); ta.remove(); } } } if (statusEl) statusEl.textContent = (platform === 'copy') ? 'Ready.' : ''; } catch(err){ if (previewWin && !previewWin.closed) { previewWin.close(); } if (statusEl) statusEl.textContent = (err && err.message) ? err.message : 'Could not share.'; } }, true); })();