MediaWiki:Common.js: Difference between revisions

From Blue Archive Wiki
Jump to navigation Jump to search
Content added Content deleted
(Affection tables integrated with StatCalc)
(Initialize server toggle, removed legacy mobile stylesheets loader)
 
(36 intermediate revisions by 2 users not shown)
Line 5: Line 5:
window.location.replace("https://bluearchive.wiki" + window.location.pathname);
window.location.replace("https://bluearchive.wiki" + window.location.pathname);
}
}
if (mw.config.get("skin") === "minerva") {
// This hack is required to get custom css to load in mobile view. See https://phabricator.wikimedia.org/T270845
loadMobileStylesheet();
}
function initCountdown() {
function initCountdown() {
var reset = new Date();
var reset = new Date();
Line 32: Line 28:
tick();
tick();
}
}

if (document.getElementsByClassName("server-toggle-parent").length > 0 || document.getElementsByClassName("server-toggle-jp-button").length > 0 || document.getElementsByClassName("tabber__tabs").length > 0) {
//console.log("Loading server switching js");
mw.loader.load ( '/w/index.php?title=MediaWiki:ServerToggle.js&action=raw&ctype=text/javascript' );
}

function initCharacterTable() {
function initCharacterTable() {
mw.loader.using("jquery.tablesorter", function() {
mw.loader.using("jquery.tablesorter", function() {
$("table.sortable").tablesorter({sortList: [{2: "desc"}, {1: "asc"}]});
$("table.sortable").tablesorter({sortList: [{2: "desc"}, {1: "asc"}]});
});
});
}
function loadMobileStylesheet() {
var head = document.getElementsByTagName("head")[0];
var common = document.createElement("link");
var mobile = document.createElement("link");
common.rel = mobile.rel = "stylesheet";
common.type = mobile.type = "text/css";
common.href = "https://bluearchive.miraheze.org/w/load.php?lang=en&modules=site.styles&only=styles&skin=minerva";
mobile.href = "https://bluearchive.miraheze.org/wiki/MediaWiki:Mobile.css?action=raw&ctype=text/css";
head.appendChild(common);
head.appendChild(mobile);
}
}
if (mw.config.get("wgIsArticle")) {
if (mw.config.get("wgIsArticle")) {
Line 54: Line 45:
initBirthdays();
initBirthdays();
}
}
if (mw.config.get("wgPageName") === "Characters") {
if (mw.config.get("wgPageName") === "Characters") {
initCharacterTable();
initCharacterTable();
}
}
if (mw.config.get("wgPageName") === "Characters" || mw.config.get("wgPageName") === "Characters_StatChart") {
mw.loader.load( '/w/index.php?title=MediaWiki:CharacterTable.js&action=raw&ctype=text/javascript' );
}
if (mw.config.get("wgPageName") === "An_Unconcealed_Heart/Mitcher") {
mw.loader.load( '/w/index.php?title=MediaWiki:Mitcher.js&action=raw&ctype=text/javascript' );
}
if (mw.config.get("wgPageName") === "A_Game_Before_the_New_Year's_Feast_~_One-and-Done_Match_~/Junby") {
mw.loader.load( '/w/index.php?title=MediaWiki:Junby.js&action=raw&ctype=text/javascript' );
}

const title_split = mw.config.get('wgTitle').toLowerCase().split("/");
if (mw.config.get('wgNamespaceNumber') === 0 && title_split.length === 2 && title_split[1] === 'momotalk') {
mw.loader.load( '/w/index.php?title=MediaWiki:MomotalkChoice.js&action=raw&ctype=text/javascript' );
}

}
}
});
});




/* Character stat calc*/
/* Character stat calc & affection table */
mw.loader.load( '/w/index.php?title=MediaWiki:StatCalc.js&action=raw&ctype=text/javascript' );
mw.loader.load( '/w/index.php?title=MediaWiki:StatCalc.js&action=raw&ctype=text/javascript' );


