Амедиавики:Collapserefs.js

Аматериал Авикипедиа аҟынтә - зхы иақәиҭу аенциклопедиа

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

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
var collapseCSSmin, collapseCSSmax, collapseState;

function collapseRefs() {
	if ( navigator.userAgent.match( /MSIE [1-6]\./ ) ) {
		// makes no sense (max-height)
		return;
	}
	if ( document.URL.match( /(\?|&)printable=yes/ ) ) {
		return;
	}

	function done() {
		collapseState = collapseState == 'min' ? 'max' : 'min';
		document.cookie = 'refcoll=' + collapseState;

		var text;
		if ( collapseState == 'min' ) {
			collapseCSSmax.disabled = true;
			collapseCSSmin.disabled = false;
			text = '↓ Показывать полностью'; // when minimized
		} else {
			collapseCSSmax.disabled = false;
			collapseCSSmin.disabled = true;
			text = '↑ Показывать компактно'; // when maximized
		}

		for ( var i = 0; i < links.length; i++ ) {
			links[i].innerHTML = text;
		}

		return false;
	}

	var divs = document.getElementsByTagName( 'div' );
	var reflists = [];
	for ( var i = 0; i < divs.length; i++ ) {
		if ( divs[i].className.match( /\bref(list\d?|erences-(small|scroll))\b/ ) ) {
			if (
				divs[i].clientHeight >= ( ( divs[i].style.maxHeight && divs[i].style.maxHeight.replace( /[^0-9]+/g, '' ) ) ||
											divs[i].style.height.replace( /[^0-9]+/g, '' ) || 300 )
			)
			{
				reflists[reflists.length] = divs[i];
			}
		}
	}
	if ( reflists.length === 0 ) {
		return;
	}

	var cookie = document.cookie.match( /(^|; )refcoll=(.*?)(;|$)/ );
	// will be changed later by done()
	if ( cookie ) {
		collapseState = unescape( cookie[2] ) == 'max' ? 'min' : 'max';
	} else {
		collapseState = 'min';
	}

	var links = [];
	for ( i = 0; i < reflists.length; i++ ) {
		var p = document.createElement( 'p' );
		p.className = 'collapse-refs-p';
		var a = document.createElement( 'a' );
		a.href = '#';
		a.onclick = done;
		a.className = 'collapse-refs-link';
		a.title = 'Большие блоки с примечаниями можно уменьшать';
		p.appendChild( a );
		reflists[i].parentNode.insertBefore( p, reflists[i] );
		links[links.length] = a;
	}

	mw.util.addCSS(
		'.reflist  p.collapse-refs-p, .reflist1 p.collapse-refs-p,\
		.reflist2 p.collapse-refs-p, .reflist3 p.collapse-refs-p,\
		.reflist4 p.collapse-refs-p { display: none }\
		.collapse-refs-p { font-size: 80%; width: 30%; margin: 1em 2em }\
		* html .reflist, * html .reflist1, * html .reflist2, * html .reflist3, \
		* html .reflist4, * html .references-scroll, * html .references-small \
		{ display: inline-block /* for clientHeight in IE */ }'
	);
	collapseCSSmin = mw.util.addCSS(
		'.reflist, .reflist1, .reflist2, .reflist3, \
		.reflist4, .references-scroll, .references-small \
		{ max-height: 300px; overflow: auto; margin: 0 !important; padding: 0 !important }'
	);
	collapseCSSmax = mw.util.addCSS(
		'.reflist, .reflist1, .reflist2, .reflist3, \
		.reflist4, .references-scroll \
		{ height: auto !important;  max-height: none !important; \
			overflow: visible !important; margin: 0 !important; padding: 0 !important }'
	);
	collapseCSSmin.disabled = collapseCSSmax.disabled = true;

	done();
}

mw.loader.using( 'mediawiki.util', function () {
	$( document ).ready( collapseRefs );
} );