MediaWiki:Common.js: различия между версиями
Перейти к навигации
Перейти к поиску
(-counters) |
(обновление) |
||
Строка 1: | Строка 1: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
/****************************************************************************************** | /****************************************************************************************** | ||
* | * | ||
Строка 270: | Строка 5: | ||
* | * | ||
* Код полностью переписал Mithgol the Webmaster на основе jQuery в начале августа 2009 г. | * Код полностью переписал Mithgol the Webmaster на основе jQuery в начале августа 2009 г. | ||
− | * | + | * Доработано Александром Машиным 2 июля 2014 года. |
+ | * | ||
+ | ****************************************************************************************** | ||
*/ | */ | ||
Строка 277: | Строка 14: | ||
var expandCaption = 'показать'; | var expandCaption = 'показать'; | ||
− | function | + | 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(){ | $(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)); | ||
+ | }); | ||
}); | }); | ||
Строка 334: | Строка 94: | ||
var NavigationBarShowDefault = autoCollapse; | var NavigationBarShowDefault = autoCollapse; | ||
− | function collapseDiv( | + | // Переключение состояния: |
− | + | 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(){ | $(function(){ | ||
− | var | + | var $navFrameList = $('#content div.NavFrame'); |
− | + | $navFrameList.each(function(navIdx){ | |
− | var | + | var $navHead = $('.NavHead:first', this); |
− | if ( | + | if ($navHead.length === 0) { |
$(this).addClass('wontCollapse'); // no NavHead inside! | $(this).addClass('wontCollapse'); // no NavHead inside! | ||
return true; // continue next iteration of each() | return true; // continue next iteration of each() | ||
} | } | ||
$(this).data('NavFrameIndex', navIdx); | $(this).data('NavFrameIndex', navIdx); | ||
− | + | $navHead.prepend('<a class="NavToggle" '+ | |
'id="NavToggle' + navIdx + '" href="#" '+ | 'id="NavToggle' + navIdx + '" href="#" '+ | ||
− | 'onClick=" | + | 'onClick="toggleDiv(this); return false;">'+ |
NavigationBarHide + '</a>' | NavigationBarHide + '</a>' | ||
); | ); | ||
}); | }); | ||
− | + | var $processedDivs = $navFrameList.not('.wontCollapse'); | |
− | var processedDivs = | + | // Скрытие <div>'ов, не объявленных .expanded, если их больше минимума: |
− | if (processedDivs.length > NavigationBarShowDefault){ | + | if ($processedDivs.length > NavigationBarShowDefault){ |
− | processedDivs.not('.expanded').each(function(i){ | + | $processedDivs.not('.collapsed').not('.expanded').each(function(i){ |
var linkIDX = $(this).data('NavFrameIndex'); | var linkIDX = $(this).data('NavFrameIndex'); | ||
− | collapseDiv($(' | + | collapseDiv($('#NavToggle' + linkIDX, this)); |
}); | }); | ||
} | } | ||
− | processedDivs.filter('.collapsed').each(function(i){ | + | // Скрытие <div>'ов, объявленных .collapsed: |
+ | $processedDivs.filter('.collapsed').each(function(i){ | ||
var linkIDX = $(this).data('NavFrameIndex'); | var linkIDX = $(this).data('NavFrameIndex'); | ||
− | collapseDiv($(' | + | collapseDiv($('#NavToggle' + linkIDX, this)); |
}); | }); | ||
}); | }); | ||
− | /* Замена свёртывания | + | /* Замена свёртывания и развёртывания метаданных по трём причинам: |
− | * 1) http://traditio | + | * 1) http://traditio.wiki/w/skins/common/metadata.js чего-то не действует в Firefox 4 |
* 2) уместнее манипулировать DOM только после того, как код страницы весь пришёл | * 2) уместнее манипулировать DOM только после того, как код страницы весь пришёл | ||
* 3) эффекты jQuery выглядят круче, чем мгновенное переключение видимости | * 3) эффекты jQuery выглядят круче, чем мгновенное переключение видимости | ||
Строка 398: | Строка 175: | ||
$('#hideMetadata').toggle(); | $('#hideMetadata').toggle(); | ||
$('#showMetadata').toggle(); | $('#showMetadata').toggle(); | ||
− | $('#mw_metadata tbody tr').not(':last').fadeToggle( | + | $('#mw_metadata tbody tr').not(':last').fadeToggle(expandDuration); |
}); | }); | ||
}); | }); | ||
Строка 409: | Строка 186: | ||
if (customLink.length !== 0) { // используем customLink: | if (customLink.length !== 0) { // используем customLink: | ||
$('#ca-addsection a:first').attr('href', customLink.attr('href')); | $('#ca-addsection a:first').attr('href', customLink.attr('href')); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
}); | }); | ||
// A more explicit invitation to participate: | // A more explicit invitation to participate: | ||
− | $(function() { | + | $(function () { |
− | if (wgNamespaceNumber === 0 && wgAction === 'view' && wgArticleId !== 13047 && | + | 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>'); | ||
+ | } | ||
}); | }); |
Текущая версия от 11:10, 29 июля 2023
/******************************************************************************************
*
* Сворачивающиеся блоки для шаблонов {{Навигационная таблица}}, {{Навигационная полоса}}
* и для таблиц 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'));
}
});
// 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>');
}
});