MediaWiki:Common.js
Перейти к навигации
Перейти к поиску
Замечание: Чтобы после сохранения вступили в силу изменения стилей, перезагрузите файл //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=styles&skin=vector&*, если используете скин Vector, или //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=styles&skin=common&*, если используете скин Common.
Чтобы вступили в силу изменения скриптов, перезагрузите файл //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=scripts&skin=vector&*, если используете скин Vector, или //traditio.wiki/w/load.php?debug=false&lang=ru&modules=site&only=scripts&skin=common&*, если используете скин Common.
Гаджеты и импортируемые скрипты загружаются отдельными файлами.
/******************************************************************************************
*
* Сворачивающиеся блоки для шаблонов {{Навигационная таблица}}, {{Навигационная полоса}}
* и для таблиц class="collapsible" (см. на [[Справка:Оформление таблиц]] пример).
*
* Код полностью переписал Mithgol the Webmaster на основе jQuery в начале августа 2009 г.
* Доработано Александром Машиным 2 июля 2014 года.
*
******************************************************************************************
*/
var autoCollapse = 2;
var collapseCaption = 'скрыть';
var expandCaption = 'показать';
var expandDuration = 1000;
var collapseDuration = 1700;
function getTableRows ($toggle) {
return $toggle.closest('tr').parent().children().filter('tr').not(':first');
}
// Скрытие:
function collapseTable ($toggle){
var $tableRows = getTableRows ($toggle);
if ($tableRows.length === 0) return;
$tableRows.fadeOut (collapseDuration);
$toggle.text(expandCaption);
}
// Показ:
function expandTable ($toggle){
var $tableRows = getTableRows ($toggle);
if ($tableRows.length === 0) return;
var timePerRow = expandDuration / $tableRows.length;
$tableRows.fadeIn (expandDuration);
$toggle.text(collapseCaption);
}
// Переключение состояния:
function toggleTable(linkObject){
var $toggle = $(linkObject);
if ($toggle.text() === collapseCaption) {
collapseTable ($toggle);
} else {
expandTable ($toggle);
}
}
$(function(){
var allTables = $('#content table.collapsible');
allTables.each(function(tblIdx){
var HRow = $('tr:first', this);
if (HRow.length === 0){
$(this).addClass('wontCollapse'); // no rows
return true; // continue next iteration of each()
}
if (HRow.parent().children().filter('tr').not(':first').length === 0){
$(this).addClass('wontCollapse'); // no rows after the first
return true; // continue next iteration of each()
}
var Header = $('th:last', HRow);
if (Header.length === 0){
$(this).addClass('wontCollapse'); // no TH in the first row
return true; // continue next iteration of each()
}
$(this).data('collapseIndex', tblIdx);
Header.prepend(
'<span style="float: right; font-weight: normal;">'+
'[<a id="collapseButton' + tblIdx + '" href="#" onClick="toggleTable(this); return false;">'+
collapseCaption + '</a>]</span>');
});
var processedTables = allTables.not('.wontCollapse');
// Скрытие таблиц, допускающих его, если таблиц слишком много:
if (processedTables.length > autoCollapse){
processedTables.filter('.autocollapse').each(function(i){
var linkIDX = $(this).data('collapseIndex');
collapseTable($('a#collapseButton' + linkIDX, this));
});
}
// Безусловное скрытие таблиц:
processedTables.filter('.collapsed').each(function(i){
var linkIDX = $(this).data('collapseIndex');
collapseTable($('a#collapseButton' + linkIDX, this));
});
});
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
var NavigationBarShowDefault = autoCollapse;
// Переключение состояния:
function toggleDiv (toggleObject){
var $toggle = $(toggleObject);
if ($toggle.text() === NavigationBarHide) {
collapseDiv ($toggle);
} else {
expandDiv ($toggle);
}
}
function getFrame ($toggle) {
return $toggle.closest('div.NavFrame');
}
// Скрытие:
function collapseDiv($toggle){ // accepts both raw and jQuery-wrapped objects
var $frame = getFrame ($toggle);
if ($frame.length === 0) return false;
$frame.children().filter('.NavPic, .NavContent').slideUp(expandDuration);
$toggle.text(NavigationBarShow);
}
// Показ:
function expandDiv($toggle){ // accepts both raw and jQuery-wrapped objects
var $frame = $toggle.closest('div.NavFrame');
if ($frame.length === 0) return false;
$frame.children().filter('.NavPic, .NavContent').slideDown(collapseDuration, 'easeOutElastic');
$toggle.text(NavigationBarHide);
}
// Установка начального состояния всех тегов <div>:
$(function(){
var $navFrameList = $('#content div.NavFrame');
$navFrameList.each(function(navIdx){
var $navHead = $('.NavHead:first', this);
if ($navHead.length === 0) {
$(this).addClass('wontCollapse'); // no NavHead inside!
return true; // continue next iteration of each()
}
$(this).data('NavFrameIndex', navIdx);
$navHead.prepend('<a class="NavToggle" '+
'id="NavToggle' + navIdx + '" href="#" '+
'onClick="toggleDiv(this); return false;">'+
NavigationBarHide + '</a>'
);
});
var $processedDivs = $navFrameList.not('.wontCollapse');
// Скрытие <div>'ов, не объявленных .expanded, если их больше минимума:
if ($processedDivs.length > NavigationBarShowDefault){
$processedDivs.not('.collapsed').not('.expanded').each(function(i){
var linkIDX = $(this).data('NavFrameIndex');
collapseDiv($('#NavToggle' + linkIDX, this));
});
}
// Скрытие <div>'ов, объявленных .collapsed:
$processedDivs.filter('.collapsed').each(function(i){
var linkIDX = $(this).data('NavFrameIndex');
collapseDiv($('#NavToggle' + linkIDX, this));
});
});
/* Замена свёртывания и развёртывания метаданных по трём причинам:
* 1) http://traditio.wiki/w/skins/common/metadata.js чего-то не действует в Firefox 4
* 2) уместнее манипулировать DOM только после того, как код страницы весь пришёл
* 3) эффекты jQuery выглядят круче, чем мгновенное переключение видимости
*/
attachMetadataToggle = function(){}; // старая функция устранена, вот новая:
$(function(){
var $tbody = $('#mw_metadata tbody');
$tbody.append(
'<tr><td colspan="2"><a href="javascript:" id="toggleMetadata">'+
'<span id="hideMetadata">Скрыть метаданные</span>'+
'<span id="showMetadata">Показать метаданные</span>'+
'</a></td></tr>'
);
$tbody.children('tr').not(':last').hide();
$('#hideMetadata').hide();
$('#toggleMetadata').click(function(){
$(this).blur();
$('#hideMetadata').toggle();
$('#showMetadata').toggle();
$('#mw_metadata tbody tr').not(':last').fadeToggle(expandDuration);
});
});
/* Замена гиперссылки на кнопке «+» (например, наверху обсуждений) на другой адрес,
* если на странице был поставлен шаблон {{modifynewsectionlink}}.
*/
$(function(){
var customLink = $('#add-custom-section a:first');
if (customLink.length !== 0) { // используем customLink:
$('#ca-addsection a:first').attr('href', customLink.attr('href'));
}
});
/* *** Отрисовка геокарт [[WikiLeaflet]] *** */
var LeafletRoot = '/js/leaflet/';
var ImageRoot = '/files/';
var wlclass = '.wikileaf';
var dqclass = '.smw-deferred-query';
var dqevent = 'smw.deferred.query';
$(function () {
if ($(document.body).find(wlclass).length > 0) {
var WikiLeafletURL = mw.config.get ('wgScriptPath') + '/index.php?title=' +
escape( 'MediaWiki:WikiLeaflet.js' ) +
'&action=raw&ctype=text/javascript&dontcountme=s&v=1.0';
mw.loader.load (LeafletRoot + 'leaflet.css', 'text/css');
$.ajax ({
url: LeafletRoot + 'leaflet.js',
dataType: 'script',
cache: true,
success: function() {
$.ajax ({
url: WikiLeafletURL,
dataType: 'script',
cache: true,
success: function () {
$(wlclass + ':not(:has(' + dqclass + '))').each (function (i) {
wlRender (this);
}); // -- $(wlclass + ':not(:has(' + dqclass + '))').each (function (i)
mw.hook (dqevent).add (function ($context) {
var $leaflet = $context.parents (wlclass);
if ($leaflet && $leaflet [0]) {
wlRender ($leaflet [0]);
}
}); // -- mw.hook (dqevent).add (function ($context)
}, // -- success: function ()
fail: function (jqXHR, textStatus) {
alert ('Request to ' + WikiLeafletURL + ' failed: ' + textStatus);
}
}); // -- $.ajax
}, // -- success: function()
fail: function (jqXHR, textStatus) {
alert ('Request to ' + LeafletRoot + 'leaflet.js' + ' failed: ' + textStatus);
}
}); // -- $.ajax (...)
} // -- if ($(document.body).find(wlclass).length > 0)
}); // -- $(function ()
// A more explicit invitation to participate:
$(function () {
if ((mw.config.get ('wgNamespaceNumber') === 0
|| mw.config.get ('wgNamespaceNumber') === 198)
&& mw.config.get ('wgAction') === 'view'
&& mw.config.get ('wgArticleId') !== 13047
&& mw.config.get ('wgRestrictionEdit').length === 0
) {
$('#siteSub').append ('<span class="noprint">. Вы можете <a href="' + $('link[rel="edit"]').attr('href') + '">дополнить или исправить</a> его.</span>');
}
});