var query, variables = { type: "ANIME", page: 1, perPage: 50 }, request; var url = 'https://graphql.anilist.co', options = { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ query: query, variables: variables }) }; function search() { let search = document.querySelector("#search").value if (search == "") { alRequest() } else { alRequest(search) } } function alRequest(a) { if (a == undefined) { variables.sort = "TRENDING_DESC" delete variables.search query = ` query ($page: Int, $perPage: Int, $sort: [MediaSort], $type: MediaType) { Page (page: $page, perPage: $perPage) { pageInfo { total currentPage lastPage hasNextPage perPage } media(type: $type, sort: $sort) { id title { romaji english native } description( asHtml: true ) season seasonYear format status episodes duration averageScore genres coverImage { large } bannerImage } } } ` } else { variables.search = a delete variables.sort query = ` query ($page: Int, $perPage: Int, $search: String, $type: MediaType) { Page (page: $page, perPage: $perPage) { pageInfo { total currentPage lastPage hasNextPage perPage } media (type: $type, search: $search) { id title { romaji english native } description( asHtml: true ) season seasonYear format status episodes duration averageScore genres coverImage { large } bannerImage } } } ` } options.body = JSON.stringify({ query: query, variables: variables }) fetch(url, options).then((handleResponse)) .then(handleData) .catch((error) => console.error(error)); function handleResponse(response) { return response.json().then(function (json) { return response.ok ? json : Promise.reject(json); }); } } function handleData(data) { request = data console.log(request); let frag = document.createDocumentFragment(), hasBegun = true try { data.data.Page.media.forEach((media, index) => { let template = document.createElement("div") template.classList.add("card", "bg-dark") template.innerHTML = `
${!!media.title.english ? media.title.english : media.title.romaji}
${(!!media.season ? media.season.toLowerCase() + " " : "") + (!!media.seasonYear ? media.seasonYear : "")}

${((!!media.format ? (media.format == "TV" ? media.format + " Show" : media.format) + " • " : "") + (!!media.episodes ? media.episodes + " Episodes • " : (!!media.duration ? media.duration + " Minutes • " : "")) + (!!media.status ? media.status.toLowerCase() : ""))}

${media.description}

` template.onclick = function () { viewAnime(index) } frag.appendChild(template) }) } catch (e) { console.error(e) } if (hasBegun) { document.querySelector(".gallery").textContent = ''; hasBegun = false; } document.querySelector(".gallery").appendChild(frag) } function hideAnime() { document.querySelector(".view").setAttribute("hidden", "") } function viewAnime(a) { let media = request.data.Page.media[a] let details = ["title.english", "title.romaji", "status", "season", "seasonYear", "episodes", "duration", "format", "averageScore"] document.querySelector(".view").removeAttribute("hidden") document.querySelector(".view .banner img").src = media.bannerImage document.querySelector(".view .contain-img").src = media.coverImage.large document.querySelector(".view .contain-img").src = media.coverImage.large document.querySelector(".view .title").textContent = !!media.title.english ? media.title.english : media.title.romaji document.querySelector(".view .desc").innerHTML = !!media.description ? media.description : "" tsearch(a, 1) } const DOMPARSER = new DOMParser().parseFromString.bind(new DOMParser()) function tsearch(a, b) { let name = request.data.Page.media[a].title.romaji, table = document.querySelector("tbody.tsearch") if (b < 10) { b = `0${b}` } let url = new URL(`https://nyaa.si/?page=rss&c=1_2&f=2&s=seeders&o=desc&q=${name}" ${b} "`) let frag = document.createDocumentFragment(), hasBegun = true fetch(url).then((res) => { res.text().then((xmlTxt) => { try { let doc = DOMPARSER(xmlTxt, "text/xml") doc.querySelectorAll("item").forEach((item, index) => { let i = item.querySelector.bind(item), template = document.createElement("tr") template.innerHTML = ` ${(index + 1)} ${i("title").textContent} ${i("size").textContent} ${i("seeders").textContent} ${i("leechers").textContent} ${i("downloads").textContent} Play ` frag.appendChild(template) }) } catch (e) { console.error(e) } if (hasBegun) { table.textContent = ""; hasBegun = false; } table.appendChild(frag) }) }).catch(() => console.error("Error in fetching the RSS feed")) } alRequest()