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

// Скрипт, подсвечивающий на страницах категорий короткие статьи.
// Короткими по умолчанию считаются статьи менее 4 Кбайт;
// при необходимости минимально желаемый размер статьи можно задать:
// var g_lengthThreshold = 3072; // желаемый размер статьи не менее 3 Кб
// Работает по кнопке "Показать короткие" на панели 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 isSmall(art, smalls)
{
    var result = false;
    Array.from(smalls).forEach(small =>
    {
        if (art.includes(small))
        {
            result = true;
        }
    });
    return result;
}

function check()
{
	var defaultLengthThreshold = 4096;
	var pageLengthThreshold = (typeof g_lengthThreshold == 'undefined') ? defaultLengthThreshold : g_lengthThreshold; // Желаемый размер статьи, байт
	
	var defaultHighlightColor = '#baf5ef';
	var highlightColor = (typeof g_highlightColor == 'undefined') ? defaultHighlightColor : g_highlightColor; // Цвет подсветки коротких статей
	
	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 titles = articles.map((x) => 
    {
        var xData = regex.exec(x);
        if (xData != null)
            return xData[1];
    });
    var i = 0;
    var requestUrl = 'https://ru.wikipedia.org/w/api.php?format=json&action=query&prop=info&titles=';
    var q = 1;
    var smallPages = [];
    var hasTitles = false;
	while (titles)
	{
	    var title = encodeURIComponent(titles[i]);
	    if (requestUrl.length + title.length < 8192 && i < 50 * q && i < titles.length)
	    {
	        if (hasTitles)
	        {
	            requestUrl = requestUrl + '|';
	        }
	        requestUrl = requestUrl + title;
	        hasTitles = true;
	        i++;
	    }
	    else
	    {
	        var pgs = JSON.parse(request(requestUrl));
	        if (pgs.query.pages)
	        {
	        	var pages = pgs.query.pages;
		        Object.keys(pages).forEach(pg =>
		        {
		            var page = pages[pg];
		            if (page.ns == 0 && page.length < pageLengthThreshold)
		            {
		                smallPages.push(page.title);
		            }
		        });
	        }
	        if (i >= titles.length)
            {
                break;
            }
	        requestUrl = 'https://ru.wikipedia.org/w/api.php?format=json&action=query&prop=info&titles=';
	        q++;
	        hasTitles = false;
	    }
	}
	
	articles.forEach(article =>
    {
        if (isSmall(article, smallPages))
        {
            var record = article.replace('<li>', '<li style="background-color:' + highlightColor + ';">');
            catContent = catContent.replace(article, record);
        }
    });
	document.documentElement.innerHTML = catContent;
}
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya