-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathscript.min.js
1 lines (1 loc) · 9.19 KB
/
script.min.js
1
function scrollToTop(){const c=document.documentElement.scrollTop||document.body.scrollTop;c>0&&(window.requestAnimationFrame(scrollToTop),window.scrollTo(0,c-c/8))}const htmlBody=document.querySelector("html, body"),results=document.querySelector("#results"),scrollToResults=()=>{const resultsTop=results.offsetTop;htmlBody.scrollTo({top:resultsTop,behavior:"smooth"})},searchInput=document.getElementById("search-input"),searchButton=document.getElementById("search-button"),resultsContainer=document.getElementById("results"),corsProxy="https://corsproxy.io/?";function optimisedImageUrl(url){return url.replace("._V1_.","._V1_QL75_UX160_.")}function fetchAndShow(){const query=encodeURIComponent(searchInput.value),url=`${corsProxy}https://v3.sg.media-imdb.com/suggestion/x/${query}.json`;Pace.restart(),fetch(url).then(response=>response.json()).then(data=>{const results=data.d;resultsContainer.innerHTML="",results.forEach(result=>{if(result.i&&("movie"===result.qid||"tvSeries"===result.qid)){const resultElem=document.createElement("div");resultElem.classList.add("result"),resultElem.setAttribute("IMDB",result.id);let imageAndInfo="";"movie"===result.qid&&result.i?imageAndInfo=`<a onClick="setUrl(this); return setVideo(this);" url="imdb=${result.id}&type=movie&title=${result.l.replace(/ /g,"_")}" isWebSeries="false" title="${result.l}" class="links" IMDB="${result.id}" href="https://multiembed.mov/directstream.php?video_id=${result.id}" target="_blank">\n <img alt="${result.l}" src="${optimisedImageUrl(result.i.imageUrl)}">\n <div class="info">\n <h3>${result.l}</h3>\n <p>${result.s}</p>\n </div>\n </a>`:"tvSeries"===result.qid&&result.i&&(imageAndInfo=`<a onClick="setUrl(this); return setVideo(this);" url="imdb=${result.id}&season=1&episode=1&title=${result.l.replace(/ /g,"_")}" IMDB="${result.id}" title="${result.l}" isWebSeries="true" class="links" href="https://multiembed.mov/directstream.php?video_id=${result.id}&s=1&e=1" target="_blank">\n <img alt="${result.l}" src="${optimisedImageUrl(result.i.imageUrl)}">\n <div class="info">\n <h3>${result.l}</h3>\n <p>${result.s}</p>\n </div>\n </a>`),resultElem.innerHTML=imageAndInfo,resultsContainer.appendChild(resultElem)}})})}function setAll(imdb,title,season,episode,type){if(imdb&&title&&!season&&!episode&&type){let a=document.createElement("a");a.setAttribute("onClick","setUrl(this); return setVideo(this);"),a.setAttribute("url",`imdb=${imdb}&type=movie&title=${title.replace(/ /g,"_")}`),a.setAttribute("isWebSeries","false"),a.setAttribute("title",title),a.setAttribute("class","links"),a.setAttribute("IMDB",imdb),a.setAttribute("href"," https://multiembed.mov/directstream.php?video_id="+imdb),a.setAttribute("target","_blank"),a.click()}else if(imdb&&title&&episode&&!type){let a=document.createElement("a");a.setAttribute("onClick","setUrl(this); return setVideo(this);"),console.log("season setall",season,"episode",episode),a.setAttribute("url",`imdb=${imdb}&season=${season}&episode=${episode}`),a.setAttribute("isWebSeries","true"),a.setAttribute("title",title),a.setAttribute("class","links"),a.setAttribute("IMDB",imdb),a.setAttribute("href",`https://multiembed.mov/directstream.php?video_id=${imdb}&s=${season}&e=${episode}`),a.setAttribute("target","_blank"),a.click()}}const fetchTitle=async imdbID=>{const url=`${corsProxy}https://v3.sg.media-imdb.com/suggestion/x/${imdbID}.json`;try{const response=await fetch(url),data=await response.json(),title=data.d[0].l;return title}catch(error){console.error(error)}};function setUrl(element){let search=element.getAttribute("url");window.history.replaceState({},"",`?${search.replace(/%20/g,"+")}`)}function fillSearchInput(){let searchParams=new URLSearchParams(window.location.search),search=searchParams.get("search"),season=searchParams.get("season"),episode=searchParams.get("episode"),imdb=searchParams.get("imdb"),type=searchParams.get("type");if(!search||season||episode||imdb)!imdb||!type||search||episode||season?imdb&&!search&&episode&&season&&(console.log("season",season,"episode",episode),fetchTitle(imdb).then(title=>setAll(imdb,title,season,episode,type)).catch(error=>console.error(error)),console.log("season",season,"episode",episode)):fetchTitle(imdb).then(title=>setAll(imdb,title,season,episode,type)).catch(error=>console.error(error));else{search=search.replace(/\+/g,"%20");const searchInput=document.querySelector("#search-input");searchInput.value=search,fetchAndShow()}}function updateURL(input){let search=input.value;search?window.history.replaceState({},"",`?search=${encodeURIComponent(search).replace(/%20/g,"+")}`):window.history.replaceState({},"",window.location.pathname)}function highlightCards(){let searchParams,imdb_id=new URLSearchParams(window.location.search).get("imdb");try{document.querySelectorAll(".result").forEach((function(card){card.className="result"})),document.querySelector(`div[IMDB=${imdb_id}]`).className="result hoverClass"}catch(error){}}let timer;function episodeHighlight(cssidentification="s1e1"){document.querySelectorAll(".episodes").forEach((function(episode){episode.className="episodes"})),document.querySelector(`.episodes[cssidentification='${cssidentification}']`).className="episodes selected"}function setVideo(element){const iframe=document.getElementById("iframe"),video=document.getElementById("video");iframe.src=element.getAttribute("href"),video.style.display="block";const webSeriesData=document.getElementById("webSeriesData"),tmdbApiKey="b6b677eb7d4ec17f700e3d4dfc31d005",imdbID=element.getAttribute("IMDB");if(Pace.restart(),scrollToTop(),window.dispatchEvent(new PopStateEvent("popstate")),"false"==element.getAttribute("isWebSeries")&&"links"==element.className&&(webSeriesData.innerHTML=""),""!==element.getAttribute("title")&&(document.title=element.getAttribute("title")),element.className.includes("episode")&&(episodeHighlight(element.getAttribute("cssidentification")),console.log("clicked")),"true"==element.getAttribute("isWebSeries")){async function printEpisodes(){const response=await fetch(`https://api.themoviedb.org/3/find/${imdbID}?api_key=${tmdbApiKey}&language=en-US&external_source=imdb_id`),data=await response.json(),showId=data.tv_results[0].id,seasonsData=await fetch(`https://api.themoviedb.org/3/tv/${showId}?api_key=${tmdbApiKey}&language=en-US`),seasonsDataJSON=await seasonsData.json(),numberOfSeasons=seasonsDataJSON.number_of_seasons;webSeriesData.innerHTML+="<h2>Seasons:</h2>";for(let seasonNumber=1;seasonNumber<=numberOfSeasons;seasonNumber++){webSeriesData.innerHTML+=`<h3>Season ${seasonNumber}:</h3><br>`;let episodeContainer=document.createElement("div");episodeContainer.classList.add("episode-container");let episodesData="";const episodesDataResponse=await fetch(`https://api.themoviedb.org/3/tv/${showId}/season/${seasonNumber}?api_key=${tmdbApiKey}&language=en-US`),episodesDataJSON=await episodesDataResponse.json();for(const episode of episodesDataJSON.episodes){const episodeNumber=episode.episode_number;let formatedEpisodeNumber=episodeNumber.toLocaleString("en-US",{minimumIntegerDigits:2,useGrouping:!1});episodesData+=`<a class="episodes" title="${seasonsDataJSON.name+": E"+formatedEpisodeNumber+". "+episode.name}" cssidentification="s${seasonNumber}e${episodeNumber}" url="imdb=${imdbID}&season=${seasonNumber}&episode=${episodeNumber}&title=${seasonsDataJSON.name.replace(/ /g,"_")+"_E"+formatedEpisodeNumber+"_"+episode.name.replace(/ /g,"_")}" onClick="event.preventDefault();setVideo(this);setUrl(this); " href="https://multiembed.mov/directstream.php?video_id=${imdbID}&s=${seasonNumber}&e=${episodeNumber}">E${formatedEpisodeNumber}. ${episode.name}</a>`}episodeContainer.innerHTML=episodesData,webSeriesData.appendChild(episodeContainer),episodeHighlight()}let searchParams=new URLSearchParams(window.location.search),season=searchParams.get("season"),episode=searchParams.get("episode");season&&episode?document.querySelector(`a[cssIdentification="s${season}e${episode}"]`).click():season&&!episode?document.querySelector(`a[cssIdentification="s${season}e1"]`).click():document.querySelector('a[cssIdentification="s1e1"]').click()}webSeriesData.innerHTML="",printEpisodes()}function gtag(){dataLayer.push(arguments)}return window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-THTQ9GZQ0J"),highlightCards(),!1}fillSearchInput(),window.onpopstate=function(){let searchParams=new URLSearchParams(window.location.search),search=searchParams.get("search"),imdb=searchParams.get("imdb");if(search||imdb){let elements=document.getElementsByClassName("information");for(let i=0;i<elements.length;i++)elements[i].style.display="none"}else{let elements=document.getElementsByClassName("information");for(let i=0;i<elements.length;i++)elements[i].style.display="block"}},searchInput.addEventListener("keyup",(function(){let inputQuery=this;clearTimeout(timer),timer=setTimeout((function(){updateURL(inputQuery),fetchAndShow(),window.dispatchEvent(new PopStateEvent("popstate")),scrollToResults()}),500)})),searchButton.addEventListener("click",(function(){fetchAndShow(),scrollToResults(),window.dispatchEvent(new PopStateEvent("popstate"))}));