grapes-andrewdingus
Version:
GRAPES OS static site — CDN-ready via unpkg
333 lines (300 loc) • 9.46 kB
JavaScript
var swfobject = {};
swfobject.embedSWF = function (url, cont, width, height) {
let ruffle = window.RufflePlayer.newest(),
player = Object.assign(
document.getElementById(cont).appendChild(ruffle.createPlayer()),
{
width: width,
height: height,
style: "width: " + width + "px; height: " + height + "px",
}
);
player.load({ url: url });
};
function iframe_focus(iframe) {
iframe.focus();
console.log("iframe focused");
}
function instaFocusIFrame(iframe) {
if (window.location.href.includes("g4m3s/")) {
if (iframe !== null && iframe !== undefined) {
iframe_focus(iframe);
// Check if iframe is focused
if (document.activeElement !== iframe) {
// if iframe is not focused...
//set another timeout to try again
setTimeout(instaFocusIFrame, 1000);
}
}
}
}
document.addEventListener("DOMContentLoaded", function () {
// when the page loads
const iframe = document.getElementById("gameFrame"); // get the iframe game element
if (iframe) {
iframe.addEventListener("mouseenter", () => {
iframe_focus(iframe);
}); // add event listeners to the iframe that focus it when the mouse enters
window.onload = () => {
instaFocusIFrame(iframe);
iframe_focus(iframe);
};
iframe_focus(iframe); // focus the iframe (for some reason this doesn't work without the onload event)
}
});
// Apply URL search query to games list pages
document.addEventListener("DOMContentLoaded", function () {
try {
const params = new URLSearchParams(window.location.search);
const q = params.get("q");
const input = document.getElementById("query");
if (q && input) {
input.value = q;
if (typeof showall === "function") {
showall();
}
if (typeof searchbar1 === "function") {
searchbar1();
}
input.focus();
}
} catch (e) {
// no-op
}
});
document.addEventListener("click", function (event) {
if (event.target.classList.contains("sorter")) {
const topnav = document.getElementById("topnav");
if (document.body.scrollHeight <= window.innerHeight) {
document.body.classList.add("no-scroll");
topnav.classList.add("no-scroll");
} else {
document.body.classList.remove("no-scroll");
topnav.classList.remove("no-scroll");
}
}
});
let prevScrollPos = window.pageYOffset;
let ticking = false;
function onScroll() {
if (!ticking) {
window.requestAnimationFrame(function () {
const topnav = document.getElementById("topnav");
if (topnav) {
const currentScrollPos = window.pageYOffset;
if (currentScrollPos > 0 && prevScrollPos === 0) {
topnav.classList.add("header-scrolled");
} else if (currentScrollPos === 0 && prevScrollPos > 0) {
topnav.classList.remove("header-scrolled");
}
prevScrollPos = currentScrollPos;
}
ticking = false;
});
ticking = true;
}
}
document.addEventListener("scroll", onScroll);
function openFullscreen() {
// open the game in fullscreen
let elem = document.getElementById("gameFrame");
if (elem.requestFullscreen) {
elem.requestFullscreen();
} else if (elem.webkitRequestFullscreen) {
/* Safari */
elem.webkitRequestFullscreen();
} else if (elem.msRequestFullscreen) {
/* IE11 */
elem.msRequestFullscreen();
}
}
function ruffleFullscreen() {
alert("To Fullscreen, Right Click the Application and hit Enter Fullscreen");
}
function searchbar1() {
const searchvalue = document.getElementById("query");
const icon_divs = document.getElementById("icon_image");
const elem = icon_divs.getElementsByTagName("a");
const ads = document.getElementsByClassName("ad");
if (searchvalue.value === "") {
console.log("Nothing Searched");
for (let i = 0; i < ads.length; i++) {
ads[i].style.visibility = "visible";
ads[i].style.display = "inline-block";
}
} else {
for (let i = 0; i < ads.length; i++) {
ads[i].style.visibility = "hidden";
ads[i].style.display = "none";
}
for (let i = 0; i < elem.length; i++) {
if (
elem[i].id
.toLowerCase()
.replaceAll("-", " ")
.includes(searchvalue.value.toLowerCase())
) {
elem[i].style.visibility = "visible";
elem[i].style.display = "inline-block";
} else {
elem[i].style.visibility = "collapse";
elem[i].style.display = "none";
}
}
}
}
function sorterbuttons(button) {
const title = document.querySelector(".sorters-wrap") || document.getElementById("title");
if (!title) return;
const elem = title.getElementsByTagName("button");
// set query params to the button id
const urlParams = new URLSearchParams(window.location.search);
urlParams.set("category", button.id);
window.history.replaceState(
{},
"",
`${window.location.pathname}?${urlParams.toString()}`
);
for (let i = 0; i < elem.length; i++) {
if (elem[i] !== button) {
if (elem[i].id !== "New") {
elem[i].style.backgroundColor = "#fff";
} else {
elem[i].style.background =
"linear-gradient(90deg, #f3f520, #59d102, #f3f520)";
elem[i].style.backgroundSize = "400%";
}
elem[i].style.color = "#000";
} else {
if (elem[i].id !== "New") {
elem[i].style.backgroundColor = "#ff0000";
} else {
elem[i].style.background =
"linear-gradient(90deg, #f74c06, #f9bc2c, #f74c06)";
elem[i].style.backgroundSize = "400%";
}
elem[i].style.color = "#fff";
}
}
}
function hide_all_ads() {
let ads = document.getElementsByClassName("ad");
let more_ads = document.getElementsByClassName("google-auto-placed");
let all_ads = [];
for (let i = 0; i < ads.length; i++) {
all_ads.push(ads[i]);
}
for (let i = 0; i < more_ads.length; i++) {
all_ads.push(more_ads[i]);
}
for (let i = 0; i < ads.length; i++) {
all_ads[i].style.visibility = "hidden";
all_ads[i].style.display = "none";
}
}
function show_all_ads() {
let ads = document.getElementsByClassName("ad");
let more_ads = document.getElementsByClassName("google-auto-placed");
let all_ads = [];
for (let i = 0; i < ads.length; i++) {
all_ads.push(ads[i]);
}
for (let i = 0; i < more_ads.length; i++) {
all_ads.push(more_ads[i]);
}
for (let i = 0; i < ads.length; i++) {
all_ads[i].style.visibility = "visible";
all_ads[i].style.display = "inline-block";
}
}
function sorter(category) {
const icon = document.getElementById("icon_image");
const elem = icon.getElementsByTagName("a");
hide_all_ads();
for (let i = 0; i < elem.length; i++) {
if (!elem[i].className.includes(category)) {
// if the element is not the category
elem[i].style.visibility = "collapse";
elem[i].style.display = "none";
} else {
elem[i].style.visibility = "visible";
elem[i].style.display = "inline-block";
}
}
}
function showchildren(parent) {
const children = parent.children;
for (let i = 0; i < children.length; i++) {
children[i].style.visibility = "visible";
}
}
function hidechildren(parent) {
const children = parent.children;
for (let i = 0; i < children.length; i++) {
children[i].style.visibility = "hidden";
}
}
function showall() {
const icon = document.getElementById("icon_image");
const elem = icon.getElementsByTagName("a");
const all = document.getElementById("All");
sorterbuttons(all); // remove ad
for (let i = 0; i < elem.length; i++) {
elem[i].style.visibility = "visible";
elem[i].style.display = "inline-block";
}
show_all_ads();
}
function viewFig(elem) {
const fig = elem.parentElement.querySelector("figcaption");
if (fig) {
fig.style.visibility = "visible";
fig.style.opacity = "1";
}
}
function hideFig(elem) {
const fig = elem.parentElement.querySelector("figcaption");
if (fig) {
fig.style.visibility = "hidden";
fig.style.opacity = "0";
}
}
function spin(element) {
element.style.transform = "rotate(359deg)";
element.style.transition = "transform 0.25s ease";
}
function unspin(element) {
element.style.transform = "rotate(0deg)";
}
function home() {
window.location.href = "./";
}
// // set banner of site
// document.addEventListener("DOMContentLoaded", function () {
// const headerSpan = document.getElementById("grapes-os-header");
// if (headerSpan) {
// let TLD = window.location.hostname.split(".")[0];
// TLD = TLD[0].toUpperCase() + TLD.slice(1);
// const ending = window.location.hostname.split(".")[1];
// headerSpan.firstChild.textContent = TLD;
// headerSpan.children[0].textContent = "." + ending;
// }
// // Do not overwrite per-page titles if already set
// const title = document.querySelector("title");
// if (title && (!title.dataset.lock || title.dataset.lock !== "true")) {
// // leave existing title; this avoids clobbering about page SEO title
// }
// });
document.addEventListener("GamesLoaded", function () {
const urlParams = new URLSearchParams(window.location.search);
const category = urlParams.get("category");
if (category === "All") {
showall();
} else if (category) {
const button = document.getElementById(category);
if (button) {
sorter(category);
sorterbuttons(button);
}
}
});