Warning.png

Поддержка Wiki прекращена, она доступна в режиме архива. Информация в ней устарела и может быть неактуальной.

Изменения

Перейти к: навигация, поиск

MediaWiki:Common.js

11 029 байтов добавлено, 14:55, 29 января 2017
Нет описания правки
'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: 'Лицензия'
};
 
/**
* Instead of cluttering up the global scope with
* variables, they should instead be set as a
* property of this global variable
*
* E.g: Instead of
* myVar = 'blah';
* use
* mcw.myVar = 'blah';
*/
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' );
} );
}
} );
 
/* Добавляет кнопки вставки часто используемых описаний правки */
if (wgAction == 'edit' || wgAction == 'submit') {
mw.loader.load( '/index.php?title=MediaWiki:AddSumButton.js&action=raw&ctype=text/javascript' );
}
 
/* Скрывает вкладку "Править вики-текст", если ей не хватает места в навигации */
var collapsibleEdit = document.getElementById("ca-edit");
if(collapsibleEdit) {
collapsibleEdit.className += collapsibleEdit.className ? ' collapsible' : 'collapsible';
}
/* Добавляет кнопку "Вверх" слева */
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
$("#scroll-top").fadeOut(300);
});
};
$(function(){
$("#scroll-top").click(function(e) {
$('body,html').animate({scrollTop:0},300);
});
scrollTop();
})
 
 
/* Keep track of delegated events on dynamic content */
mcw.events = {};
 
