This commit is contained in:
Russell2259
2023-12-11 19:34:26 -07:00
parent db36ba6247
commit 3841c90cf8
5 changed files with 161 additions and 67 deletions
+2 -2
View File
@@ -1,7 +1,7 @@
export default {
port: 8080,
mode: 'dev',
minify: true,
assetScrambling: true,
minify: false,
assetScrambling: false,
allowDangerousTemplateInsert: true
};
+17 -3
View File
@@ -523,8 +523,8 @@ img.featured:hover {
100% {
top: 50%;
left: 50%;
-ms-transform: translate(-50%, -50%) scale(1.15, 1.15) rotate(-5deg);
transform: translate(-50%, -50%) scale(1.15, 1.15) rotate(-5deg);
-ms-transform: translate(-50%, -50%) scale(1.25, 1.25) rotate(-5deg);
transform: translate(-50%, -50%) scale(1.25, 1.25) rotate(-5deg);
}
30%,
80% {
@@ -533,4 +533,18 @@ img.featured:hover {
-ms-transform: translate(-50%, -50%) scale(1, 1) rotate(5deg);
transform: translate(-50%, -50%) scale(1, 1) rotate(5deg);
}
}
}
@keyframes shake {
0% { transform: translate(1px, 1px) rotate(0deg); }
10% { transform: translate(-1px, -2px) rotate(-1deg); }
20% { transform: translate(-3px, 0px) rotate(1deg); }
30% { transform: translate(3px, 2px) rotate(0deg); }
40% { transform: translate(1px, -1px) rotate(1deg); }
50% { transform: translate(-1px, 2px) rotate(-1deg); }
60% { transform: translate(-3px, 1px) rotate(0deg); }
70% { transform: translate(3px, 1px) rotate(-1deg); }
80% { transform: translate(-1px, -1px) rotate(1deg); }
90% { transform: translate(1px, 2px) rotate(0deg); }
100% { transform: translate(1px, -2px) rotate(-1deg); }
}
+139
View File
@@ -0,0 +1,139 @@
/**
* @typedef binding
* @type {object}
* @property {() => {}} binding.remove
*/
/**
* @typedef easterEgg
* @type {object}
* @property {'keybind' | 'click'} easterEgg.type
* @property {string} easterEgg.phrase
* @property {number} easterEgg.clickCount
* @property {object} easterEgg.element
* @property {object} easterEgg.variables
* @property {(binding: binding, variables: ) => Promise} easterEgg.run
* @property {() => {}} easterEgg.preload
*/
const utils = {
easterEggActive: false,
keybindString: '',
/**
* @param {string} string
* @param {easterEgg['run']} script
*/
createKeybind: (string, script) => {
let keybindString = '';
const listener = window.addEventListener('keydown', async (e) => {
const chars = string.split('');
if (chars.includes(e.key)) {
if (e.key === string.charAt(string.length)) keybindString = string.charAt(string.length);
else keybindString += e.key;
if (keybindString === string && !utils.easterEggActive) {
utils.easterEggActive = true;
try {
await script({
remove: () => window.removeEventListener('keydown', listener, true)
});
utils.easterEggActive = false;
} catch (e) {}
keybindString = '';
}
} else keybindString = '';
});
return {
remove: () => window.removeEventListener(listener)
};
}
};
/**
* @type {Array.<easterEgg>}
*/
const easterEggs = [];
easterEggs.push({
type: 'keybind',
phrase: 'smurf',
run: (binding, variables) => {
return new Promise((resolve, reject) => {
const audio = new Audio('/assets/misc/smurf.mp3');
audio.play();
audio.onplay = () => {
const imageElement = document.createElement('img');
imageElement.src = '/assets/img/smurf.jpg';
imageElement.style = `
position: fixed;
top: 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
z-index: 2147483647;
transition: 0.5s;`;
document.body.appendChild(imageElement);
const overlay = document.createElement('div');
overlay.style = `
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: #000;
z-index: 2147483646;`;
document.body.appendChild(overlay);
setTimeout(() => {
for (let i = 0; i < 360 * 3; i++) setTimeout(() => imageElement.style.filter = `hue-rotate(${i > 360 ? i - 360 * Math.trunc(i / 360) : i}deg)`, 20 * i);
imageElement.style.animation = '1.05s ease 0s infinite beat';
}, 7400);
audio.onended = () => {
imageElement.remove();
overlay.remove();
resolve();
}
}
});
}
});
easterEggs.push({
type: 'keybind',
phrase: 'polaris',
run: () => {
document.querySelector('.navbar img').style.animation = 'shake 0.5s';
setTimeout(() => document.querySelector('.navbar img').style.animation = '', 500);
}
});
easterEggs.push({
type: 'keybind',
phrase: 'ham',
run: () => {
},
preload: () => {
}
});
export default () => easterEggs.forEach(easterEgg => {
if (easterEgg.type === 'keybind') {
utils.createKeybind(easterEgg.phrase, easterEgg.run);
try {
easterEgg.preload();
} catch (e) { }
}
});
+3
View File
@@ -1,3 +1,4 @@
import loadEasterEggs from '/assets/js/eastereggs.js';
import PolarisError from '/assets/js/error.js';
import { load } from '/assets/js/settings.js';
import Search from '/assets/js/search.js';
@@ -10,6 +11,8 @@ const Settings = {
load: load
};
loadEasterEggs();
onbeforeunload = (e) => {
if (localStorage.getItem('prevent_close') === 'true') {
e.preventDefault();
-62
View File
@@ -44,66 +44,4 @@ class Theme {
}
}
let audioPlayed = false;
let smurfString = '';
let currentTheme = new Theme().theme;
const playSmurfAudio = () => {
if (!audioPlayed) {
const audio = new Audio('/assets/misc/smurf.mp3');
audio.play();
audioPlayed = true;
audio.onplay = () => {
const imageElement = document.createElement('img');
imageElement.src = '/assets/img/smurf.jpg';
imageElement.style = `
position: fixed;
top: 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
z-index: 2147483647;
transition: 0.5s;`;
document.body.appendChild(imageElement);
const overlay = document.createElement('div');
overlay.style = `
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: #000;
z-index: 2147483646;`;
document.body.appendChild(overlay);
setTimeout(() => {
for (let i = 0; i < 360 * 3; i++) setTimeout(() => imageElement.style.filter = `hue-rotate(${i > 360 ? i - 360 * Math.trunc(i / 360) : i}deg)`, 5 * i);
imageElement.style.animation = '.8s ease 0s infinite beat';
}, 7500);
audio.onended = () => {
document.body.setAttribute('data-theme', currentTheme);
imageElement.remove();
overlay.remove();
audioPlayed = false;
}
}
}
}
window.addEventListener('keydown', (event) => {
if (event.key === 's' || event.key === 'm' || event.key === 'u' || event.key === 'r' || event.key === 'f') {
if (event.key === 's') smurfString = 's';
else smurfString += event.key;
if (smurfString === 'smurf') {
playSmurfAudio();
smurfString = '';
}
} else smurfString = '';
});
export default new Theme();