Line 67: Line 73:
/* Character birthdays - start */
/* Character birthdays - start */
function initBirthdays(){
function initBirthdays(){
const separator = ' <span></span> ';
const months = [
const months = [
'January',
'January',
Line 104: Line 109:


data_out.forEach(
data_out.forEach(
function (character) { html_out += '<a href="/wiki/'+character[0]+'">'+character[2]+'&nbsp;('+character[1].replace(' ', '&nbsp;')+')</a>'+separator; }
function (character) { html_out += '<a href="/wiki/'+character[0]+'">'+character[2]+'&nbsp;('+character[1].replace(' ', '&nbsp;')+')</a>'; }
);
);


$('#character-birthdays').append(html_out.substring(0,html_out.length-separator.length)).css( "display", "" );
$('#character-birthdays').append(html_out).css( "display", "" );
}
}
/* Character birthdays - end */
/* Character birthdays - end */


/* Character affection table - start */
const affection_start = 50;
const affection_cap = 50;
var affection_data = {};
var affectionTableCounter = 0;

$( document ).ready(function() {
initAffectionTable();
$(".affection-level input").on("change mouseup keyup click", function(){affectionChange($(this).closest("table"), $(this).val());});
$(".affection-data").children("div").on("click", function(){affectionChange($(this).closest("table"),$(this).attr('data-level'));});
});

function initAffectionTable(){
$(".character-affectiontable").each(function(){
var id = 'affectionTable-'+(++affectionTableCounter);
$(this).attr('id',id);
var data = {};

$(this).find(".affection-data > div").each(function(){
var level = $(this).attr('data-level');
data[level] = {};
var bonus = $(this).attr('data-stats').split(' ');

$.each( bonus, function( index ) {
bonus[index] = bonus[index].split('+');
data[level][bonus[index][0]] = parseInt(bonus[index][1]);
});
});
affection_data[id] = data;

$(this).find(".affection-level").html('<input type="number" value="'+affection_start+'" step="1" min="1" max="'+affection_cap+'" />');
affectionChange($(this), affection_start);
if (typeof affection !== 'undefined') {
affectionGet($(this).siblings(".character-stattable"));
statTableRecalc($(this).siblings(".character-stattable"));
}
});
}

function affectionChange (affectionTable, level){
var effective_bonus = {};
var html_out = '';

level = (typeof level !== 'undefined' && !isNaN(level)) ? level : 1 ;
if (level < 1) { affectionTable.find(".affection-level input").val(1); level = 1; }
if (level > affection_cap) { affectionTable.find(".affection-level input").val(affection_cap); level = affection_cap; }

for (var index = 2; index <= level; index++) {
$.each( affection_data[affectionTable.attr('id')][index], function(stat_name, stat_value){
if (typeof effective_bonus[stat_name] == 'undefined') effective_bonus[stat_name] = 0;
effective_bonus[stat_name] += stat_value;
});
}
$.each( effective_bonus, function(stat_name, stat_value){
html_out += '<b>' + stat_name + '</b>' + ' +' + stat_value + ', ';
});

affection_data[affectionTable.attr('id')].current = effective_bonus;

if (affectionTable.find(".affection-level input").val() !== level) affectionTable.find(".affection-level input").val(level);
affectionTable.find(".affection-total").html(html_out.substring(0,html_out.length-2));

//update StatCalc if present
if (typeof affection !== 'undefined') {
affectionGet(affectionTable.siblings(".character-stattable"));
statTableRecalc(affectionTable.siblings(".character-stattable"));
}
}
/* Character affection table - end */




Line 199: Line 125:
var voice = $(".character td.character-voice");
var voice = $(".character td.character-voice");
if (voice.length && voice.attr('data-voice').length) {
if (voice.length && voice.attr('data-voice').length) {
voice.addClass('character-voice-preview').on("click", function(){playCharacterVoice();});
voice.wrapInner('<span>');
voice.wrapInner('<span>');
if (voice.find("span").width() > voice.width()-36 ) voice.css('padding-right', '16px');
if (voice.find("span").width() > voice.width()-36 ) voice.css('padding-right', '16px');
voice.find("span").children().unwrap();
voice.find("span").children().unwrap();
}
voice.append('<audio class="voice-clip" src="'+voice.attr('data-voice')+'"></audio>').addClass('character-voice-preview');
}

function playCharacterVoice(){
var voice = $(".character td.character-voice");
if (voice.find('audio').length == 0) {
voice.append('<audio class="voice-clip" src="'+voice.attr('data-voice')+'"></audio>');
voice.find('audio')[0].volume=0.6;
voice.find('audio')[0].volume=0.6;
$(".character td.character-voice-preview").on("click", function(){ voice.find('audio')[0].play(); })
}
}
voice.find('audio')[0].play();
}
}
/* Character voice preview - end */
/* Character voice preview - end */


