MediaWiki:Common.js

From Fear and Hunger Wiki
Jump to navigation Jump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/* Any JavaScript here will be loaded for all users on every page load. */

/* ↓ The following part is from Fgo.wiki: https://fgo.wiki/w/MediaWiki:Common.js */

// Custom Floating Contents Style Additions
$(function(){
    var toc = $('#toc');
    if (!toc.hasClass('toc-custom-disable')) {
        var tocAfter = toc.clone().addClass('toc-custom');
	toc.after( tocAfter ); 
	tocAfter.css('marginRight', -Math.min(tocAfter.outerWidth(), 347));
    }
});

/**
 * Make sidebar sections collapsible
 */
$(function(){
	$panel = $('#mw-panel');
	$("#mw-panel .portal").each(function(index, el){
		var $el = $(el);
		var $id = $el.attr("id");
		if(!$id){
			return;
		}
		// for < 1366px
		$el.removeClass('expanded');
		// for >= 1366px
		if(localStorage.getItem('sidebar_c_'+$id) === "y"){
			$el.addClass('collapsed').find('.body').slideUp(0);
		}
	});
	$("#mw-panel .portal").on("click", "h3", function(event){
		var $el = $(this).parent();
		var $id = $el.attr("id");
		if(!$id){
			return;
		}
		event.stopPropagation();
		if($panel.width() < 200){
			$el.toggleClass('collapsed');
			if($el.hasClass('collapsed')){ // more consistent between class and slide status.
				localStorage.setItem('sidebar_c_'+$id, "y");
				$el.find('.body').slideUp('fast');
			}
			else{
				localStorage.setItem('sidebar_c_'+$id, "n");
				$el.find('.body').slideDown('fast');
			}
		}
		else{
			$("#mw-panel .portal").not($el).removeClass('expanded');
			$el.toggleClass('expanded');
		}
	});
});
    // #region Sidebar toggle
    ( function () {
        $( '<div id="nav-sidebar-toggle">' )
	        .prependTo( '#left-navigation' )
	        .on( 'click', function () {
		        document.documentElement.classList.toggle( SIDEBAR_HIDDEN_CLASS );
                localStorage.setItem( SIDEBAR_HIDDEN_CLASS, $( 'body' ).hasClass( SIDEBAR_HIDDEN_CLASS ) ? '1' : '0' );
	        } );
    } )();

/* Copied from https://terraria.wiki.gg/wiki/MediaWiki:Common.js */
/**
 * content width toggle
 */
$(function(){
	$body = $('body');
	$('<div>', { id: 'nav-content-size-toggle' } ).append(
		$('<span>')
		).prependTo($('#mw-head'))
	.on('click', function(){
		$body.toggleClass('content-size-expanded');
	});
});

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 * sidebar nav menu toggle for mobile view
 */
$(function(){
	$('<div class="menu-toggle"/>').insertBefore($('#p-logo')).on("click", function(event){
		event.stopPropagation();
		$(this).toggleClass('expanded');
	});
});

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////

/**
 * AJAX tables
 */
