MediaWiki:Common.js — различия между версиями
Материал из Н.Ф. Федоров
Petrov (обсуждение | вклад) |
Petrov (обсуждение | вклад) |
||
(не показано 6 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
− | + | var expandCaption, collapseCaption, zeroSectionTip; | |
− | + | if ( mw.config.get( 'wgUserLanguage' ) === 'en' ) { | |
− | + | expandCaption = 'show'; | |
− | + | collapseCaption = 'hide'; | |
− | + | zeroSectionTip = 'Edit lead section'; | |
− | + | } else { | |
− | + | expandCaption = 'показать'; | |
− | + | collapseCaption = 'скрыть'; | |
− | + | zeroSectionTip = 'Править преамбулу'; | |
} | } | ||
− | + | ||
− | + | /** | |
− | / | + | * [[ВП:Сворачиваемые блоки]] |
− | + | */ | |
− | + | // Число раскрытых по умолчанию навигационных (и не только) шаблонов, если им задан параметр | |
− | + | // autocollapse. Участники могут переопределять это значение в личных JS. | |
− | + | var NavigationBarShowDefault; | |
− | + | if ( typeof NavigationBarShowDefault === 'undefined' ) { | |
− | + | NavigationBarShowDefault = 1; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | ||
− | + | // table.collapsible | |
− | function | + | function collapsibleTables( $content ) { |
− | + | var $btn, | |
− | + | $a, | |
− | + | tblIdx = 0, | |
− | + | navboxCount = 0, | |
− | + | notNavboxCount = 0, | |
− | + | colTables = [], | |
− | + | $Tables = $content.find( 'table' ); | |
− | + | ||
− | + | $Tables.each( function ( i, table ) { | |
− | + | if ( $( table ).hasClass( 'collapsible' ) ) { | |
− | + | var $table = $( this ), | |
− | + | $row = $table.find( 'tr' ).first(), | |
− | + | $cell = $row.find( 'th' ).first(); | |
− | + | if ( !$cell.length ) { | |
− | + | return; | |
− | + | } | |
− | + | $table.attr( 'id', 'collapsibleTable' + tblIdx ); | |
− | + | $btn = $( '<span>' ).addClass( 'collapseButton' ); | |
− | + | $a = $( '<a>' ) | |
− | + | .attr( 'id', 'collapseButton' + tblIdx ) | |
− | + | .attr( 'href', 'javascript:collapseTable(' + tblIdx + ');' ) | |
− | + | // Изменяем цвет ссылки, только если цвет текста в навбоксе нестандартный | |
− | + | .css( 'color', $cell.css( 'color' ) === $( '.mw-body' ).css( 'color' ) ? 'auto' : | |
− | + | $cell.css( 'color' ) ) | |
− | + | .text( collapseCaption ); | |
− | + | $btn | |
− | + | .append( '[' ) | |
− | + | .append( $a ) | |
− | + | .append( ']' ); | |
− | + | if ( $cell.contents().length ) { | |
− | + | $btn.insertBefore( $cell.contents().first() ); | |
− | + | } else { | |
− | + | $btn.appendTo( $cell ); | |
− | + | } | |
− | + | // hasClass( 'navbox' ) — временное решение для навшаблонов, ещё не переведённых | |
− | + | // на {{Навигационная таблица}} (также ниже) | |
− | + | if ( $table.hasClass( 'navbox-inner' ) || $table.hasClass( 'navbox' ) ) { | |
− | + | navboxCount++; | |
− | + | } else { | |
− | + | notNavboxCount++; | |
− | + | } | |
+ | colTables[tblIdx++] = $table; | ||
+ | } | ||
+ | } ); | ||
+ | for ( var i = 0; i < tblIdx; i++ ) { | ||
+ | if ( colTables[i].hasClass( 'collapsed' ) || | ||
+ | ( colTables[i].hasClass( 'autocollapse' ) && | ||
+ | ( ( ( colTables[i].hasClass( 'navbox-inner' ) || colTables[i].hasClass( 'navbox' ) ) && | ||
+ | navboxCount > NavigationBarShowDefault ) || | ||
+ | ( !( colTables[i].hasClass( 'navbox-inner' ) || colTables[i].hasClass( 'navbox' ) ) && | ||
+ | notNavboxCount > NavigationBarShowDefault ) ) ) ) | ||
+ | { | ||
+ | collapseTable( i ); | ||
+ | } | ||
+ | } | ||
} | } | ||
− | + | ||
− | function collapseTable (idx){ | + | mw.hook( 'wikipage.content' ).add( collapsibleTables ); |
− | + | ||
− | + | function collapseTable( idx ) { | |
− | + | var $table = $( '#collapsibleTable' + idx ), | |
− | + | $rows = $table.children().children( 'tr' ), | |
− | + | $btn = $( '#collapseButton' + idx ); | |
− | + | if ( !$table.length || !$rows.length || !$btn.length ) { | |
− | + | return false; | |
− | + | } | |
− | + | ||
+ | var isExpanded = ( $btn.text() === collapseCaption ), | ||
+ | cssDisplay = isExpanded ? 'none' : $rows.first().css( 'display' ); | ||
+ | |||
+ | $btn.text( isExpanded ? expandCaption : collapseCaption ); | ||
+ | $rows.slice( 1 ).each( function () { | ||
+ | $( this ).css( 'display', cssDisplay ); | ||
+ | } ); | ||
} | } | ||
− | + | ||
− | function collapsibleDivs(){ | + | // div.NavFrame |
− | + | var navFrameExpandCaption = '[' + expandCaption + ']', | |
− | + | navFrameCollapseCaption = '[' + collapseCaption + ']'; | |
− | + | ||
− | + | function collapsibleDivs( $content ) { | |
− | + | var navIdx = 0, | |
− | + | colNavs = [], | |
− | + | i, | |
− | + | $Divs = $content.find( 'div' ); | |
− | + | ||
− | + | $Divs.each( function ( i, div ) { | |
− | + | if ( $( div ).hasClass( 'NavFrame' ) ) { | |
− | + | var $navFrame = $( this ); | |
− | + | $navFrame.attr( 'id', 'NavFrame' + navIdx ); | |
− | + | var $a = $( '<a>' ) | |
− | + | .addClass( 'NavToggle' ) | |
− | + | .attr( 'id', 'NavToggle' + navIdx ) | |
− | + | .attr( 'href', 'javascript:collapseDiv(' + navIdx + ');' ) | |
− | + | .text( navFrameCollapseCaption ); | |
+ | $navFrame.children( '.NavHead' ).append( $a ); | ||
+ | colNavs[navIdx++] = $navFrame; | ||
+ | } | ||
+ | } ); | ||
+ | for ( i = 0; i < navIdx; i++ ) { | ||
+ | if ( colNavs[i].hasClass( 'collapsed' ) || | ||
+ | ( navIdx > NavigationBarShowDefault && | ||
+ | !colNavs[i].hasClass( 'expanded' ) | ||
+ | ) | ||
+ | ) { | ||
+ | collapseDiv( i ); | ||
+ | } | ||
+ | } | ||
} | } | ||
− | + | ||
− | function collapseDiv(idx) { | + | mw.hook( 'wikipage.content' ).add( collapsibleDivs ); |
− | + | ||
− | + | function collapseDiv( idx ) { | |
− | + | var $div = $( '#NavFrame' + idx ), | |
− | + | $btn = $( '#NavToggle' + idx ); | |
− | + | if ( !$div.length || !$btn.length ) { | |
− | + | return false; | |
− | + | } | |
− | + | var isExpanded = ( $btn.text() === navFrameCollapseCaption ); | |
− | + | $btn.text( isExpanded ? navFrameExpandCaption : navFrameCollapseCaption ); | |
+ | $div.children( '.NavContent, .NavPic' ).each( function () { | ||
+ | $( this ).css( 'display', isExpanded ? 'none' : 'block' ); | ||
+ | } ); | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Текущая версия на 23:10, 10 апреля 2018
var expandCaption, collapseCaption, zeroSectionTip; if ( mw.config.get( 'wgUserLanguage' ) === 'en' ) { expandCaption = 'show'; collapseCaption = 'hide'; zeroSectionTip = 'Edit lead section'; } else { expandCaption = 'показать'; collapseCaption = 'скрыть'; zeroSectionTip = 'Править преамбулу'; } /** * [[ВП:Сворачиваемые блоки]] */ // Число раскрытых по умолчанию навигационных (и не только) шаблонов, если им задан параметр // autocollapse. Участники могут переопределять это значение в личных JS. var NavigationBarShowDefault; if ( typeof NavigationBarShowDefault === 'undefined' ) { NavigationBarShowDefault = 1; } // table.collapsible function collapsibleTables( $content ) { var $btn, $a, tblIdx = 0, navboxCount = 0, notNavboxCount = 0, colTables = [], $Tables = $content.find( 'table' ); $Tables.each( function ( i, table ) { if ( $( table ).hasClass( 'collapsible' ) ) { var $table = $( this ), $row = $table.find( 'tr' ).first(), $cell = $row.find( 'th' ).first(); if ( !$cell.length ) { return; } $table.attr( 'id', 'collapsibleTable' + tblIdx ); $btn = $( '<span>' ).addClass( 'collapseButton' ); $a = $( '<a>' ) .attr( 'id', 'collapseButton' + tblIdx ) .attr( 'href', 'javascript:collapseTable(' + tblIdx + ');' ) // Изменяем цвет ссылки, только если цвет текста в навбоксе нестандартный .css( 'color', $cell.css( 'color' ) === $( '.mw-body' ).css( 'color' ) ? 'auto' : $cell.css( 'color' ) ) .text( collapseCaption ); $btn .append( '[' ) .append( $a ) .append( ']' ); if ( $cell.contents().length ) { $btn.insertBefore( $cell.contents().first() ); } else { $btn.appendTo( $cell ); } // hasClass( 'navbox' ) — временное решение для навшаблонов, ещё не переведённых // на {{Навигационная таблица}} (также ниже) if ( $table.hasClass( 'navbox-inner' ) || $table.hasClass( 'navbox' ) ) { navboxCount++; } else { notNavboxCount++; } colTables[tblIdx++] = $table; } } ); for ( var i = 0; i < tblIdx; i++ ) { if ( colTables[i].hasClass( 'collapsed' ) || ( colTables[i].hasClass( 'autocollapse' ) && ( ( ( colTables[i].hasClass( 'navbox-inner' ) || colTables[i].hasClass( 'navbox' ) ) && navboxCount > NavigationBarShowDefault ) || ( !( colTables[i].hasClass( 'navbox-inner' ) || colTables[i].hasClass( 'navbox' ) ) && notNavboxCount > NavigationBarShowDefault ) ) ) ) { collapseTable( i ); } } } mw.hook( 'wikipage.content' ).add( collapsibleTables ); function collapseTable( idx ) { var $table = $( '#collapsibleTable' + idx ), $rows = $table.children().children( 'tr' ), $btn = $( '#collapseButton' + idx ); if ( !$table.length || !$rows.length || !$btn.length ) { return false; } var isExpanded = ( $btn.text() === collapseCaption ), cssDisplay = isExpanded ? 'none' : $rows.first().css( 'display' ); $btn.text( isExpanded ? expandCaption : collapseCaption ); $rows.slice( 1 ).each( function () { $( this ).css( 'display', cssDisplay ); } ); } // div.NavFrame var navFrameExpandCaption = '[' + expandCaption + ']', navFrameCollapseCaption = '[' + collapseCaption + ']'; function collapsibleDivs( $content ) { var navIdx = 0, colNavs = [], i, $Divs = $content.find( 'div' ); $Divs.each( function ( i, div ) { if ( $( div ).hasClass( 'NavFrame' ) ) { var $navFrame = $( this ); $navFrame.attr( 'id', 'NavFrame' + navIdx ); var $a = $( '<a>' ) .addClass( 'NavToggle' ) .attr( 'id', 'NavToggle' + navIdx ) .attr( 'href', 'javascript:collapseDiv(' + navIdx + ');' ) .text( navFrameCollapseCaption ); $navFrame.children( '.NavHead' ).append( $a ); colNavs[navIdx++] = $navFrame; } } ); for ( i = 0; i < navIdx; i++ ) { if ( colNavs[i].hasClass( 'collapsed' ) || ( navIdx > NavigationBarShowDefault && !colNavs[i].hasClass( 'expanded' ) ) ) { collapseDiv( i ); } } } mw.hook( 'wikipage.content' ).add( collapsibleDivs ); function collapseDiv( idx ) { var $div = $( '#NavFrame' + idx ), $btn = $( '#NavToggle' + idx ); if ( !$div.length || !$btn.length ) { return false; } var isExpanded = ( $btn.text() === navFrameCollapseCaption ); $btn.text( isExpanded ? navFrameExpandCaption : navFrameCollapseCaption ); $div.children( '.NavContent, .NavPic' ).each( function () { $( this ).css( 'display', isExpanded ? 'none' : 'block' ); } ); }