MediaWiki:Gadget-collapserefs.js (MediaWiki&Gadget-collapserefsQjs)
Перейти к навигации
Перейти к поиску
JS-код ниже относится к гаджету «Компактный список сносок» (править описание). Связанный CSS-файл: MediaWiki:Gadget-collapserefs.css. Он включён по умолчанию.
После сохранения или недавних изменений очистите кэш браузера.
mw.loader.using( [
'mediawiki.storage',
'mediawiki.util'
], function() {
if (
!mw.config.get( 'wgIsArticle' )
|| [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) > -1
|| mw.util.getParamValue( 'printable' ) === 'yes'
|| $( '.collapsible-heading' ).length > 0
) {
return;
}
var storageKey = 'gadget-collapserefs';
var showCompact = '↑ Показать компактно';
var showFull = '↓ Показать полностью';
mw.hook( 'wikipage.content' ).add( function ( $content ) {
var collapseState = mw.storage.get( storageKey ) === 'min' ? 'min' : 'max';
var foundReflist;
function findClassHolders( $reflists ) {
var $classHolders = $();
$reflists.each( function () {
$classHolders = $classHolders.add( $( this ).children( '.mw-references-wrap' ).get( 0 ) || this );
} );
return $classHolders;
}
function changeState( e ) {
var $collapseRefsLinks = $content.find( '.collapseRefs-link' ),
$classHolders = findClassHolders( $collapseRefsLinks.parent().next() );
e.preventDefault();
collapseState = collapseState === 'max' ? 'min' : 'max';
if ( collapseState === 'max' ) { // when maximized
$collapseRefsLinks.text( showCompact );
$classHolders.removeClass( 'reflist-compact' );
} else { // when minimized
$collapseRefsLinks.text( showFull );
$classHolders.addClass( 'reflist-compact' );
}
mw.storage.set( storageKey, collapseState );
}
$content.find( '.reflist, .references-small' ).each( function ( i, el ) {
var computedStyle = el && window.getComputedStyle( el );
if ( el.clientHeight <=
( ( el.style.maxHeight &&
el.style.maxHeight.replace( 'px', '' ) ) ||
// clientHeight меньше height, если есть горизонтальная полоса прокрутки
el.style.height.replace( 'px', '' ) ||
// 40 — значение (в em) max-height у .reflist-compact в [[MediaWiki:Gadget-collapserefs.css]]
( computedStyle && computedStyle.fontSize && computedStyle.fontSize.replace( 'px' , '' ) * 40 )
) ||
// Когда примечания уже обёрнуты в меньший по высоте блок (хотя такого не должно быть)
el.clientHeight > el.parentNode.clientHeight
) {
return;
}
foundReflist = true;
if ( collapseState === 'min' ) {
findClassHolders( $( el ) ).addClass( 'reflist-compact' );
}
$( '<div>' )
.addClass( 'collapseRefs' +
( $( el ).hasClass( 'not-references' ) ? ' collapseRefs-notRefs' : '' )
)
.append( $( '<a>' )
.addClass( 'collapseRefs-link' )
.attr( 'href', 'javascript:' )
.attr( 'title', 'Большие блоки с примечаниями можно уменьшить' )
.text( collapseState === 'max' ? showCompact : showFull )
.click( changeState )
)
.insertBefore( el );
} );
if ( !foundReflist ) {
return;
}
} );
} );