skipbo/src/static/js/events.js

80 lines
2.3 KiB
JavaScript
Raw Normal View History

2018-08-06 20:34:05 +02:00
import * as render from "./render.js";
let debug = true;
2018-08-05 21:05:14 +02:00
let activeElement, droptimer;
let dropto = null;
2018-08-08 16:56:34 +02:00
let log = document.querySelector("#log");
2018-08-05 21:05:14 +02:00
2018-08-06 20:34:05 +02:00
const allowDrop = e => {
if(debug) console.log("dropover");
e.preventDefault();
};
2018-08-05 21:05:14 +02:00
const dragstart = e => {
2018-08-06 20:34:05 +02:00
if(debug) console.log("dragstart");
2018-08-05 21:05:14 +02:00
e.dataTransfer.setData("text", e.target.id);
activeElement = e.target;
setTimeout(() => {
activeElement.style.display = "none";
}, 100);
};
const dragEnd = e => {
2018-08-06 20:34:05 +02:00
if(debug) console.log("dragend");
2018-08-05 21:05:14 +02:00
e.preventDefault();
if(dropto !== null) {
2018-08-08 16:56:34 +02:00
const [pstack, ptype, , ppileid] = activeElement.parentNode.id.split("_");
2018-08-06 20:34:05 +02:00
const [mstack, , , mpileid] = dropto.id.split("_");
2018-08-08 16:56:34 +02:00
const pile = render.stackables.getID(parseInt(pstack.slice(-1)))[ptype][ppileid];
2018-08-06 20:34:05 +02:00
let from = pile.splice(-1)[0];
let to = render.mainstack[mpileid];
let last = to[to.length - 1] || { val: 0 };
if(from.type === "joker")
from.val = last.val + 1;
(last.val + 1 === from.val ? to : pile).push(from);
2018-08-06 20:49:02 +02:00
if(last.val + 1 === 12)
render.mainstack[mpileid].length = 0; // clear stack
2018-08-08 16:56:34 +02:00
log.innerHTML += `from: ${pstack}_${ptype}_${ppileid} (${from.val}) to: ${mstack}_slot_${mpileid} (${last.val})\n`;
log.scrollTop = log.scrollHeight;
2018-08-06 20:34:05 +02:00
2018-08-06 20:49:02 +02:00
render.render(render.stackables.getName(parseInt(pstack.slice(-1))));
render.renderMain();
2018-08-05 21:05:14 +02:00
}
activeElement.style.display = "block";
activeElement = null;
2018-08-06 20:34:05 +02:00
dragleave(e);
2018-08-05 21:05:14 +02:00
};
2018-08-06 20:34:05 +02:00
const dragenter = e => {
if(debug) console.log("dragenter");
e.preventDefault();
clearTimeout(droptimer);
e.target.classList.add("over");
dropto = e.target;
};
const dragleave = e => {
if(debug) console.log("dragleave");
e.preventDefault();
2018-08-08 16:56:34 +02:00
document.querySelectorAll("div[dropable='true']").forEach(slot => slot.classList.remove("over"));
droptimer = setTimeout(() => dropto = null, 100);
2018-08-06 20:34:05 +02:00
};
document.querySelectorAll("div[dropable='true']").forEach(slot => {
slot.addEventListener("dragover", allowDrop);
slot.addEventListener("dragenter", dragenter);
slot.addEventListener("dragleave", dragleave);
2018-08-05 21:05:14 +02:00
});
export default ({
createCardEvents: () => {
2018-08-06 20:34:05 +02:00
document.querySelectorAll(".card_outer[draggable='true']").forEach(card => {
2018-08-05 21:05:14 +02:00
card.addEventListener("dragstart", dragstart);
card.addEventListener("dragend", dragEnd);
});
}
2018-08-06 20:34:05 +02:00
});