Изменения

MediaWiki:Common.js

8338 байтов добавлено, 14:55, 29 января 2017
Нет описания правки
( function() {
'use strict';
 
/* Variables for interface text used throughout the script, for ease of translating */
var i18n = {
// Collapsible elements and page loader
hideText: 'скрыть',
showText: 'показать',
// Page loader
loadErrorTitle: 'Возникла ошибка при загрузке содержимого',
// File upload
defaultLicense: 'Лицензия'
};
/**
var mcw = window.mcw = {};
mw.loader.using( 'mediawiki.user', function() {
if ( mw.user.options.get( 'showtoolbar' ) && !mw.user.options.get( 'usebetatoolbar' ) ) {
mw.loader.using( 'mediawiki.legacy.wikibits', function() {
importScript( 'MediaWiki:Toolbar.js' );
} );
}
} );
/* Variables for interface text used throughout the script, for ease of translating Добавляет кнопки вставки часто используемых описаний правки */mcw.i18n if (wgAction == 'edit' || wgAction == 'submit') { mw.loader.load( '/index.php?title=MediaWiki:AddSumButton.js&action=raw&ctype=text/javascript' );} / Collapsible tables and page loader* Скрывает вкладку "Править вики-текст", если ей не хватает места в навигации */var collapsibleEdit = document.getElementById("ca-edit");if(collapsibleEdit) { hideText: collapsibleEdit.className += collapsibleEdit.className ? 'скрытьcollapsible', showText: 'показатьcollapsible',;} /* Добавляет кнопку "Вверх" слева */ Page loader loadErrorTitle: 'Возникла ошибка при загрузке содержимого'var footerId = document.getElementById("footer");var scrollTopId = document.createElement("span");scrollTopId.setAttribute("id","scroll-top");scrollTopId.setAttribute("title","Наверх");footerId.appendChild(scrollTopId); function scrollTop(){ $(window).scroll(function(e) { if($(window).scrollTop()>0) $("#scroll-top").fadeIn(300); else // File upload $("#scroll-top").fadeOut(300); //defaultLicense: 'Лицензия' });
};
$(function(){
$("#scroll-top").click(function(e) {
$('body,html').animate({scrollTop:0},300);
});
scrollTop();
})
 
/* Keep track of delegated events on dynamic content */
mcw.events = {};
/* Add extra buttons to the classic toolbar GA */(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), importScriptm=s.getElementsByTagName( 'MediaWiki:AddSumButton2o)[0];a.async=1;a.src=g;m.parentNode.js' insertBefore(a,m);//importScript})( window,document,'script'MediaWiki,'https:Toolbar2//www.google-analytics.com/analytics.js','ga' );
ga('create', 'UA-81726277-2', 'auto');
ga('send', 'pageview');
/* Fired whenever wiki content is added. (#mw-content-text, live preview, load page, etc.) */
mw.hook( 'wikipage.content' ).add( function( $content wikipageContent ) {  
/**
* Collapsible elements
*
* Add the "collapsible" class to an element and the child element with class "collapsible-content"
* (or everything but the header row if a table) will be hidden when the element is collapsed.
*
* * Add the class "collapsed" to the element to make it start out collapsed.
* * Add either "collapsetoggle-left" or "collapsetoggle-inline" to the element to choose the collapse
* toggle alignment (defaults to right).
* * Add an ID in the format of "collapsible-<x>" to the element to make any element with the class
* "collapsetoggle-custom" and a matching class in the format of "collapsible-<x>-toggle" control
* the collapsing instead of the standard button.
* If the custom toggle contains an element with the "jslink" class, only that will be clickable.
*/
( function() {
var $collapsibles = $wikipageContent.find( '.collapsible' );
if ( !$collapsibles.length ) {
return;
}
var $toggleTemplate = $( '<span>' ).addClass( 'collapsetoggle' ).append(
'[', $( '<span>' ).addClass( 'jslink' ), ']'
);
$collapsibles.each( function() {
var $collapsible = $( this );
if ( $collapsible.data( 'made-collapsible' ) ) {
return true;
}
var $children = $collapsible.children();
var showText = $collapsible.data( 'expandtext' ) || i18n.showText;
var hideText = $collapsible.data( 'collapsetext' ) || i18n.hideText;
// If there is no content area, add it
if ( !$collapsible.is( 'table' ) && !$children.filter( '.collapsible-content' ).length ) {
if ( $collapsible.is( 'tr' ) ) {
$children.addClass( 'collapsible-content' );
} else {
$collapsible.wrapInner( '<div class="collapsible-content">' );
}
}
var $toggle;
var id = $collapsible.attr( 'id' );
if ( id && id.match( /^collapsible-./ ) ) {
$toggle = $( $wikipageContent[0].getElementsByClassName( id + '-toggle' ) )
.filter( '.collapsetoggle-custom' ).css( 'visibility', 'visible' );
}
// Create and insert the toggle button if there is no custom one
if ( !$toggle || !$toggle.length ) {
var $toggleContainer;
if ( $collapsible.is( 'table' ) ) {
var $rows = $children.filter( 'thead' ).children();
if ( !$rows.length ) {
$rows = $children.filter( 'tbody' ).first().children();
if ( !$rows.length ) {
$rows = $children.filter( 'tr' );
}
}
$toggleContainer = $rows.first().children().last();
} else {
$toggleContainer = $children.first();
if ( $toggleContainer.hasClass( 'collapsible-content' ) ) {
$toggleContainer = $collapsible;
}
}
$toggle = $toggleTemplate.clone();
if ( $collapsible.hasClass( 'collapsetoggle-inline' ) || $collapsible.hasClass( 'collapse-button-none' ) ) {
$toggleContainer.append( $toggle );
} else {
$toggleContainer.prepend( $toggle );
}
}
var $toggleLink = $toggle.find( '.jslink' );
if ( !$toggleLink.length ) {
$toggleLink = $toggle;
}
$toggleLink.attr( 'tabindex', 0 ).text( hideText );
// Find max toggle size, and set its min-width to it
var hideWidth = $toggle.width();
$toggleLink.text( showText );
var showWidth = $toggle.width();
if ( hideWidth !== showWidth ) {
$toggle.css( 'min-width', hideWidth > showWidth ? hideWidth : showWidth );
}
// Set the text back to hide if it's not collapsed to begin with
if ( !$collapsible.hasClass( 'collapsed' ) ) {
$toggleLink.text( hideText );
}
$toggleLink.on( 'click keydown', function( e ) {
// Only trigger on enter press
if ( e.keyCode && e.keyCode !== 13 ) {
return;
}
// Don't toggle when clicking buttons or links inside the toggle
var $target = $( e.target );
if ( $target.is( 'button' ) || $target.is( 'a' ) ) {
return;
}
$collapsible.toggleClass( 'collapsed' );
if ( $collapsible.hasClass( 'collapsed' ) ) {
$toggleLink.text( showText );
} else {
$toggleLink.text( hideText );
}
// Stop table sorting activating when clicking the link
e.stopPropagation();
} );
$collapsible.data( 'made-collapsible', true );
} );
}() );
*/
( function() {
var $loadPage = $contentwikipageContent.find( '.load-page' );
if ( !$loadPage.length ) {
return;
mw.loader.load( 'jquery.spinner' );
// Create button starting with hide text // Will be changed to the show text while calculating the maximum button size var $buttonText buttonTemplate = $( '<span>' ).addClass( 'mw-editsection-like load-page-button' ) .append( '[', $( '<span>' ).addClass( 'jslink' ).text( mcw.i18n.hideText ), ']' );
var extractList = function( $contentContainer, listClass ) { var $content = $loadPagecontentContainer.find( '> ul > li > ul' ).mwchildren( ':not(.nbttree-headline:firstinherited)' ); if ( listClass ) { $content.addClass( listClass ); } return $content; }; $loadPage.each( function() { var $body = $( this ); var page = $body.closestdata( '.load-page' ),; if ( !page ) { return; } var template = $body.data( 'template' ); var treeview = $body.data( 'treeview' ); var treeviewClass = $body.data( 'treeviewclass' ); var $heading; var $contentContainer; var $content; var $button = $buttonTextbuttonTemplate.clone(),; var $buttonLink = $button.find( '.jslink' ); if ( treeview ) { $heading = $body; $contentContainer = $( '<div>' ); } else { $heading = $body.children().first(); firstWidth, secondWidth$contentContainer = $body.find( '.load-page-content' ); }
// Add the button
$buttonheading.insertAfterappend( this $button );
// Move the edit button to the right spot
$bodycontentContainer.find( '.mw-editsection, .mw-editsection-like' ).insertAfter( $button );
// Find max button width, and set its min-width to it
firstWidth var hideWidth = $button.width(); $button.children( '.jslink' )buttonLink.text( mcw.i18n.showText ); secondWidth var showWidth = $button.width();
if ( firstWidth hideWidth !== secondWidth showWidth ) { if ( firstWidth > secondWidth ) { $button.css( 'min-width', firstWidth hideWidth > showWidth ? hideWidth : showWidth ); } else { $button.css( 'min-width', secondWidth ); }
}
} );
if ( mcw.events.loadPage ) {
return;
}
$( '#mw-content-text' ).on( 'click', '.load-page-button > .jslink', function() {
var $button = $( this ).parent(),
$body = $button.closest( '.load-page' ),
$contentContainer = $body.find( '.load-page-content' );
$buttonLink.click( function() { if ( !$body.datahasClass( 'pageloader-contentloaded' ) ) { if ( $buttonLink.text() === i18n.showText ) { if ( treeview ) { $content.insertAfter( $body ); } else { $contentContainer.show(); } $buttonLink.text( i18n.hideText ); } else { if ( treeview ) { $content.detach(); } else { $contentContainer.hide(); } $buttonLink.text( i18n.showText ); } return; } // See if this was loadedelsewhere before making a request var gotContent; $( '.pageloader-contentloaded' ) .each( function() { var oldButton $fLoader = $( this ); if ( $fLoader.data( 'page' ) = == page && $fLoader.data( 'pageloader-content' ) ) { $buttoncontentContainer.html($fLoader.data( 'pageloader-content' ) ).removeClass( 'noscript' ); mw.hook( 'wikipage.content' ).fire( $contentContainer ); if ( treeview ) { $body.find( '.noscript' ).remove(); $content = extractList( $contentContainer, treeviewClass ); $content.insertAfter( $body ); } $buttonLink.text( i18n.hideText ); $body.addClass( 'pageloader-contentloaded' ); gotContent = true; return false; } } ); if ( gotContent ) { return; }
// Just in-case the spinner module is still not ready yet
var $spinner = $();
mw.loader.using( 'jquery.spinner', function() {
// $spinner will be false if the content somehow loaded before the module did if ( $spinner ) { $spinner = $.createSpinner().addClass( 'mw-editsection-like' ) .css( 'min-width', $button.htmlcss( 'min-width' ) ); $button.createSpinnerhide() .after( $spinner ); }
} );
new mw.Api().get( var requestData = {
action: 'parse',
prop: 'text', }; if ( template ) { requestData.page = page; } else { requestData.title: = mw.config.get( 'wgPageName' ),; requestData.text: = '{' + '{:' + $body.data( 'page' ) + '}}'; } new mw.Api().get( requestData ).done( function( data ) { $contentContainer.var html( = data.parse.text['*'] ; $contentContainer.html( html ).removeClass( 'noscript' ); // Resolve self-links if ( template ) { var curPage = '/' + mw.config.get( 'wgPageName' ); $contentContainer.find( 'a' ).each( function() { var $link = $( this ); if ( $link.attr( 'href' ) === curPage ) { $link.replaceWith( $( '<strong>' ).addClass( 'selflink' ).append( $link.contents() ) ); } } ); html = $contentContainer.html(); } $body.data( 'pageloader-content', html );
// Fire content hook on the new content, running all this stuff again and more :)
mw.hook( 'wikipage.content' ).fire( $contentContainer );
if ( treeview ) { $buttonbody.htmlfind( oldButton '.noscript' ).childrenremove( '); $content = extractList( $contentContainer, treeviewClass ); $content.insertAfter( $body ); } $spinner.jslink' remove(); $spinner = false; $buttonLink.text( mcw.i18n.hideText ); $button.show(); $body.dataaddClass( 'loadedpageloader-contentloaded', true );
} ).fail( function( _, error ) {
$spinner.remove(); $spinner = false; $button.htmlshow( oldButton );
var errorText = '';
}
mw.notify( errorText, { title: mcw.i18n.loadErrorTitle, autoHide: false } );
} );
} else if ( $( this ).text() === mcw.i18n.showText ) { $contentContainer.show(); $( this ).text( mcw.i18n.hideText ); } else { $contentContainer.hide(); $( this ).text( mcw.i18n.showText ); }
} );
mcw.events.loadPage = true;
}() );
$( this ).find( '.paused' ).removeClass( 'paused' ).addClass( 'animated' );
}
}, '.grid-generic, .grid-Crafting_Table, .grid-Furnace, .grid-Brewing_Stand, .mcui' );
* That way the file will be categorised so someone can find a license for the file
*/
/*if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Upload' ) {
if ( $( '#wpLicense' ).val() === '' ) {
$( '#wpLicense' ).val( mcw.i18n.defaultLicense );
}
/* mw.loader.using( 'mediawiki.legacyspecial.upload', function() {
var change = setInterval( function() {
if ( licenseSelectorCheck ) {
}
}, 500 );
} );*/}*/