$(function() {
	var l10n = l10nFactory(mw.config.get('wgUserLanguage'),{
		showData: {
			'en': 'show data',
			'de': 'Daten anzeigen',
			'fr': 'affiche les données',
			'zh': '显示数据',
			'zh-cn': '显示数据'
		},
		wait: {
			'en': 'Please wait, the content is being loaded...',
			'de': 'Bitte warten, der Inhalt wird geladen...',
			'fr': 'Veuillez patienter pendant le chargement du contenu...',
			'pt': 'Por favor espere, o conteúdo está sendo carregado...',
			'ru': 'Пожалуйста, подождите, содержимое загружается...',
			'uk': 'Будь ласка, зачекайте вміст завантажиться…',
			'zh': '请稍候,正在加载内容……',
			'zh-cn': '请稍候,正在加载内容……'
		},
		edit: {
			'en': 'edit',
			'de': 'bearbeiten',
			'fr': 'modifier',
			'pt': 'Editar',
			'ru': 'править',
			'uk': 'редагувати',
			'zh': '编辑',
			'zh-cn': '编辑'
		},
		hide: {
			'en': 'hide',
			'de': 'verbergen',
			'fr': 'masquer',
			'pt': 'Esconder',
			'ru': 'свернуть',
			'uk': 'згорнути',
			'zh': '隐藏',
			'zh-cn': '隐藏'
		},
		show: {
			'en': 'show',
			'de': 'anzeigen',
			'fr': 'afficher',
			'pt': 'Mostrar',
			'ru': 'развернуть',
			'uk': 'розгорнути',
			'zh': '显示',
			'zh-cn': '显示'
		},
		error: {
			'en': 'Unable to load table; the source article for it might not exist.',
			'de': 'Kann Tabelle nicht laden; möglicherweise existiert der Quellartikel nicht.',
			'fr': 'Impossible de charger cette table; l\'article originel ne semble pas exister.',
			'pt': 'Não é possível a carregar tabela; o artigo fonte pode não existir.',
			'ru': 'Не удалось загрузить содержимое; возможно, целевая страница не существует.',
			'uk': 'Неможливо завантажити вміст; можливо, цільова сторінка не існує.',
			'zh': '无法加载表格,其源文章可能不存在。',
			'zh-cn': '无法加载表格,其源文章可能不存在。'
		}
	});
	$("table.ajax").each(function (i) {
		var table = $(this).attr("id", "ajaxTable" + i);
		table.find(".nojs-message").remove();
		var headerLinks = $('<span style="float: right;">').appendTo(table.find('th').first());
		var cell = table.find("td").first();
		var needLink = true;
		cell.parent().show();
		if (cell.hasClass("showLinkHere")) {
			var old = cell.html();
			var rep = old.replace(/\[link\](.*?)\[\/link\]/, '<a href="javascript:;" class="ajax-load-link">$1</a>');
			if (rep !== old) {
				cell.html(rep);
				needLink = false;
			}
		}
		if (needLink){
			headerLinks.html('[<a href="javascript:;" class="ajax-load-link">'+l10n('showData')+'</a>]');
		}
		var removeTerrariaClass = table.data('ajax-remove-terraria-class');
		table.find(".ajax-load-link").parent().addBack().filter('a').click(function(event) {
			event.preventDefault();
			var sourceTitle = table.data('ajax-source-page'), baseLink = mw.config.get('wgScript') + '?';
			cell.text(l10n('wait'));
			$.get(baseLink + $.param({ action: 'render', title: sourceTitle }), function (data) {
				if (!data) {
					return;
				}
				cell.html(data);
				cell.find('.ajaxHide').remove();
				if (removeTerrariaClass) {
					cell.find('.terraria').removeClass('terraria');
				}
				if (cell.find("table.sortable").length) {
					mw.loader.using('jquery.tablesorter', function() {
						cell.find("table.sortable").tablesorter();
					});
				}
				headerLinks.text('[');
				headerLinks.append($('<a>'+l10n('edit')+'</a>').attr('href', baseLink + $.param({ action: 'edit', title: sourceTitle })));
				headerLinks.append(document.createTextNode(']\u00A0['));
				var shown = true;
				$("<a href='javascript:;'>"+l10n('hide')+"</a>").click(function() {
					shown = !shown;
					cell.toggle(shown);
					$(this).text(shown ? l10n('hide') : l10n('show'));
				}).appendTo(headerLinks);
				headerLinks.append(document.createTextNode(']'));
			}).error(function() {
				cell.text(l10n('error'));
			});
		});
	});
});

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

/**
 * translation project banner
 */
$(function() {
	var $btn = $('#indic-project #indic-project-flag');
	if (!$btn.length) {
		return;
	}
	var $elementToToggle = $('#indic-project');
	$btn.on('click', function () {
		$elementToToggle.toggleClass(['collapsed', 'expanded']);
	});
});


///////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 * mobile floating fix
 */
$(function(){
	var $contentBox = $('#mw-content-text .mw-parser-output');
	var $elements = $contentBox.children();
	var handle = function(){
		var fullWidth = $contentBox.width();
		if(!fullWidth){
			return;
		}
		var offset = $contentBox.offset().left;
		$elements.removeClass('mobile-floating-fix mobile-fullwidth');

		if(fullWidth > 720){
			return;
		}

		var maxLeft = 0;
		for(var i=$elements.length; i>0; i--){
			var $el = $($elements[i-1]);
			if($el.css('float') == 'right'){
				var left = $el.offset().left;
				if(left - offset < 300 || (maxLeft && left < maxLeft + 12) ){
					$el.addClass('mobile-floating-fix');
					maxLeft = Math.max(maxLeft, left + $el.outerWidth());
					continue;
				}
			}
			maxLeft = 0;
		}
		
		var threshold = Math.min(90, fullWidth*0.25);
		$('#mw-content-text .infobox, #mw-content-text .portable-infobox').each(function(){
			var $el = $(this);
			if(fullWidth - $el.outerWidth() <  threshold){
				$el.addClass('mobile-fullwidth');
			}
		});
	};
	handle();
	$(window).on('resize', mw.util.debounce( handle, 200) );
});
///////////////////////////////////////////////////////////////////////////////////////////////////////////////

/**
 * scroll helper for edit
 */
$(function(){
	if( !isEditorActive() || $(window).scrollTop() != 0 ){
		return;
	}
	$(window).scrollTop($('#p-logo').height()-6);
});