function searchBox() {
search.placeholder = search.value
searchAnime(search.value)
search.value = ""
}
async function alRequest(a, b) {
let query,
variables = {
type: "ANIME",
sort: "TRENDING_DESC",
page: 1,
perPage: 50
},
options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
query: query,
variables: variables
})
}
if (localStorage.getItem("ALtoken")) {
options.headers['Authorization'] = localStorage.getItem("ALtoken")
}
if (!a) {
search.placeholder = "Anime Name, Image Link or Direct Magnet Link, Torrent File, Hash"
query = `
query ($page: Int, $perPage: Int, $sort: [MediaSort], $type: MediaType) {
Page (page: $page, perPage: $perPage) {
media(type: $type, sort: $sort) {
id
title {
romaji
english
native
userPreferred
}
description(
asHtml: true
)
season
seasonYear
format
status
episodes
duration
averageScore
genres
coverImage {
extraLarge
medium
color
}
bannerImage
synonyms
nextAiringEpisode {
timeUntilAiring
episode
}
trailer {
id
site
}
streamingEpisodes {
title
thumbnail
}
}
}
}`
} else if (b) {
variables.search = a
variables.perPage = b
variables.status = "RELEASING"
query = `
query ($page: Int, $sort: [MediaSort], $search: String, $type: MediaType, $status: MediaStatus) {
Page (page: $page) {
media (type: $type, search: $search, sort: $sort, status: $status) {
id
title {
userPreferred
}
description(
asHtml: true
)
season
seasonYear
format
status
episodes
duration
genres
coverImage {
extraLarge
medium
color
}
streamingEpisodes {
title
thumbnail
}
}
}
}`
} else {
variables.search = a
variables.sort = "TRENDING_DESC"
query = `
query ($page: Int, $perPage: Int, $sort: [MediaSort], $type: MediaType, $search: String) {
Page (page: $page, perPage: $perPage) {
media(type: $type, search: $search, sort: $sort) {
id
title {
romaji
english
native
userPreferred
}
description(
asHtml: true
)
season
seasonYear
format
status
episodes
duration
averageScore
genres
coverImage {
extraLarge
medium
color
}
bannerImage
synonyms
nextAiringEpisode {
timeUntilAiring
episode
}
trailer {
id
site
}
streamingEpisodes {
title
thumbnail
}
}
}
}`
}
options.body = JSON.stringify({
query: query,
variables: variables
})
let res = await fetch('https://graphql.anilist.co', options).catch((error) => console.error(error)),
json = await res.json();
return json
}
function alEntry() {
if (store[playerData.nowPlaying[0]]) {
let query = `
mutation ($id: Int, $status: MediaListStatus, $episode: Int) {
SaveMediaListEntry (mediaId: $id, status: $status, progress: $episode) {
id
status
progress
}
}`,
variables = {
id: parseInt(store[playerData.nowPlaying[0]].id),
status: "CURRENT",
episode: parseInt(playerData.nowPlaying[1])
},
options = {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + localStorage.getItem("ALtoken"),
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
query: query,
variables: variables
})
}
fetch("https://graphql.anilist.co", options)
}
}
let alResponse
async function searchAnime(a) {
let frag = document.createDocumentFragment(),
browse = document.querySelector(".browse")
browse.textContent = '';
browse.appendChild(skeletonCard)
alResponse = await alRequest(a)
try {
alResponse.data.Page.media.forEach(media => {
let template = cardCreator(media)
template.onclick = () => {
viewAnime(media)
}
frag.appendChild(template)
})
} catch (e) {
console.error(e)
}
browse.textContent = '';
browse.appendChild(frag)
}
let detailsfrag = document.createDocumentFragment()
let details = {
averageScore: "Average Score",
duration: "Episode Duration",
episodes: "Episodes",
format: "Format",
genres: "Genres",
season: "Season",
seasonYear: "Year",
status: "Status",
english: "English",
romaji: "Romaji",
native: "Native",
synonyms: "Synonyms"
}
const episodeRx = /Episode (\d+) - (.*)/;
function viewAnime(media) {
halfmoon.toggleModal("view")
if (media.bannerImage != null) {
document.querySelector(".view .banner img").src = media.bannerImage
document.querySelector(".view .cover-wrapper").classList.add("mt-nc")
} else {
document.querySelector(".view .banner img").src = ""
document.querySelector(".view .cover-wrapper").classList.remove("mt-nc")
}
document.querySelector(".view .contain-img").src = media.coverImage.extraLarge
document.querySelector(".view .title").textContent = media.title.userPreferred
document.querySelector(".view .desc").innerHTML = media.description || ""
document.querySelector(".view .details").innerHTML = ""
detailsCreator(media)
document.querySelector(".view .details").appendChild(detailsfrag)
if (media.nextAiringEpisode) {
let temp = document.createElement("p")
temp.innerHTML = `Airing
Episode ${media.nextAiringEpisode.episode}: ${toTS(media.nextAiringEpisode.timeUntilAiring)}`
document.querySelector(".view .details").prepend(temp)
}
trailer.src = ""
if (media.trailer) {
switch (media.trailer.site) {
case "youtube":
trailer.src = "https://www.youtube.com/embed/" + media.trailer.id
break;
}
}
episodes.innerHTML = ""
if (media.streamingEpisodes) {
let frag = document.createDocumentFragment()
media.streamingEpisodes.forEach(episode => {
let temp = document.createElement("div")
temp.classList.add("position-relative", "w-250", "rounded", "mr-10", "overflow-hidden", "pointer")
temp.innerHTML = `
${(media.format ? (media.format == "TV" ? "" + media.format + " Show" : "" + media.format.toLowerCase().replace(/_/g, " ")) : "") + ""} ${media.episodes ? "" + media.episodes + " Episodes" : media.duration ? "" + media.duration + " Minutes" : ""} ${media.status ? "" + media.status.toLowerCase().replace(/_/g, " ") + "" : ""} ${media.season || media.seasonYear ? "" + (!!media.season ? media.season.toLowerCase() + " " : "") + (media.seasonYear || "") + "" : ""}