1<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"><link href="/app-icons/apple-touch-icon.png" rel="apple-touch-icon"><link href="/app-icons/apple-touch-icon-152x152.png" rel="apple-touch-icon" sizes="152x152"><link href="/app-icons/apple-touch-icon-167x167.png" rel="apple-touch-icon" sizes="167x167"><link href="/app-icons/apple-touch-icon-180x180.png" rel="apple-touch-icon" sizes="180x180"><link href="/app-icons/icon-hires.png" rel="icon" sizes="192x192"><link href="/app-icons/icon-normal.png" rel="icon" sizes="128x128"><link href="https://www.flicks.co.uk/member/login/" rel="canonical"><title>Sign in to Flicks</title><meta name="description" property="description" content="Get to your watchlist and membership"><meta name="og:site_name" property="og:site_name" content="Flicks"><meta name="og:title" property="og:title" content="Sign in to Flicks"><meta name="og:description" property="og:description" content="Get to your watchlist and membership"><meta name="twitter:card" property="twitter:card" content="summary_large_image"><meta name="twitter:site" property="twitter:site" content="@thisisflicksuk"><meta name="twitter:title" property="twitter:title" content="Sign in to Flicks"><meta name="twitter:description" property="twitter:description" content="Get to your watchlist and membership"><meta name="twitter:image" property="twitter:image" content="https://www.flicks.co.uk/img/og/flicks-og.png"><link rel="shortcut icon" href="/favicon.svg?v= 2085"><meta name="apple-itunes-app" content="app-id=338053302, affiliate-data=pt=310696&ct=smart-banner&mt=8"> 2 <link rel="alternate" hreflang="en-AU" href="https://www.flicks.com.au/member/login/"> 3 <link rel="alternate" hreflang="en-NZ" href="https://www.flicks.co.nz/member/login/"> 4 <link rel="alternate" hreflang="en-GB" href="https://www.flicks.co.uk/member/login/"> 5 <link rel="alternate" hreflang="en-US" href="https://www.flicks.us/member/login/"> 6 <link rel="alternate" hreflang="x-default" href="https://www.flicks.us/member/login/"> 7 <link rel="stylesheet" href="//use.typekit.net/xbf4ygq.css"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap"><link rel="stylesheet" href="/styles.min.css?v=2085">
7<link rel="manifest" href="/manifest.json"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="apple-mobile-web-app-title" content="Flicks">
7<script>var defaultAlertCloseTime = 5000 //milli seconds 8var distance_unit = "mi"; 9window.__APP_CONFIG = Object.assign({}, window.__APP_CONFIG, { 10 googleMapsApiKey: "AIzaSyA_tARuEqSbMoB7D9CPgWyWQj-Qd7DGEQA", 11 googleMapsMapId: "d95d7dbe302f43564addc05e" 12}); 13</script>
13<script>if (typeof Cookiebot == "undefined") 14 var cookie_ok = false 15else 16 var cookie_ok = Cookiebot.consented 17 18 window.addEventListener('CookiebotOnAccept', CookiebotChangeEventHandler, false) 19 window.addEventListener('CookiebotOnDecline', CookiebotChangeEventHandler, false) 20 21function CookiebotChangeEventHandler(e) { 22 cookie_ok = Cookiebot.consented 23 if (typeof googletag !== "undefined") { 24 googletag.pubads().setPrivacySettings({nonPersonalizedAds: !cookie_ok}) 25 } 26}</script>
26<script>var ads_provider = null; 27var screenW = window.matchMedia('screen and (min-width: 971px)').matches ? 'desktop' : 'mobile';</script>
27<script>
vendor: 328 bytes, lines 27-31
27(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 28new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 29j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 30'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 31})(window,document,'script','dataLayer', '
31GTM-PK47FVBM
vendor: 3 bytes, line 31
31');
31</script>
31</head><body>
vendor: 67 bytes, line 31
31<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
31GTM-PK47FVBM
vendor: 82 bytes, line 31
31" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
31<div id="svg-sprite-container" style="display:none"></div>
31<script>(function(){var c=document.getElementById('svg-sprite-container');if(c){fetch('/sprite.svg').then(function(r){return r.text()}).then(function(s){c.innerHTML=s}).catch(function(e){console.warn('Sprite load failed:',e)})}})();</script>
31<div id="wallpaper-container"><main><div><div class="user-login"><div class="container--v5 container--v5-forms"><div class="container--v5__inner"><div class="user-join__inner"><div class="user-join__flicks-logo"><a href="/"><svg><use xlink:href="#flickslogored"></use></svg></a></div><div class="heading__outer"><h1 class="cognito-title heading-1">Sign in or create an account</h1></div><p class="cognito-subtext">Create watchlists and set your favourite cinemas.</p><div class="medium-divider medium-divider--smaller-mobile"></div><form class="form form--login js-only-one-submission" action="/member/login-otp/" method="POST"><div class="form__group form__group--login"><p class="form__label">Email</p><input class="form__input" type="email" name="email" id="login-email" placeholder="[email protected]" autocomplete=" email" inputmode="email" title="Houston, we have a typo. Try that email again." required><input class="form__input-honey" type="text" name="url"><input class="form__input--hidden" type="hidden" name="source" value="web"></div><div class="form__submit-wrapper"><button class="form__submit-button" type="submit"><span class="submit-button__value">Sign in</span><span class="submit-button__spinner is-hidden"><img src="/img/white-spinner.svg"></span></button></div></form><p class="user-login__text-separator">Or do it with...</p><ul class="member-nav__socials"><li><a class="btn--social btn--social-google self" href="https://auth.weareflicks.co/oauth2/authorize?identity_provider=Google&redirect_uri=https://www.flicks.co.uk/member/sso_verify/&response_type=code&client_id=28697se2phftt6d1ppn1put4na&scope=email+openid+profile+aws.cognito.signin.user.admin&prompt=select_account"><svg><use xlink:href="#google"></use></svg><span>Google</span></a></li><li><a class="btn--social btn--social-apple self" href="https://auth.weareflicks.co/oauth2/authorize?identity_provider=SignInWithApple&redirect_uri=https://www.flicks.co.uk/member/sso_verify/&response_type=code&client_id=28697se2phftt6d1ppn1put4na&scope=email+openid+profile+aws.cognito.signin.user.admin"><svg><use xlink:href="#apple"></use></svg><span>Apple</span></a></li><li><a class="btn--social btn--social-facebook self" href="https://auth.weareflicks.co/oauth2/authorize?identity_provider=Facebook&redirect_uri=https://www.flicks.co.uk/member/sso_verify/&response_type=code&client_id=28697se2phftt6d1ppn1put4na&scope=email+openid+profile+aws.cognito.signin.user.admin"><img class="facebook-rounded" src="/img/facebook-rounded.png" alt=""><span>Facebook</span></a></li></ul><p class="join-legal">By continuing you agree to our <a href="https://go.weareflicks.co/terms">terms & conditions</a> and <a href="https://go.weareflicks.co/privacy">privacy policy</a></p><p class="join-about"><a href="https://go.weareflicks.co/membership">About Flicks membership</a> | <a href="https://go.weareflicks.co/member-changes">Weâve gone passwordless<a></p></div><div class="empty-space--full"></div></div></div></div></div></main></div><div class="modal search-nav"><div class="container"><div class="search-nav__inner"><div class="search-nav__header"><div class="search-nav__header__inner"><button class="js--closeSearchNav" title="close"><svg><use xlink:href="#arrowleft"></use></svg></button><form class="search-nav__search js--searchNavForm" action="/search/"><input type="text" name="q" placeholder="What do you want to watch?"><input class="btn btn--brick btn--brick--red" type="submit" value="Search"></form></div></div><div class="search-nav__content"><div class="js--searchNavSuggest"><div class="search-nav__content__inner search-nav__content__inner--suggestions"><div class="search-nav__top-section"><p class="search-nav__suggestions-heading">Trending</p><ul class="search-nav__trending"><li class="search-nav__trending-item"><a href="/movie/digger/"><div class="search-nav__trending-skeleton"></div><img src="//d1478j0kge9vfg.cloudfront.net/homepage/20261001232802-PyGljaiRVYw921EQDbfORLosGnrHf300_300x442.jpg" loading="lazy" onload="this.closest('.search-nav__trending-item').classList.add('is-loaded')" onerror="this.closest('.search-nav__trending-item').classList.add('is-loaded')"></a></li><li class="search-nav__trending-item"><a href="/movie/verity/"><div class="search-nav__trending-skeleton"></div><img src="//d1478j0kge9vfg.cloudfront.net/homepage/20261001232941-A2sJxU8TiF9xp3oJYPie0dynw8wZBwmv_300x442.jpg" loading="lazy" onload="this.closest('.search-nav__trending-item').classList.add('is-loaded')" onerror="this.closest('.search-nav__trending-item').classList.add('is-loaded')"></a></li><li class="search-nav__trending-item"><a href="/movie/heart-of-the-beast/"><div class="search-nav__trending-skeleton"></div><img src="//d1478j0kge9vfg.cloudfront.net/homepage/20260923203426-qkciHKeIybCT3IokxNtpveQ3233XAZEe_300x442.jpg" loading="lazy" onload="this.closest('.search-nav__trending-item').classList.add('is-loaded')" onerror="this.closest('.search-nav__trending-item').classList.add('is-loaded')"></a></li><li class="search-nav__trending-item"><a href="/movie/resident-evil-2026/"><div class="search-nav__trending-skeleton"></div><img src="//d1478j0kge9vfg.cloudfront.net/homepage/20260916215702-MEF6kBw5wMZDSuutsAaFGP4BWnRcuEUv_300x442.jpg" loading="lazy" onload="this.closest('.search-nav__trending-item').classList.add('is-loaded')" onerror="this.closest('.search-nav__trending-item').classList.add('is-loaded')"></a></li><li class="search-nav__trending-item"><a href="/movie/practical-magic-2/"><div class="search-nav__trending-skeleton"></div><img src="//d1478j0kge9vfg.cloudfront.net/homepage/20260909213847-fTtKUU4nkVdPXoukIWauecIcYSObb5hU_300x442.webp" loading="lazy" onload="this.closest('.search-nav__trending-item').classList.add('is-loaded')" onerror="this.closest('.search-nav__trending-item').classList.add('is-loaded')"></a></li><li class="search-nav__trending-item"><a href="/movie/coyote-vs-acme/"><div class="search-nav__trending-skeleton"></div><img src="//d1478j0kge9vfg.cloudfront.net/homepage/20260916215849-djxw93ueLFWToPluA1g7ilkCBW4bJ8mV_300x442.jpg" loading="lazy" onload="this.closest('.search-nav__trending-item').classList.add('is-loaded')" onerror="this.closest('.search-nav__trending-item').classList.add('is-loaded')"></a></li><li class="search-nav__trending-item"><a href="/movie/spider-man-brand-new-day/"><div class="search-nav__trending-skeleton"></div><img src="//d1478j0kge9vfg.cloudfront.net/homepage/20260729202816-VP4dB9XOEkwR0nlz4IJo50jwmKn5ShDG_300x442.jpg" loading="lazy" onload="this.closest('.search-nav__trending-item').classList.add('is-loaded')" onerror="this.closest('.search-nav__trending-item').classList.add('is-loaded')"></a></li><li class="search-nav__trending-item"><a href="/movie/the-odyssey-2026/"><div class="search-nav__trending-skeleton"></div><img src="//d1478j0kge9vfg.cloudfront.net/homepage/20260715202830-MITWNZaUc3uwgvkM1RCkaN4qjgq1fSmc_300x442.jpg" loading="lazy" onload="this.closest('.search-nav__trending-item').classList.add('is-loaded')" onerror="this.closest('.search-nav__trending-item').classList.add('is-loaded')"></a></li><li class="search-nav__trending-item"><a href="/movie/runner/"><div class="search-nav__trending-skeleton"></div><img src="//d1478j0kge9vfg.cloudfront.net/homepage/20260909214003-GhHW72ulWxf7NS8QvR5QRdi7JA4YgtiG_300x442.jpg" loading="lazy" onload="this.closest('.search-nav__trending-item').classList.add('is-loaded')" onerror="this.closest('.search-nav__trending-item').classList.add('is-loaded')"></a></li><li class="search-nav__trending-item"><a href="/movie/fall-2/"><div class="search-nav__trending-skeleton"></div><img src="//d1478j0kge9vfg.cloudfront.net/homepage/20260902212716-nuy6hU9dBjN1w0WMpDFkkYi2TU8QAY5V_300x442.webp" loading="lazy" onload="this.closest('.search-nav__trending-item').classList.add('is-loaded')" onerror="this.closest('.search-nav__trending-item').classList.add('is-loaded')"></a></li></ul></div><div class="search-nav__bottom-scroll"><p class="search-nav__suggestions-heading">Search suggestions</p><ul class="search-nav__suggestions"><li><a href="/now-playing/">Movies in Cinemas</a></li><li><a href="/cinemas/">Cinemas</a></li><li><a href="/coming-soon/">Coming Soon</a></li><li><a href="/trailers/">New Trailers</a></li><li><a href="/discover/">Opinion</a></li></ul></div></div></div><div class="search-nav__results js--searchNavResults js--addToWatchlistWrapper"></div></div></div></div></div>
31<div class="modal modal--v5 modal--opacity member-nav"><div class="modal__inner"><div class="modal__content"><button class="modal__btn-close member-nav__btn-close js--closeMemberNav" title="close"><svg><use xlink:href="#close"></use></svg></button><div class="member-nav__form member-nav__form--login member-nav__form--showing"><span class="page__header__heading">Sign in</span><div class="login-join"><p class="member-nav__sign-in-description">Get to your watchlist.</p><ul class="member-nav__socials"><li><a class="btn--social btn--social-facebook" href="/member/login/facebook?source=web"><svg><use xlink:href="#facebook"></use></svg><span>sign in with Facebook</span></a></li><li><a class="btn--social btn--social-google" href="/member/login/google?source=web"><svg><use xlink:href="#google"></use></svg><span>sign in with Google</span></a></li><li><a class="btn--social btn--social-apple" href="/member/login/apple?source=web"><svg><use xlink:href="#apple"></use></svg><span>sign in with Apple</span></a></li></ul><p class="member-nav__sign-in-title">Or sign in with your email</p><form class="member-nav__sign-in-form" action="/member/login/" method="POST"><label class="label" for="login-email">Email Address</label><input class="input-text input--block" type="email" name="email" id="login-email" placeholder="Email" required><label class="label" for="login-password">Password</label><input class="input-text input--block" type="password" id="login-password" name="password" placeholder="Password" required><input type="hidden" name="source" value="web"><input class="input-submit btn btn--brick btn--brick--red input--block" type="submit" value="Sign in"></form></div><p class="member-nav__switch-view">Donât have a Flicks account?<button class="js--memberNavFormJoin">Sign Up.</button></p><p class="member-nav__switch-view"><button class="js--memberNavFormPassword">I forgot my damn password.</button></p></div><div class="member-nav__form member-nav__form--join"><span class="page__header__heading">Join Flicks</span><div class="login-join"><p class="member-nav__sign-in-description">Keep track of the movies and show you want to see + get Flicks email updates.</p><ul class="member-nav__socials"><li><a class="btn--social btn--social-facebook" href="/member/login/facebook?source=web"><svg><use xlink:href="#facebook"></use></svg><span>sign up with Facebook</span></a></li><li><a class="btn--social btn--social-google" href="/member/login/google?source=web"><svg><use xlink:href="#google"></use></svg><span>sign up with Google</span></a></li><li><a class="btn--social btn--social-apple" href="/member/login/apple?source=web"><svg><use xlink:href="#apple"></use></svg><span>sign up with Apple</span></a></li></ul><p class="member-nav__sign-in-title">Or sign up with your email</p><form class="member-nav__sign-in-form" action="/member/join/" method="POST"><label class="label" for="join-email">Email Address</label><input class="input-text input--block" type="email" name="email" id="join-email" placeholder="Email" required><label class="label" for="join-password">Password</label><input class="input-text input--block" type="password" id="join-password" name="password" placeholder="Password" required><input type="hidden" name="source" value="web"><label class="label" for="join-full_name">Name</label><input class="input-text input--block" type="text" name="full_name" id="join-full_name" placeholder="Name"><input class="input-honey" type="text" name="url"><input class="input-submit btn btn--brick btn--brick--red input--block" type="submit" value="Sign up"><p>By signing up, you agree to our<a href="/page/termsconditions" target="_blank">terms & conditions</a>and<a href="/page/privacypolicy" target="_blank">privacy policy</a>.</p></form></div><p class="member-nav__switch-view">Already have a Flicks account?<button class="js--memberNavFormLogin">Sign in</button></p></div><div class="member-nav__form member-nav__form--password password-reset-form"><form class="form js--forgotPassword-form" action="/member/password/forgot/" method="POST"><div class="form__group form__group--member-edit"><p>Confirm below that you want to reset your password, and weâll send a link to reset it.</p><input class="form__input" type="hidden" name="email" id="forgot-email" placeholder="Email" value=""><input class="form__input" type="hidden" name="is_member" id="forgot-email-member" value="1"></div><div class="form__submit-wrapper"><input class="form__submit-button" type="submit" value="Confirm"></div></form><p class="member-nav__switch-view">
31Donât have a Flicks account?<button class="js--memberNavFormJoin">Sign Up</button></p><p class="member-nav__switch-view">Remembered your password?<button class="js--memberNavFormLogin">Sign In</button></p></div><div class="member-nav__form member-nav__form--username"><span class="page__header__heading">Your username</span><p>To post ratings/reviews we need a username. This is what will appear next to your ratings and reviews.</p><form class="member-nav__sign-in-form" action="" method="POST"><label class="label" for="username">Username</label><input class="input-text input--block" type="text" name="username" placeholder="Username"><input class="input-submit btn btn--brick btn--brick--red input--block" type="submit" value="Submit"></form><p class="member-nav__switch-view"><button class="js--memberNavFormLogin">I don't know, create one for me</button></p></div><div class="member-nav__form member-nav__form--delete delete-account-form"></div></div></div></div><div class="modal trailer-modal theme--dark"><button class="trailer-modal__close js--closeTrailer" title="close"><div class="js--closeTrailer"><svg><use xlink:href="#close"></use></svg></div></button><div class="js--loadTrailer js--addToWatchlistWrapper js--voteWrapper"></div></div><div class="modal movie-modal js-movie-modal theme--dark"><button class="movie-modal__close js--close-movie-popup" title="close"><div class="js--close-movie"><svg><use xlink:href="#close"></use></svg></div></button><div class="movie-modal__content js-movie-modal__content"></div></div><div class="modal modal--opacity js-modal" id="social-modal"><div class="modal__inner"><div class="modal__content"><button class="modal__btn-close member-nav__btn-close js--closeModal" title="close"><svg><use xlink:href="#close"></use></svg></button><span class="page__header__heading share-display padding-spacing-more-bottom">Share</span><div class="padding-spacing-more-bottom"><share-button class="share--popupTrigger"></share-button></div></div></div></div><div class="review-form"><div class="modal watchlist-popup modal--opacity"><div class="modal__inner"><div class="modal__content"><div>You have to sign in first<button class="btn btn--block btn--brick btn--brick--red review-form__submit">Sign-in</button></div></div></div></div></div><button class="js-pass-movie-data js-check-lists-status js--openModal" id="wild-flicks-watchlist-trigger" type="button" style="display:none" aria-hidden="true" tabindex="-1" data-list="movie" data-slug="" data-on="1" data-user="" data-username="" data-title="" data-modal-id="user-toggle-lists" data-preselected="watchlist"></button><div class="modal rewards-popup modal--opacity js-modal"><div class="modal__inner"><div class="modal__content"><div> <div class="left-wrapper"><button class="watchlist-btn watchlist-on-btn"><svg><use xlink:href="#watchlist-tick"></use></svg></button><span class="rewards-popup__dynamic-content"></span></div><div class="right-wrapper"><button class="modal__btn-close member-nav__btn-close js--closeReviewForm js--closeModal" title="close"><svg><use xlink:href="#close"></use></svg></button></div></div></div></div></div><div class="modal modal--v5 modal--opacity js-modal" id="social-modal-v5"><div class="modal__inner"><div class="modal__content"><button class="modal__btn-close member-nav__btn-close js--closeModal" title="close"><svg><use xlink:href="#close"></use></svg></button><div class="modal__heading">Share</div><share-button class="share--popupTrigger"></share-button></div></div></div><div class="js-times-streaming-popup streaming-popup modal modal--v5 modal--opacity js-modal" id="times-streaming-modal"><div class="modal__inner"><div class="modal__content"><button class="modal__btn-close js--closeModal" title="close"><svg><use xlink:href="#close"></use></svg></button></div><div class="thin-divider thin-divider--smaller divider--streaming-popup"></div></div></div><div class="list-notification is-hidden"><svg width="430" height="430" viewBox="0 0 430 430" fill="none" xmlns="http://www.w3.org/2000/svg"> 32 <path d="M215 0C96.2663 0 0 96.2663 0 215C0 333.734 96.2663 430 215 430C333.734 430 430 333.734 430 215C430 96.2663 333.734 0 215 0ZM197.083 304.583L107.5 209.643L132.565 184.022L196.6 250.959L314.348 125.417L340.417 150.554L197.083 304.583Z" fill="#25262B"/> 33</svg><p class="list-notification__text">Done.</p></div><!--[if lt IE 10]><div class="modal modal--opacity js-modal js--autoModal modal--displaying"><div class="modal__inner"><div class="modal__content"><h2 class="page__header__heading padding-spacing-bottom">SORRY TO SAY, FLICKS NO LONGER SUPPORTS IE9</h2><p class="padding-spacing-bottom">Please update to<a href="https://www.microsoft.com/windows/microsoft-edge" target="_blank">Microsoft Edge</a>, or another browser.</p><p class="padding-spacing-bottom">Or, if you want to stick it out with Internet Explorer, please update your browser to the latest version<span class="inline-block">(<a href="https://support.microsoft.com/help/4028118/windows-run-the-latest-version-of-internet-explorer-11" target="_blank">IE 11</a>)</span></p></div></div></div><![endif]-->
33<script src="https://unpkg.com/@trevoreyre/autocomplete-js"></script>
33<script src="https://cdn.jwplayer.com/libraries/erspRbQ1.js"></script>
vendor: 63 bytes, line 33
33<script src="https://www.google.com/recaptcha/api.js"></script>
33<script src="/main.min.js?v=2085" async></script>
33<script>(function () { 34 if (typeof window === 'undefined') return; 35 var lastSlug = null; 36 var lastList = null; 37 var lastAt = 0; 38 var username = ""; 39 40 function escapeAttr(value) { 41 return String(value || '') 42 .replace(/&/g, '&') 43 .replace(/"/g, '"') 44 .replace(/</g, '<') 45 .replace(/>/g, '>'); 46 } 47 48 function posterFallback(type, slug) { 49 return 'https://cdn.flicks.co.nz/UK/' + type + '/' + slug + '/poster/300x442/img.jpg'; 50 } 51 52 function emptyMarkup() { 53 var link = document.querySelector('.js--wl-count-text'); 54 var href = link && link.closest('a') ? link.closest('a').getAttribute('href') : '/member/dashboard/'; 55 return '<li class="mobile-nav__watchlist-poster mobile-nav__watchlist-poster--empty">' + 56 '<a class="mobile-nav__link mobile-nav__link--secondary" href="' + escapeAttr(href) + '">' + 57 'You have nothing on your watchlist, get adding</a></li>'; 58 } 59 60 function posterMarkup(detail) { 61 var slug = String(detail.slug || ''); 62 var type = String(detail.type || 'movie'); 63 var title = String(detail.title || ''); 64 var poster = detail.poster || posterFallback(type, slug); 65 return '<li class="mobile-nav__watchlist-poster" data-wl-slug="' + escapeAttr(slug) + '">' + 66 '<a href="/' + escapeAttr(type) + '/' + escapeAttr(slug) + '/">' + 67 '<img src="' + escapeAttr(poster) + '" alt="' + escapeAttr(title) + '" loading="lazy" ' + 68 'onerror="this.onerror=null;this.src=\'/img/placeholders/poster-placeholder.jpg\';"></a></li>'; 69 } 70 71 function listPosterMarkup(detail) { 72 var slug = String(detail.slug || ''); 73 var type = String(detail.type || 'movie'); 74 var title = String(detail.title || ''); 75 var poster = detail.poster || posterFallback(type, slug); 76 return '<div class="user-list__poster" data-wl-slug="' + escapeAttr(slug) + '">' + 77 '<img src="' + escapeAttr(poster) + '" alt="' + escapeAttr(title) + '" loading="lazy" ' + 78 'onerror="this.onerror=null;this.src=\'/img/placeholders/poster-placeholder.jpg\';"></div>'; 79 } 80 81 function patchPosterLists(detail) { 82 if (!detail.slug) return; 83 document.querySelectorAll('.js--wl-posters').forEach(function (list) { 84 Array.prototype.slice.call(list.children).forEach(function (node) { 85 if (node.getAttribute('data-wl-slug') === String(detail.slug)) { 86 node.parentNode.removeChild(node); 87 } 88 }); 89 list.querySelectorAll('.mobile-nav__watchlist-poster--empty').forEach(function (node) { 90 node.parentNode.removeChild(node); 91 }); 92 if (detail.added) { 93 list.insertAdjacentHTML('afterbegin', posterMarkup(detail)); 94 } 95 while (list.children.length > 4) { 96 list.removeChild(list.lastElementChild); 97 } 98 if (!list.children.length) { 99 list.insertAdjacentHTML('beforeend', emptyMarkup()); 100 } 101 }); 102 } 103 104 function customListsHref() { 105 return username ? '/member/' + encodeURIComponent(username) + '/lists/' : '/member/dashboard/'; 106 } 107 108 function customListHref(listSlug) { 109 return username ? '/member/' + encodeURIComponent(username) + '/lists/' + encodeURIComponent(listSlug) + '/' : '/member/dashboard/'; 110 } 111 112 function ensureCustomListsSection() { 113 var section = document.querySelector('.js--wl-lists-section'); 114 if (section) return section; 115 116 var watchlistSection = document.querySelector('.js--wl-posters'); 117 watchlistSection = watchlistSection ? watchlistSection.closest('.mobile-nav__section') : null; 118 if (!watchlistSection) return null; 119 120 watchlistSection.insertAdjacentHTML('afterend', 121 '<div class="mobile-nav__section js--wl-lists-section">' + 122 '<a class="mobile-nav__link mobile-nav__link--primary mobile-nav__link--has-desc" href="' + escapeAttr(customListsHref()) + '">' + 123 '<span class="js--wl-lists-count" data-wl-list-count="1">All lists (1)</span>' + 124 '<svg class="svg-inline is-gray svg-arrow"><use xlink:href="#arrowright-white"></use></svg>' + 125 '</a>' + 126 '<div class="mobile-nav__submenu js--wl-lists-menu"></div>' + 127 '</div>' 128 ); 129 return document.querySelector('.js--wl-lists-section'); 130 } 131 132 function customListRowMarkup(detail) { 133 var list = String(detail.list || ''); 134 var name = String(detail.listName || list); 135 return '<li class="mobile-nav__submenu-item js--wl-list-row" data-wl-list="' + escapeAttr(list) + '">' + 136 '<a href="' + escapeAttr(customListHref(list)) + '" class="mobile-nav__link mobile-nav__link--secondary mobile-nav__link--all-watchlists">' + 137 '<div class="user-list__posters js--wl-list-posters" data-wl-list="' + escapeAttr(list) + '"></div>' + 138 '<span>' + escapeAttr(name) + '</span>' + 139 '</a>' + 140 '</li>'; 141 } 142 143 function updateCustomListCount(wasInserted) { 144 if (!wasInserted) return; 145 document.querySelectorAll('.js--wl-lists-count').forEach(function (node) { 146 var cur = parseInt(node.getAttribute('data-wl-list-count') || '1', 10); 147 if (isNaN(cur)) cur = 1; 148 var next = cur + 1;
149 node.setAttribute('data-wl-list-count', String(next)); 150 node.textContent = 'All lists (' + next + ')'; 151 }); 152 } 153 154 function patchCustomList(detail) { 155 var listSlug = String(detail.list || ''); 156 if (!listSlug || listSlug === 'watchlist') return; 157 158 var section = ensureCustomListsSection(); 159 if (!section) return; 160 var menu = section.querySelector('.js--wl-lists-menu'); 161 if (!menu) return; 162 163 var row = null; 164 Array.prototype.slice.call(menu.querySelectorAll('.js--wl-list-row')).some(function (node) { 165 if (node.getAttribute('data-wl-list') === listSlug) { 166 row = node; 167 return true; 168 } 169 return false; 170 }); 171 var inserted = false; 172 if (!row) { 173 menu.insertAdjacentHTML('afterbegin', customListRowMarkup(detail)); 174 row = null; 175 Array.prototype.slice.call(menu.querySelectorAll('.js--wl-list-row')).some(function (node) { 176 if (node.getAttribute('data-wl-list') === listSlug) { 177 row = node; 178 return true; 179 } 180 return false; 181 }); 182 inserted = true; 183 } 184 updateCustomListCount(inserted && detail.source === 'list-create'); 185 186 var posters = row ? row.querySelector('.js--wl-list-posters') : null; 187 if (!posters || !detail.slug) return; 188 Array.prototype.slice.call(posters.children).forEach(function (node) { 189 if (node.getAttribute('data-wl-slug') === String(detail.slug)) { 190 node.parentNode.removeChild(node); 191 } 192 }); 193 if (detail.added) { 194 posters.insertAdjacentHTML('afterbegin', listPosterMarkup(detail)); 195 } 196 while (posters.children.length > 4) { 197 posters.removeChild(posters.lastElementChild); 198 } 199 } 200 201 // Open the existing watchlist popup from a wild-flicks WC button. 202 // The WC dispatches `wild-flicks-open-watchlist` with the item's 203 // slug / type / title in detail. We update the seed trigger's 204 // data-* attrs and click it -- which reuses the same code paths 205 // an in-page watchlist button would (auth gate via data-user, 206 // list-state AJAX via .js-check-lists-status, modal open via 207 // .js--openModal). On submit the modal fires its own watchlist- 208 // changed events that the listener below picks up to sync the 209 // nav, and the WC's useWatchlist hook listens for the same 210 // event to flip card pill labels. 211 window.addEventListener('wild-flicks-open-watchlist', function (e) { 212 var detail = (e && e.detail) || {}; 213 var slug = detail.slug; 214 if (!slug) return; 215 var trigger = document.getElementById('wild-flicks-watchlist-trigger'); 216 if (!trigger) return; 217 // data-list mirrors the pug helper (always 'movie'). The 218 // modal's AJAX endpoint is slug-only -- doesn't differentiate 219 // movie vs tv. Pass type through anyway for downstream 220 // handlers that might branch on it. 221 trigger.setAttribute('data-slug', String(slug)); 222 trigger.setAttribute('data-title', String(detail.title || '')); 223 if (detail.type) trigger.setAttribute('data-content-type', String(detail.type)); 224 trigger.click(); 225 }); 226 227 window.addEventListener('wild-flicks-watchlist-changed', function (e) { 228 var detail = (e && e.detail) || {}; 229 var slug = detail.slug || null; 230 var list = detail.list || (detail.source === 'toggle' ? 'watchlist' : null); 231 var added = !!detail.added; 232 // De-dupe: WC fires for both toggle + list-edit on the same 233 // gesture in some flows; ignore a second event for the same 234 // slug within 1.5s of the first. 235 var now = Date.now(); 236 if (slug && slug === lastSlug && list === lastList && now - lastAt < 1500) return; 237 lastSlug = slug; 238 lastList = list; 239 lastAt = now; 240 if (list === 'watchlist') { 241 var nodes = document.querySelectorAll('.js--wl-count-text'); 242 nodes.forEach(function (node) { 243 var cur = parseInt(node.getAttribute('data-wl-count') || '0', 10); 244 if (isNaN(cur)) cur = 0; 245 var next = Math.max(0, cur + (added ? 1 : -1)); 246 node.setAttribute('data-wl-count', String(next)); 247 // Replace the trailing "(N)" â preserves whatever label 248 // precedes it ("Watchlist", "Your watchlist", etc.). 249 node.textContent = node.textContent.replace(/\(\d+\)/, '(' + next + ')'); 250 }); 251 patchPosterLists(detail); 252 } else { 253 patchCustomList(detail); 254 } 255 }); 256})();</script>
256<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a441e92ea8c79af3',t:'MTc5MDkyNTI3Mw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
256</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.