fix: proper prop
This commit is contained in:
parent
61a68b47d7
commit
0a29b1b7e0
3 changed files with 97 additions and 1 deletions
|
@ -6,9 +6,11 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>IXVD - Home</title>
|
||||
<link rel="stylesheet" href="/obj/css/main.css">
|
||||
<script src="obj/js/keybinds.js" defer></script>
|
||||
<script src="obj/js/updateLoop.js" defer></script>
|
||||
<script src="obj/js/services.js" defer></script>
|
||||
<script src="obj/js/issues.js" defer></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/tsparticles-confetti@2.12.0/tsparticles.confetti.bundle.min.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="issues" hidden>
|
||||
|
|
|
@ -44,7 +44,7 @@ async function updateIssues() {
|
|||
issueDiv.append(detailsDiv);
|
||||
|
||||
let titleSpan = document.createElement("a");
|
||||
titleSpan.href = issue.url;
|
||||
titleSpan.href = issue.html_url;
|
||||
titleSpan.classList.add("issue-title");
|
||||
detailsDiv.append(titleSpan);
|
||||
titleSpan.innerText = issue.title;
|
||||
|
|
94
public/obj/js/keybinds.js
Normal file
94
public/obj/js/keybinds.js
Normal file
|
@ -0,0 +1,94 @@
|
|||
const footerDiv = document.querySelector("#footer");
|
||||
const textSpan = footerDiv.querySelector("span");
|
||||
const originalText = footerDiv.cloneNode(true).innerHTML;
|
||||
|
||||
let keyCombo = [];
|
||||
let keyComboTimeout;
|
||||
|
||||
let quickFeatures = [
|
||||
{
|
||||
fn: () => {
|
||||
textSpan.innerHTML = "such glitter, much glamour";
|
||||
const duration = 15 * 1000,
|
||||
animationEnd = Date.now() + duration,
|
||||
defaults = { startVelocity: 30, spread: 360, ticks: 60, zIndex: 0 };
|
||||
|
||||
function randomInRange(min, max) {
|
||||
return Math.random() * (max - min) + min;
|
||||
}
|
||||
|
||||
const interval = setInterval(function() {
|
||||
const timeLeft = animationEnd - Date.now();
|
||||
|
||||
if (timeLeft <= 0) {
|
||||
return clearInterval(interval);
|
||||
}
|
||||
|
||||
const particleCount = 50 * (timeLeft / duration);
|
||||
|
||||
// since particles fall down, start a bit higher than random
|
||||
confetti(
|
||||
Object.assign({}, defaults, {
|
||||
particleCount,
|
||||
origin: { x: randomInRange(0.1, 0.3), y: Math.random() - 0.2 },
|
||||
})
|
||||
);
|
||||
confetti(
|
||||
Object.assign({}, defaults, {
|
||||
particleCount,
|
||||
origin: { x: randomInRange(0.7, 0.9), y: Math.random() - 0.2 },
|
||||
})
|
||||
);
|
||||
}, 250);
|
||||
},
|
||||
combo: [
|
||||
'ArrowUp',
|
||||
'ArrowUp',
|
||||
'ArrowDown',
|
||||
'ArrowDown',
|
||||
'ArrowLeft',
|
||||
'ArrowRight',
|
||||
'ArrowLeft',
|
||||
'ArrowRight',
|
||||
'b',
|
||||
'a',
|
||||
'Enter'
|
||||
]
|
||||
},
|
||||
{
|
||||
fn: () => { window.location.href = "//git.ixvd.net" },
|
||||
combo: ["Control", "g"]
|
||||
}
|
||||
]
|
||||
|
||||
const clearKeyCombo = async () => {
|
||||
keyCombo = [];
|
||||
textSpan.innerHTML = originalText;
|
||||
await (() => new Promise(res => setTimeout(res, 0)))();
|
||||
}
|
||||
|
||||
const checkKeyCombo = () => {
|
||||
let hits = 0;
|
||||
// check if 1 key matches and if combo is complete;
|
||||
quickFeatures.forEach(async (quickFeature) => {
|
||||
if (quickFeature.combo.join('').startsWith(keyCombo.join(''))) hits = keyCombo.length;
|
||||
if (quickFeature.combo.join('') === keyCombo.join('')) {
|
||||
await clearKeyCombo();
|
||||
quickFeature.fn();
|
||||
}
|
||||
});
|
||||
if (hits === 0) clearKeyCombo().catch(e => console.error(e));
|
||||
}
|
||||
|
||||
const keyComboHandler = (e) => {
|
||||
if (e) {
|
||||
if (e.key === 'Escape') return clearKeyCombo();
|
||||
keyCombo.push(e.key);
|
||||
textSpan.innerHTML = keyCombo.join(' ');
|
||||
}
|
||||
clearTimeout(keyComboTimeout);
|
||||
keyComboTimeout = setTimeout(clearKeyCombo, 3000);
|
||||
checkKeyCombo();
|
||||
}
|
||||
|
||||
document.addEventListener('keydown', keyComboHandler);
|
Loading…
Reference in a new issue