function
scrollToTop() {
const c = document.documentElement.scrollTop ||
document.body.scrollTop;
if
(c > 0) {
window.requestAnimationFrame(scrollToTop);
window.scrollTo(0, c - c / 8);
}
}
const searchInput = document.getElementById(
"search-input"
);
const searchButton = document.getElementById(
"search-button"
);
const resultsContainer = document.getElementById(
"results"
);
const corsProxy =
"..."
;
function
optimisedImageUrl(url) {
return
url.replace(
"._V1_."
,
"._V1_QL75_UX160_."
);
}
function
fetchAndShow() {
const query = encodeURIComponent(searchInput.value);
const url = `${
corsProxy}...${query}.json`;
Pace.restart();
fetch(url)
.then((response) => response.json())
.then((data) => {
const results = data.d;
resultsContainer.innerHTML =
""
;
results.forEach((result) => {
if
(result.i && (result.qid ===
"movie"
||
result.qid ===
"tvSeries"
)) {
const resultElem = document.createElement(
"div"
);
resultElem.classList.add(
"result"
);
resultElem.setAttribute(
"IMDB"
, result.id);
let imageAndInfo =
""
;
if
(result.qid ===
"movie"
&& 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=
"..."
target=
"_blank"
>
<img alt=
"${result.l}"
src=
"${
optimisedImageUrl(result.i.imageUrl)}"
>
<div class=
"info"
>
<h3>${result.l}</h3>
<p>${result.s}</p>
</div>
</a>`;
}
else
if
(result.qid ===
"tvSeries"
&& 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=
"...=${result.id}&s=1&e=1"
target=
"_blank"
>
<img alt=
"${result.l}"
src=
"${optimisedImageUrl(result.i.imageUrl)}"
>
<div class=
"info"
>
<h3>${result.l}</h3>
<p>${result.s}</p>
</div>
</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"
,
"...="
+ imdb);
a.setAttribute(
"target"
,
"_blank"
);
a.click();
}
else
if
(imdb && title && episode && !type) {
(episode).toLocaleString(
'en-US'
,
{ minimumIntegerDigits: 2, useGrouping:
false
});
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"
,`...=${season}&e=${episode}`
);
a.setAttribute(
"target"
,
"_blank"
);
a.click();
}
}
const fetchTitle = async (imdbID) => {
const url = `${corsProxy}....json`;
try
{
const response = await fetch(url);
const data = await response.json();
const 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);
let search = searchParams.get(
"search"
);
let season = searchParams.get(
"season"
);
let episode = searchParams.get(
"episode"
);
let imdb = searchParams.get(
"imdb"
);
let type = searchParams.get(
"type"
);
if
(search && !season && !episode && !imdb) {
search = search.replace(/\+/g,
"%20"
);
const searchInput = document.querySelector(
"#search-input"
);
searchInput.value = search;
fetchAndShow();
}
else
if
(imdb && type && !search && !episode && !season) {
fetchTitle(imdb)
.then((title) => setAll(imdb, title, season, episode, type))
.
catch
((error) => console.error(error));
}
else
if
(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);
}
}
fillSearchInput();
function
updateURL(input) {
let search = input.value;
if
(search) {
window.history.replaceState(
{},
""
,
`?search=${encodeURIComponent(search).replace(/%20/g,
"+"
)}`
);
}
else
{
window.history.replaceState({},
""
, window.location.pathname);
}
}
function
highlightCards() {
let searchParams =
new
URLSearchParams(window.location.search);
let imdb_id = searchParams.get(
"imdb"
);
try
{
document.querySelectorAll(
".result"
).forEach(
function
(card) {
card.className =
"result"
;
});
document.querySelector(`div[IMDB=${imdb_id}]`).className =
"result hoverClass"
;
}
catch
(error) {
}
}
window.onpopstate =
function
() {
let searchParams =
new
URLSearchParams(window.location.search);
let search = searchParams.get(
"search"
);
let 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"
;
}
}
};
let timer;
searchInput.addEventListener(
"keyup"
,
function
() {
let inputQuery =
this
;
clearTimeout(timer);
timer = setTimeout(
function
() {
updateURL(inputQuery);
fetchAndShow();
window.dispatchEvent(
new
PopStateEvent(
"popstate"
));
$(
"html,body"
).animate(
{
scrollTop: $(
"#results"
).offset().top,
},
"slow"
);
}, 500);
});
searchButton.addEventListener(
"click"
,
function
() {
fetchAndShow();
window.dispatchEvent(
new
PopStateEvent(
"popstate"
));
});
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"
);
const video = document.getElementById(
"video"
);
iframe.src = element.getAttribute(
"href"
);
video.style.display =
"block"
;
const webSeriesData = document.getElementById(
"webSeriesData"
);
const tmdbApiKey =
"your-tmdb-api-key"
;
const imdbID = element.getAttribute(
"IMDB"
);
Pace.restart();
scrollToTop();
window.dispatchEvent(
new
PopStateEvent(
"popstate"
));
if
(
element.getAttribute(
"isWebSeries"
) ==
"false"
&&
element.className ==
"links"
) {
webSeriesData.innerHTML =
""
;
}
if
(element.getAttribute(
"title"
) !==
""
) {
document.title = element.getAttribute(
"title"
);
}
if
(element.className.includes(
"episode"
)) {
episodeHighlight(element.getAttribute(
"cssidentification"
));
console.log(
"clicked"
);
}
if
(element.getAttribute(
"isWebSeries"
) ==
"true"
) {
webSeriesData.innerHTML =
""
;
async
function
printEpisodes() {
const response = await fetch(
`...key=${tmdbApiKey}&language=
en-US&external_source=imdb_id`
);
const data = await response.json();
const showId = data.tv_results[0].id;
const seasonsData = await fetch(
`...=${tmdbApiKey}&language=en-US`
);
const seasonsDataJSON = await seasonsData.json();
const 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(
`...=${tmdbApiKey}&language=en-US`
);
const episodesDataJSON = await episodesDataResponse.json();
for
(const episode of episodesDataJSON.episodes) {
const episodeNumber = episode.episode_number;
let formatedEpisodeNumber =
episodeNumber.toLocaleString(
"en-US"
, {
minimumIntegerDigits: 2,
useGrouping:
false
,
});
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=
"...=${seasonNumber}&e=${episodeNumber}"
>
E${formatedEpisodeNumber}. ${episode.name}</a>`;
}
episodeContainer.innerHTML = episodesData;
webSeriesData.appendChild(episodeContainer);
episodeHighlight();
}
let searchParams =
new
URLSearchParams(window.location.search);
let season = searchParams.get(
"season"
);
let episode = searchParams.get(
"episode"
);
if
(season && episode) {
document
.querySelector(`a[cssIdentification=
"s${season}e${episode}"
]`)
.click();
}
else
if
(season && !episode) {
document.querySelector(`a[cssIdentification=
"s${season}e1"
]`)
.click();
}
else
{
document.querySelector(`a[cssIdentification=
"s1e1"
]`).click();
}
}
printEpisodes();
}
else
{
}
highlightCards();
return
false
;
}