// Скрипт, подсвечивающий на страницах категорий короткие статьи.
// Короткими по умолчанию считаются статьи менее 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;
}