/* 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),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://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.) */
/**
* Issue tracker loaderCollapsible 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.
*/
/**if ( $function( '#issue-list' ).length ) { var page $collapsibles = $( '#issue-list' )wikipageContent.datafind( 'name' ) || mw.config.get( 'wgPageNamecollapsible' ), amount = $( '#issue-list' ).data( 'num' ) || 20; if ( !$collapsibles.isArray( page ) length ) { page = page.join( '" OR summary ~ "' )return;
}
var jql $toggleTemplate = encodeURIComponent$( 'project in <span>' ).addClass( 'collapsetoggle' ).append( '[', $( '<span>' ).addClass(MC'jslink' ), MCPE']' ); $collapsibles.each( function() { var $collapsible = $( this ); if ( $collapsible.data( 'made-collapsible' ) ) { return true; } var $children = $collapsible.children(); var showText = $collapsible.data( 'expandtext' ) AND resolution || i18n.showText; var hideText = Unresolved AND $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( summary ~ '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 + page + '" -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.ajaxwidth( ); 'https://mojang$toggleLink.atlassian.net/rest/api/latest/search?maxResultstext( showText ); var showWidth =' + amount + '&fields=summary&jql=' + jql )$toggle.done( functionwidth( search ) {; if ( hideWidth !search.issues.length == showWidth ) { $toggle.css( '#issuemin-listwidth' , hideWidth > showWidth ? hideWidth : showWidth ); } // Set the text back to hide if it's not collapsed to begin with if ( !$collapsible.texthasClass( 'No issues were found.collapsed' );) { return false$toggleLink.text( hideText );
}
  var compIssues = [], pocketIssues = []; $toggleLink.eachon( search.issues'click keydown', function(e ) { // Only trigger on enter press if ( thise.keykeyCode && e.indexOf( 'MCPE' ) < 0 keyCode !== 13 ) { compIssues.push( return; } // Don'<li>[<a hreft toggle when clicking buttons or links inside the toggle var $target ="https://mojang$( e.atlassiantarget ); if ( $target.net/browse/is( 'button' + this) || $target.key + is( '">a' + this) ) { return; } $collapsible.key + toggleClass( '</a>] - collapsed' + this); if ( $collapsible.fields.summary + hasClass( '</li>collapsed' ) ) { $toggleLink.text( showText );
} else {
pocketIssues$toggleLink.pushtext( '<li>[<a href="https://mojang.atlassian.net/browse/' + this.key + '">' + this.key + '</a>] - ' + this.fields.summary + '</li>' hideText );
}
// Stop table sorting activating when clicking the link
e.stopPropagation();
} );
$collapsible.data( 'made-collapsible', true ); } );}() );  /** * Element animator * * Will cycle the active class on any child elements * within an element with the animated class. */( function() { if ( !mcw.animate ) { mcw.animate = setInterval( function() { $( '.animated' ).each( function() { var $elem = $( this ); var $current = $elem.children( '.active' ); var html $next = $current.nextAll( ':not(.skip):first' ); // Loop back to the start if ( !$next.length ) { $next = $elem.children( ':not(.skip):first'); } $current.removeClass( 'active' ); $next.addClass( 'active' ); } ); }, 2000 ); }}() );  /** * Page loader * * Allows a page to be downloaded and displayed on demand. * Use with [[Template:LoadPage]] and [[Template:LoadBox]] */( function() { var $loadPage = $wikipageContent.find( '.load-page' ); if ( compIssues!$loadPage.length ) { html return; } // We need the spinner to show loading is happening, but we don't want // to have a delay while the module downloads, so we'll load this now, // regardless of if something is clicked 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 $buttonTemplate = $( '<pspan>' ).addClass( 'mw-editsection-like load-page-button' ) .append( '[', $( '<bspan>' ).addClass( 'jslink' ).text( i18n.hideText ), ']' ); var extractList = function( $contentContainer, listClass ) { var $content = $contentContainer.find( '>Computer:</bul ></pli ><ul>' + compIssues).children( ':not(.nbttree-inherited)' ); if ( listClass ) { $content.addClass( listClass ); } return $content; }; $loadPage.each( function() { var $body = $( this ); var page = $body.data( 'page' ); if ( !page ) { return; } var template = $body.data( 'template' ); var treeview = $body.joindata( '\ntreeview' ) + ; var treeviewClass = $body.data( 'treeviewclass' ); var $heading; var $contentContainer; var $content; var $button = $buttonTemplate.clone(); var $buttonLink = $button.find( '.jslink' ); if ( treeview ) { $heading = $body; $contentContainer = $( '</uldiv>'); } else { $heading = $body.children().first(); $contentContainer = $body.find( '.load-page-content' );
}
if // Add the button $heading.append( pocketIssues.length $button ) {; html += '\n<p><b>Pocket Edition:< /b></p><ul>' + pocketIssuesMove the edit button to the right spot $contentContainer.joinfind( '\n.mw-editsection, .mw-editsection-like' ) + .insertAfter( $button ); // Find max button width, and set its min-width to it var hideWidth = $button.width(); $buttonLink.text( i18n.showText ); var showWidth = $button.width(); if ( hideWidth !== showWidth ) { $button.css( 'min-width'</ul, hideWidth >'showWidth ? hideWidth : showWidth );
}
$buttonLink.click( function() { if ( search$body.total > amount hasClass( 'pageloader-contentloaded' ) ) { var extra if ( $buttonLink.text() === searchi18n.showText ) { if ( treeview ) { $content.total - amountinsertAfter( $body ); } else { $contentContainer.show(); } $buttonLink.text( i18n.hideText ); } else { if ( treeview ) { $content.detach(); } else { $contentContainer.hide(); html += '\n<p><a href="https://mojang } $buttonLink.atlassiantext( i18n.net/issues/?jql=' + jql + '">View ' + extra + ' more result'showText ); } return; }
// See if this was loaded elsewhere before making a request var gotContent; $( '.pageloader-contentloaded' ).each( function( extra > 1 ) { var $fLoader = $( this ); if ( $fLoader.data( 'page' ) === page && $fLoader.data( 'pageloader-content' ) ) { $contentContainer.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( 'spageloader-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.css( 'min-width' ) ); $button.hide().after( $spinner ); } } ); var requestData = { action: 'parse', prop: 'text' }; if ( template ) { requestData.page = page; } else { requestData.title = mw.config.get( 'wgPageName' ); requestData.text = '{' + '{:' + page + '}}'; } new mw.Api().get( requestData ).done( function( data ) { 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 ); /a></p>Fire content hook on the new content, running all this stuff again and more :) mw.hook( 'wikipage.content' ).fire( $contentContainer ); if ( treeview ) { $body.find( '.noscript').remove(); $content = extractList( $contentContainer, treeviewClass ); $content.insertAfter( $body ); } $spinner.remove(); $spinner = false; $buttonLink.text( i18n.hideText ); $button.show(); $body.addClass( '#issuepageloader-listcontentloaded' ); } ).fail( function( _, error ) { $spinner.htmlremove(); $spinner = false; $button.show(); var errorText = ''; if ( error.textStatus ) { errorText = error.textStatus; } else if ( error.error ) { errorText = error.error.info; } mw.notify( html errorText, { title: i18n.loadErrorTitle, autoHide: false } ); } ); } );
} );
}*/() );
} );
}
/* mw.loader.using( 'mediawiki.legacyspecial.upload', function() {
var change = setInterval( function() {
if ( licenseSelectorCheck ) {
}
}, 500 );
} );*/
}

Навигация