MediaWiki:Common.js
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);
});