Различие между версиями «MediaWiki:Gadget-HideEmptyness.js»
Содержимое удалено Содержимое добавлено
Нет описания правки |
Vitalik (обсуждение | вклад) v.1.5: Fixing styles |
||
Строка 1: | Строка 1: | ||
/** |
/** |
||
* Версия: Gadget-HideEmptyness 1. |
* Версия: Gadget-HideEmptyness 1.5 |
||
* Автор: Vitalik |
* Автор: Vitalik |
||
* Описание: Гаджет предназначен для скрытия информации, которая кому-то может |
* Описание: Гаджет предназначен для скрытия информации, которая кому-то может |
||
Строка 27: | Строка 27: | ||
$ul = $('<ul>'); |
$ul = $('<ul>'); |
||
} else if ($('body').hasClass('skin-vector')) { |
} else if ($('body').hasClass('skin-vector')) { |
||
$block = $('< |
$block = $('<nav id="p-hide" class="vector-menu vector-menu-portal portal" aria-labelledby="p-hide-label" role="navigation">'); |
||
// <a href="/wiki/Викисловарь:Гаджеты/Скрыть пустоту">[?]</a> |
// <a href="/wiki/Викисловарь:Гаджеты/Скрыть пустоту">[?]</a> |
||
// $h3 = $('<h3 id="p-hide-label" tabindex="3"><a aria-haspopup="true" aria-controls="p-hide-list" role="button" aria-pressed="false" aria-expanded="false">Скрыть пустоту</a></h3>'); |
// $h3 = $('<h3 id="p-hide-label" tabindex="3"><a aria-haspopup="true" aria-controls="p-hide-list" role="button" aria-pressed="false" aria-expanded="false">Скрыть пустоту</a></h3>'); |
||
$h3 = $('<h3 id="p-hide-label">Скрыть пустоту</h3>'); |
$h3 = $('<h3 id="p-hide-label">Скрыть пустоту</h3>'); |
||
$subblock = $('<div class="body">'); |
$subblock = $('<div class="body vector-menu-content">'); |
||
$ul = $('<ul id="p-hide-list">'); |
$ul = $('<ul id="p-hide-list" class="vector-menu-content-list">'); |
||
} |
} |
||
$subblock.append($ul); |
$subblock.append($ul); |
Версия от 21:05, 27 августа 2020
/**
* Версия: Gadget-HideEmptyness 1.5
* Автор: Vitalik
* Описание: Гаджет предназначен для скрытия информации, которая кому-то может
* показаться лишней. Например: пустые разделы, пустой морфемный состав, пустые
* примеры, пометы заготовок ("болванка" или "нуждается в доработке")
*/
(function ($) {
var hideEmptySections = false; // необходимость скрывать пустые заголовки
var hideEmptyMorfo = false; // необходимость скрывать пустую морфемику
var hideEmptyExamples = false; // необходимость скрывать пустые примеры
var hideEmptyLists = false; // необходимость скрывать списки из "?" и "-"
var hideStubBlocks = false; // необходимость скрывать пометы заготовок
/**
* функция для создания или получения существующего блока "Оформление",
* который находится ниже блока
*/
function getViewBlock() {
if (!$('#p-hide').is('*')) {
var $block, $h3, $subblock, $ul;
if ($('body').hasClass('skin-monobook')) {
$block = $('<div class="portlet" id="p-tb" role="navigation">');
$h3 = $('<h3>Скрыть пустоту</h3>');
$subblock = $('<div class="pBody">');
$ul = $('<ul>');
} else if ($('body').hasClass('skin-vector')) {
$block = $('<nav id="p-hide" class="vector-menu vector-menu-portal portal" aria-labelledby="p-hide-label" role="navigation">');
// <a href="/wiki/Викисловарь:Гаджеты/Скрыть пустоту">[?]</a>
// $h3 = $('<h3 id="p-hide-label" tabindex="3"><a aria-haspopup="true" aria-controls="p-hide-list" role="button" aria-pressed="false" aria-expanded="false">Скрыть пустоту</a></h3>');
$h3 = $('<h3 id="p-hide-label">Скрыть пустоту</h3>');
$subblock = $('<div class="body vector-menu-content">');
$ul = $('<ul id="p-hide-list" class="vector-menu-content-list">');
}
$subblock.append($ul);
$block.append($h3);
$block.append($subblock);
$('#p-tb').after($block);
return $ul;
} else {
return $('#p-hide-list');
}
}
/**
* функция для создания или получения существующего блока "Оформление",
* который находится ниже блока
*/
function getStatusSymbol(hideEmptyExamples) {
if (hideEmptyExamples) {
return '<span style="font-weight: bold;">×</span>';
} else {
return '<span style="color: silver;">×</span>';
}
}
/**
* Функция для проверки того, что элемент является последним в секции
* (т.е. следующий элемент либо является заголовком, либо концом страницы)
*/
function isLastInSection($item) {
var $next = $item.next();
return $.inArray($next.prop("tagName"), ['H1', 'H2', 'H3', 'H4']) != -1
|| $next.attr('id') == 'catlinks'
|| $next.hasClass('stub-main-footer');
}
/**
* Функция обработки щелчка по опции "Пустые заголовки"
*/
function switchEmptySections(force) {
if (force !== true) {
hideEmptySections = !hideEmptySections;
if ('localStorage' in window) { // сохранение текущего состояния
localStorage.hideEmptySections = hideEmptySections;
}
}
var hideItems = [
$('h3+h1').prev(),
$('h3+h2').prev(),
$('h3+h3').prev(),
$('h4+h3').prev(),
$('h4+h4').prev(),
$('h3+#catlinks').prev(),
$('h3+.stub-main-footer').prev()
];
$('h3+p').each(function () {
if ($(this).text().match(/^(Происходит от|От|Из|\?\?)([ ]\?\?)?\s*$/g)) {
if (isLastInSection($(this))) {
hideItems.push($(this));
hideItems.push($(this).prev());
}
}
});
$('h3+p, h3+ol, h3+ul, h4+ol, h4+ul').each(function () {
if ($.trim($(this).text()) === "") {
if (isLastInSection($(this))) {
hideItems.push($(this));
hideItems.push($(this).prev());
}
}
});
$('h3+table.collapsible').each(function () {
var $tr = $(this).find('tr').next();
if ($tr.children().length == 1 && $.trim($tr.children().text()) === "") {
if (isLastInSection($(this))) {
hideItems.push($(this));
hideItems.push($(this).prev());
}
}
});
for (var index = 0; index < hideItems.length; index++) {
var hideItem = hideItems[index];
if (force === true) {
hideItem.hide(); // быстрое скрытие пустых разделов при загрузке страницы
} else {
if (hideEmptySections) {
hideItem.fadeOut(); // скрытие пустых разделов
} else {
hideItem.fadeIn(); // показ пустых разделов
}
}
}
var status = getStatusSymbol(hideEmptySections);
$('#hide-empty-sections').html(status + " пустые разделы");
}
/**
* Функция обработки щелчка по опции "Пустая морфемика"
*/
function switchEmptyMorfo(force) {
if (force !== true) {
hideEmptyMorfo = !hideEmptyMorfo;
if ('localStorage' in window) { // сохранение текущего состояния
localStorage.hideEmptyMorfo = hideEmptyMorfo;
}
}
$('p').each(function () {
if ($.trim($(this).text()) != "Корень: --.") {
return;
}
if (force === true) {
$(this).hide(); // быстрое скрытие пустой морфемики при загрузке страницы
} else {
if (hideEmptyMorfo) {
$(this).fadeOut(); // скрытие пустой морфемики
} else {
$(this).fadeIn(); // показ пустой морфемики
}
}
});
var status = getStatusSymbol(hideEmptyMorfo);
$('#hide-empty-morfo').html(status + " пустая морфемика");
}
/**
* Функция для предварительной подготовки к возможности скрытия ромбика из
* примера
*/
function prepareEmptyExamples() {
$('span').each(function () {
if ($.trim($(this).text()) != "Отсутствует пример употребления (см. рекомендации).") {
return;
}
var $parent = $(this).parent();
var replacement = '<span class="hidden-rhombus">◆</span>';
$parent.html($parent.html().replace('◆', replacement));
});
}
/**
* Функция обработки щелчка по опции "Пустые примеры"
*/
function switchEmptyExamples(force) {
if (force !== true) {
hideEmptyExamples = !hideEmptyExamples;
if ('localStorage' in window) { // сохранение текущего состояния
localStorage.hideEmptyExamples = hideEmptyExamples;
}
}
$('span').each(function () {
if ($.trim($(this).text()) != "Отсутствует пример употребления (см. рекомендации).") {
return;
}
var $parent = $(this).parent();
var replacement = '<span class="hidden-rhomb"></span>';
if (force === true) {
$(this).hide(); // быстрое скрытие пустых примеров при загрузке страницы
$('.hidden-rhombus').hide();
} else {
if (hideEmptyExamples) {
$(this).fadeOut(); // скрытие пустых примеров
$('.hidden-rhombus').fadeOut();
} else {
$(this).fadeIn(); // показ пустых примеров
$('.hidden-rhombus').fadeIn();
}
}
});
var status = getStatusSymbol(hideEmptyExamples);
$('#hide-empty-examples').html(status + " пустые примеры");
}
/**
* Функция обработки щелчка по опции 'Списки из "?" и "—"'
*/
function switchEmptyLists(force) {
if (force !== true) {
hideEmptyLists = !hideEmptyLists;
if ('localStorage' in window) { // сохранение текущего состояния
localStorage.hideEmptyLists = hideEmptyLists;
}
}
var hideItems = [];
$('h3+ol, h4+ol').each(function () {
if ($(this).text().match(/^\s*((—|-|\?)\s*)+$/g)) {
if (isLastInSection($(this))) {
hideItems.push($(this));
hideItems.push($(this).prev());
}
}
});
for (var index = 0; index < hideItems.length; index++) {
var hideItem = hideItems[index];
if (force === true) {
hideItem.hide(); // быстрое скрытие пустых списков при загрузке страницы
} else {
if (hideEmptyLists) {
hideItem.fadeOut(); // скрытие пустых списков
} else {
hideItem.fadeIn(); // показ пустых списков
}
}
}
var status = getStatusSymbol(hideEmptyLists);
$('#hide-empty-lists').html(status + ' списки из "?" и "—"');
}
/**
* Функция обработки щелчка по опции "Пометы заготовок"
*/
function switchStubBlocks(force) {
if (force !== true) {
hideStubBlocks = !hideStubBlocks;
if ('localStorage' in window) { // сохранение текущего состояния
localStorage.hideStubBlocks = hideStubBlocks;
}
}
var $stubBlocks = $('.stub-main-footer');
if (force === true) {
$stubBlocks.hide(); // быстрое скрытие помет заготовок при загрузке страницы
} else {
if (hideStubBlocks) {
$stubBlocks.fadeOut(); // скрытие помет заготовок
} else {
$stubBlocks.fadeIn(); // показ помет заготовок
}
}
var status = getStatusSymbol(hideStubBlocks);
$('#hide-stub-blocks').html(status + " пометы заготовок");
}
$(document).ready(function () {
if ($('.ns-0').is('*')) { // активация скрипта только для основного пространства
var $block = getViewBlock();
//'<a href="/wiki/test" title="test" accesskey="h">test</a>'
var status = getStatusSymbol(false);
$block.append($('<li>').append($('<a>', {
id: 'hide-empty-sections',
html: status + ' пустые разделы',
on: {click: switchEmptySections}
})));
$block.append($('<li>').append($('<a>', {
id: 'hide-empty-morfo',
html: status + ' пустая морфемика',
on: {click: switchEmptyMorfo}
})));
$block.append($('<li>').append($('<a>', {
id: 'hide-empty-examples',
html: status + ' пустые примеры',
on: {click: switchEmptyExamples}
})));
$block.append($('<li>').append($('<a>', {
id: 'hide-empty-lists',
html: status + ' списки из "?" и "—"',
on: {click: switchEmptyLists}
})));
$block.append($('<li>').append($('<a>', {
id: 'hide-stub-blocks',
html: status + ' пометы заготовок',
on: {click: switchStubBlocks}
})));
prepareEmptyExamples();
if ('localStorage' in window) { // загрузка прошлого состояния
hideEmptySections = localStorage.hideEmptySections == 'true';
hideEmptyMorfo = localStorage.hideEmptyMorfo == 'true';
hideEmptyExamples = localStorage.hideEmptyExamples == 'true';
hideEmptyLists = localStorage.hideEmptyLists == 'true';
hideStubBlocks = localStorage.hideStubBlocks == 'true';
}
if (hideEmptySections) {
// быстрое скрытие пустых разделов при загрузке страницы
switchEmptySections(true);
}
if (hideEmptyMorfo) {
// быстрое скрытие пустой морфемики при загрузке страницы
switchEmptyMorfo(true);
}
if (hideEmptyExamples) {
// быстрое скрытие пустых примеров при загрузке страницы
switchEmptyExamples(true);
}
if (hideEmptyLists) {
// быстрое скрытие пустых списков при загрузке страницы
switchEmptyLists(true);
}
if (hideStubBlocks) {
// быстрое скрытие помет заготовок при загрузке страницы
switchStubBlocks(true);
}
}
});
})(window.jQuery);