Участник:I am smiling/ShortsHighlighter.js

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая I am smiling (обсуждение | вклад) в 12:17, 9 января 2024 (не работало при наличии некоторых символов в заголовке). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску
// Скрипт, подсвечивающий на страницах категорий статьи размером менее 4 Кбайт.
// Работает по кнопке "Показать короткие" на панели mw-content-subtitle (под надписью "Материал из Википедии — свободной энциклопедии").
// Внимание: выполняется долго. Может, как-то можно получать информацию о страницах одним запросом?

if( $('body').hasClass('ns-14') ) 
{
	if ($( "#mw-content-subtitle" ).children().length > 0)
	{
		$( "#mw-content-subtitle" ).append(' | ').append($("<a>").text('Показать короткие').click(check));
	}
	else
	{
		$( "#mw-content-subtitle" ).append($("<a>").text('Показать короткие').click(check));
	}
}

function request( URL )
{
	var oRequest = new XMLHttpRequest();
	oRequest.open('GET', URL, false);
	oRequest.send(null);
	
	return oRequest.responseText;
}

function check()
{
	var pageLengthThreshold = 4096; // Желаемый размер статьи, байт
	
	var catContent = document.documentElement.innerHTML;
	var articles = document.getElementsByClassName("mw-category-generated")[0].innerHTML.match( /<li><a href="\/wiki\/[^>]+>([^>]+)<\/a><\/li>/g );
	
	var regex = />([^>]+)</;
	
	var t = 0;
	while (articles && articles[t])
	{
		var page = regex.exec(articles[t]);
		
		if (page != null)
		{
			var title = page[1];
			var pageInfo = request('https://ru.wikipedia.org/w/api.php?format=json&action=query&prop=info&titles=' + encodeURIComponent(title));
			if (pageInfo != null)
			{
				var regNs = /"ns":(\d+)/g;
				var ns = regNs.exec(pageInfo)[1];
				if (ns == 0)
				{
					var regLength = /"length":(\d+)/g;
					var lengthInfo = regLength.exec(pageInfo);
					if (lengthInfo != null && lengthInfo[1])
					{
						var length = lengthInfo[1];
					
						if (length < pageLengthThreshold) // Размер статьи меньше желаемого
						{
							var art = articles[t];
							art = art.replace('<li>', '<li style="background-color:#baf5ef;">'); // Цвет подсветки
							catContent = catContent.replace(articles[t], art);
							
						}
					}
				}
			}
		}
		t++;
	}
	document.documentElement.innerHTML = catContent;
}