/* Character video preview - start */
$( document ).ready(function() {
//if video tab is open on inital page display
if ($(".character-images [data-title='Chibi']").attr('aria-hidden') == 'false' || window.location.hash == '#Chibi-0' || window.location.hash == '#Other-0' ) initCharacterVideo($('.character-images'));

//Tabber initializes late so events are bound at first click on parent div
$(".character-images div.tabber").on("click", function(){
if ($(".character-images [data-title='Chibi']").attr('aria-hidden') == 'false') initCharacterVideo($('.character-images'));
$(".character-images [data-title='Chibi']").on("click", function(){initCharacterVideo($('.character-images'));});
});
})

function initCharacterVideo(element) {
var container = element.find('div.video');
if (!container.attr('data-video-initialized')) {
var video_src = container.attr('data-videosrc');
container.html('<video autoplay loop playsinline><source src="'+video_src+'" type="video/webm" /></video>');
container.on("click", function(){playToggle(container)});
container.attr('data-video-initialized', true);
}
}

function playToggle(element) {
var video = element.find('video').get(0);
if (video.paused) video.play();
else video.pause();
}
/* Character video preview - end */


/* XP tables */
mw.loader.load( '/w/index.php?title=MediaWiki:XPtable.js&action=raw&ctype=text/javascript' );

Latest revision as of 07:09, 25 May 2024

/* Any JavaScript here will be loaded for all users on every page load. */

$(function() {
	if (window.location.host === "bluearchive.miraheze.org") {
		window.location.replace("https://bluearchive.wiki" + window.location.pathname);
	}
    function initCountdown() {
        var reset = new Date();
        reset.setUTCHours(19, 0, 0, 0);
        
        function pad(n) {
            return ("0" + (n | 0)).slice(-2);
        }

        function tick() {
            var now = new Date();
            if (now > reset) {
            reset.setUTCDate(reset.getUTCDate() + 1);
            }
            var remaining = ((reset - now) /  1000);
            var hours = (remaining / 3600) % 60;
            var minutes = (remaining / 60) % 60;
            var seconds = remaining % 60;
            document.getElementById("resetCountdown").innerHTML = pad(hours) + ":" + pad(minutes) + ":" + pad(seconds);
            setTimeout(tick, 1000);
        }

        tick();
    }

    if (document.getElementsByClassName("server-toggle-parent").length > 0 || document.getElementsByClassName("server-toggle-jp-button").length > 0 || document.getElementsByClassName("tabber__tabs").length > 0) {
        //console.log("Loading server switching js");
        mw.loader.load ( '/w/index.php?title=MediaWiki:ServerToggle.js&action=raw&ctype=text/javascript' );
    }

    function initCharacterTable() {
        mw.loader.using("jquery.tablesorter", function() {
            $("table.sortable").tablesorter({sortList: [{2: "desc"}, {1: "asc"}]});
        });
    }
    if (mw.config.get("wgIsArticle")) {
    	// These won't run in Edit mode
	    if (mw.config.get("wgPageName") === "Main_Page") {
	        initCountdown();
	        initBirthdays();
	    }
		if (mw.config.get("wgPageName") === "Characters") {
	        initCharacterTable();
	    }
	    if (mw.config.get("wgPageName") === "Characters" || mw.config.get("wgPageName") === "Characters_StatChart") {
			mw.loader.load( '/w/index.php?title=MediaWiki:CharacterTable.js&action=raw&ctype=text/javascript' );
	    }
		if (mw.config.get("wgPageName") === "An_Unconcealed_Heart/Mitcher") {
	        mw.loader.load( '/w/index.php?title=MediaWiki:Mitcher.js&action=raw&ctype=text/javascript' );
	    }
        if (mw.config.get("wgPageName") === "A_Game_Before_the_New_Year's_Feast_~_One-and-Done_Match_~/Junby") {
	        mw.loader.load( '/w/index.php?title=MediaWiki:Junby.js&action=raw&ctype=text/javascript' );
	    }

        const title_split = mw.config.get('wgTitle').toLowerCase().split("/");
        if (mw.config.get('wgNamespaceNumber') === 0 && title_split.length === 2 && title_split[1] === 'momotalk') {
            mw.loader.load( '/w/index.php?title=MediaWiki:MomotalkChoice.js&action=raw&ctype=text/javascript' ); 
        } 

    }
});


