Difference between revisions of "MediaWiki:Uniwiki.js"

From EVE University Wiki
Jump to: navigation, search
Line 1: Line 1:
/* Any JavaScript here will be loaded for users using the UniWiki skin */
 
 
 
 
//April Fools 4/1/2020 Code =======================================
 
//April Fools 4/1/2020 Code =======================================
 
opts = {
 
opts = {
     pageSelector: ".page-User_Rayanth_SeekritStuff",
+
     pageSelector: ".page-Main_Page",
 
     AprilFoolEnable: true,
 
     AprilFoolEnable: true,
 
     className: 'april-fools',
 
     className: 'april-fools',
Line 24: Line 21:
  
 
function startUpAprilFools(){
 
function startUpAprilFools(){
     opts.addStyleIntvl = setInterval(() => addStyleToRandomWordsInJQueryObject($(opts.pageSelector +  ' .mw-parser-output'), opts), 2000);
+
     opts.addStyleIntvl = setInterval(function() {addStyleToRandomWordsInJQueryObject($(opts.pageSelector +  ' .mw-parser-output'), opts)}, 2000);
 
     addStyleToRandomWordsInJQueryObject($(opts.pageSelector +  " .mw-parser-output"), opts);
 
     addStyleToRandomWordsInJQueryObject($(opts.pageSelector +  " .mw-parser-output"), opts);
     opts.clearStyleIntvl = setInterval(() => removeExpiredStyles(opts), 2000);
+
     opts.clearStyleIntvl = setInterval(function() {removeExpiredStyles(opts)}, 2000);
 
     opts.AprilFoolEnable = true;
 
     opts.AprilFoolEnable = true;
 
}
 
}
Line 76: Line 73:
 
    
 
    
 
function removeExpiredStyles(opts) {
 
function removeExpiredStyles(opts) {
     const spans = $('span.april-fools').filter((_, s) => {
+
     const spans = $('span.april-fools').filter(function(_, s) {
 
         const timestamp = s.attributes['data-timestamp'].value;
 
         const timestamp = s.attributes['data-timestamp'].value;
 
         return (Date.now() - timestamp) > opts.expiryThresholdMs;
 
         return (Date.now() - timestamp) > opts.expiryThresholdMs;
Line 84: Line 81:
 
}
 
}
 
    
 
    
async function flicker_text(cur_time){
+
function flicker_text(cur_time){
 
     var amount =  Math.round(Math.random() * (opts.maxFlicks-opts.minFlicks) + opts.minFlicks);
 
     var amount =  Math.round(Math.random() * (opts.maxFlicks-opts.minFlicks) + opts.minFlicks);
     const spans = $('span.april-fools').filter((_, s) => {
+
     const spans = $('span.april-fools').filter(function(_, s) {
 
         const timestamp = s.attributes['data-timestamp'].value;
 
         const timestamp = s.attributes['data-timestamp'].value;
 
         return timestamp > cur_time;
 
         return timestamp > cur_time;
 
         })
 
         })
 
+
    if (amount %2 === 1) { amount++}
 
     for(let iter = 0; iter < amount; iter++)
 
     for(let iter = 0; iter < amount; iter++)
     {
+
     {      
 
         spans.toggleClass('april-fools');
 
         spans.toggleClass('april-fools');
         await sleep(Math.round(Math.random() * 100));
+
         sleep = Math.round(Math.random() * 1000)
 +
        setTimeout(function() {spans.toggleClass('april-fools');}, sleep )
 
     }
 
     }
 
     spans.toggleClass('april-fools', true);
 
     spans.toggleClass('april-fools', true);
 
}
 
}
  
async function flicker_images(){
+
function flicker_images(){
 
     if (opts.frequency < Math.random()) { return };
 
     if (opts.frequency < Math.random()) { return };
 
     var amount =  Math.round(Math.random() * (opts.maxFlicks-opts.minFlicks) + opts.minFlicks);
 
     var amount =  Math.round(Math.random() * (opts.maxFlicks-opts.minFlicks) + opts.minFlicks);
Line 106: Line 104:
 
     for(let iter = 0; iter < amount; iter++)
 
     for(let iter = 0; iter < amount; iter++)
 
     {
 
     {
         trigs.toggle();
+
         sleep = Math.round(Math.random() * 1000);
         origs.toggle();
+
         setTimeout(function() {trigs.toggle(); origs.toggle();}, sleep )
        await sleep(Math.round(Math.random() * 100));
 
 
     }
 
     }
 
}
 
}
  
function sleep(ms) {
+
// On/Off switch code==========================
    return new Promise(resolve => setTimeout(resolve, ms));
+
(function($){
}
+
"use strict";
 +
if(typeof($.fn.lc_switch) != 'undefined') {return false;} // prevent multiple script inits
 +
 +
$.fn.lc_switch = function(on_text, off_text) {
 +
// destruct
 +
$.fn.lcs_destroy = function() {
 +
$(this).each(function() {
 +
                var $wrap = $(this).parents('.lcs_wrap');
 +
$wrap.children().not('input').remove();
 +
$(this).unwrap();
 +
            });
 +
return true;
 +
};
 +
 
 +
// set to ON
 +
$.fn.lcs_on = function() {
 +
$(this).each(function(i, v) {
 +
                var $wrap = $(this).parents('.lcs_wrap'),
 +
$input = $wrap.find('input');
 +
// if is already on - skip
 +
if($wrap.find('.lcs_on').length) {
 +
return true;
 +
}
 +
(typeof($.fn.prop) == 'function') ? $input.prop('checked', true) : $input.attr('checked', true);
 +
$input.trigger('lcs-on');
 +
$input.trigger('lcs-statuschange');
 +
$wrap.find('.lcs_switch').removeClass('lcs_off').addClass('lcs_on');
 +
// if radio - disable other ones
 +
if( $wrap.find('.lcs_switch').hasClass('lcs_radio_switch') ) {
 +
var f_name = $input.attr('name');
 +
$wrap.parents('form').find('input[name='+f_name+']').not($input).lcs_off();
 +
}
 +
            });
 +
return true;
 +
};
 +
 +
// set to OFF
 +
$.fn.lcs_off = function() {
 +
$(this).each(function() {
 +
                var $wrap = $(this).parents('.lcs_wrap'),
 +
$input = $wrap.find('input');
 +
 +
// if is already off - skip
 +
if(!$wrap.find('.lcs_on').length) {
 +
return true;
 +
}
 +
 +
// uncheck
 +
(typeof($.fn.prop) == 'function') ? $input.prop('checked', false) : $input.attr('checked', false);
 +
 +
$input.trigger('lcs-off');
 +
$input.trigger('lcs-statuschange');
 +
$wrap.find('.lcs_switch').removeClass('lcs_on').addClass('lcs_off');
 +
            });
 +
return true;
 +
};
 +
 +
// toggle status
 +
$.fn.lcs_toggle = function() {
 +
$(this).each(function() {
 +
 
 +
// not for radios
 +
if( $(this).hasClass('lcs_radio_switch')) {
 +
return true;  
 +
}
 +
($(this).is(':checked')) ? $(this).lcs_off() : $(this).lcs_on();
 +
            });
 +
return true;
 +
};
 +
 +
// construct
 +
return this.each(function(){
 +
// check against double init
 +
if( !$(this).parent().hasClass('lcs_wrap') ) {
 +
// default texts
 +
var ckd_on_txt = (typeof(on_text) == 'undefined') ? 'ON' : on_text,
 +
ckd_off_txt = (typeof(off_text) == 'undefined') ? 'OFF' : off_text;  
 +
  // labels structure
 +
var on_label = (ckd_on_txt) ? '<div class="lcs_label lcs_label_on">'+ ckd_on_txt +'</div>' : '',
 +
off_label = (ckd_off_txt) ? '<div class="lcs_label lcs_label_off">'+ ckd_off_txt +'</div>' : '';
 +
// default states
 +
var disabled = ($(this).is(':disabled')) ? true : false,
 +
active = ($(this).is(':checked')) ? true : false;
 +
var status_classes = '';
 +
status_classes += (active) ? ' lcs_on' : ' lcs_off';
 +
if(disabled) {
 +
status_classes += ' lcs_disabled';
 +
}  
 +
// wrap and append
 +
var structure =
 +
'<div class="lcs_switch '+status_classes+'">' +
 +
'<div class="lcs_cursor"></div>' +
 +
on_label + off_label +
 +
'</div>';  
 +
if( $(this).is(':input') && ($(this).attr('type') == 'checkbox' || $(this).attr('type') == 'radio') ) {
 +
$(this).wrap('<div class="lcs_wrap"></div>');
 +
$(this).parent().append(structure);
 +
$(this).parent().find('.lcs_switch').addClass('lcs_'+ $(this).attr('type') +'_switch');
 +
}
 +
}
 +
        });
 +
};
  
 +
// handlers
 +
$(document).ready(function() {
 +
// on click
 +
$(document).on('click tap', '.lcs_switch:not(.lcs_disabled)', function(e) {
 +
if( $(this).hasClass('lcs_on') ) {
 +
if( !$(this).hasClass('lcs_radio_switch') ) { // not for radio
 +
$(this).lcs_off();
 +
}
 +
} else {
 +
$(this).lcs_on();
 +
}
 +
});
 +
 +
// on checkbox status change
 +
$(document).on('change', '.lcs_wrap input', function() {
 +
( $(this).is(':checked') ) ? $(this).lcs_on() : $(this).lcs_off();
 +
});
 +
});
 +
})(jQuery);
  
 +
$(document).ready(function(e) {
 +
    $('input').lc_switch("Enabled", "Disabled");
 +
    // triggered each time a field is checked
 +
    $(document).on('lcs-on', '.lcs_check', function() {
 +
        //handle chkSysMineable
 +
        if($(this).attr("name") == 'chkAprilFoolEnable') {
 +
            opts.AprilFoolEnable = true;
 +
            startUpAprilFools();
 +
        };
 +
    });
 +
    // triggered each time a field is unchecked
 +
    $(document).on('lcs-off', '.lcs_check', function() {
 +
        //handle chkSysMineable
 +
        if($(this).attr("name") == 'chkAprilFoolEnable') {
 +
            opts.AprilFoolEnable = false;
 +
            shutDownAprilFools();
 +
        };
 +
    });
 +
});
 
//END April Fools 4/1/2020 Code =======================================
 
//END April Fools 4/1/2020 Code =======================================

Revision as of 23:08, 31 March 2020

//April Fools 4/1/2020 Code =======================================
opts = {
    pageSelector: ".page-Main_Page",
    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(function() {addStyleToRandomWordsInJQueryObject($(opts.pageSelector +  ' .mw-parser-output'), opts)}, 2000);
    addStyleToRandomWordsInJQueryObject($(opts.pageSelector +  " .mw-parser-output"), opts);
    opts.clearStyleIntvl = setInterval(function() {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(function(_, s) {
        const timestamp = s.attributes['data-timestamp'].value;
        return (Date.now() - timestamp) > opts.expiryThresholdMs;
        })
    .contents()
    .unwrap();
}
  
function flicker_text(cur_time){
    var amount =  Math.round(Math.random() * (opts.maxFlicks-opts.minFlicks) + opts.minFlicks);
    const spans = $('span.april-fools').filter(function(_, s) {
        const timestamp = s.attributes['data-timestamp'].value;
        return timestamp > cur_time;
        })
    if (amount %2 === 1) { amount++}
    for(let iter = 0; iter < amount; iter++)
    {        
        spans.toggleClass('april-fools');
        sleep = Math.round(Math.random() * 1000)
        setTimeout(function() {spans.toggleClass('april-fools');}, sleep )
    }
    spans.toggleClass('april-fools', true);
}

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++)
    {
        sleep = Math.round(Math.random() * 1000);
        setTimeout(function() {trigs.toggle(); origs.toggle();}, sleep )
    }
}

// On/Off switch code==========================
(function($){
	"use strict";
	if(typeof($.fn.lc_switch) != 'undefined') {return false;} // prevent multiple script inits	
	
	$.fn.lc_switch = function(on_text, off_text) {
		// destruct
		$.fn.lcs_destroy = function() {			
			$(this).each(function() {
                var $wrap = $(this).parents('.lcs_wrap');				
				$wrap.children().not('input').remove();
				$(this).unwrap();
            });
			return true;
		};	

		// set to ON
		$.fn.lcs_on = function() {
			$(this).each(function(i, v) {
                var $wrap 	= $(this).parents('.lcs_wrap'),
					$input 	= $wrap.find('input');				
				// if is already on - skip
				if($wrap.find('.lcs_on').length) {
					return true;	
				}				
				(typeof($.fn.prop) == 'function') ? $input.prop('checked', true) : $input.attr('checked', true);				
				$input.trigger('lcs-on');
				$input.trigger('lcs-statuschange');
				$wrap.find('.lcs_switch').removeClass('lcs_off').addClass('lcs_on');				
				// if radio - disable other ones 
				if( $wrap.find('.lcs_switch').hasClass('lcs_radio_switch') ) {					
					var f_name = $input.attr('name');
					$wrap.parents('form').find('input[name='+f_name+']').not($input).lcs_off();	
				}
            });			
			return true;
		};			
		
		// set to OFF
		$.fn.lcs_off = function() {			
			$(this).each(function() {
                var $wrap 	= $(this).parents('.lcs_wrap'),
					$input 	= $wrap.find('input');
				
				// if is already off - skip
				if(!$wrap.find('.lcs_on').length) {
					return true;	
				}
				
				// uncheck
				(typeof($.fn.prop) == 'function') ? $input.prop('checked', false) : $input.attr('checked', false);
				
				$input.trigger('lcs-off');
				$input.trigger('lcs-statuschange');
				$wrap.find('.lcs_switch').removeClass('lcs_on').addClass('lcs_off');
            });			
			return true;
		};			
		
		// toggle status
		$.fn.lcs_toggle = function() {
			$(this).each(function() {

				// not for radios
				if( $(this).hasClass('lcs_radio_switch')) {
					return true;	   
				}				
				($(this).is(':checked')) ? $(this).lcs_off() : $(this).lcs_on();
            });			
			return true;
		};			
		
		// construct
		return this.each(function(){			
			// check against double init
			if( !$(this).parent().hasClass('lcs_wrap') ) {			
				// default texts
				var ckd_on_txt 	= (typeof(on_text) == 'undefined') ? 'ON' : on_text,
					ckd_off_txt = (typeof(off_text) == 'undefined') ? 'OFF' : off_text;			   
			   // labels structure
				var on_label 	= (ckd_on_txt) ? '<div class="lcs_label lcs_label_on">'+ ckd_on_txt +'</div>' : '',
					off_label 	= (ckd_off_txt) ? '<div class="lcs_label lcs_label_off">'+ ckd_off_txt +'</div>' : '';				
				// default states
				var disabled 	= ($(this).is(':disabled')) ? true : false,
					active 		= ($(this).is(':checked'))  ? true : false;				
				var status_classes = '';
				status_classes += (active) ? ' lcs_on' : ' lcs_off'; 
				if(disabled) {
					status_classes += ' lcs_disabled';
				} 			   
				// wrap and append
				var structure = 
				'<div class="lcs_switch '+status_classes+'">' +
					'<div class="lcs_cursor"></div>' +
					on_label + off_label +
				'</div>';			   
				if( $(this).is(':input') && ($(this).attr('type') == 'checkbox' || $(this).attr('type') == 'radio') ) {					
					$(this).wrap('<div class="lcs_wrap"></div>');
					$(this).parent().append(structure);					
					$(this).parent().find('.lcs_switch').addClass('lcs_'+ $(this).attr('type') +'_switch');
				}
			}
        });
	};	

	// handlers
	$(document).ready(function() {		
		// on click
		$(document).on('click tap', '.lcs_switch:not(.lcs_disabled)', function(e) {
			if( $(this).hasClass('lcs_on') ) {
				if( !$(this).hasClass('lcs_radio_switch') ) { // not for radio
					$(this).lcs_off();
				}
			} else {
				$(this).lcs_on();	
			}
		});	
		
		// on checkbox status change
		$(document).on('change', '.lcs_wrap input', function() {
			( $(this).is(':checked') ) ? $(this).lcs_on() : $(this).lcs_off();	
		});		
	});	
})(jQuery);

$(document).ready(function(e) {
    $('input').lc_switch("Enabled", "Disabled");
    // triggered each time a field is checked
    $(document).on('lcs-on', '.lcs_check', function() {
        //handle chkSysMineable
        if($(this).attr("name") == 'chkAprilFoolEnable') {
            opts.AprilFoolEnable = true;
            startUpAprilFools();
        };
    });
    // triggered each time a field is unchecked
    $(document).on('lcs-off', '.lcs_check', function() {
        //handle chkSysMineable
        if($(this).attr("name") == 'chkAprilFoolEnable') {
            opts.AprilFoolEnable = false;
            shutDownAprilFools();
        };
    });
});	 
//END April Fools 4/1/2020 Code =======================================