f0ckv2/public/js/events.js

181 lines
6.1 KiB
JavaScript
Raw Normal View History

2019-05-15 17:51:11 +00:00
import rt from "./rt.js";
import lib from "./lib.js";
const events = {};
2019-05-19 01:45:45 +00:00
events.wheel = async e => {
if(rt.tmp.events.page) { // Pageevents
if(rt.tmp.scroll)
2019-05-15 17:51:11 +00:00
return;
const deltaY = e.target.id === "up" ? -1 : e.deltaY < 0 ? -1: 1; // -1 up, 1 down
if((deltaY === -1 && rt.items.first === rt.items.newest) || (deltaY === 1 && rt.items.last === rt.items.oldest))
2019-05-19 01:45:45 +00:00
return rt.tmp.scroll = false;
rt.tmp.scroll = true;
2019-05-15 17:51:11 +00:00
rt.items.eps = 0;
await lib.getItems({
el: rt.ct.wrapper.pages[deltaY === -1 ? 0 : 2],
opt: deltaY === -1 ? `id=${rt.items.first}&order=asc` : `id=${rt.items.last}&order=desc`
});
rt.ct.wrapper.pages[deltaY === -1 ? 0 : 2].scrollIntoView({ block: rt.vars.block, behavior: "smooth" });
await new Promise(resolve => setTimeout(resolve, rt.vars.cd));
2019-05-19 01:45:45 +00:00
document.querySelector("div#p_items").removeChild(rt.ct.wrapper.pages[deltaY === -1 ? 2 : 0]);
const newdiv = document.createElement("div");
newdiv.classList.add("p_item");
document.querySelector("div#p_items").insertAdjacentElement((deltaY === -1 ? "afterbegin" : "beforeend"), newdiv);
rt.ct.wrapper.pages = document.querySelectorAll("div.p_item");
lib.calcItems();
lib.scrolltomiddle(rt.ct.wrapper.pages);
rt.ct.wrapper.pages[0].innerHTML = "";
rt.ct.wrapper.pages[2].innerHTML = "";
}
if(rt.tmp.events.item) { // Itemevents
if(rt.tmp.scroll)
2019-05-15 17:51:11 +00:00
return;
const deltaY = e.target.id === "left" ? -1 : e.deltaY < 0 ? -1: 1; // -1 left, 1 right
2019-05-19 01:45:45 +00:00
if((deltaY === -1 && rt.items.act === rt.items.oldest) || (deltaY === 1 && rt.items.act === rt.items.newest))
return;
window.location = `${window.location.pathname}#${deltaY === -1 ? rt.items.next : rt.items.prev}`;
2019-05-15 17:51:11 +00:00
}
2019-05-19 01:45:45 +00:00
rt.tmp.scroll = false;
2019-05-15 17:51:11 +00:00
};
2019-05-19 01:45:45 +00:00
events.resize = async e => {
e.preventDefault();
clearTimeout(rt.tmp.resize);
lib.calcItems();
rt.tmp.resize = setTimeout(() => lib.getItems({
el: rt.ct.wrapper.pages[1],
opt: `id=${rt.items.first + 1}&order=desc`
}), rt.vars.cd);
lib.scrolltomiddle(rt.ct.wrapper.pages);
if(rt.tmp.events.item) {
2019-05-15 17:51:11 +00:00
lib.scrolltomiddle(rt.ct.wrapper.items);
}
};
2019-05-15 18:41:31 +00:00
events.volumechange = e => {
localStorage.setItem("volume", e.target.volume);
};
2019-05-15 17:51:11 +00:00
events.hashchange = async e => {
2019-05-19 01:45:45 +00:00
if(rt.tmp.scroll || !rt.tmp.hash)
2019-05-15 17:51:11 +00:00
return rt.tmp.hash = true;
2019-05-19 01:45:45 +00:00
rt.tmp.scroll = true;
console.log("hashchange lol");
if(rt.tmp.layer !== "item")
rt.ct.wrapper.items[1].innerHTML = "";
2019-05-15 17:51:11 +00:00
const itemid = parseInt((e.newURL?e.newURL:e.detail.newURL).split("#").slice(-1));
if(!itemid || itemid <= 0) // failover oder so
2019-05-19 01:45:45 +00:00
return lib.closeItemview();
2019-05-15 17:51:11 +00:00
const next = rt.items.act === null || rt.items.act === itemid ? 1 : rt.items.act > itemid ? 2 : 0;
2019-05-19 01:45:45 +00:00
lib.showLayer("item", next === 1);
2019-05-15 17:51:11 +00:00
rt.ct.header.itempos.innerHTML = `item ${itemid}`;
2019-05-19 01:45:45 +00:00
const item = await lib.getItem(itemid);
2019-05-15 17:51:11 +00:00
item.dest = item.dest.replace(/^\./, "");
rt.ct.header.infos.source.href = item.src;
rt.ct.header.infos.source.innerHTML = item.srchost;
rt.ct.header.infos.channel.innerHTML = `${item.usernetwork} ${item.userchannel}`;
rt.ct.header.infos.title.innerHTML = `${item.mime} (${item.size})`;
rt.ct.header.infos.nick.innerHTML = item.username;
2019-05-19 01:45:45 +00:00
// <test>
if(itemid > rt.items.first || itemid < rt.items.last) { // Scroll to next Page
rt.items.eps = 0;
await lib.getItems({
el: rt.ct.wrapper.pages[1],
opt: next === 0 ? `id=${itemid-1}&order=asc` : `id=${itemid+1}&order=desc`
});
/*rt.tmp.scroll = false;
events.wheel.page({
target: {
id: next === 0 ? "up" : "down"
}
});
rt.tmp.scroll = true;*/
}
// </test>
2019-05-15 17:51:11 +00:00
2019-05-19 01:45:45 +00:00
rt.ct.wrapper.pages[1].querySelectorAll("a > img").forEach(f => {
f.style.boxShadow = null;
f.style.borderRadius = null;
f.style.transition = ".1s ease-out";
2019-05-15 17:51:11 +00:00
});
setTimeout(() => {
rt.ct.wrapper.pages[1].querySelector(`a[href='#${itemid}'] > img`).style.boxShadow = "0px 0px 0px 2px #dac8d2";
rt.ct.wrapper.pages[1].querySelector(`a[href='#${itemid}'] > img`).style.borderRadius = "5px";
rt.ct.wrapper.pages[1].querySelector(`a[href='#${itemid}'] > img`).style.transition = ".1s ease-in";
}, 50);
let el;
switch(item.mime) {
case "audio/flac":
case "audio/mpeg":
case "audio/ogg":
case "audio/x-flac": // audios
el = document.createElement("audio");
el.src = `${rt.url}${item.dest}`;
el.type = item.mime;
el.autoplay = true;
el.controls = true;
el.loop = true;
2019-05-15 18:41:31 +00:00
el.volume = localStorage.getItem("volume") || 1;
2019-05-19 01:45:45 +00:00
el.addEventListener("volumechange", ev => events.volumechange(ev));
2019-05-15 17:51:11 +00:00
break;
case "image/gif":
case "image/jpeg":
case "image/png": // images
el = document.createElement("img");
el.src = `${rt.url}${item.dest}`;
break;
case "video/mp4":
case "video/quicktime":
case "video/webm":
case "video/ogv": // videos
el = document.createElement("video");
el.src = `${rt.url}${item.dest}`;
el.type = item.mime;
el.autoplay = true;
el.controls = true;
el.loop = true;
2019-05-15 18:41:31 +00:00
el.volume = localStorage.getItem("volume") || 1;
2019-05-19 01:45:45 +00:00
el.addEventListener("volumechange", ev => events.volumechange(ev));
2019-05-15 17:51:11 +00:00
break;
default:
alert("lol hacker");
break;
}
el.classList.add("item");
rt.ct.wrapper.items[next].insertAdjacentElement("afterbegin", el);
rt.ct.wrapper.items[next].scrollIntoView({ block: rt.vars.block, behavior: "smooth" });
rt.items.prev = item.prev;
rt.items.next = item.next;
rt.items.act = item.id;
await new Promise(resolve => setTimeout(resolve, rt.vars.cd));
if(next !== 1) {
document.querySelector("div#i_items").removeChild(rt.ct.wrapper.items[next === 0 ? 2 : 0]);
const newdiv = document.createElement("div");
newdiv.classList.add("i_item");
document.querySelector("div#i_items").insertAdjacentElement((next === 0 ? "afterbegin" : "beforeend"), newdiv);
rt.ct.wrapper.items = document.querySelectorAll("div.i_item");
}
lib.scrolltomiddle(rt.ct.wrapper.items);
rt.ct.wrapper.items[0].innerHTML = "";
rt.ct.wrapper.items[2].innerHTML = "";
2019-05-19 01:45:45 +00:00
rt.tmp.scroll = false;
2019-05-15 17:51:11 +00:00
};
export default events;