/* Character stat calc & affection table */
mw.loader.load( '/w/index.php?title=MediaWiki:StatCalc.js&action=raw&ctype=text/javascript' );


/* Character birthdays - start */
function initBirthdays(){
	const months = [
		'January',
		'February',
		'March',
		'April',
		'May',
		'June',
		'July',
		'August',
		'September',
		'October',
		'November',
		'December'
	];

	var birthdays = [];
	var data_out = [];
	var html_out = '';

	var raw_data = $('#character-birthdays').attr('data-birthdays').split('&');
	
	raw_data.forEach(function (character) {
		var char_data = character.split(' |');
		char_data.push(char_data[0].split('(')[0].trim()); //normalized name
		if (!birthdays.some(function (data) {return data[2] == char_data[2];})) birthdays.push(char_data);
	});

	for (var index = -1; index <= 30; index++) {
		var date = new Date();
		date.setDate(date.getDate() + index);
		data_out = data_out.concat(birthdays.filter(function (data) { return data[1] == months[date.getMonth()]+' '+date.getDate();}));

		if (data_out.length >= 5) { break; }
	}

	data_out.forEach(
		function (character) { html_out += '<a href="/wiki/'+character[0]+'">'+character[2]+'&nbsp;('+character[1].replace(' ', '&nbsp;')+')</a>'; }
	);

	$('#character-birthdays').append(html_out).css( "display", "" );
}
/* Character birthdays - end */


/* Character voice preview - start */
$( document ).ready(function() {
	initCharacterVoice();
});

function initCharacterVoice(){
    var voice = $(".character td.character-voice");
    if (voice.length && voice.attr('data-voice').length) {
        voice.addClass('character-voice-preview').on("click", function(){playCharacterVoice();});
        voice.wrapInner('<span>');
        if (voice.find("span").width() > voice.width()-36 ) voice.css('padding-right', '16px');
        voice.find("span").children().unwrap();
    }
}

function playCharacterVoice(){
    var voice = $(".character td.character-voice");
    if (voice.find('audio').length == 0) {
        voice.append('<audio class="voice-clip" src="'+voice.attr('data-voice')+'"></audio>');
        voice.find('audio')[0].volume=0.6;
    }
    voice.find('audio')[0].play();
}
/* Character voice preview - end */


/* Character video preview - start */
$( document ).ready(function() {
    //if video tab is open on inital page display
    if ($(".character-images [data-title='Chibi']").attr('aria-hidden') == 'false' || window.location.hash == '#Chibi-0' || window.location.hash == '#Other-0' ) initCharacterVideo($('.character-images'));

    //Tabber initializes late so events are bound at first click on parent div
    $(".character-images div.tabber").on("click", function(){ 
        if ($(".character-images [data-title='Chibi']").attr('aria-hidden') == 'false') initCharacterVideo($('.character-images'));
        $(".character-images [data-title='Chibi']").on("click", function(){initCharacterVideo($('.character-images'));}); 
    });
})

function initCharacterVideo(element) {
    var container = element.find('div.video');
    if (!container.attr('data-video-initialized')) {
        var video_src = container.attr('data-videosrc');
        container.html('<video autoplay loop playsinline><source src="'+video_src+'" type="video/webm" /></video>');
        container.on("click", function(){playToggle(container)});
        container.attr('data-video-initialized', true);
    }
}

function playToggle(element) {
    var video = element.find('video').get(0);
    if (video.paused) video.play();
    else video.pause();
}
/* Character video preview - end */


/* XP tables */
mw.loader.load( '/w/index.php?title=MediaWiki:XPtable.js&action=raw&ctype=text/javascript' );