sync
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
export default {
|
||||
port: 8080,
|
||||
mode: 'dev',
|
||||
minify: true,
|
||||
assetScrambling: true,
|
||||
minify: false,
|
||||
assetScrambling: false,
|
||||
allowDangerousTemplateInsert: true
|
||||
};
|
||||
@@ -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); }
|
||||
}
|
||||
@@ -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) { }
|
||||
}
|
||||
});
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
Reference in New Issue
Block a user