More actions
Created page with "→Any JavaScript here will be loaded for users using the UniWiki skin: //April Fools 4/1/2020 Code ======================================= opts = { pageSelector: ".pa..." |
No edit summary |
||
| Line 116: | Line 116: | ||
} | } | ||
//END April Fools 4/1/2020 Code ======================================= | //END April Fools 4/1/2020 Code ======================================= | ||
Revision as of 22:33, 31 March 2020
/* Any JavaScript here will be loaded for users using the UniWiki skin */
//April Fools 4/1/2020 Code =======================================
opts = {
pageSelector: ".page-User_Rayanth_SeekritStuff",
AprilFoolEnable: true,
className: 'april-fools',
frequency: 0.1,
expiryThresholdMs: 2000,
addStyleIntvl: null,
clearStyleIntvl: null,
maxFlicks: 18,
minFlicks: 6,
};
// The "oh dear gods my eyes, turn it off" Button
$(function(){
var r = $('<input type="checkbox" name="chkAprilFoolEnable" value="3" class="lcs_check lcs_tt1" checked="checked" autocomplete="off" />');
var AprilFoolText = '<div style="margin-bottom:1em; padding:0em; font-size: 20px; font-weight:bold; text-align:center; border:1px solid #f43e29; background: #060606; width:auto; color: #ffffff;">The UniWiki is being invaded by the Triglavians!!!</div>';
$(opts.pageSelector + " .mw-parser-output").prepend(AprilFoolText, 'Triglavian Invasion' , r);
startUpAprilFools();
});
function startUpAprilFools(){
opts.addStyleIntvl = setInterval(() => addStyleToRandomWordsInJQueryObject($(opts.pageSelector + ' .mw-parser-output'), opts), 2000);
addStyleToRandomWordsInJQueryObject($(opts.pageSelector + " .mw-parser-output"), opts);
opts.clearStyleIntvl = setInterval(() => removeExpiredStyles(opts), 2000);
opts.AprilFoolEnable = true;
}
function shutDownAprilFools(){
opts.AprilFoolEnable = false;
clearInterval(opts.addStyleIntvl);
clearInterval(opts.clearInterval);
$('span.april-fools').contents().unwrap();
}
function addStyleToText(text, className, ratio) {
tokens = text.split(' ');
result = '';
for (let token of tokens) {
if (token.trim() === '') {
continue;
}
const shouldAddStyle = ratio > Math.random();
if (shouldAddStyle) {
token = `<span class="${className}" data-timestamp="${Date.now()}">${token}</span>`
}
result += `${token} `;
}
return result;
}
function addStyleToRandomWordsInJQueryObject(jqueryObject, opts) {
if (opts.AprilFoolEnable === false) { return };
cur_time = Date.now()
let objects = [jqueryObject];
while (objects.length > 0) {
const object = objects.pop();
let $object = $(object);
if (object.nodeType === Node.TEXT_NODE) {
if (object.textContent.trim() !== ''){
const result = addStyleToText(object.textContent, opts.className, opts.frequency);
$object.replaceWith(result);
}
}
else {
const contents = $object.contents();
objects = objects.concat(contents.toArray());
}
}
flicker_text(cur_time);
flicker_images();
}
function removeExpiredStyles(opts) {
const spans = $('span.april-fools').filter((_, s) => {
const timestamp = s.attributes['data-timestamp'].value;
return (Date.now() - timestamp) > opts.expiryThresholdMs;
})
.contents()
.unwrap();
}
async function flicker_text(cur_time){
var amount = Math.round(Math.random() * (opts.maxFlicks-opts.minFlicks) + opts.minFlicks);
const spans = $('span.april-fools').filter((_, s) => {
const timestamp = s.attributes['data-timestamp'].value;
return timestamp > cur_time;
})
for(let iter = 0; iter < amount; iter++)
{
spans.toggleClass('april-fools');
await sleep(Math.round(Math.random() * 100));
}
spans.toggleClass('april-fools', true);
}
async function flicker_images(){
if (opts.frequency < Math.random()) { return };
var amount = Math.round(Math.random() * (opts.maxFlicks-opts.minFlicks) + opts.minFlicks);
const trigs = $('.AF2020_trig')
const origs = $('.AF2020_orig')
for(let iter = 0; iter < amount; iter++)
{
trigs.toggle();
origs.toggle();
await sleep(Math.round(Math.random() * 100));
}
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
//END April Fools 4/1/2020 Code =======================================