MediaWiki:Gadget-collapserefs.js

Материал из Универсал-вики
Перейти к навигации Перейти к поиску

Замечание. Возможно, после сохранения вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl-F5 или Ctrl-R (⌘-R на Mac)
  • Google Chrome: Нажмите Ctrl-Shift-R (⌘-Shift-R на Mac)
  • Internet Explorer: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl-F5
  • Opera: Перейдите в Menu → Настройки (Opera → Настройки на Mac), а затем Безопасность → Очистить историю посещений → Кэшированные изображения и файлы
if ( ( mw.config.get( 'wgIsArticle' ) &&
		[ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) === -1
	) &&
	mw.util.getParamValue( 'printable' ) !== 'yes'
) {
	mw.hook( 'wikipage.content' ).add( function ( $content ) {
		var collapseState = mw.cookie.get( 'refcoll', '' ) === '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 = $( '.collapseRefs-link' ),
				$classHolders = findClassHolders( $collapseRefsLinks.parent().next() );
			
			e.preventDefault();
			
			collapseState = collapseState === 'max' ? 'min' : 'max';
			if ( collapseState === 'max' ) {  // when maximized
				$collapseRefsLinks.text( '↑ Показывать компактно' );
				$classHolders.removeClass( 'reflist-compact' );
			} else {                          // when minimized
				$collapseRefsLinks.text( '↓ Показывать полностью' );
				$classHolders.addClass( 'reflist-compact' );
			}
			
			mw.cookie.set( 'refcoll', collapseState, {
				expires: 1000 * 60 * 60 * 24 * 90,
				path: '/',
				prefix: ''
			} );
		}
		
		$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' ? '↑ Показывать компактно' : '↓ Показывать полностью' )
					.click( changeState )
				)
				.insertBefore( el );
		} );
		if ( !foundReflist ) {
			return;
		}
	} );
}