Версия для слабовидящих
MediaWiki:Common.js — различия между версиями
Материал из Ярославский педагогический университет
Wikiadmin (обсуждение | вклад) (Содержимое страницы заменено на «/* Размещённый здесь JavaScript код будет загружаться всем пользователям при о...») |
Wikiadmin (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
if (wgCanonicalNamespace == 'Special' && wgCanonicalSpecialPageName == 'Search') | if (wgCanonicalNamespace == 'Special' && wgCanonicalSpecialPageName == 'Search') | ||
importScript('MediaWiki:Search.js') | importScript('MediaWiki:Search.js') | ||
+ | |||
+ | /****************************************************************************************** | ||
+ | * | ||
+ | * Сворачивающиеся блоки для шаблонов {{Навигационная таблица}}, {{Навигационная полоса}} | ||
+ | * и для таблиц class="collapsible" (см. на [[Справка:Оформление таблиц]] пример). | ||
+ | * | ||
+ | * Код полностью переписал Mithgol the Webmaster на основе jQuery в начале августа 2009 г. | ||
+ | * | ||
+ | */ | ||
+ | |||
+ | var autoCollapse = 2; | ||
+ | var collapseCaption = 'скрыть'; | ||
+ | var expandCaption = 'показать'; | ||
+ | |||
+ | function collapsibleTables(){ | ||
+ | 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="collapseTable(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).eq(0)); | ||
+ | }); | ||
+ | } | ||
+ | processedTables.filter('.collapsed').each(function(i){ | ||
+ | var linkIDX = $(this).data('collapseIndex'); | ||
+ | collapseTable($('a#collapseButton' + linkIDX, this).eq(0)); | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | function collapseTable(linkObject){ // accepts both raw and jQuery-wrapped objects | ||
+ | var TheLink = $(linkObject); | ||
+ | var TableRows = TheLink.closest('tr').parent().children().filter('tr').not(':first'); | ||
+ | if (TableRows.length == 0) return; | ||
+ | |||
+ | var isShown = (TheLink.text() == collapseCaption); | ||
+ | if (isShown) { | ||
+ | TheLink.text(expandCaption); | ||
+ | TableRows.each(function(i){ | ||
+ | $(this).fadeOut(1000); | ||
+ | }); | ||
+ | } else { | ||
+ | TheLink.text(collapseCaption); | ||
+ | TableRows.each(function(i){ | ||
+ | $(this).fadeIn(1000); | ||
+ | }); | ||
+ | }; | ||
+ | } | ||
+ | addOnloadHook(collapsibleTables); | ||
+ | |||
+ | var NavigationBarHide = '[' + collapseCaption + ']'; | ||
+ | var NavigationBarShow = '[' + expandCaption + ']'; | ||
+ | var NavigationBarShowDefault = autoCollapse; | ||
+ | |||
+ | function collapsibleDivs(){ | ||
+ | var NavFrameList = $('#content div.NavFrame'); | ||
+ | NavFrameList.each(function(navIdx){ | ||
+ | var TheNavHead = $('.NavHead:first', this); | ||
+ | if (TheNavHead.length == 0) { | ||
+ | $(this).addClass('wontCollapse'); // no NavHead inside! | ||
+ | return true; // continue next iteration of each() | ||
+ | } | ||
+ | $(this).data('NavFrameIndex', navIdx); | ||
+ | TheNavHead.prepend('<a class="NavToggle" '+ | ||
+ | 'id="NavToggle' + navIdx + '" href="#" '+ | ||
+ | 'onClick="collapseDiv(this); return false;">'+ | ||
+ | NavigationBarHide + '</a>' | ||
+ | ); | ||
+ | }); | ||
+ | |||
+ | var processedDivs = NavFrameList.not('.wontCollapse'); | ||
+ | if (processedDivs.length > NavigationBarShowDefault){ | ||
+ | processedDivs.not('.expanded').each(function(i){ | ||
+ | var linkIDX = $(this).data('NavFrameIndex'); | ||
+ | collapseDiv($('a#NavToggle' + linkIDX, this).eq(0)); | ||
+ | }); | ||
+ | } | ||
+ | processedDivs.filter('.collapsed').each(function(i){ | ||
+ | var linkIDX = $(this).data('NavFrameIndex'); | ||
+ | collapseDiv($('a#NavToggle' + linkIDX, this).eq(0)); | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | function collapseDiv(toggleObject){ // accepts both raw and jQuery-wrapped objects | ||
+ | var TheToggle = $(toggleObject); | ||
+ | var TheFrame = TheToggle.closest('div.NavFrame'); | ||
+ | if (TheFrame.length == 0) return false; | ||
+ | |||
+ | TheToggle.text( (TheToggle.text() == NavigationBarHide) ? NavigationBarShow : NavigationBarHide); | ||
+ | |||
+ | TheFrame.children().filter('.NavPic, .NavContent').each(function(i){ | ||
+ | $(this).slideToggle(1000); | ||
+ | }); | ||
+ | } | ||
+ | addOnloadHook(collapsibleDivs); | ||
+ | |||
//</source> | //</source> |
Версия 13:20, 22 октября 2009
/* Размещённый здесь JavaScript код будет загружаться всем пользователям при обращении к каждой странице */ //<source lang=javascript> //External search if (wgCanonicalNamespace == 'Special' && wgCanonicalSpecialPageName == 'Search') importScript('MediaWiki:Search.js') /****************************************************************************************** * * Сворачивающиеся блоки для шаблонов {{Навигационная таблица}}, {{Навигационная полоса}} * и для таблиц class="collapsible" (см. на [[Справка:Оформление таблиц]] пример). * * Код полностью переписал Mithgol the Webmaster на основе jQuery в начале августа 2009 г. * */ var autoCollapse = 2; var collapseCaption = 'скрыть'; var expandCaption = 'показать'; function collapsibleTables(){ 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="collapseTable(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).eq(0)); }); } processedTables.filter('.collapsed').each(function(i){ var linkIDX = $(this).data('collapseIndex'); collapseTable($('a#collapseButton' + linkIDX, this).eq(0)); }); } function collapseTable(linkObject){ // accepts both raw and jQuery-wrapped objects var TheLink = $(linkObject); var TableRows = TheLink.closest('tr').parent().children().filter('tr').not(':first'); if (TableRows.length == 0) return; var isShown = (TheLink.text() == collapseCaption); if (isShown) { TheLink.text(expandCaption); TableRows.each(function(i){ $(this).fadeOut(1000); }); } else { TheLink.text(collapseCaption); TableRows.each(function(i){ $(this).fadeIn(1000); }); }; } addOnloadHook(collapsibleTables); var NavigationBarHide = '[' + collapseCaption + ']'; var NavigationBarShow = '[' + expandCaption + ']'; var NavigationBarShowDefault = autoCollapse; function collapsibleDivs(){ var NavFrameList = $('#content div.NavFrame'); NavFrameList.each(function(navIdx){ var TheNavHead = $('.NavHead:first', this); if (TheNavHead.length == 0) { $(this).addClass('wontCollapse'); // no NavHead inside! return true; // continue next iteration of each() } $(this).data('NavFrameIndex', navIdx); TheNavHead.prepend('<a class="NavToggle" '+ 'id="NavToggle' + navIdx + '" href="#" '+ 'onClick="collapseDiv(this); return false;">'+ NavigationBarHide + '</a>' ); }); var processedDivs = NavFrameList.not('.wontCollapse'); if (processedDivs.length > NavigationBarShowDefault){ processedDivs.not('.expanded').each(function(i){ var linkIDX = $(this).data('NavFrameIndex'); collapseDiv($('a#NavToggle' + linkIDX, this).eq(0)); }); } processedDivs.filter('.collapsed').each(function(i){ var linkIDX = $(this).data('NavFrameIndex'); collapseDiv($('a#NavToggle' + linkIDX, this).eq(0)); }); } function collapseDiv(toggleObject){ // accepts both raw and jQuery-wrapped objects var TheToggle = $(toggleObject); var TheFrame = TheToggle.closest('div.NavFrame'); if (TheFrame.length == 0) return false; TheToggle.text( (TheToggle.text() == NavigationBarHide) ? NavigationBarShow : NavigationBarHide); TheFrame.children().filter('.NavPic, .NavContent').each(function(i){ $(this).slideToggle(1000); }); } addOnloadHook(collapsibleDivs); //</source>